-
Notifications
You must be signed in to change notification settings - Fork 1
attention
Two distinct surfaces on the Home dashboard, with very different semantics.
- Needs Attention = "fix this NOW". Only items whose underlying state is currently broken.
- Recent Activity = event log. Things that happened in the past — transitions, dispatches, ACK'd alerts.
A service that went down at 14:30 and came back up at 14:35 shows in Recent Activity (two events: service_down then service_up) but disappears from Needs Attention once it's healthy again.
This split exists because looking at a "today's events" feed and trying to determine current state is exhausting and error-prone. NA only ever shows live conditions, so an empty NA list genuinely means "nothing is broken right now".
| Surface | Source | What it shows |
|---|---|---|
| Needs Attention |
_compute_attention() walks current state files |
Things that are currently broken |
| Recent Activity |
/api/fleet/events reads fleet_events.json
|
The last N events fired by webhooks |
fleet_events.json is append-only (bounded at MAX_FLEET_EVENTS = 200). Every fire_webhook(...) call records into it whether or not a webhook URL is configured.
These produce a Needs Attention item when the underlying condition is currently active. Anything else in fleet_events is past-tense only.
| Kind | Source | Severity range |
|---|---|---|
offline |
last_seen outside TTL |
critical |
patches |
upgradable > 0 on device record |
info / warning |
cve |
findings in cve_findings.json, ignoring cve_ignore.json
|
warning / critical |
drift |
drift_detected set on device |
warning |
mailbox |
mailbox count exceeds threshold | warning |
brute_force |
active state in brute_force.json
|
critical |
snapshot |
snapshot age > threshold | warning |
backup |
backup state stale | critical |
disk |
metric overrides per mount | warning / critical |
tls |
TLS expiry watchlist | warning / critical |
reboot |
/run/reboot-required exists in sysinfo |
warning |
agent_version |
agent version ≠ server version | info |
service_down |
systemd unit in services.json not active |
warning / critical |
failed_units |
systemd failed units reported in the device's sysinfo |
warning |
monitor_down |
last monitor probe ok: false
|
critical |
custom_script_fail |
custom script reports non-zero rc in latest result | warning |
To make a new state-derived condition show in NA:
- Append to
_compute_attention()inserver/cgi-bin/api.pywithseverity,kind,device(device name string),summary, and optionallytargetfor parameterised mitigation. - If the kind should also support the 🩺 Investigate button, add a playbook entry to
_MITIGATE_PLAYBOOKSand a default AI prompt inai_provider.py. - Add a regression test that seeds the relevant state file and asserts the item appears.
The decorator step at the end of _compute_attention automatically:
- Adds
device_id(looked up from device-name reverse map) - Adds
mitigation_kindandmitigation_targetif the kind is in_MITIGATE_PLAYBOOKS - Filters items through the global Ignored list
service_down, monitor_down, custom_script_fail were added in v3.0.1. These conditions previously fired webhooks (so Recent Activity showed them on the transition) but never produced an NA item — meaning a service that was already down when the operator opened the dashboard was effectively invisible. Now they show until the underlying state recovers.
RemotePower · README · CHANGELOG · remotepower.tvipper.com — generated from docs/, do not edit pages here directly.
Getting started
- Install
- Admin guide
- Deployment map
- Docker / Compose
- HTTPS / TLS
- Self-signed TLS
- Upgrading
- Troubleshooting
Agents & devices
Monitoring & health
Security
Integrations & automation
- Homelab integrations
- OPNsense
- Scripts
- Custom scripts
- MCP server
- Webhooks
- Terraform / IaC
- AI assistant
- RAG
Reference
- Architecture
- CMDB
- Feature inventory
- REST API
- Swagger / OpenAPI
- Fleet management
- Scaling
- Satellites
- Keyboard shortcuts
Release notes