Compare commits
6 Commits
06ea991a6c
...
shutdown
| Author | SHA1 | Date | |
|---|---|---|---|
| 4cc0e99149 | |||
| a42c5753c9 | |||
| 78076a984b | |||
| 77f6c5abe1 | |||
| 5eec358b68 | |||
| 7c1cbb44f8 |
@@ -99,9 +99,13 @@ This file provides a C# wrapper for the NVIDIA Management Library (NVML) functio
|
|||||||
Feel free to contribute by opening issues or submitting pull requests. Make sure to follow the project's coding style and best practices.
|
Feel free to contribute by opening issues or submitting pull requests. Make sure to follow the project's coding style and best practices.
|
||||||
|
|
||||||
|
|
||||||
# devnote
|
## devnote
|
||||||
dotnet run
|
- **Commonlly use command**:
|
||||||
git add .
|
- dotnet run
|
||||||
git commit -m "Add steam running games"
|
- git add .
|
||||||
git push origin master
|
- git commit -m "Add steam running games"
|
||||||
dotnet publish -c Release -o ./publish
|
- git push origin master
|
||||||
|
- dotnet publish -c Release -o ./publish
|
||||||
|
|
||||||
|
- **Using git bash**:
|
||||||
|
- curl -X POST "http://localhost:5000/api/kill-process" -H "Content-Type: application/json" -d '3333333'
|
||||||
@@ -22,6 +22,16 @@ namespace ResourceMonitorService
|
|||||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||||
{
|
{
|
||||||
var builder = WebApplication.CreateBuilder();
|
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 =>
|
builder.Services.AddCors(options =>
|
||||||
{
|
{
|
||||||
options.AddPolicy("AllowAllOrigins",
|
options.AddPolicy("AllowAllOrigins",
|
||||||
@@ -59,7 +69,42 @@ namespace ResourceMonitorService
|
|||||||
await context.Response.WriteAsync(json);
|
await context.Response.WriteAsync(json);
|
||||||
});
|
});
|
||||||
|
|
||||||
_ = app.RunAsync(stoppingToken);
|
app.MapPost("/api/kill-process", async context =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var idStr = await new StreamReader(context.Request.Body).ReadToEndAsync();
|
||||||
|
int processId = Convert.ToInt32(idStr);
|
||||||
|
|
||||||
|
Process[] processes = Process.GetProcesses().Where(p => p.Id == processId).ToArray();
|
||||||
|
|
||||||
|
if (processes.Length > 0)
|
||||||
|
{
|
||||||
|
foreach (var process in processes)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
process.Kill();
|
||||||
|
await context.Response.WriteAsync($"Process with ID {processId} has been killed.");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
await context.Response.WriteAsync($"Error killing process with ID {processId}: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await context.Response.WriteAsync($"No process found with ID {processId}.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
await context.Response.WriteAsync($"An error occurred: {ex.Message}");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.RunAsync(stoppingToken);
|
||||||
|
|
||||||
await Task.Delay(Timeout.Infinite, stoppingToken);
|
await Task.Delay(Timeout.Infinite, stoppingToken);
|
||||||
}
|
}
|
||||||
@@ -77,17 +122,11 @@ namespace ResourceMonitorService
|
|||||||
|
|
||||||
private object GetCpuUsage()
|
private object GetCpuUsage()
|
||||||
{
|
{
|
||||||
#pragma warning disable CA1416 // Validate platform compatibility
|
|
||||||
var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
|
var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
|
||||||
#pragma warning restore CA1416 // Validate platform compatibility
|
|
||||||
#pragma warning disable CA1416 // Validate platform compatibility
|
|
||||||
cpuCounter.NextValue();
|
cpuCounter.NextValue();
|
||||||
#pragma warning restore CA1416 // Validate platform compatibility
|
|
||||||
Thread.Sleep(1000); // Wait a second to get a valid reading
|
Thread.Sleep(1000); // Wait a second to get a valid reading
|
||||||
|
|
||||||
#pragma warning disable CA1416 // Validate platform compatibility
|
|
||||||
var usage = cpuCounter.NextValue();
|
var usage = cpuCounter.NextValue();
|
||||||
#pragma warning restore CA1416 // Validate platform compatibility
|
|
||||||
if (usage > 80)
|
if (usage > 80)
|
||||||
{
|
{
|
||||||
// Get the current processes and sort them by CPU usage in descending order
|
// Get the current processes and sort them by CPU usage in descending order
|
||||||
@@ -99,18 +138,21 @@ namespace ResourceMonitorService
|
|||||||
Usage = usage,
|
Usage = usage,
|
||||||
Process1 = new
|
Process1 = new
|
||||||
{
|
{
|
||||||
|
Id = processes.ElementAt(0).Id,
|
||||||
Name = processes.ElementAt(0).ProcessName,
|
Name = processes.ElementAt(0).ProcessName,
|
||||||
TotalProcessorTime = processes.ElementAt(0).TotalProcessorTime,
|
TotalProcessorTime = processes.ElementAt(0).TotalProcessorTime,
|
||||||
WorkingSet64 = processes.ElementAt(0).WorkingSet64 / (1024 * 1024) // Convert to MB
|
WorkingSet64 = processes.ElementAt(0).WorkingSet64 / (1024 * 1024) // Convert to MB
|
||||||
},
|
},
|
||||||
Process2 = new
|
Process2 = new
|
||||||
{
|
{
|
||||||
|
Id = processes.ElementAt(1).Id,
|
||||||
Name = processes.ElementAt(1).ProcessName,
|
Name = processes.ElementAt(1).ProcessName,
|
||||||
TotalProcessorTime = processes.ElementAt(1).TotalProcessorTime,
|
TotalProcessorTime = processes.ElementAt(1).TotalProcessorTime,
|
||||||
WorkingSet64 = processes.ElementAt(1).WorkingSet64 / (1024 * 1024) // Convert to MB
|
WorkingSet64 = processes.ElementAt(1).WorkingSet64 / (1024 * 1024) // Convert to MB
|
||||||
},
|
},
|
||||||
Process3 = new
|
Process3 = new
|
||||||
{
|
{
|
||||||
|
Id = processes.ElementAt(2).Id,
|
||||||
Name = processes.ElementAt(2).ProcessName,
|
Name = processes.ElementAt(2).ProcessName,
|
||||||
TotalProcessorTime = processes.ElementAt(2).TotalProcessorTime,
|
TotalProcessorTime = processes.ElementAt(2).TotalProcessorTime,
|
||||||
WorkingSet64 = processes.ElementAt(2).WorkingSet64 / (1024 * 1024) // Convert to MB
|
WorkingSet64 = processes.ElementAt(2).WorkingSet64 / (1024 * 1024) // Convert to MB
|
||||||
@@ -126,30 +168,20 @@ namespace ResourceMonitorService
|
|||||||
|
|
||||||
private float GetRamUsage()
|
private float GetRamUsage()
|
||||||
{
|
{
|
||||||
#pragma warning disable CA1416 // Validate platform compatibility
|
|
||||||
var ramCounter = new PerformanceCounter("Memory", "Available MBytes");
|
var ramCounter = new PerformanceCounter("Memory", "Available MBytes");
|
||||||
#pragma warning restore CA1416 // Validate platform compatibility
|
|
||||||
var totalMemory = GetTotalPhysicalMemory();
|
var totalMemory = GetTotalPhysicalMemory();
|
||||||
#pragma warning disable CA1416 // Validate platform compatibility
|
|
||||||
var availableMemory = ramCounter.NextValue() * 1024 * 1024;
|
var availableMemory = ramCounter.NextValue() * 1024 * 1024;
|
||||||
#pragma warning restore CA1416 // Validate platform compatibility
|
|
||||||
return (float)(totalMemory - availableMemory) / totalMemory * 100;
|
return (float)(totalMemory - availableMemory) / totalMemory * 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ulong GetTotalPhysicalMemory()
|
private ulong GetTotalPhysicalMemory()
|
||||||
{
|
{
|
||||||
ulong totalMemory = 0;
|
ulong totalMemory = 0;
|
||||||
#pragma warning disable CA1416 // Validate platform compatibility
|
|
||||||
var searcher = new ManagementObjectSearcher("SELECT TotalPhysicalMemory FROM Win32_ComputerSystem");
|
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())
|
foreach (var obj in searcher.Get())
|
||||||
{
|
{
|
||||||
#pragma warning disable CA1416 // Validate platform compatibility
|
|
||||||
totalMemory = (ulong)obj["TotalPhysicalMemory"];
|
totalMemory = (ulong)obj["TotalPhysicalMemory"];
|
||||||
#pragma warning restore CA1416 // Validate platform compatibility
|
|
||||||
}
|
}
|
||||||
#pragma warning restore CA1416 // Validate platform compatibility
|
|
||||||
return totalMemory;
|
return totalMemory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,9 +217,7 @@ namespace ResourceMonitorService
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
#pragma warning disable CS8602 // Dereference of a possibly null reference.
|
|
||||||
var filePath = process.MainModule.FileName;
|
var filePath = process.MainModule.FileName;
|
||||||
#pragma warning restore CS8602 // Dereference of a possibly null reference.
|
|
||||||
if (filePath.Contains(@"\steamapps\common\"))
|
if (filePath.Contains(@"\steamapps\common\"))
|
||||||
{
|
{
|
||||||
// Extract the game directory name
|
// Extract the game directory name
|
||||||
|
|||||||
@@ -4,5 +4,13 @@
|
|||||||
"Default": "Information",
|
"Default": "Information",
|
||||||
"Microsoft.Hosting.Lifetime": "Information"
|
"Microsoft.Hosting.Lifetime": "Information"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"RunAsWindowsService": false,
|
||||||
|
"Kestrel": {
|
||||||
|
"Endpoints": {
|
||||||
|
"Http": {
|
||||||
|
"Url": "http://*:5000"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user