- Introduced a batch script to simplify the startup process for the Resource Monitor Service. - Included checks for .NET 9.0 Runtime installation. - Added build and run commands for the service with appropriate error handling. - Provided user instructions and API documentation links in the script output.
Resource Monitor Service v2.0
A comprehensive Windows VM monitoring service designed specifically for Unraid virtual machines. This service provides real-time system monitoring, alerting, and remote management capabilities through a REST API.
🚀 New Features in v2.0
Enhanced Monitoring
- Multi-core CPU monitoring with per-core usage and frequency tracking
- Advanced memory monitoring including paged/non-paged memory
- Enhanced GPU monitoring with NVIDIA GPU support via NVML
- Comprehensive disk monitoring with I/O performance metrics
- Network monitoring with per-adapter statistics
- Temperature monitoring for CPU, GPU, and storage devices
- Process monitoring with detailed resource usage tracking
VM-Specific Features
- Hypervisor detection (VMware, Hyper-V, QEMU/KVM, etc.)
- VM information including boot time and uptime tracking
- Virtual machine optimization for better performance in virtualized environments
Game Detection & Management
- Multi-platform game detection (Steam, Epic Games, GOG, Origin, Ubisoft)
- Fullscreen detection for gaming sessions
- Game performance monitoring with memory and CPU usage
- Enhanced process management with graceful termination options
Intelligent Alerting System
- Configurable thresholds for CPU, memory, GPU, and temperature
- Duration-based alerting to prevent false positives
- Alert history and active alert management
- Automatic alert resolution when conditions improve
Improved API
-
RESTful endpoints with structured responses
-
Enhanced error handling and logging
-
Configurable CORS and API key authentication
-
Health check endpoints for monitoring service status
- RAM Usage
- GPU Usage
- Currently Running Steam Games (if any)
-
Process Management: Provides an API to kill processes by their process ID.
Directory Structure
ResourceUsageAPI/
├── Worker.cs
├── Program.cs
├── Startup.cs
└── NvmlWrapper.cs
Code Analysis
Worker.cs
This file contains the main logic for monitoring system resources and exposing APIs.
- Dependencies: Uses
System.Diagnostics,Microsoft.AspNetCore.Builder,Newtonsoft.Jsonamong others. - Methods:
ExecuteAsync: Sets up the ASP.NET Core web application, defines routes for resource usage and process management, and runs the server.GetComputerInfo: Retrieves basic system information.GetCpuUsage: Fetches CPU usage and lists top three processes by CPU usage if usage is over 80%.GetRamUsage: Calculates RAM usage percentage.GetTotalPhysicalMemory: Retrieves total physical memory size.GetGpuUsage: Uses NVIDIA Management Library (NVML) to fetch GPU usage, temperature, and fan speed.GetCurrentlyRunningGame: Detects if a Steam game is running by checking process paths.GetCurrentTime: Returns the current time.
Program.cs
This file sets up the hosting environment for the application.
- Dependencies: Uses
Microsoft.Extensions.DependencyInjectionandMicrosoft.Extensions.Hosting. - Methods:
Main: Entry point of the application, builds and runs the host.CreateHostBuilder: Configures services and determines if the application should run as a Windows service based on command-line arguments or environment variables.
Startup.cs
This file is not used in the current implementation since all routing and configuration are done within Worker.cs.
- Dependencies: Uses
Microsoft.AspNetCore.BuilderandMicrosoft.AspNetCore.Hosting. - Methods:
ConfigureServices: Placeholder method for adding services.Configure: Placeholder method for configuring application HTTP requests pipeline.
NvmlWrapper.cs
This file provides a C# wrapper for the NVIDIA Management Library (NVML) functions.
- Dependencies: Uses
SystemandSystem.Runtime.InteropServices. - Methods:
- Importing NVML DLL functions to interact with GPU hardware.
- Structures like
NvmlUtilizationare defined for handling utilization rates returned by NVML.
Usage
- Build the Project: Use your preferred .NET build tool (e.g.,
dotnet build) to compile the project. - Run the Application:
- To run as a console application, execute the compiled binary directly.
- To run as a Windows service, use the command-line argument
--windows-serviceor set the environment variableRUN_AS_SERVICEto"true".
APIs
-
Get Resource Usage:
- URL:
/api/resource-usage - Method: GET
- Description: Retrieves current system resource usage.
- URL:
-
Kill Process:
- URL:
/api/kill-process - Method: POST
- Body: JSON with the process ID (
{"id": "1234"}) - Description: Kills the specified process.
- URL:
Important Notes
- Ensure that the NVIDIA Management Library (NVML) is installed on the system for GPU monitoring to work.
- The application allows CORS from all origins, which should be configured securely in production environments.
- Error handling and logging are minimal; consider adding robust error handling and logging mechanisms for a production-ready solution.
Contributing
Feel free to contribute by opening issues or submitting pull requests. Make sure to follow the project's coding style and best practices.
devnote
dotnet run
git add .
git commit -m "Add steam running games"
git push origin master
dotnet publish -c Release -o ./publish
devtest
Invoke-WebRequest -Uri "http://localhost:5000/api/kill-process" -Method POST -Body "1234" -Headers @{ "X-API-KEY" = "b7f3e8a1-4c2d-4d9f-9a6e-2a1c5d7f8e9a" }
Invoke-WebRequest -Uri "http://192.168.50.52:5000/api/resource-usage" -Method GET -Headers @{ "X-API-KEY" = "b7f3e8a1-4c2d-4d9f-9a6e-2a1c5d7f8e9a" }
Use 'shutdown', 'restart', or 'cancel'.
Invoke-WebRequest -Uri "http://192.168.50.52:5000/api/force-shutdown" -Method POST
-Headers @{ "X-API-KEY" = "b7f3e8a1-4c2d-4d9f-9a6e-2a1c5d7f8e9a" } -Body '{"Action": "shutdown", "DelaySeconds": 120}'
-ContentType "application/json"