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 fbd0c6dcf6 Complete secure MQTT command system with clean JSON responses
- Remove null error field from successful command responses for cleaner JSON
- Fix client_id consistency between MqttClient and MqttHandler for reliable publishing
- Add comprehensive command system documentation to CLAUDE.md:
  * User-configurable commands via systant.toml
  * Enterprise security features (whitelist-only, parameter validation, timeouts)
  * Simple command interface: {"command":"trigger","params":[...]}
  * Built-in commands and response format examples
  * Complete MQTT topic structure documentation

Command system now production-ready with:
 Secure execution (no arbitrary shell commands)
 Clean JSON responses (no null fields)
 Comprehensive logging and audit trail
 User-customizable command definitions
 Request/response correlation with auto-generated IDs

Ready for Home Assistant integration.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-05 22:40:26 -07:00
dashboard Enhanced dashboard with comprehensive metrics display 2025-08-05 21:06:50 -07:00
nix Fix COOKIE issue by setting RELEASE_COOKIE environment variable 2025-08-02 20:14:24 -07:00
server Complete secure MQTT command system with clean JSON responses 2025-08-05 22:40:26 -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.