Note: This project was previously called IPMIFanControl / DellFanControl. It has been refactored into a generic, extensible monitoring system that can support multiple server vendors. See DESIGN.md for the full architecture document.
- ๐ฅ๏ธ Multi-vendor support via a clean provider pattern with auto-detection
- ๐ก๏ธ Real-time temperature monitoring (IPMI sensors + lm-sensors CPU cores)
- ๐ Fan control with manual / automatic modes and periodic re-application
- โก Power consumption monitoring
- ๐ฎ GPU monitoring (NVIDIA via nvidia-smi, AMD via rocm-smi, Intel via sysfs)
- ๐ Live dashboard with charts and quick stats (5-second refresh)
- ๐ System Stats page โ CPU load, memory usage, per-NIC network throughput, filesystem & block-device I/O (2-second refresh)
- ๐ REST API for integration & automation
- ๐ Auto-detection of server hardware via DMI/SMBIOS with provider fallback chain
| Vendor | Model | Status |
|---|---|---|
| Dell | R720 XD | โ Implemented |
| Dell | R740 XD | โ Implemented |
| Dell | R240 | โ Implemented |
| Dell | (Generic) | โ Fallback |
| SuperMicro | - | ๐ Planned |
| ASRock | - | ๐ Planned |
| HPE | - | ๐ Planned |
Adding new providers requires only implementing IServerProvider / IServerProviderCandidate for the vendor/model.
ServerMonitor/
โโโ Core/ # Domain interfaces, models, enums
โ โโโ Enums/
โ โโโ Interfaces/
โ โโโ Models/
โโโ Infrastructure/ # External-system adapters
โ โโโ Detection/ # DMI hardware detection + provider factory
โ โโโ Gpu/ # nvidia-smi / rocm-smi / sysfs
โ โโโ Ipmi/ # IpmiToolClient (ipmitool wrapper)
โ โโโ System/ # ShellExecutor, lm-sensors parser, LinuxSystemStatsCollector
โโโ Providers/ # Vendor/model implementations
โ โโโ ProviderBase/
โ โโโ Dell/
โโโ Services/ # Application services / hosted services
โ โโโ MetricsCollectorService
โ โโโ SystemStatsService
โ โโโ FanControlService
โโโ Controllers/ # MVC + API
โ โโโ DashboardController
โ โโโ StatsController
โ โโโ ApiController
โโโ Views/ # Razor views
โโโ Dashboard/
โโโ Stats/
โโโ Shared/
See DESIGN.md for the detailed architecture and the future native-IPMI roadmap.
sudo apt-get install ipmitool lm-sensors
sudo sensors-detect --autoNote:
ipmitoolrequires root privileges for in-band IPMI. Run the application withsudoor add the user to the appropriate group.
Create appsettings.json (git-ignored by default) in the project root:
{
"ServerMonitor": {
"Server": { "Port": 5000 },
"Ipmi": { "UseLocal": true },
"FanControl": { "EnableControl": false, "ManualSpeed": 20, "CheckIntervalSeconds": 30 }
}
}For out-of-band IPMI (e.g. iDRAC over the network):
{
"ServerMonitor": {
"Ipmi": {
"UseLocal": false,
"Host": "192.168.0.101",
"Username": "root",
"Password": "your-idrac-password",
"Interface": "lanplus",
"CipherSuite": 3
}
}
}You can also create appsettings.local.json for local overrides (also git-ignored).
dotnet runOpen http://localhost:5000 to access the dashboard. The application will auto-detect your server hardware and select the appropriate provider at startup.
| Method | Path | Description |
|---|---|---|
| GET | /api/status |
Latest hardware metrics snapshot |
| GET | /api/provider |
Active provider info & capabilities |
| GET | /api/history |
Hardware metrics history for graphing |
| GET | /api/test |
Test the IPMI / hardware connection |
| POST | /api/fans/speed/{percent} |
Set manual fan speed (5-100%) |
| POST | /api/fans/auto |
Restore automatic fan control |
| GET | /api/stats |
Latest system stats (CPU/mem/net/disk) |
| GET | /api/stats/history |
System stats history for graphing |
The /Stats page (also available at the top-level nav) shows:
- CPU โ overall and per-core usage, load averages, user/system/iowait breakdown, model name
- Memory โ total / used / available / cached / buffers, swap usage
- Network โ per-interface status, link speed, IPv4 addresses, RX/TX rate, totals & errors
- Storage volumes โ every mounted filesystem with size, free, used, and usage bar
- Storage devices โ every block device (HDD/SSD) with size, R/W rate, model, and temperature when available
By default virtual interfaces (lo, veth*, br-*, docker*, virbr*, vnet*, tun*, tap*, wg*) are hidden. Override via configuration:
"ServerMonitor": {
"Stats": {
"Network": {
"Include": [ "eno1", "eno2" ],
"Exclude": [ "veth*", "br-*", "lo" ]
}
}
}Both lists support * wildcards. If Include is set, only matching interfaces are shown; Exclude filters the remainder.
The FanControlService is an optional background service that periodically re-applies a fixed fan speed. This is useful because some BMCs revert to automatic control after a watchdog timeout. It is disabled by default; enable it in configuration:
"ServerMonitor": {
"FanControl": {
"EnableControl": true,
"ManualSpeed": 20,
"CheckIntervalSeconds": 30
}
}On graceful shutdown the service automatically restores automatic fan control.
- Create a class in
Providers/<Vendor>/that derives fromServerProviderBase(or useDellProviderBaseas a template for similar vendors). - Implement
Vendor,Model,IsSupported(ServerInfo), and the three monitor components (ITemperatureMonitor,IFanController,IPowerMonitor). - Also implement
IServerProviderCandidate(a marker interface that lets the factory enumerate candidates without conflicting with the singletonIServerProvider). - Register it in
Program.cs:builder.Services.AddSingleton<IServerProviderCandidate, MyVendorProvider>();
- The factory automatically picks the most specific matching provider for the detected hardware, falling back to generic providers.
You can also force a specific provider via configuration:
"ServerMonitor": {
"ForceProvider": "R720XD"
}StatsCheck โ a standalone CLI tool that prints system stats to the console, useful for verifying the collector works without running the web app:
dotnet run --project src/Tools/StatsCheck/StatsCheck.csproj- โ Phase 1 โ Modular refactor with provider pattern
- โ Phase 2 โ Dell R740 XD / R240 providers, auto-detection, system stats
- ๐ Phase 3 โ SuperMicro / ASRock providers
- ๐ Phase 4 โ Thermal-curve fan control
- ๐ Phase 5 โ Persisted metrics history (SQLite/InfluxDB)
- ๐ Phase 6 โ Native IPMI implementation (replace the ipmitool dependency)
See DESIGN.md for full details.
MIT โ see LICENSE.

