{
  "timestamp": 1780751907,
  "stale_after_sec": 120,
  "wifi": {
    "device": "wlan0",
    "connected": true,
    "ssid": "ssid#9dc16394",
    "signal": 81,
    "priority": 100,
    "since_sec": 35590
  },
  "airspy_gain": "16",
  "services": {
    "adsb-dist-1m-health-latest.service": "inactive",
    "adsb-feed-guard.service": "inactive",
    "adsb-health-log.service": "inactive",
    "adsb-notify@adsb-summary.service.service": "inactive",
    "adsb-summary.service": "inactive",
    "adsb_dist_logger.service": "inactive",
    "adsb_dist_logger_notify@adsb_dist_logger.service.service": "inactive",
    "adsb_log_watchdog.service": "inactive",
    "adsb_perf_logger.service": "inactive",
    "adsb_stats_extender.service": "inactive",
    "adsbexchange-feed.service": "active",
    "adsbexchange-mlat.service": "active",
    "adsbexchange-stats.service": "active",
    "adsbfi-feed.service": "active",
    "adsbfi-mlat.service": "active",
    "airspy_adsb.service": "active",
    "airspy_adsb_file_metrics_logger.service": "inactive",
    "airspy_gain_guard.service": "inactive",
    "check_readsb_alive.service": "inactive",
    "cloudflared-adsb.service": "active",
    "collect-status.service": "activating",
    "dist-pos-health-logger.service": "inactive",
    "readsb.service": "active",
    "send_stats_daily.service": "inactive",
    "send_stats_hourly.service": "inactive",
    "yukimurata-public-push.service": "inactive",
    "adsb-dist-1m-health-latest.timer": "active",
    "adsb-feed-guard.timer": "active",
    "adsb-gsheets-uploader.timer": "active",
    "adsb-health-log.timer": "active",
    "adsb-summary.timer": "active",
    "adsb_dist_logger.timer": "active",
    "adsb_log_watchdog.timer": "active",
    "adsb_perf_logger.timer": "active",
    "adsb_stats_extender.timer": "active",
    "airspy_adsb_file_metrics_logger.timer": "active",
    "airspy_gain_guard.timer": "active",
    "check_readsb_alive.timer": "active",
    "collect-status.timer": "active",
    "dist-pos-health-logger.timer": "active",
    "send_stats_daily.timer": "active",
    "send_stats_hourly.timer": "active",
    "yukimurata-public-push.timer": "active"
  },
  "services_by_category": [
    {
      "category": "ubuntu-stream",
      "services": [
        {
          "id": "ubuntu::adsb-streamnew-memory-status.service",
          "label": "adsb-streamnew-memory-status.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: ADS-B Stream-New memory guardrail snapshot",
          "age_sec": 0,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb-streamnew-memory-status.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb-streamnew-memory-status.timer",
          "label": "adsb-streamnew-memory-status.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run ADS-B Stream-New memory guardrail snapshot every minute",
          "age_sec": 0,
          "hint": "ssh <ubuntu-host> 'systemctl status adsb-streamnew-memory-status.timer --no-pager'"
        },
        {
          "id": "ubuntu::adsb-streamnew-network-observer.service",
          "label": "adsb-streamnew-network-observer.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: ADS-B Stream-New network observer",
          "age_sec": 603185,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb-streamnew-network-observer.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb-streamnew-prometheus-exporter.service",
          "label": "adsb-streamnew-prometheus-exporter.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: ADS-B Stream v3 arena-monitor Prometheus exporter",
          "age_sec": 603185,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb-streamnew-prometheus-exporter.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb-streamnew-resource-memory.service",
          "label": "adsb-streamnew-resource-memory.service",
          "state": "activating",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: start ADS-B Stream-New resource memory diagnostic snapshot",
          "age_sec": 1,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb-streamnew-resource-memory.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb-streamnew-resource-memory.timer",
          "label": "adsb-streamnew-resource-memory.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run ADS-B Stream-New resource memory diagnostic every minute",
          "age_sec": 1,
          "hint": "ssh <ubuntu-host> 'systemctl status adsb-streamnew-resource-memory.timer --no-pager'"
        },
        {
          "id": "ubuntu::adsb-streamnew-stream1090-report.service",
          "label": "adsb-streamnew-stream1090-report.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: ADS-B Stream-New local stream1090 report-only baseline sample",
          "age_sec": 571,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb-streamnew-stream1090-report.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb-streamnew-stream1090-report.timer",
          "label": "adsb-streamnew-stream1090-report.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run ADS-B Stream-New local stream1090 report-only baseline every 15 minutes",
          "age_sec": 571,
          "hint": "ssh <ubuntu-host> 'systemctl status adsb-streamnew-stream1090-report.timer --no-pager'"
        },
        {
          "id": "ubuntu::adsb-streamnew-upstream-report.service",
          "label": "adsb-streamnew-upstream-report.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: ADS-B Stream-New upstream readsb/tar1090/stream1090 report-only baseline sample",
          "age_sec": 379,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb-streamnew-upstream-report.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb-streamnew-upstream-report.timer",
          "label": "adsb-streamnew-upstream-report.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run ADS-B Stream-New upstream report-only baseline every 15 minutes",
          "age_sec": 379,
          "hint": "ssh <ubuntu-host> 'systemctl status adsb-streamnew-upstream-report.timer --no-pager'"
        },
        {
          "id": "ubuntu::adsb-streamnew-youtube-api-cost-open-day-report.service",
          "label": "adsb-streamnew-youtube-api-cost-open-day-report.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: ADS-B Stream-New YouTube API cost open-day burn-rate report",
          "age_sec": 44,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb-streamnew-youtube-api-cost-open-day-report.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb-streamnew-youtube-api-cost-open-day-report.timer",
          "label": "adsb-streamnew-youtube-api-cost-open-day-report.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run Stream-New YouTube API cost open-day report every 10 minutes",
          "age_sec": 44,
          "hint": "ssh <ubuntu-host> 'systemctl status adsb-streamnew-youtube-api-cost-open-day-report.timer --no-pager'"
        },
        {
          "id": "ubuntu::adsb-streamnew-youtube-api-cost-report.service",
          "label": "adsb-streamnew-youtube-api-cost-report.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: ADS-B Stream-New YouTube API cost daily report",
          "age_sec": 856,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb-streamnew-youtube-api-cost-report.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb-streamnew-youtube-api-cost-report.timer",
          "label": "adsb-streamnew-youtube-api-cost-report.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run Stream-New YouTube API cost report every hour",
          "age_sec": 856,
          "hint": "ssh <ubuntu-host> 'systemctl status adsb-streamnew-youtube-api-cost-report.timer --no-pager'"
        },
        {
          "id": "ubuntu::adsb-streamnew-youtube-stream.service",
          "label": "adsb-streamnew-youtube-stream.service",
          "state": "inactive",
          "display_state": null,
          "effective_state": "inactive",
          "severity": "warn",
          "meta": "ubuntu: ADS-B Stream-New YouTube Live Stream Engine",
          "age_sec": null,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb-streamnew-youtube-stream.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::stream-v3-arena-monitor.service",
          "label": "stream-v3-arena-monitor.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: stream_v3 arena monitoring control loop",
          "age_sec": 603185,
          "hint": "ssh <ubuntu-host> 'journalctl -u stream-v3-arena-monitor.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::stream-v3-persistent-anchor-observer.service",
          "label": "stream-v3-persistent-anchor-observer.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: stream_v3 persistent TCP anchor observer",
          "age_sec": 30815,
          "hint": "ssh <ubuntu-host> 'journalctl -u stream-v3-persistent-anchor-observer.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::stream-v3-remote-recovery.service",
          "label": "stream-v3-remote-recovery.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: stream_v3 remote k3s recovery check",
          "age_sec": 0,
          "hint": "ssh <ubuntu-host> 'journalctl -u stream-v3-remote-recovery.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::stream-v3-remote-recovery.timer",
          "label": "stream-v3-remote-recovery.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run stream_v3 remote k3s recovery check every minute",
          "age_sec": 0,
          "hint": "ssh <ubuntu-host> 'systemctl status stream-v3-remote-recovery.timer --no-pager'"
        },
        {
          "id": "ubuntu::stream-v3-wan-address-observer.service",
          "label": "stream-v3-wan-address-observer.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: stream_v3 host WAN address observer",
          "age_sec": 30,
          "hint": "ssh <ubuntu-host> 'journalctl -u stream-v3-wan-address-observer.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::stream-v3-wan-address-observer.timer",
          "label": "stream-v3-wan-address-observer.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run stream_v3 host WAN address observer every minute",
          "age_sec": 30,
          "hint": "ssh <ubuntu-host> 'systemctl status stream-v3-wan-address-observer.timer --no-pager'"
        },
        {
          "id": "ubuntu::tar1090-stream1090.service",
          "label": "tar1090-stream1090.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: tar1090-stream1090 - compress dump1090 json data",
          "age_sec": 603184,
          "hint": "ssh <ubuntu-host> 'journalctl -u tar1090-stream1090.service -n 50 --no-pager'"
        }
      ],
      "summary": {
        "total": 22,
        "ok": 21,
        "warn": 1,
        "bad": 0,
        "failed": 0,
        "attention": 1,
        "severity": "warn"
      }
    },
    {
      "category": "ubuntu-notify",
      "services": [
        {
          "id": "ubuntu::amazon-notify-pubsub.service",
          "label": "amazon-notify-pubsub.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: Amazon Notify (Pub/Sub StreamingPull realtime)",
          "age_sec": 603185,
          "hint": "ssh <ubuntu-host> 'journalctl -u amazon-notify-pubsub.service -n 50 --no-pager'"
        }
      ],
      "summary": {
        "total": 1,
        "ok": 1,
        "warn": 0,
        "bad": 0,
        "failed": 0,
        "attention": 0,
        "severity": "ok"
      }
    },
    {
      "category": "ubuntu",
      "services": [
        {
          "id": "ubuntu::adsb-dist-1m-health-latest.service",
          "label": "adsb-dist-1m-health-latest.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: Emit dist_1m_health_latest.json from summary.json",
          "age_sec": 0,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb-dist-1m-health-latest.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb-dist-1m-health-latest.timer",
          "label": "adsb-dist-1m-health-latest.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run dist_1m_health_latest emitter every minute",
          "age_sec": 0,
          "hint": "ssh <ubuntu-host> 'systemctl status adsb-dist-1m-health-latest.timer --no-pager'"
        },
        {
          "id": "ubuntu::adsb-summary.service",
          "label": "adsb-summary.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: ADS-B summary.json generator",
          "age_sec": 0,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb-summary.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb-summary.timer",
          "label": "adsb-summary.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run ADS-B summary generator every minute",
          "age_sec": 0,
          "hint": "ssh <ubuntu-host> 'systemctl status adsb-summary.timer --no-pager'"
        },
        {
          "id": "ubuntu::adsb_dist_logger.service",
          "label": "adsb_dist_logger.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: ADS-B distance distribution logger (readsb aircraft.json -> JSONL)",
          "age_sec": 18,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb_dist_logger.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb_dist_logger.timer",
          "label": "adsb_dist_logger.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run ADS-B distance logger every 1 minute",
          "age_sec": 18,
          "hint": "ssh <ubuntu-host> 'systemctl status adsb_dist_logger.timer --no-pager'"
        },
        {
          "id": "ubuntu::adsb_dist_logger_notify@adsb_dist_logger.service.service",
          "label": "adsb_dist_logger_notify@adsb_dist_logger.service.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: Discord notify on failure: adsb_dist_logger.service",
          "age_sec": 603177,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb_dist_logger_notify@adsb_dist_logger.service.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb_log_watchdog.service",
          "label": "adsb_log_watchdog.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: ADS-B log watchdog (missing/stale/status errors -> JST JSONL)",
          "age_sec": 0,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb_log_watchdog.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb_log_watchdog.timer",
          "label": "adsb_log_watchdog.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run ADS-B log watchdog every minute",
          "age_sec": 0,
          "hint": "ssh <ubuntu-host> 'systemctl status adsb_log_watchdog.timer --no-pager'"
        },
        {
          "id": "ubuntu::adsb_perf_logger.service",
          "label": "adsb_perf_logger.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: ADS-B performance logger (tar1090 stats.json -> JSONL)",
          "age_sec": 8,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb_perf_logger.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb_perf_logger.timer",
          "label": "adsb_perf_logger.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run ADS-B performance logger every 1 minute",
          "age_sec": 8,
          "hint": "ssh <ubuntu-host> 'systemctl status adsb_perf_logger.timer --no-pager'"
        },
        {
          "id": "ubuntu::adsb_stats_extender.service",
          "label": "adsb_stats_extender.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: ADS-B stats extender (aircraft.json -> dist_signal_stats_1m.jsonl)",
          "age_sec": 24,
          "hint": "ssh <ubuntu-host> 'journalctl -u adsb_stats_extender.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::adsb_stats_extender.timer",
          "label": "adsb_stats_extender.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run ADS-B stats extender every 1 minute",
          "age_sec": 24,
          "hint": "ssh <ubuntu-host> 'systemctl status adsb_stats_extender.timer --no-pager'"
        },
        {
          "id": "ubuntu::airspy_adsb.service",
          "label": "airspy_adsb.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: Airspy ADS-B receiver",
          "age_sec": 58703,
          "hint": "ssh <ubuntu-host> 'journalctl -u airspy_adsb.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::airspy_adsb_file_metrics_logger.service",
          "label": "airspy_adsb_file_metrics_logger.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: Log airspy_adsb metrics from stats.json",
          "age_sec": 24,
          "hint": "ssh <ubuntu-host> 'journalctl -u airspy_adsb_file_metrics_logger.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::airspy_adsb_file_metrics_logger.timer",
          "label": "airspy_adsb_file_metrics_logger.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run airspy_adsb metrics logger every minute",
          "age_sec": 24,
          "hint": "ssh <ubuntu-host> 'systemctl status airspy_adsb_file_metrics_logger.timer --no-pager'"
        },
        {
          "id": "ubuntu::airspy_gain_guard.service",
          "label": "airspy_gain_guard.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: Airspy gain guard (day fixed / night auto)",
          "age_sec": 206,
          "hint": "ssh <ubuntu-host> 'journalctl -u airspy_gain_guard.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::airspy_gain_guard.timer",
          "label": "airspy_gain_guard.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run airspy gain guard periodically",
          "age_sec": 206,
          "hint": "ssh <ubuntu-host> 'systemctl status airspy_gain_guard.timer --no-pager'"
        },
        {
          "id": "ubuntu::check_adsb_alive.service",
          "label": "check_adsb_alive.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: Check if ADS-B receiver service is alive",
          "age_sec": 24,
          "hint": "ssh <ubuntu-host> 'journalctl -u check_adsb_alive.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::check_adsb_alive.timer",
          "label": "check_adsb_alive.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run ADS-B monitor every 5 minutes",
          "age_sec": 24,
          "hint": "ssh <ubuntu-host> 'systemctl status check_adsb_alive.timer --no-pager'"
        },
        {
          "id": "ubuntu::check_graphs1090_alive.service",
          "label": "check_graphs1090_alive.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: Check graphs1090 health and restart if stale",
          "age_sec": 204,
          "hint": "ssh <ubuntu-host> 'journalctl -u check_graphs1090_alive.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::check_graphs1090_alive.timer",
          "label": "check_graphs1090_alive.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run graphs1090 health check every 5 minutes",
          "age_sec": 204,
          "hint": "ssh <ubuntu-host> 'systemctl status check_graphs1090_alive.timer --no-pager'"
        },
        {
          "id": "ubuntu::check_readsb_alive.service",
          "label": "check_readsb_alive.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "ubuntu: Check readsb status and restart if failed",
          "age_sec": 204,
          "hint": "ssh <ubuntu-host> 'journalctl -u check_readsb_alive.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::check_readsb_alive.timer",
          "label": "check_readsb_alive.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "ubuntu: Run readsb check every 5 minutes",
          "age_sec": 204,
          "hint": "ssh <ubuntu-host> 'systemctl status check_readsb_alive.timer --no-pager'"
        },
        {
          "id": "ubuntu::cloudflared-adsb.service",
          "label": "cloudflared-adsb.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: Cloudflare Tunnel (adsb-nginx)",
          "age_sec": 603185,
          "hint": "ssh <ubuntu-host> 'journalctl -u cloudflared-adsb.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::fr24feed.service",
          "label": "fr24feed.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: Flightradar24 Decoder & Feeder",
          "age_sec": 603184,
          "hint": "ssh <ubuntu-host> 'journalctl -u fr24feed.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::graphs1090.service",
          "label": "graphs1090.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: graphs1090 graph generation",
          "age_sec": 603184,
          "hint": "ssh <ubuntu-host> 'journalctl -u graphs1090.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::pfclient.service",
          "label": "pfclient.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: LSB: planefinder.net ads-b decoder",
          "age_sec": 603185,
          "hint": "ssh <ubuntu-host> 'journalctl -u pfclient.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::plao-collect.service",
          "label": "plao-collect.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: PLAO collector (readsb aircraft.json -> POS JSONL, daily rotate)",
          "age_sec": 603185,
          "hint": "ssh <ubuntu-host> 'journalctl -u plao-collect.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::readsb.service",
          "label": "readsb.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: readsb ADS-B receiver",
          "age_sec": 603184,
          "hint": "ssh <ubuntu-host> 'journalctl -u readsb.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::rtl_biast-readsb.service",
          "label": "rtl_biast-readsb.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: Enable bias tee for RTL-SDR Blog V4 (serial 00000120) before readsb",
          "age_sec": 603184,
          "hint": "ssh <ubuntu-host> 'journalctl -u rtl_biast-readsb.service -n 50 --no-pager'"
        },
        {
          "id": "ubuntu::tar1090.service",
          "label": "tar1090.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "ubuntu: tar1090 - compress dump1090 json data",
          "age_sec": 603184,
          "hint": "ssh <ubuntu-host> 'journalctl -u tar1090.service -n 50 --no-pager'"
        }
      ],
      "summary": {
        "total": 32,
        "ok": 32,
        "warn": 0,
        "bad": 0,
        "failed": 0,
        "attention": 0,
        "severity": "ok"
      }
    },
    {
      "category": "ADS-B",
      "services": [
        {
          "id": "adsb-dist-1m-health-latest.timer",
          "label": "adsb-dist-1m-health-latest.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: adsb-dist-1m-health-latest.timer",
          "age_sec": 31,
          "hint": "systemctl status adsb-dist-1m-health-latest.timer --no-pager"
        },
        {
          "id": "adsb-feed-guard.service",
          "label": "adsb-feed-guard.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: adsb_feed_guard.sh",
          "age_sec": 20,
          "hint": "journalctl -u adsb-feed-guard.service -n 50 --no-pager"
        },
        {
          "id": "adsb-feed-guard.timer",
          "label": "adsb-feed-guard.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: adsb-feed-guard.timer",
          "age_sec": 20,
          "hint": "systemctl status adsb-feed-guard.timer --no-pager"
        },
        {
          "id": "adsb-gsheets-uploader.timer",
          "label": "adsb-gsheets-uploader.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: adsb-gsheets-uploader.timer",
          "age_sec": 297,
          "hint": "systemctl status adsb-gsheets-uploader.timer --no-pager"
        },
        {
          "id": "adsb-health-log.service",
          "label": "adsb-health-log.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: adsb_health_log.py",
          "age_sec": 285,
          "hint": "journalctl -u adsb-health-log.service -n 50 --no-pager"
        },
        {
          "id": "adsb-health-log.timer",
          "label": "adsb-health-log.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: adsb-health-log.timer",
          "age_sec": 285,
          "hint": "systemctl status adsb-health-log.timer --no-pager"
        },
        {
          "id": "adsb-notify@adsb-summary.service.service",
          "label": "adsb-notify@adsb-summary.service.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: discord_notify.sh",
          "age_sec": 31517,
          "hint": "journalctl -u adsb-notify@adsb-summary.service.service -n 50 --no-pager"
        },
        {
          "id": "adsb-summary.timer",
          "label": "adsb-summary.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: adsb-summary.timer",
          "age_sec": 30,
          "hint": "systemctl status adsb-summary.timer --no-pager"
        },
        {
          "id": "adsb_dist_logger.timer",
          "label": "adsb_dist_logger.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: adsb_dist_logger.timer",
          "age_sec": 17,
          "hint": "systemctl status adsb_dist_logger.timer --no-pager"
        },
        {
          "id": "adsb_log_watchdog.timer",
          "label": "adsb_log_watchdog.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: adsb_log_watchdog.timer",
          "age_sec": 30,
          "hint": "systemctl status adsb_log_watchdog.timer --no-pager"
        },
        {
          "id": "adsb_perf_logger.timer",
          "label": "adsb_perf_logger.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: adsb_perf_logger.timer",
          "age_sec": 7,
          "hint": "systemctl status adsb_perf_logger.timer --no-pager"
        },
        {
          "id": "adsb_stats_extender.timer",
          "label": "adsb_stats_extender.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: adsb_stats_extender.timer",
          "age_sec": 21,
          "hint": "systemctl status adsb_stats_extender.timer --no-pager"
        },
        {
          "id": "adsbexchange-feed.service",
          "label": "adsbexchange-feed.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "file: adsbexchange-feed.sh",
          "age_sec": 35592,
          "hint": "journalctl -u adsbexchange-feed.service -n 50 --no-pager"
        },
        {
          "id": "adsbexchange-mlat.service",
          "label": "adsbexchange-mlat.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "file: adsbexchange-mlat.sh",
          "age_sec": 35592,
          "hint": "journalctl -u adsbexchange-mlat.service -n 50 --no-pager"
        },
        {
          "id": "adsbexchange-stats.service",
          "label": "adsbexchange-stats.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "file: json-status",
          "age_sec": 35592,
          "hint": "journalctl -u adsbexchange-stats.service -n 50 --no-pager"
        },
        {
          "id": "adsbfi-feed.service",
          "label": "adsbfi-feed.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "file: adsbfi-feed.sh",
          "age_sec": 35592,
          "hint": "journalctl -u adsbfi-feed.service -n 50 --no-pager"
        },
        {
          "id": "adsbfi-mlat.service",
          "label": "adsbfi-mlat.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "file: adsbfi-mlat.sh",
          "age_sec": 35592,
          "hint": "journalctl -u adsbfi-mlat.service -n 50 --no-pager"
        },
        {
          "id": "airspy_adsb.service",
          "label": "airspy_adsb.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "file: taskset",
          "age_sec": 35592,
          "hint": "journalctl -u airspy_adsb.service -n 50 --no-pager"
        },
        {
          "id": "airspy_adsb_file_metrics_logger.timer",
          "label": "airspy_adsb_file_metrics_logger.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: airspy_adsb_file_metrics_logger.timer",
          "age_sec": 24,
          "hint": "systemctl status airspy_adsb_file_metrics_logger.timer --no-pager"
        },
        {
          "id": "check_readsb_alive.service",
          "label": "check_readsb_alive.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: check_readsb_alive.py",
          "age_sec": 115,
          "hint": "journalctl -u check_readsb_alive.service -n 50 --no-pager"
        },
        {
          "id": "check_readsb_alive.timer",
          "label": "check_readsb_alive.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: check_readsb_alive.timer",
          "age_sec": 115,
          "hint": "systemctl status check_readsb_alive.timer --no-pager"
        },
        {
          "id": "cloudflared-adsb.service",
          "label": "cloudflared-adsb.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "file: cloudflared",
          "age_sec": 35585,
          "hint": "journalctl -u cloudflared-adsb.service -n 50 --no-pager"
        },
        {
          "id": "readsb.service",
          "label": "readsb.service",
          "state": "active",
          "display_state": null,
          "effective_state": "active",
          "severity": "ok",
          "meta": "file: readsb",
          "age_sec": 35582,
          "hint": "journalctl -u readsb.service -n 50 --no-pager"
        }
      ],
      "summary": {
        "total": 23,
        "ok": 23,
        "warn": 0,
        "bad": 0,
        "failed": 0,
        "attention": 0,
        "severity": "ok"
      }
    },
    {
      "category": "adsb_monitor",
      "services": [
        {
          "id": "adsb-dist-1m-health-latest.service",
          "label": "adsb-dist-1m-health-latest.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: adsb_emit_dist_1m_health_latest.py",
          "age_sec": 31,
          "hint": "journalctl -u adsb-dist-1m-health-latest.service -n 50 --no-pager"
        },
        {
          "id": "adsb-summary.service",
          "label": "adsb-summary.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: flock",
          "age_sec": 30,
          "hint": "journalctl -u adsb-summary.service -n 50 --no-pager"
        },
        {
          "id": "adsb_dist_logger.service",
          "label": "adsb_dist_logger.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: adsb_dist_logger.py",
          "age_sec": 17,
          "hint": "journalctl -u adsb_dist_logger.service -n 50 --no-pager"
        },
        {
          "id": "adsb_dist_logger_notify@adsb_dist_logger.service.service",
          "label": "adsb_dist_logger_notify@adsb_dist_logger.service.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: discord_notify_systemd_failure.py",
          "age_sec": 31517,
          "hint": "journalctl -u adsb_dist_logger_notify@adsb_dist_logger.service.service -n 50 --no-pager"
        },
        {
          "id": "adsb_log_watchdog.service",
          "label": "adsb_log_watchdog.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: adsb_log_watchdog.py",
          "age_sec": 30,
          "hint": "journalctl -u adsb_log_watchdog.service -n 50 --no-pager"
        },
        {
          "id": "adsb_perf_logger.service",
          "label": "adsb_perf_logger.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: adsb_performance_logger.py",
          "age_sec": 7,
          "hint": "journalctl -u adsb_perf_logger.service -n 50 --no-pager"
        },
        {
          "id": "adsb_stats_extender.service",
          "label": "adsb_stats_extender.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: adsb_stats_extender.py",
          "age_sec": 21,
          "hint": "journalctl -u adsb_stats_extender.service -n 50 --no-pager"
        },
        {
          "id": "airspy_adsb_file_metrics_logger.service",
          "label": "airspy_adsb_file_metrics_logger.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: airspy_adsb_file_metrics_logger.py",
          "age_sec": 24,
          "hint": "journalctl -u airspy_adsb_file_metrics_logger.service -n 50 --no-pager"
        },
        {
          "id": "dist-pos-health-logger.service",
          "label": "dist-pos-health-logger.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: dist_pos_health_logger.py",
          "age_sec": 31,
          "hint": "journalctl -u dist-pos-health-logger.service -n 50 --no-pager"
        },
        {
          "id": "dist-pos-health-logger.timer",
          "label": "dist-pos-health-logger.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: dist-pos-health-logger.timer",
          "age_sec": 31,
          "hint": "systemctl status dist-pos-health-logger.timer --no-pager"
        },
        {
          "id": "send_stats_daily.service",
          "label": "send_stats_daily.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: send_stats_daily.py",
          "age_sec": 31517,
          "hint": "journalctl -u send_stats_daily.service -n 50 --no-pager"
        },
        {
          "id": "send_stats_daily.timer",
          "label": "send_stats_daily.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: send_stats_daily.timer",
          "age_sec": 35592,
          "hint": "systemctl status send_stats_daily.timer --no-pager"
        },
        {
          "id": "send_stats_hourly.service",
          "label": "send_stats_hourly.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: send_stats_hourly.py",
          "age_sec": 1102,
          "hint": "journalctl -u send_stats_hourly.service -n 50 --no-pager"
        },
        {
          "id": "send_stats_hourly.timer",
          "label": "send_stats_hourly.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: send_stats_hourly.timer",
          "age_sec": 1102,
          "hint": "systemctl status send_stats_hourly.timer --no-pager"
        }
      ],
      "summary": {
        "total": 14,
        "ok": 14,
        "warn": 0,
        "bad": 0,
        "failed": 0,
        "attention": 0,
        "severity": "ok"
      }
    },
    {
      "category": "opt",
      "services": [
        {
          "id": "airspy_gain_guard.service",
          "label": "airspy_gain_guard.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: airspy_gain_guard.py",
          "age_sec": 204,
          "hint": "journalctl -u airspy_gain_guard.service -n 50 --no-pager"
        },
        {
          "id": "airspy_gain_guard.timer",
          "label": "airspy_gain_guard.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: airspy_gain_guard.timer",
          "age_sec": 204,
          "hint": "systemctl status airspy_gain_guard.timer --no-pager"
        },
        {
          "id": "collect-status.service",
          "label": "collect-status.service",
          "state": "activating",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: collect_status.py",
          "age_sec": 1,
          "hint": "journalctl -u collect-status.service -n 50 --no-pager"
        },
        {
          "id": "collect-status.timer",
          "label": "collect-status.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: collect-status.timer",
          "age_sec": 1,
          "hint": "systemctl status collect-status.timer --no-pager"
        },
        {
          "id": "yukimurata-public-push.service",
          "label": "yukimurata-public-push.service",
          "state": "inactive",
          "display_state": "armed",
          "effective_state": "armed",
          "severity": "ok",
          "meta": "file: push_to_gcs.sh",
          "age_sec": 11,
          "hint": "journalctl -u yukimurata-public-push.service -n 50 --no-pager"
        },
        {
          "id": "yukimurata-public-push.timer",
          "label": "yukimurata-public-push.timer",
          "state": "active",
          "display_state": "scheduled",
          "effective_state": "scheduled",
          "severity": "ok",
          "meta": "unit file: yukimurata-public-push.timer",
          "age_sec": 11,
          "hint": "systemctl status yukimurata-public-push.timer --no-pager"
        }
      ],
      "summary": {
        "total": 6,
        "ok": 6,
        "warn": 0,
        "bad": 0,
        "failed": 0,
        "attention": 0,
        "severity": "ok"
      }
    }
  ],
  "feed_ports": [
    {
      "id": "readsb_beast_in",
      "label": "readsb Beast Input",
      "host": "127.0.0.1",
      "port": 30004,
      "state": "listening",
      "effective_state": "listening",
      "severity": "ok"
    },
    {
      "id": "readsb_beast_out",
      "label": "readsb Beast Output",
      "host": "127.0.0.1",
      "port": 30005,
      "state": "listening",
      "effective_state": "listening",
      "severity": "ok"
    },
    {
      "id": "fr24_feed",
      "label": "FR24 Feed",
      "host": "127.0.0.1",
      "port": 8754,
      "state": "listening",
      "effective_state": "listening",
      "severity": "ok"
    }
  ],
  "summary": {
    "services": {
      "total": 98,
      "ok": 97,
      "warn": 1,
      "bad": 0,
      "failed": 0,
      "attention": 1,
      "severity": "warn"
    },
    "feeds": {
      "total": 3,
      "ok": 3,
      "warn": 0,
      "bad": 0,
      "failed": 0,
      "listening": 3,
      "severity": "ok"
    }
  },
  "checks": {
    "external_sites": {
      "ok": true,
      "total": 3,
      "failed": 0,
      "severity": "ok",
      "targets": [
        {
          "id": "status_page",
          "url": "https://adsb-open.addevlab.com/status/",
          "status": 200,
          "ok": true
        },
        {
          "id": "tar1090_page",
          "url": "https://adsb-open.addevlab.com/tar1090/",
          "status": 200,
          "ok": true
        },
        {
          "id": "graphs1090_page",
          "url": "https://adsb-open.addevlab.com/graphs1090/",
          "status": 200,
          "ok": true
        }
      ]
    },
    "ssh_remote": {
      "ok": true,
      "severity": "ok",
      "target": "yuki@192.168.0.60",
      "total": 3,
      "failed": 0,
      "targets": [
        {
          "id": "readsb_active",
          "ok": true,
          "expected": "active",
          "actual": "active"
        },
        {
          "id": "airspy_adsb_active",
          "ok": true,
          "expected": "active",
          "actual": "active"
        },
        {
          "id": "internet_connectivity",
          "ok": true,
          "expected": "ok",
          "actual": "ok"
        }
      ],
      "system": {
        "cpu_percent": 73.5,
        "memory_percent": 31.7,
        "memory_total_kib": 15684308,
        "memory_used_kib": 4966984,
        "disk_percent": 14.5,
        "disk_total_bytes": 982240026624,
        "disk_used_bytes": 142569254912,
        "disk_read_bps": 0,
        "disk_write_bps": 3042742,
        "net_iface": "enp2s0",
        "net_rx_bps": 88425,
        "net_tx_bps": 30842,
        "temperature_c": 56.0,
        "uptime_sec": 603203
      },
      "systemd_units": [
        {
          "id": "adsb-dist-1m-health-latest.service",
          "state": "inactive",
          "sub": "dead",
          "description": "Emit dist_1m_health_latest.json from summary.json",
          "age_sec": 0
        },
        {
          "id": "adsb-streamnew-memory-status.service",
          "state": "inactive",
          "sub": "dead",
          "description": "ADS-B Stream-New memory guardrail snapshot",
          "age_sec": 0
        },
        {
          "id": "adsb-streamnew-network-observer.service",
          "state": "active",
          "sub": "running",
          "description": "ADS-B Stream-New network observer",
          "age_sec": 603185
        },
        {
          "id": "adsb-streamnew-prometheus-exporter.service",
          "state": "active",
          "sub": "running",
          "description": "ADS-B Stream v3 arena-monitor Prometheus exporter",
          "age_sec": 603185
        },
        {
          "id": "adsb-streamnew-resource-memory.service",
          "state": "activating",
          "sub": "start",
          "description": "start ADS-B Stream-New resource memory diagnostic snapshot",
          "age_sec": 1
        },
        {
          "id": "adsb-streamnew-stream1090-report.service",
          "state": "inactive",
          "sub": "dead",
          "description": "ADS-B Stream-New local stream1090 report-only baseline sample",
          "age_sec": 571
        },
        {
          "id": "adsb-streamnew-upstream-report.service",
          "state": "inactive",
          "sub": "dead",
          "description": "ADS-B Stream-New upstream readsb/tar1090/stream1090 report-only baseline sample",
          "age_sec": 379
        },
        {
          "id": "adsb-streamnew-youtube-api-cost-open-day-report.service",
          "state": "inactive",
          "sub": "dead",
          "description": "ADS-B Stream-New YouTube API cost open-day burn-rate report",
          "age_sec": 44
        },
        {
          "id": "adsb-streamnew-youtube-api-cost-report.service",
          "state": "inactive",
          "sub": "dead",
          "description": "ADS-B Stream-New YouTube API cost daily report",
          "age_sec": 856
        },
        {
          "id": "adsb-streamnew-youtube-stream.service",
          "state": "inactive",
          "sub": "dead",
          "description": "ADS-B Stream-New YouTube Live Stream Engine"
        },
        {
          "id": "adsb-summary.service",
          "state": "inactive",
          "sub": "dead",
          "description": "ADS-B summary.json generator",
          "age_sec": 0
        },
        {
          "id": "adsb_dist_logger.service",
          "state": "inactive",
          "sub": "dead",
          "description": "ADS-B distance distribution logger (readsb aircraft.json -> JSONL)",
          "age_sec": 18
        },
        {
          "id": "adsb_dist_logger_notify@adsb_dist_logger.service.service",
          "state": "inactive",
          "sub": "dead",
          "description": "Discord notify on failure: adsb_dist_logger.service",
          "age_sec": 603177
        },
        {
          "id": "adsb_log_watchdog.service",
          "state": "inactive",
          "sub": "dead",
          "description": "ADS-B log watchdog (missing/stale/status errors -> JST JSONL)",
          "age_sec": 0
        },
        {
          "id": "adsb_perf_logger.service",
          "state": "inactive",
          "sub": "dead",
          "description": "ADS-B performance logger (tar1090 stats.json -> JSONL)",
          "age_sec": 8
        },
        {
          "id": "adsb_stats_extender.service",
          "state": "inactive",
          "sub": "dead",
          "description": "ADS-B stats extender (aircraft.json -> dist_signal_stats_1m.jsonl)",
          "age_sec": 24
        },
        {
          "id": "airspy_adsb.service",
          "state": "active",
          "sub": "running",
          "description": "Airspy ADS-B receiver",
          "age_sec": 58703
        },
        {
          "id": "airspy_adsb_file_metrics_logger.service",
          "state": "inactive",
          "sub": "dead",
          "description": "Log airspy_adsb metrics from stats.json",
          "age_sec": 24
        },
        {
          "id": "airspy_gain_guard.service",
          "state": "inactive",
          "sub": "dead",
          "description": "Airspy gain guard (day fixed / night auto)",
          "age_sec": 206
        },
        {
          "id": "amazon-notify-pubsub.service",
          "state": "active",
          "sub": "running",
          "description": "Amazon Notify (Pub/Sub StreamingPull realtime)",
          "age_sec": 603185
        },
        {
          "id": "check_adsb_alive.service",
          "state": "inactive",
          "sub": "dead",
          "description": "Check if ADS-B receiver service is alive",
          "age_sec": 24
        },
        {
          "id": "check_graphs1090_alive.service",
          "state": "inactive",
          "sub": "dead",
          "description": "Check graphs1090 health and restart if stale",
          "age_sec": 204
        },
        {
          "id": "check_readsb_alive.service",
          "state": "inactive",
          "sub": "dead",
          "description": "Check readsb status and restart if failed",
          "age_sec": 204
        },
        {
          "id": "cloudflared-adsb.service",
          "state": "active",
          "sub": "running",
          "description": "Cloudflare Tunnel (adsb-nginx)",
          "age_sec": 603185
        },
        {
          "id": "fr24feed.service",
          "state": "active",
          "sub": "running",
          "description": "Flightradar24 Decoder & Feeder",
          "age_sec": 603184
        },
        {
          "id": "graphs1090.service",
          "state": "active",
          "sub": "running",
          "description": "graphs1090 graph generation",
          "age_sec": 603184
        },
        {
          "id": "pfclient.service",
          "state": "active",
          "sub": "running",
          "description": "LSB: planefinder.net ads-b decoder",
          "age_sec": 603185
        },
        {
          "id": "plao-collect.service",
          "state": "active",
          "sub": "running",
          "description": "PLAO collector (readsb aircraft.json -> POS JSONL, daily rotate)",
          "age_sec": 603185
        },
        {
          "id": "readsb.service",
          "state": "active",
          "sub": "running",
          "description": "readsb ADS-B receiver",
          "age_sec": 603184
        },
        {
          "id": "rtl_biast-readsb.service",
          "state": "active",
          "sub": "exited",
          "description": "Enable bias tee for RTL-SDR Blog V4 (serial 00000120) before readsb",
          "age_sec": 603184
        },
        {
          "id": "stream-v3-arena-monitor.service",
          "state": "active",
          "sub": "running",
          "description": "stream_v3 arena monitoring control loop",
          "age_sec": 603185
        },
        {
          "id": "stream-v3-persistent-anchor-observer.service",
          "state": "active",
          "sub": "running",
          "description": "stream_v3 persistent TCP anchor observer",
          "age_sec": 30815
        },
        {
          "id": "stream-v3-remote-recovery.service",
          "state": "inactive",
          "sub": "dead",
          "description": "stream_v3 remote k3s recovery check",
          "age_sec": 0
        },
        {
          "id": "stream-v3-wan-address-observer.service",
          "state": "inactive",
          "sub": "dead",
          "description": "stream_v3 host WAN address observer",
          "age_sec": 30
        },
        {
          "id": "tar1090-stream1090.service",
          "state": "active",
          "sub": "running",
          "description": "tar1090-stream1090 - compress dump1090 json data",
          "age_sec": 603184
        },
        {
          "id": "tar1090.service",
          "state": "active",
          "sub": "running",
          "description": "tar1090 - compress dump1090 json data",
          "age_sec": 603184
        },
        {
          "id": "adsb-dist-1m-health-latest.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run dist_1m_health_latest emitter every minute",
          "age_sec": 0
        },
        {
          "id": "adsb-streamnew-memory-status.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run ADS-B Stream-New memory guardrail snapshot every minute",
          "age_sec": 0
        },
        {
          "id": "adsb-streamnew-resource-memory.timer",
          "state": "active",
          "sub": "running",
          "description": "Run ADS-B Stream-New resource memory diagnostic every minute",
          "age_sec": 1
        },
        {
          "id": "adsb-streamnew-stream1090-report.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run ADS-B Stream-New local stream1090 report-only baseline every 15 minutes",
          "age_sec": 571
        },
        {
          "id": "adsb-streamnew-upstream-report.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run ADS-B Stream-New upstream report-only baseline every 15 minutes",
          "age_sec": 379
        },
        {
          "id": "adsb-streamnew-youtube-api-cost-open-day-report.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run Stream-New YouTube API cost open-day report every 10 minutes",
          "age_sec": 44
        },
        {
          "id": "adsb-streamnew-youtube-api-cost-report.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run Stream-New YouTube API cost report every hour",
          "age_sec": 856
        },
        {
          "id": "adsb-summary.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run ADS-B summary generator every minute",
          "age_sec": 0
        },
        {
          "id": "adsb_dist_logger.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run ADS-B distance logger every 1 minute",
          "age_sec": 18
        },
        {
          "id": "adsb_log_watchdog.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run ADS-B log watchdog every minute",
          "age_sec": 0
        },
        {
          "id": "adsb_perf_logger.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run ADS-B performance logger every 1 minute",
          "age_sec": 8
        },
        {
          "id": "adsb_stats_extender.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run ADS-B stats extender every 1 minute",
          "age_sec": 24
        },
        {
          "id": "airspy_adsb_file_metrics_logger.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run airspy_adsb metrics logger every minute",
          "age_sec": 24
        },
        {
          "id": "airspy_gain_guard.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run airspy gain guard periodically",
          "age_sec": 206
        },
        {
          "id": "check_adsb_alive.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run ADS-B monitor every 5 minutes",
          "age_sec": 24
        },
        {
          "id": "check_graphs1090_alive.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run graphs1090 health check every 5 minutes",
          "age_sec": 204
        },
        {
          "id": "check_readsb_alive.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run readsb check every 5 minutes",
          "age_sec": 204
        },
        {
          "id": "stream-v3-remote-recovery.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run stream_v3 remote k3s recovery check every minute",
          "age_sec": 0
        },
        {
          "id": "stream-v3-wan-address-observer.timer",
          "state": "active",
          "sub": "waiting",
          "description": "Run stream_v3 host WAN address observer every minute",
          "age_sec": 30
        }
      ]
    },
    "network_incidents_recent": [
      {
        "first_ts": 1780744751,
        "last_ts": 1780744751,
        "probe_failures": [],
        "probe_actual": {},
        "external_failures": [
          "status_page"
        ],
        "external_status": {
          "status_page": 0
        },
        "count": 1
      },
      {
        "first_ts": 1780730282,
        "last_ts": 1780730282,
        "probe_failures": [],
        "probe_actual": {},
        "external_failures": [
          "status_page",
          "tar1090_page"
        ],
        "external_status": {
          "status_page": 0,
          "tar1090_page": 0
        },
        "count": 1
      },
      {
        "first_ts": 1780717295,
        "last_ts": 1780717295,
        "probe_failures": [],
        "probe_actual": {},
        "external_failures": [
          "graphs1090_page"
        ],
        "external_status": {
          "graphs1090_page": 0
        },
        "count": 1
      },
      {
        "first_ts": 1780710527,
        "last_ts": 1780710527,
        "probe_failures": [],
        "probe_actual": {},
        "external_failures": [
          "graphs1090_page"
        ],
        "external_status": {
          "graphs1090_page": 0
        },
        "count": 1
      },
      {
        "first_ts": 1780528158,
        "last_ts": 1780528158,
        "probe_failures": [
          "internet_connectivity"
        ],
        "probe_actual": {
          "internet_connectivity": "fail"
        },
        "external_failures": [],
        "external_status": {},
        "count": 1
      },
      {
        "first_ts": 1780441729,
        "last_ts": 1780441751,
        "probe_failures": [
          "internet_connectivity"
        ],
        "probe_actual": {
          "internet_connectivity": "fail"
        },
        "external_failures": [
          "graphs1090_page",
          "status_page",
          "tar1090_page"
        ],
        "external_status": {
          "status_page": 0,
          "tar1090_page": 0,
          "graphs1090_page": 0
        },
        "count": 2
      },
      {
        "first_ts": 1780409078,
        "last_ts": 1780409078,
        "probe_failures": [],
        "probe_actual": {},
        "external_failures": [
          "tar1090_page"
        ],
        "external_status": {
          "tar1090_page": 0
        },
        "count": 1
      },
      {
        "first_ts": 1780355341,
        "last_ts": 1780355341,
        "probe_failures": [],
        "probe_actual": {},
        "external_failures": [
          "graphs1090_page",
          "status_page",
          "tar1090_page"
        ],
        "external_status": {
          "status_page": 502,
          "tar1090_page": 502,
          "graphs1090_page": 502
        },
        "count": 1
      },
      {
        "first_ts": 1780355316,
        "last_ts": 1780355316,
        "probe_failures": [
          "internet_connectivity"
        ],
        "probe_actual": {
          "internet_connectivity": "fail"
        },
        "external_failures": [
          "graphs1090_page",
          "status_page",
          "tar1090_page"
        ],
        "external_status": {
          "status_page": 502,
          "tar1090_page": 502,
          "graphs1090_page": 502
        },
        "count": 1
      },
      {
        "first_ts": 1780350420,
        "last_ts": 1780350420,
        "probe_failures": [],
        "probe_actual": {},
        "external_failures": [
          "tar1090_page"
        ],
        "external_status": {
          "tar1090_page": 0
        },
        "count": 1
      }
    ],
    "ssh_remote_history": {
      "url": "ssh-remote-history.json",
      "window_sec": 86400
    }
  }
}