Initial commit

This commit is contained in:
Din Dang
2024-11-28 16:52:40 +08:00
commit 05d805be0a
119 changed files with 6201 additions and 0 deletions
+115
View File
@@ -0,0 +1,115 @@
using System.Diagnostics;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using Microsoft.AspNetCore.Http;
using System.Runtime.InteropServices;
using System.Management;
namespace ResourceMonitorService
{
public class Worker : BackgroundService
{
private readonly IHostApplicationLifetime _lifetime;
public Worker(IHostApplicationLifetime lifetime)
{
_lifetime = lifetime;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var builder = WebApplication.CreateBuilder();
builder.Services.AddControllers().AddNewtonsoftJson();
var app = builder.Build();
app.MapGet("/api/resource-usage", async context =>
{
var computerInfo = GetComputerInfo();
var cpuUsage = GetCpuUsage();
var ramUsage = GetRamUsage();
var gpuUsage = GetGpuUsage();
var resourceUsage = new
{
ComputerInfo = computerInfo,
CPU = cpuUsage,
RAM = ramUsage,
GPU = gpuUsage
};
var json = JsonConvert.SerializeObject(resourceUsage);
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(json);
});
app.RunAsync(stoppingToken);
await Task.Delay(Timeout.Infinite, stoppingToken);
}
private object GetComputerInfo()
{
return new
{
MachineName = Environment.MachineName,
OSVersion = RuntimeInformation.OSDescription,
OSArchitecture = RuntimeInformation.OSArchitecture.ToString(),
ProcessorCount = Environment.ProcessorCount
};
}
private float GetCpuUsage()
{
var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
cpuCounter.NextValue();
Thread.Sleep(1000); // Wait a second to get a valid reading
return cpuCounter.NextValue();
}
private float GetRamUsage()
{
var ramCounter = new PerformanceCounter("Memory", "Available MBytes");
var totalMemory = GetTotalPhysicalMemory();
var availableMemory = ramCounter.NextValue() * 1024 * 1024;
return (float)(totalMemory - availableMemory) / totalMemory * 100;
}
private ulong GetTotalPhysicalMemory()
{
ulong totalMemory = 0;
var searcher = new ManagementObjectSearcher("SELECT TotalPhysicalMemory FROM Win32_ComputerSystem");
foreach (var obj in searcher.Get())
{
totalMemory = (ulong)obj["TotalPhysicalMemory"];
}
return totalMemory;
}
private object GetGpuUsage()
{
NvmlWrapper.NvmlInit();
IntPtr device;
NvmlWrapper.NvmlDeviceGetHandleByIndex(0, out device);
NvmlWrapper.NvmlUtilization utilization;
NvmlWrapper.NvmlDeviceGetUtilizationRates(device, out utilization);
uint temperature;
NvmlWrapper.NvmlDeviceGetTemperature(device, 0, out temperature);
uint fanSpeed;
NvmlWrapper.NvmlDeviceGetFanSpeed(device, out fanSpeed);
NvmlWrapper.NvmlShutdown();
return new
{
Usage = utilization.Gpu,
Temperature = temperature,
FanSpeed = fanSpeed
};
}
}
}