## 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>
80 lines
2.6 KiB
Markdown
80 lines
2.6 KiB
Markdown
# 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
|
|
```bash
|
|
# 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)
|
|
```bash
|
|
# 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}/stats` and `systant/${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.nix` and `nix/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.
|
|
|