|
|
|
@@ -22,6 +22,16 @@ namespace ResourceMonitorService
|
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|
|
|
|
{
|
|
|
|
|
var builder = WebApplication.CreateBuilder();
|
|
|
|
|
/* builder.WebHost.ConfigureKestrel(options =>
|
|
|
|
|
{
|
|
|
|
|
options.ListenAnyIP(5000); // Replace 5000 with your desired port
|
|
|
|
|
}); */
|
|
|
|
|
/* builder.WebHost.ConfigureKestrel(options =>
|
|
|
|
|
{
|
|
|
|
|
var url = builder.Configuration.GetValue<string>("Kestrel:Endpoints:Http:Url");
|
|
|
|
|
var port = url.Split(':').Last();
|
|
|
|
|
options.ListenAnyIP(int.Parse(port));
|
|
|
|
|
}); */
|
|
|
|
|
builder.Services.AddCors(options =>
|
|
|
|
|
{
|
|
|
|
|
options.AddPolicy("AllowAllOrigins",
|
|
|
|
@@ -94,7 +104,7 @@ namespace ResourceMonitorService
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
_ = app.RunAsync(stoppingToken);
|
|
|
|
|
app.RunAsync(stoppingToken);
|
|
|
|
|
|
|
|
|
|
await Task.Delay(Timeout.Infinite, stoppingToken);
|
|
|
|
|
}
|
|
|
|
@@ -112,17 +122,11 @@ namespace ResourceMonitorService
|
|
|
|
|
|
|
|
|
|
private object GetCpuUsage()
|
|
|
|
|
{
|
|
|
|
|
#pragma warning disable CA1416 // Validate platform compatibility
|
|
|
|
|
var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
|
|
|
|
|
#pragma warning restore CA1416 // Validate platform compatibility
|
|
|
|
|
#pragma warning disable CA1416 // Validate platform compatibility
|
|
|
|
|
cpuCounter.NextValue();
|
|
|
|
|
#pragma warning restore CA1416 // Validate platform compatibility
|
|
|
|
|
Thread.Sleep(1000); // Wait a second to get a valid reading
|
|
|
|
|
|
|
|
|
|
#pragma warning disable CA1416 // Validate platform compatibility
|
|
|
|
|
var usage = cpuCounter.NextValue();
|
|
|
|
|
#pragma warning restore CA1416 // Validate platform compatibility
|
|
|
|
|
if (usage > 80)
|
|
|
|
|
{
|
|
|
|
|
// Get the current processes and sort them by CPU usage in descending order
|
|
|
|
@@ -134,18 +138,21 @@ namespace ResourceMonitorService
|
|
|
|
|
Usage = usage,
|
|
|
|
|
Process1 = new
|
|
|
|
|
{
|
|
|
|
|
Id = processes.ElementAt(0).Id,
|
|
|
|
|
Name = processes.ElementAt(0).ProcessName,
|
|
|
|
|
TotalProcessorTime = processes.ElementAt(0).TotalProcessorTime,
|
|
|
|
|
WorkingSet64 = processes.ElementAt(0).WorkingSet64 / (1024 * 1024) // Convert to MB
|
|
|
|
|
},
|
|
|
|
|
Process2 = new
|
|
|
|
|
{
|
|
|
|
|
Id = processes.ElementAt(1).Id,
|
|
|
|
|
Name = processes.ElementAt(1).ProcessName,
|
|
|
|
|
TotalProcessorTime = processes.ElementAt(1).TotalProcessorTime,
|
|
|
|
|
WorkingSet64 = processes.ElementAt(1).WorkingSet64 / (1024 * 1024) // Convert to MB
|
|
|
|
|
},
|
|
|
|
|
Process3 = new
|
|
|
|
|
{
|
|
|
|
|
Id = processes.ElementAt(2).Id,
|
|
|
|
|
Name = processes.ElementAt(2).ProcessName,
|
|
|
|
|
TotalProcessorTime = processes.ElementAt(2).TotalProcessorTime,
|
|
|
|
|
WorkingSet64 = processes.ElementAt(2).WorkingSet64 / (1024 * 1024) // Convert to MB
|
|
|
|
@@ -161,30 +168,20 @@ namespace ResourceMonitorService
|
|
|
|
|
|
|
|
|
|
private float GetRamUsage()
|
|
|
|
|
{
|
|
|
|
|
#pragma warning disable CA1416 // Validate platform compatibility
|
|
|
|
|
var ramCounter = new PerformanceCounter("Memory", "Available MBytes");
|
|
|
|
|
#pragma warning restore CA1416 // Validate platform compatibility
|
|
|
|
|
var totalMemory = GetTotalPhysicalMemory();
|
|
|
|
|
#pragma warning disable CA1416 // Validate platform compatibility
|
|
|
|
|
var availableMemory = ramCounter.NextValue() * 1024 * 1024;
|
|
|
|
|
#pragma warning restore CA1416 // Validate platform compatibility
|
|
|
|
|
return (float)(totalMemory - availableMemory) / totalMemory * 100;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private ulong GetTotalPhysicalMemory()
|
|
|
|
|
{
|
|
|
|
|
ulong totalMemory = 0;
|
|
|
|
|
#pragma warning disable CA1416 // Validate platform compatibility
|
|
|
|
|
var searcher = new ManagementObjectSearcher("SELECT TotalPhysicalMemory FROM Win32_ComputerSystem");
|
|
|
|
|
#pragma warning restore CA1416 // Validate platform compatibility
|
|
|
|
|
#pragma warning disable CA1416 // Validate platform compatibility
|
|
|
|
|
foreach (var obj in searcher.Get())
|
|
|
|
|
{
|
|
|
|
|
#pragma warning disable CA1416 // Validate platform compatibility
|
|
|
|
|
totalMemory = (ulong)obj["TotalPhysicalMemory"];
|
|
|
|
|
#pragma warning restore CA1416 // Validate platform compatibility
|
|
|
|
|
}
|
|
|
|
|
#pragma warning restore CA1416 // Validate platform compatibility
|
|
|
|
|
return totalMemory;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -220,9 +217,7 @@ namespace ResourceMonitorService
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
#pragma warning disable CS8602 // Dereference of a possibly null reference.
|
|
|
|
|
var filePath = process.MainModule.FileName;
|
|
|
|
|
#pragma warning restore CS8602 // Dereference of a possibly null reference.
|
|
|
|
|
if (filePath.Contains(@"\steamapps\common\"))
|
|
|
|
|
{
|
|
|
|
|
// Extract the game directory name
|
|
|
|
|