Your 'Systant. A system daemon on Linux that communicates via MQTT to get diagnostic info from, and send commands to, a Linux computer. Written in Elixir because fuck you, and written mostly by Claude because fuck everything.
Go to file
ryan eff32b3233 Implement comprehensive system metrics collection with real-time monitoring
## 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>
2025-08-05 12:48:44 -07:00
dashboard Update CLAUDE.md and fix final Tortoise handler return value 2025-08-03 19:44:41 -07:00
nix Fix COOKIE issue by setting RELEASE_COOKIE environment variable 2025-08-02 20:14:24 -07:00
server Implement comprehensive system metrics collection with real-time monitoring 2025-08-05 12:48:44 -07:00
.envrc Fix flake.nix by removing non-existent pytest-homeassistant-custom-component package 2025-08-02 21:08:44 -07:00
.gitignore Add Home Assistant development environment to flake 2025-08-02 21:00:07 -07:00
CLAUDE.md Implement comprehensive system metrics collection with real-time monitoring 2025-08-05 12:48:44 -07:00
flake.lock Clean up Nix configuration and remove old files 2025-08-02 19:41:40 -07:00
flake.nix Fix dashboard MQTT connection and remove simulation code 2025-08-03 19:39:59 -07:00
README.md Implement comprehensive system metrics collection with real-time monitoring 2025-08-05 12:48:44 -07:00

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}/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.