Resource Monitor Service
A comprehensive system monitoring service with a modern web dashboard for real-time resource monitoring. Originally designed for Windows VMs running on Unraid servers, now featuring a responsive web interface for easy monitoring and management.
🌟 New: Web Dashboard
Access the interactive web dashboard at http://localhost:5000 featuring:
- Real-time Monitoring: Live updates every 15 seconds via SignalR
- Responsive Design: Mobile-friendly interface built with Tailwind CSS
- Interactive Controls: Toggle auto-refresh, show/hide sections, manual refresh
- Game Detection: Prominent game monitoring with process termination
- Process Management: View and terminate top processes
- System Details: Comprehensive system information and disk usage
- Performance Charts: Historical CPU and memory usage graphs
- API Documentation: Built-in Swagger/OpenAPI interface at
/swagger
🚀 Features
Web Dashboard
- Modern Interface: Clean, responsive design with dark/light themes
- Real-time Updates: SignalR-powered live data updates
- Auto-refresh Control: Toggle between automatic and manual refresh modes
- Game Detection Section: Monitor running games with termination capability
- Process Management: View top processes with one-click termination
- System Information: Detailed hardware and software information
- Disk Usage Visualization: Visual disk space utilization
- Performance Charts: Historical data visualization with Chart.js
- Mobile Responsive: Works seamlessly on phones, tablets, and desktop
Core Monitoring
- CPU Monitoring: Per-core usage, frequency, temperature, and throttling detection
- Memory Monitoring: RAM usage, available memory, committed memory, and paging
- GPU Monitoring: NVIDIA GPU usage, memory utilization, temperature, fan speed, and power consumption (via NVML)
- Disk Monitoring: I/O statistics, space usage, and performance counters
- Network Monitoring: Bandwidth usage, packet statistics, and interface data
- Temperature Monitoring: CPU and hard drive temperature sensors
VM-Specific Features
- VM Detection: Automatically detects virtualization environment
- Hypervisor Identification: Identifies VMware, VirtualBox, Hyper-V, KVM, etc.
- Unraid Optimization: Optimized for Unraid VM environments
- Resource Alerting: Configurable thresholds for resource usage alerts
Advanced Features
- Game Detection: Multi-platform game detection with fullscreen monitoring and configurable root folders
- Process Management: View top processes with CPU/memory percentages, terminate processes via API
- Smart Alerting: Duration-based alerting to prevent false positives
- Telegram Bot Integration: Real-time alerts via Telegram bot with customizable notifications
- System Control: Remote shutdown/restart capabilities
- Health Monitoring: Comprehensive health checks and uptime tracking
- Real-time Metrics: CPU usage calculation and memory percentage tracking for processes
📡 API Endpoints
The service runs a web server on http://localhost:5000 providing:
Web Interface
GET /- Main Dashboard - Interactive web interface for monitoringGET /swagger- API Documentation - Interactive API explorer and documentation
REST API
All API endpoints are available at http://localhost:5000/api/[endpoint]:
System Information
GET /api/resource/usage- Complete resource overview - All monitoring data in one callGET /api/resource/system-info- Complete system information including VM detailsGET /api/resource/cpu- Detailed CPU metrics with per-core dataGET /api/resource/memory- Memory utilization and statisticsGET /api/resource/gpu- NVIDIA GPU usage, memory, temperature, fan speed, and power consumptionGET /api/resource/disks- Disk I/O and space usage for all drivesGET /api/resource/network- Network interface statisticsGET /api/resource/processes?count=10- Top processes by CPU/memory usage with percentage data
Process Management
POST /api/resource/kill-process/{processId}- Terminate Process - End any process by ID
Real-time Updates
- SignalR Hub:
/resourceHub- Real-time data updates every 15 seconds
Game Detection
GET /api/current-game- Currently running game informationGET /api/all-games- All detected games on the systemGET /api/fullscreen-status- Check if any game is running fullscreen
Alerting System
GET /api/alerts/active- Currently active alertsGET /api/alerts/history?count=100- Alert historyPOST /api/alerts/{alertId}/resolve- Manually resolve an alertGET /api/alerts/enabled- Check if alerting is enabled
Telegram Bot Integration
GET /api/telegram/status- Check Telegram bot status and connectionPOST /api/telegram/test- Send a test alert to verify bot configuration
System Control
POST /api/process/kill- Terminate a process (requires process ID and optional force flag)POST /api/system/shutdown- Shutdown, restart, or cancel system operationsPOST /api/service/stop- Stop the monitoring service
Process Management Details:
- The
/api/top-processesendpoint returns processes sorted by CPU usage - Each process includes real-time CPU usage percentage and memory usage percentage
- CPU usage is calculated using time-based measurements between API calls
- Memory usage percentage is calculated relative to total system memory
- Process termination supports both graceful (
force: false) and forced (force: true) termination
🛠️ Installation & Usage
Option 1: Web Dashboard (Recommended)
cd C:\Work\DEV\ResourceUsageAPI
dotnet run --configuration Release
Then open your browser to http://localhost:5000 for the interactive dashboard.
Option 2: Windows Service (Production)
# Run as Administrator
cd C:\Work\DEV\ResourceUsageAPI
.\install-service.ps1
Option 3: Linux Service (if running on Linux)
cd /path/to/ResourceUsageAPI
chmod +x install-service.sh
sudo ./install-service.sh
Option 4: Standalone Executable
cd C:\Work\DEV\ResourceUsageAPI
dotnet build --configuration Release
dotnet publish --configuration Release
cd bin\Release\net9.0-windows\publish
.\ResourceMonitorService.exe
🎮 Web Dashboard Features
Dashboard Overview
- Resource Cards: CPU, Memory, GPU, and Network usage with visual progress bars
- Game Detection: Prominent section showing currently running games
- Auto-refresh Toggle: Control automatic updates (15-second intervals)
- Manual Refresh: Force immediate data updates
- Responsive Design: Works on desktop, tablet, and mobile devices
Interactive Sections
- Processes: View and terminate top CPU/memory consuming processes
- Details: System information, disk usage, and performance charts
- Game Management: Monitor and terminate running games
- Real-time Charts: Historical CPU and memory usage visualization
Controls
- Auto: ON/OFF - Toggle automatic data updates
- Processes - Show/hide process management table
- Details - Show/hide system information and charts
- Refresh - Manually update all data immediately
📊 Service Management
Starting and Stopping the Service
# Start the service
Start-Service "ResourceMonitorService"
# Stop the service
Stop-Service "ResourceMonitorService"
# Get service status
Get-Service "ResourceMonitorService"
# Restart the service
Restart-Service "ResourceMonitorService"
Development Mode
For development and testing:
# Run in development mode with hot reload
dotnet run --environment Development
# Access the dashboard at http://localhost:5000
# Access Swagger API documentation at http://localhost:5000/swagger
Troubleshooting
- Service won't start: Check the logs in the
logs/directory - No GPU data: Make sure you have an NVIDIA GPU and drivers installed
- High CPU usage: Adjust monitoring intervals in
appsettings.json - Web dashboard not accessible: Verify firewall settings and ensure port 5000 is available
- Game detection issues: Check if games are running from standard installation directories
- API errors: Verify endpoints using Swagger documentation at
/swagger - Performance issues: Consider increasing
UpdateIntervalMsin configuration
⚙️ Configuration
Configuration is managed through appsettings.json:
{
"MonitoringSettings": {
"UpdateIntervalMs": 15000,
"EnableGpuMonitoring": true,
"EnableDiskMonitoring": true,
"EnableNetworkMonitoring": true,
"EnableTemperatureMonitoring": true,
"EnableProcessMonitoring": true,
"EnableGameDetection": true,
"EnableAlerts": true,
"GamePlatformPaths": [
"\\steamapps\\common\\",
"\\Epic Games\\",
"\\GOG Galaxy\\Games\\",
"\\Origin Games\\",
"\\Ubisoft Game Launcher\\games\\"
],
"GameRootFolders": [
"C:\\Games",
"D:\\Games",
"E:\\Games"
]
},
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://localhost:5000"
},
"Https": {
"Url": "https://localhost:5001"
}
}
}
}
Game Detection Configuration
The service supports advanced game detection through two complementary approaches:
Platform-Based Detection
Automatically detects games installed through popular game platforms:
- Steam: Games in
\steamapps\common\directories - Epic Games Store: Games in
\Epic Games\directories - GOG Galaxy: Games in
\GOG Galaxy\Games\directories - EA Origin: Games in
\Origin Games\directories - Ubisoft Connect: Games in
\Ubisoft Game Launcher\games\directories
Root Folder Detection
Configure custom game directories for standalone games and non-platform installations:
"GameRootFolders": [
"C:\\Games",
"D:\\Games",
"E:\\Games"
]
How Root Folder Detection Works:
- Priority: Root folders are checked before platform paths
- Smart Naming: Extracts game names from directory structure
- Flexible Structure: Supports any folder organization under root directories
- Fallback Logic: Uses file version info or executable name when needed
Example Game Detection:
C:\Games\Cyberpunk 2077\bin\x64\Cyberpunk2077.exe
→ Game Name: "Cyberpunk 2077"
→ Platform: "Standalone"
D:\Games\The Witcher 3\witcher3.exe
→ Game Name: "The Witcher 3"
→ Platform: "Standalone"
Configuration Tips:
- Add drives where you install standalone games
- Include network drives if you store games on NAS
- Use absolute paths (e.g.,
C:\Games, notGames) - Root folders are checked in order, so prioritize most common locations first
Telegram Bot Alerts
The service supports real-time alert notifications via Telegram bot. To set up Telegram alerts:
- Create a Telegram Bot - Contact
@BotFatheron Telegram and create a new bot - Get Chat ID - Send a message to your bot, then visit
https://api.telegram.org/bot<TOKEN>/getUpdates - Configure Settings - Add Telegram configuration to your
appsettings.json:
{
"MonitoringSettings": {
"Telegram": {
"IsEnabled": true,
"BotToken": "123456789:ABCdefGHIjklMNOpqrSTUvwxyz",
"ChatIds": [123456789, -987654321],
"SendWarningAlerts": true,
"SendCriticalAlerts": true,
"SendResolutionNotifications": true,
"MessageTemplate": "🚨 *{Level} Alert*\n\n📊 *{Component}*\n💬 {Message}\n⏰ {Timestamp}",
"ResolutionTemplate": "✅ *Alert Resolved*\n\n📊 *{Component}*\n💬 {Message}\n⏰ Resolved at {ResolvedAt}"
}
}
}
Features:
- Multiple Chats: Send alerts to multiple users/groups by adding chat IDs
- Customizable Templates: Modify message format with placeholders for alert data
- Alert Filtering: Choose which alert levels to send (Warning/Critical)
- Silent Notifications: Warning alerts are sent silently, critical alerts with sound
- Resolution Notifications: Optional notifications when alerts are resolved
📋 For detailed setup instructions, see TELEGRAM_SETUP.md
📊 Example API Responses
Health Check
{
"status": "Healthy",
"timestamp": "2025-08-07T02:30:00Z",
"uptime": "1.16:55:30",
"activeAlerts": 0,
"monitoringEnabled": {
"gpu": true,
"disk": true,
"network": true,
"temperature": true,
"processes": true,
"games": true,
"alerts": true
}
}
CPU Usage
{
"usage": 15.5,
"coreUsages": [12.1, 18.3, 14.7, 16.2],
"temperature": 65.0,
"maxFrequency": 4400,
"currentFrequency": 3200,
"isThrottling": false
}
VM Information
{
"isVirtualMachine": true,
"hypervisorVendor": "VMware",
"uptime": "1.16:55:30",
"bootTime": "2025-08-05T09:34:04Z",
"machineName": "WIN11-VM",
"domain": "WORKGROUP"
}
GPU Usage
{
"usage": 45,
"memoryUsage": 60,
"temperature": 72,
"fanSpeed": 65,
"powerUsage": 185000,
"memoryTotal": 8589934592,
"memoryUsed": 5153960755,
"isAvailable": true,
"name": "NVIDIA GeForce RTX 4070",
"driverVersion": "551.76",
"error": ""
}
Game Detection
{
"gameName": "Cyberpunk 2077",
"executableName": "Cyberpunk2077.exe",
"fullPath": "C:\\Games\\Cyberpunk 2077\\bin\\x64\\Cyberpunk2077.exe",
"processId": 8432,
"memoryUsage": 4294967296,
"cpuTime": "00:15:42.1250000",
"startTime": "2025-08-07T14:30:15.123456+08:00",
"platform": "Standalone",
"isFullscreen": true,
"fps": 0
}
Top Processes
{
"value": [
{
"id": 11820,
"name": "WmiPrvSE",
"cpuUsage": 2.7276263,
"memoryUsage": 83120128,
"memoryUsagePercentage": 0.12576005,
"processorTime": "00:26:30.2500000",
"startTime": "2025-08-05T09:38:38.9837995+08:00",
"executablePath": "C:\\WINDOWS\\system32\\wbem\\wmiprvse.exe",
"commandLine": "C:\\WINDOWS\\system32\\wbem\\wmiprvse.exe"
},
{
"id": 8376,
"name": "explorer",
"cpuUsage": 1.5750673,
"memoryUsage": 403636224,
"memoryUsagePercentage": 0.61069816,
"processorTime": "00:24:36.7968750",
"startTime": "2025-08-07T15:26:31.096813+08:00",
"executablePath": "C:\\WINDOWS\\Explorer.EXE",
"commandLine": "C:\\WINDOWS\\Explorer.EXE"
}
],
"count": 2
}
🔧 PowerShell Usage Examples
# Access the web dashboard
Start-Process "http://localhost:5000"
# Get complete resource overview
$resources = Invoke-RestMethod -Uri "http://localhost:5000/api/resource/usage"
Write-Host "CPU: $($resources.cpu.usage.ToString('F1'))%"
Write-Host "Memory: $($resources.memory.usagePercentage.ToString('F1'))%"
Write-Host "GPU: $($resources.gpu.usage)%"
# Get system information
$systemInfo = Invoke-RestMethod -Uri "http://localhost:5000/api/resource/system-info"
Write-Host "Machine: $($systemInfo.machineName)"
Write-Host "OS: $($systemInfo.osVersion)"
Write-Host "CPU: $($systemInfo.cpuName)"
# Get disk usage
$disks = Invoke-RestMethod -Uri "http://localhost:5000/api/resource/disks"
foreach ($disk in $disks) {
$freeGB = [math]::Round($disk.freeSpace / 1GB, 1)
$totalGB = [math]::Round($disk.totalSize / 1GB, 1)
Write-Host "$($disk.driveLetter): $freeGB GB free of $totalGB GB"
}
# Get top processes
$processes = Invoke-RestMethod -Uri "http://localhost:5000/api/resource/processes?count=5"
Write-Host "Top 5 processes by CPU usage:"
foreach ($proc in $processes) {
if ($proc.cpuUsage) {
Write-Host " $($proc.name): $($proc.cpuUsage.ToString('F1'))% CPU"
}
}
# Terminate a process (example - be careful!)
# Invoke-RestMethod -Uri "http://localhost:5000/api/resource/kill-process/1234" -Method Post
🚨 Known Warnings (Non-Critical)
The service may show warnings in VM environments that don't affect functionality:
- Performance Counter Warnings: Some performance counters may not be available in VMs
- Temperature Sensor Access: Some temperature sensors require elevated privileges
- Process Access Denied: Some system processes require elevated privileges to access
- Windows.Forms Compatibility: Game detection works despite .NET Framework compatibility warnings
These warnings are expected in VM environments and the service continues to function normally.
🎯 Perfect for Unraid
This service is specifically optimized for Windows VMs running on Unraid:
- VM Detection: Automatically detects and reports virtualization status
- Resource Monitoring: Tracks VM resource allocation and usage
- Gaming Support: Detects games and monitors performance impact
- Remote Management: Full API control for integration with Unraid dashboard
- Alert System: Configurable alerts for resource thresholds
- Health Monitoring: Comprehensive health checks for VM status
📝 Logging
The service uses Serilog for structured logging:
- Console output for real-time monitoring
- File logging for persistent records
- Configurable log levels (Debug, Information, Warning, Error)
- Smart error suppression to prevent log spam in VM environments
🔐 Security
- Optional API key authentication
- CORS support for web dashboard integration
- Process termination requires explicit API calls
- System shutdown/restart requires explicit API calls
- Configurable allowed origins for API access
📈 Performance
- Lightweight background monitoring (15-second intervals by default)
- Efficient memory usage with smart caching and cleanup of old process data
- Non-blocking async operations
- Real-time CPU usage calculation for individual processes
- Graceful error handling for VM-specific limitations
- Configurable monitoring intervals and features
- Smart process tracking with automatic cleanup to prevent memory leaks
🆘 Support
For issues or questions:
- Check the console output for warnings/errors
- Review the configuration in
appsettings.json - Test individual API endpoints using PowerShell or curl
- Check Windows Event Logs if running as a service
Version: 2.1.0
Target Framework: .NET 9.0
Platforms: Windows (VM optimized)
License: Open Source
Recent Updates
- v2.1.0: Added configurable game root folders for enhanced standalone game detection
- v2.0.0: Initial release with comprehensive system monitoring and game detection