Skip to content

Command and query service

One port, three wire formats, two services with a clean read/write split — this is the API the dashboard itself uses, so nothing you can do through it is a second-class integration.

jaque speaks ConnectRPC: plain JSON over HTTP/1.1 (curl-friendly, no generated client needed), gRPC, and gRPC-Web, all on the same port as the dashboard and /metrics (-listen).

Terminal window
curl -s -X POST http://127.0.0.1:8080/jaque.v1.QueryService/ListStatus \
-H 'Content-Type: application/json' -d '{}'

Six RPCs, one per command variant: ProcessCheckResult, ProcessCheckResults (batch, all-or-nothing validation, in-order enqueue), AcknowledgeProblem, RemoveAcknowledgement, ScheduleDowntime, DeleteDowntime. AcknowledgeProblem, RemoveAcknowledgement and ScheduleDowntime all take a Target, which is either one object (host/service) or every object a label selector matches — the same mechanism the dashboard’s bulk actions use.

A success response means enqueued, not applied — the engine resolves commands asynchronously at its own pace.

-api-token (empty by default, meaning open) protects writes only:

Terminal window
curl -s -X POST http://127.0.0.1:8080/jaque.v1.CommandService/AcknowledgeProblem \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <token>' \
-d '{"target":{"object":{"host":"gw"}},"sticky":true,"author":"ops","comment":"known issue"}'

ListStatus (current state of one host, one service, or the whole fleet — optionally narrowed by a label selector), ListHistory (recent transitions for one object or the global feed), ListObjects (every configured object plus its labels), ListContacts, ListViews, ListSinks (the configured perfdata sinks — name, type, input and selector), and GetServerInfo (the running binary’s version — the release-stamped vX.Y.Z, or "dev" for anything else). Every read comes from the projection, never from the engine or the event log directly — reads never block on write throughput. Unlike CommandService, reads never require -api-token: the bearer token protects writes only.

Every action in Dashboard — acknowledge, downtime, the status table, history — is a call to one of these RPCs. There’s no separate, richer internal API the UI gets and scripts don’t.