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.
One port, three protocols
Section titled “One port, three protocols”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).
curl -s -X POST http://127.0.0.1:8080/jaque.v1.QueryService/ListStatus \ -H 'Content-Type: application/json' -d '{}'CommandService — writes
Section titled “CommandService — writes”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:
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"}'QueryService — reads, no token required
Section titled “QueryService — reads, no token required”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.
This is the dashboard’s own API
Section titled “This is the dashboard’s own API”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.