Topolo Docs Topolo Platform
Open workspace

Get Status probe health

Read the latest recorded probe result for each monitored host, with counts, latency and consecutive-failure health.

Outcome

Read the latest recorded probe result for each monitored host, with counts, latency and consecutive-failure health.

Before you start

  • This read exposes recorded probe health without identity or lifecycle records; verify the exact published service and schema.

Discover identifiers and the current contract

topolo whoami --json
topolo apps --json
topolo actions get app_topolo_status.status.get --detail --json

Parameters

This action accepts an empty JSON object. Do not add guessed organization or workspace selectors.

Prepare and execute

Write your schema-valid input to payload.json. Replace every synthetic fixture identifier with a discovered authorized ID. Validate first; mutation approval is required independently of the transport confirmation flag.

topolo actions validate app_topolo_status.status.get --data @payload.json --json
topolo actions call app_topolo_status.status.get --data @payload.json --json

For MCP, discover the exact action with topolo_get_action, validate with topolo_validate_action, and use topolo_read_action for the unchanged read.

Worked requests and responses

These are captured local responses with synthetic identifiers. They establish handler behavior under the limits below; they are not live execution receipts.

No recorded probes

HTTP 200

Input

{}

Response

{
  "generated_at": "2026-10-05T00:00:00.000Z",
  "total": 0,
  "up": 0,
  "down": 0,
  "services": []
}

One healthy recorded probe

HTTP 200

Input

{}

Response

{
  "generated_at": "2026-10-05T00:00:00.000Z",
  "total": 1,
  "up": 1,
  "down": 0,
  "services": [
    {
      "host": "status-probe.example.test",
      "name": "Fixture API",
      "group": "fixture",
      "status": "up",
      "health": "healthy",
      "http": 200,
      "duration_ms": 0,
      "last_checked": "2026-10-05T00:00:00.000Z",
      "consecutive_fails": 0
    }
  ]
}

Probe-only public response after private lifecycle writes

HTTP 200

Input

{}

Response

{
  "generated_at": "2026-10-05T00:00:00.000Z",
  "total": 1,
  "up": 1,
  "down": 0,
  "services": [
    {
      "host": "status-probe.example.test",
      "name": "Fixture API",
      "group": "fixture",
      "status": "up",
      "health": "healthy",
      "http": 200,
      "duration_ms": 0,
      "last_checked": "2026-10-05T00:00:00.000Z",
      "consecutive_fails": 0
    }
  ]
}

Interpret the response

  • generated_at is serialization time; services[].last_checked is stored probe time. A newer generated_at alone does not prove a fresh poll.
  • http is the last recorded HTTP status, duration_ms may be null and health is based on consecutive_fails. Empty services is no recorded data.
  • The public response is cached for 15 seconds and contains no incident or maintenance rows.

Effects

  • Reads stored probe results without triggering a new check. The response may be cached for 15 seconds.
  • The response contains no incident or maintenance records. An empty services array means no recorded probes, not proof that every application is healthy.

Verify

  • Compare generated_at, services[].last_checked and services[].host to the intended monitored surface; inspect total, up and down together.
  • Health is classified from consecutive failures: healthy at zero, degraded at one or two, unhealthy from three through eleven, dead at twelve or more. HTTP status and health are separate fields.

Recover

Retry the unchanged read after a dependency outage. No rollback is needed; do not start polling merely to turn an empty or stale result into a passing check.

Refused and interrupted requests

Direct identity failures can return HTTP 401 with an English error string; catalog/runtime refusals can use their own structured error envelope. Preserve status and request evidence rather than inventing a shared target error code. Stop on HTTP 403. For HTTP 500 or a lost response after a write, read back retained state before retrying. A stored mutation and its notification attempt are not one atomic transaction.

HTTP 500

Input

{}

Response

Internal Server Error

Retry the unchanged read after a dependency outage. No rollback is needed; do not start polling merely to turn an empty or stale result into a passing check.

Evidence and limits

Real local dependencies

  • Status fetch dispatcher, direct authorization branch, lifecycle/read handlers, database adapter SQL and migration-created SQLite tables/triggers
  • Public probe JSON and widget builder
  • Status polling workflow with a synthetic network response

Simulated or unproven dependencies

  • Authenticated identity, permissions, service-token verification and worker-runtime wrapper
  • Clock and remote probe HTTP response
  • Notification delivery remains unconfigured; durable pending outbox rows do not establish delivered notifications
  • SQLite D1 adapter and batch wrapper are local; Cloudflare persistence and live concurrency are not proven

The separate real worker-runtime tests prove allowed and denied read dispatch with synthetic identity validation, including refusal of forged action headers. Environment deployment, native publication and live read-back require separate ordered proof.