WOLFTONE

minimal observability

WolfTone status

Live checks for the API, demo, and Guardian webhook plus the current-process failure counters needed to triage incidents without standing up Grafana.

Last checked 2026-04-18T13:22:20.739Z

API

degraded

Fly health plus current-process request/error counters from the public API service.

Uptime
n/a
Requests
n/a
Failure rate
n/a
Unhandled exceptions
n/a
Components
Database: n/a
Active narratives: n/a
Shadow narratives: n/a
Request failures
4xx: n/a
5xx: n/a
Total failed requests: n/a

Demo

degraded

Streamlit container health via the built-in /_stcore/health probe used by Fly.io.

Probe
Down
Body
n/a
Detection window
5 minutes

Guardian webhook

degraded

Webhook service health, request error rate, and baseline job outcomes from the in-memory metrics endpoint.

Uptime
n/a
Error rate
n/a
Baseline p50
n/a ms
Baseline p95
n/a ms
Baseline runs
Successes: n/a
Failures: n/a
Total: n/a
Request failures
4xx: n/a
5xx: n/a
Exceptions: n/a

Weekly error-rate query

Historical API error rate still comes from Fly log queries because the dashboard only shows current process lifetime.

API this week
fly logs -a wolftone-api -n 10000 \
  | grep '"surface": "rest"' \
  | jq -s '
      def week_ago: (now - 7 * 24 * 60 * 60);
      map(select((.timestamp | fromdateiso8601) >= week_ago)) as $rows
      | {
          total: ($rows | length),
          failed: ($rows | map(select(.status >= 400)) | length),
          error_rate: (
            if ($rows | length) == 0 then 0
            else (($rows | map(select(.status >= 400)) | length) / ($rows | length))
            end
          )
        }'
Webhook this week
fly logs -a wolftone-guardian -n 10000 \
  | jq -R 'fromjson? | select(.)' \
  | jq -s '
      def week_ago: (now - 7 * 24 * 60 * 60);
      map(select(.timestamp? and (.timestamp | fromdateiso8601) >= week_ago)) as $rows
      | {
          baseline_failures: ($rows | map(select(.status == "error")) | length),
          comment_failures: ($rows | map(select(.status == "comment_failed")) | length)
        }'