Server Monitoring
Language
- Elixir.
Runtime Context
- Server context, Ash resources, and periodic worker.
Purpose
- Processes device heartbeats, persists telemetry events, evaluates alert rules, creates alerts, checks offline devices, and provides alert/rule APIs for LiveView screens.
Key Files
packages/server/lib/nixstasis/monitoring.expackages/server/lib/nixstasis/monitoring/offline_checker.expackages/server/lib/nixstasis/monitoring/rule_evaluator.expackages/server/lib/nixstasis/monitoring/telemetry.expackages/server/lib/nixstasis/monitoring/alert.expackages/server/lib/nixstasis/monitoring/alert_rule.expackages/server/lib/nixstasis_web/live/alerts/index_live.expackages/server/lib/nixstasis_web/live/alerts/rules_live.ex
Public Interfaces
Nixstasis.Monitoring.heartbeat/2Nixstasis.Monitoring.check_offline_devices/1Nixstasis.Monitoring.evaluate_telemetry/2Nixstasis.Monitoring.list_rules/0Nixstasis.Monitoring.get_rule!/1Nixstasis.Monitoring.create_rule/1Nixstasis.Monitoring.update_rule/2Nixstasis.Monitoring.delete_rule/1Nixstasis.Monitoring.list_rules_for_product/1Nixstasis.Monitoring.OfflineChecker.start_link/1
Dependencies
Internal
Nixstasis.DevicesNixstasis.DomainNixstasis.SettingsNixstasis.Monitoring.RuleEvaluatorNixstasis.Monitoring.AlertNixstasis.Monitoring.AlertRule
External
- Ash
- GenServer
Client-Server Interaction Details
- Heartbeat controller passes client telemetry and connection status into
Monitoring.heartbeat/2. Monitoring.heartbeat/2updates devicelast_seen_at, persists telemetry, evaluates rules, and returns queued commands to the client.- Offline checking uses
Settings.get_offline_window/0and runs periodically throughOfflineChecker. - Offline timing is runtime-configured through settings instead of hard-coded in the module docs. See Data Flow for the heartbeat and offline-check sequence.
Traceable references:
packages/server/lib/nixstasis/monitoring.ex:15-148packages/server/lib/nixstasis/monitoring/offline_checker.ex:1-32packages/server/lib/nixstasis_web/controllers/heartbeat_controller.ex:7-27