Skip to content

FIFO external commands

If you already have scripts, cron jobs, or a dashboard writing to Nagios’s command file, jaque reads the exact same wire format — nothing to rewrite on the sending side.

-command-file /var/lib/jaque/rw/jaque.cmd

jaque creates the named pipe if it doesn’t exist. Empty (the default) disables passive ingestion via this route entirely.

[<unix_ts>] COMMAND_NAME;field1;field2;...

<unix_ts> is a Unix timestamp in brackets; the command name and fields follow, semicolon-separated. An unparseable line, or an unrecognized command name, is always an error — jaque never guesses at malformed input.

Passive results:

PROCESS_SERVICE_CHECK_RESULT;<host>;<service>;<code>;<output>
PROCESS_HOST_CHECK_RESULT;<host>;<code>;<output>

<output> splits on the first | into text and perfdata; <code> is the familiar 0-3 exit-code convention.

Acknowledgements:

ACKNOWLEDGE_SVC_PROBLEM;<host>;<service>;<sticky>;<notify>;<persistent>;<author>;<comment>
ACKNOWLEDGE_HOST_PROBLEM;<host>;<sticky>;<notify>;<persistent>;<author>;<comment>
REMOVE_SVC_ACKNOWLEDGEMENT;<host>;<service>
REMOVE_HOST_ACKNOWLEDGEMENT;<host>

<sticky> is 0/1 — any nonzero value (Nagios UIs sometimes write 2) is treated as sticky. <notify> and <persistent> are parsed for arity and discarded: nothing dispatches notifications from these calls, and persistent comment retention has no equivalent here.

Downtimes — fixed only:

SCHEDULE_SVC_DOWNTIME;<host>;<service>;<start>;<end>;<fixed>;<trigger_id>;<duration>;<author>;<comment>
SCHEDULE_HOST_DOWNTIME;<host>;<start>;<end>;<fixed>;<trigger_id>;<duration>;<author>;<comment>
DEL_HOST_DOWNTIME;<downtime_id>
DEL_SVC_DOWNTIME;<downtime_id>

<fixed> must be 1 and <trigger_id> must be 0 — flexible downtimes (which start on the next problem inside the window, not immediately) and triggered downtimes are rejected as parse errors, never silently coerced to fixed. <duration> is parsed and discarded (it only matters for flexible downtime). DEL_HOST_DOWNTIME and DEL_SVC_DOWNTIME carry only a downtime ID on the wire — both names parse to the same command; the two names exist purely for wire compatibility.

Group-scoped downtimes, translating a legacy group name into a label selector via the same normalization the importer used when it emitted the label:

SCHEDULE_HOSTGROUP_HOST_DOWNTIME;<hostgroup>;<start>;<end>;<fixed>;<trigger_id>;<duration>;<author>;<comment>
SCHEDULE_HOSTGROUP_SVC_DOWNTIME;<hostgroup>;<start>;<end>;<fixed>;<trigger_id>;<duration>;<author>;<comment>
SCHEDULE_SERVICEGROUP_HOST_DOWNTIME;<servicegroup>;<start>;<end>;<fixed>;<trigger_id>;<duration>;<author>;<comment>
SCHEDULE_SERVICEGROUP_SVC_DOWNTIME;<servicegroup>;<start>;<end>;<fixed>;<trigger_id>;<duration>;<author>;<comment>

Nagios has no group-scoped acknowledgement command, so there’s no equivalent translation for ACKNOWLEDGE_*.

Selector-scoped verbs — new, not legacy spellings:

SCHEDULE_DOWNTIME;<selector>;<scope>;<start>;<end>;<author>;<comment>
ACKNOWLEDGE_PROBLEM;<selector>;<scope>;<sticky>;<author>;<comment>
REMOVE_ACKNOWLEDGEMENT;<selector>;<scope>

<selector> is any label selector text; <scope> is host or service, anything else is a parse error. These carry only the fields the engine actually uses — no <notify>/<persistent>/<fixed>/<trigger_id>/<duration> baggage.

Everything the FIFO parses lands on the same command channel the ConnectRPC API feeds — see FIFO and API for how the two doors converge, and what happens to a command aimed at an object owned by another engine.