Monitoring

Services can declare [[monitors]] that hamctl surfaces as live widgets. hamctl owns the log location through log_root in hamctl.toml (the {log_root} token, like config_root/{root}); {date} expands to today’s UTC date for daily-rotated logs. Set log_root to where the daemon writes its log (on Pi-Star, /var/log/pi-star).

Activity (Last Heard)

The Activity page (its own nav entry) merges every service’s lastheard monitors into one table — newest first, auto-refreshing — with columns Time, Callsign, Target, Mode, Duration, BER, and an RF/Net badge. The mmdvm parser reads MMDVMHost-style logs and covers all modes (DMR / YSF / P25 / NXDN / M17 / D-Star), local RF and network.

[[monitors]]
id = "activity"
label = "Last Heard"
type = "lastheard"
path = "{log_root}/MMDVM-{date}.log"   # {log_root}, {date}, {root}, {arch}
parser = "mmdvm"
limit = 25

Reads are size-bounded and the path comes only from the trusted manifest.

Status card

A compact card on the service page, built from config values (no extra files):

[[monitors]]
id = "modem"
label = "Modem / station"
type = "status"
  [[monitors.fields]]
  label = "RX frequency"
  config = "main"        # a [[config]] id on this service
  section = "Info"       # its UI section name
  key = "RXFrequency"
  suffix = " Hz"

password-typed fields are never shown on a status card.

Currently mmdvmhost carries both monitors — its log is the unified all-mode activity source. Per-gateway monitors are a future, incremental addition.

Host dashboard

The dashboard also reports host metrics — CPU, memory, load, uptime, disks, and SoC temperature — and the running state of each installed service.