king 3d1c55468b Enhance monitoring features and UI:
- Add detailed CPU core monitoring option for better performance control
- Update monitoring settings in app configuration
- Improve parallel task execution for resource usage monitoring
- Modify Telegram notification service to skip alerts from svchost processes
- Add "Memory %" column to process table in HTML and update related JavaScript
- Create performance test scripts for API response time evaluation
2025-08-08 16:19:45 +08:00
2024-11-28 16:52:40 +08:00

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:

  • Development: http://localhost:5000
  • Release/Production: http://localhost:24142

Features:

  • 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 with timer support (hidden feature)

🔐 Hidden System Control Feature

For security reasons, the system control feature is hidden by default. To access it:

Mobile Device Access Methods:

  1. Long press (2 seconds) on the "Resource Monitor" title in the navigation bar
  2. Triple tap quickly on the "Resource Monitor" title
  3. Five quick taps on the chart icon (📊) next to the title

Desktop Access Methods:

  1. Triple-click on the "Resource Monitor" title in the navigation bar
  2. Keyboard shortcut: Ctrl + Shift + P
  3. Long press (2 seconds) on the title with mouse

Features:

  • Shutdown: Graceful or forced system shutdown
  • Restart: System restart with optional force
  • Timer Support: Delay execution from 0 to 86400 seconds (24 hours) - Default: 15 seconds
  • Cancel Function: Cancel any pending shutdown/restart (similar to shutdown -a)
  • Safety Confirmations: Multiple confirmation dialogs before execution
  • Auto-lock: System control auto-locks after 30 seconds for security

Usage:

  1. Activate the system control button using one of the methods above
  2. Look for the red pulsing "System" button that appears in the navigation
  3. Tap/click the "System" button to open the control panel
  4. Adjust timer if needed (defaults to 15 seconds for safety)
  5. Choose shutdown, restart, or cancel any pending operation
  6. Confirm the action

📱 Mobile Tips:

  • Device will vibrate when system control is unlocked (if supported)
  • Touch-friendly interface optimized for mobile screens
  • All gestures work with touchscreens

⚠️ Warning: Use this feature with extreme caution as it will shut down or restart the entire system.

  • 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 providing:

  • Development: http://localhost:5000
  • Release/Production: http://localhost:24142

Both environments provide:

Web Interface

  • GET / - Main Dashboard - Interactive web interface for monitoring
  • GET /swagger - API Documentation - Interactive API explorer and documentation

REST API

All API endpoints are available at:

  • Development: http://localhost:5000/api/[endpoint]
  • Release/Production: http://localhost:24142/api/[endpoint]

Endpoints:

System Information

  • GET /api/resource/usage - Complete resource overview - All monitoring data in one call
  • GET /api/resource/system-info - Complete system information including VM details
  • GET /api/resource/cpu - Detailed CPU metrics with per-core data
  • GET /api/resource/memory - Memory utilization and statistics
  • GET /api/resource/gpu - NVIDIA GPU usage, memory, temperature, fan speed, and power consumption
  • GET /api/resource/disks - Disk I/O and space usage for all drives
  • GET /api/resource/network - Network interface statistics
  • GET /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 information
  • GET /api/all-games - All detected games on the system
  • GET /api/fullscreen-status - Check if any game is running fullscreen

Alerting System

  • GET /api/alerts/active - Currently active alerts
  • GET /api/alerts/history?count=100 - Alert history
  • POST /api/alerts/{alertId}/resolve - Manually resolve an alert
  • GET /api/alerts/enabled - Check if alerting is enabled

Telegram Bot Integration

  • GET /api/telegram/status - Check Telegram bot status and connection
  • POST /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 operations
  • POST /api/service/stop - Stop the monitoring service

Process Management Details:

  • The /api/top-processes endpoint 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

cd C:\Work\DEV\ResourceUsageAPI
dotnet run --configuration Release

Then open your browser to:

  • Development: http://localhost:5000
  • Release/Production: http://localhost:24142

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:
# - Development: http://localhost:5000
# - Release/Production: http://localhost:24142
# Access Swagger API documentation at the same URL + /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 the appropriate port is available (5000 for development, 24142 for release/production)
  • 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 UpdateIntervalMs in 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, not Games)
  • 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:

  1. Create a Telegram Bot - Contact @BotFather on Telegram and create a new bot
  2. Get Chat ID - Send a message to your bot, then visit https://api.telegram.org/bot<TOKEN>/getUpdates
  3. 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 (adjust port based on environment)
# Development:
Start-Process "http://localhost:5000"
# Release/Production:
Start-Process "http://localhost:24142"

# Get complete resource overview (adjust URL as needed)
$baseUrl = "http://localhost:24142"  # Use 5000 for development
$resources = Invoke-RestMethod -Uri "$baseUrl/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 "$baseUrl/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 "$baseUrl/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:

  1. Check the console output for warnings/errors
  2. Review the configuration in appsettings.json
  3. Test individual API endpoints using PowerShell or curl
  4. 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
S
Description
Web API build using dotnet use for to displaying virtual machine resource.
Readme 8.8 MiB
Languages
C# 90.4%
PowerShell 5%
JavaScript 2.2%
Shell 1.8%
Batchfile 0.6%