## System Metrics Collection
- Add SystemMetrics module with CPU, memory, disk, and system info collection
- Integrate Erlang :os_mon application (cpu_sup, memsup, disksup)
- Collect and format active system alarms with structured JSON output
- Replace simple "Hello" messages with rich system data in MQTT payloads
## MQTT Integration
- Update MqttClient to publish comprehensive metrics every 30 seconds
- Add :os_mon to application dependencies for system monitoring
- Maintain backward compatibility with existing dashboard consumption
## Documentation Updates
- Update CLAUDE.md with Phase 1 completion status and implementation details
- Completely rewrite README.md to reflect current project capabilities
- Document alarm format, architecture, and development workflow
## Technical Improvements
- Graceful error handling for metrics collection failures
- Clean alarm formatting: {severity, path/details, id}
- Dashboard automatically receives and displays real-time system data and alerts
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
2.6 KiB
2.6 KiB
Systant
A comprehensive Elixir-based system monitoring solution with real-time dashboard, designed for deployment across multiple NixOS hosts.
Components
- Server (
server/): Elixir OTP application that collects and publishes system metrics via MQTT - Dashboard (
dashboard/): Phoenix LiveView web dashboard for real-time monitoring - Nix Integration: Complete NixOS module and packaging for easy deployment
Features
System Metrics Collection
- CPU: Load averages (1/5/15min) and utilization monitoring
- Memory: System memory usage and swap monitoring
- Disk: Usage statistics and capacity monitoring for all drives
- System Alarms: Real-time alerts for disk space, memory pressure, etc.
- System Info: Uptime, Erlang/OTP versions, scheduler information
Real-time Dashboard
- Phoenix LiveView interface showing all connected hosts
- Live system metrics and alert monitoring
- Automatic reconnection and error handling
MQTT Integration
- Publishes comprehensive system metrics every 30 seconds
- Uses hostname-based topics:
systant/${hostname}/stats - Structured JSON payloads with full system data
- Configurable MQTT broker connection
Quick Start
Development Environment
# Enter Nix development shell
nix develop
# Run the server
cd server && mix run --no-halt
# Run the dashboard (separate terminal)
just dashboard
# or: cd dashboard && mix phx.server
Production Deployment (NixOS)
# Build and install via Nix
nix build
sudo nixos-rebuild switch --flake .
# Or use the NixOS module in your configuration:
# imports = [ ./path/to/systant/nix/nixos-module.nix ];
# services.systant.enable = true;
Configuration
Default MQTT configuration (customizable via environment variables):
- Host:
mqtt.home:1883 - Topics:
systant/${hostname}/statsandsystant/${hostname}/commands - Interval: 30 seconds
- Client ID:
systant_${random}(auto-generated to avoid conflicts)
Architecture
- Server:
server/lib/systant/mqtt_client.ex- MQTT publishing and command handling - Metrics:
server/lib/systant/system_metrics.ex- System data collection using:os_mon - Dashboard:
dashboard/lib/dashboard/mqtt_subscriber.ex- Real-time MQTT data consumption - Nix:
nix/package.nixandnix/nixos-module.nix- Complete packaging and deployment
Roadmap
- ✅ Phase 1: System metrics collection with real-time dashboard
- 🔄 Phase 2: Command system for remote host management
- 🔄 Phase 3: Home Assistant integration for automation
See CLAUDE.md for detailed development context and implementation notes.