If scripts, cron jobs, or a dashboard already write to Nagios's command file, jaque reads the exact same wire format, so there is nothing to rewrite on the sending side. The cost is strictness: a line that does not parse, or names a verb jaque does not recognize, is always an error. jaque never guesses at malformed input the way a more permissive reader might.
1. Enabling it
-command-file /var/lib/jaque/rw/jaque.cmd
jaque creates the named pipe if it does not already exist. Empty, the default, disables passive ingestion via this route entirely.
2. The line format
[<unix_ts>] COMMAND_NAME;field1;field2;...
<unix_ts> is a Unix timestamp in brackets; the command name and fields
follow, semicolon-separated.
3. The verbs, exactly
3.1 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.
3.2 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> set to 1 sends an ACKNOWLEDGEMENT
notification to the object's current escalation level. <persistent> is
parsed for arity and discarded: persistent comment retention has no
equivalent here.
3.3 Downtimes
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>
<start> must be before <end>; a window that is empty or runs
backwards is a parse error. <fixed> must be 0 or 1, anything else is
a parse error; <trigger_id> is 0 or a downtime ID. The combination of
the two decides the kind:
<fixed>=1,<trigger_id>=0: a fixed downtime.<duration>is parsed and discarded.<fixed>=0,<trigger_id>=0: a flexible downtime.<duration>is read as a positive number of seconds.<fixed>=1, a nonzero<trigger_id>: a triggered downtime, with<trigger_id>as the downtime it triggers on.<duration>is parsed for arity and discarded.<fixed>=0with a nonzero<trigger_id>is a parse error: a downtime cannot be both flexible and triggered.
See Downtimes for what each kind actually
does once scheduled. DEL_HOST_DOWNTIME and DEL_SVC_DOWNTIME carry
only a downtime ID on the wire: both names parse to the same command,
and the two names exist purely for wire compatibility.
3.4 Group-scoped downtimes
These translate 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 is no
equivalent translation for ACKNOWLEDGE_*.
3.5 Selector-scoped verbs
These verbs are new; Nagios never had them.
SCHEDULE_DOWNTIME;<selector>;<scope>;<start>;<end>;<author>;<comment>
ACKNOWLEDGE_PROBLEM;<selector>;<scope>;<sticky>;<notify>;<author>;<comment>
REMOVE_ACKNOWLEDGEMENT;<selector>;<scope>
SCHEDULE_CHECK;<selector>;<scope>
<selector> is any label selector text;
<scope> is host or service, and anything else is a parse error. These
carry only the fields the engine actually uses: no
<persistent>/<fixed>/<trigger_id>/<duration> baggage.
SCHEDULE_DOWNTIME by selector schedules a fixed downtime only; a
flexible or triggered downtime by selector is not available here.
3.6 Custom notifications
SEND_CUSTOM_HOST_NOTIFICATION;<host>;<options>;<author>;<comment>
SEND_CUSTOM_SVC_NOTIFICATION;<host>;<service>;<options>;<author>;<comment>
<options> is parsed for arity and discarded: broadcast, forced and
increment have no equivalent here. The notification goes to the object's
current escalation level with the author and the comment; a downtime
silences it.
3.7 Switching notifications on and off
ENABLE_NOTIFICATIONS
DISABLE_NOTIFICATIONS
ENABLE_HOST_NOTIFICATIONS;<host>
DISABLE_HOST_NOTIFICATIONS;<host>
ENABLE_SVC_NOTIFICATIONS;<host>;<service>
DISABLE_SVC_NOTIFICATIONS;<host>;<service>
ENABLE_OBJECT_NOTIFICATIONS;<selector>;<scope>
DISABLE_OBJECT_NOTIFICATIONS;<selector>;<scope>
ENABLE_CONTACT_HOST_NOTIFICATIONS;<contact>
DISABLE_CONTACT_HOST_NOTIFICATIONS;<contact>
ENABLE_CONTACT_SVC_NOTIFICATIONS;<contact>
DISABLE_CONTACT_SVC_NOTIFICATIONS;<contact>
ENABLE_NOTIFICATIONS and DISABLE_NOTIFICATIONS take no fields and
switch every notification off or on for the whole program;
ENABLE_HOST_NOTIFICATIONS/DISABLE_HOST_NOTIFICATIONS,
ENABLE_SVC_NOTIFICATIONS/DISABLE_SVC_NOTIFICATIONS and
ENABLE_OBJECT_NOTIFICATIONS/DISABLE_OBJECT_NOTIFICATIONS (the last
pair taking a <selector> and a <scope> of host or service, parsed
the same way as the selector-scoped verbs above) switch one object off or
on. ENABLE_CONTACT_HOST_NOTIFICATIONS/DISABLE_CONTACT_HOST_NOTIFICATIONS
and ENABLE_CONTACT_SVC_NOTIFICATIONS/DISABLE_CONTACT_SVC_NOTIFICATIONS
switch one contact off or on for the object kind named in the verb.
3.8 Stopping checks, flap detection and event handlers
START_EXECUTING_HOST_CHECKS
STOP_EXECUTING_HOST_CHECKS
START_EXECUTING_SVC_CHECKS
STOP_EXECUTING_SVC_CHECKS
ENABLE_FLAP_DETECTION
DISABLE_FLAP_DETECTION
ENABLE_EVENT_HANDLERS
DISABLE_EVENT_HANDLERS
ENABLE_HOST_CHECK;<host>
DISABLE_HOST_CHECK;<host>
ENABLE_SVC_CHECK;<host>;<service>
DISABLE_SVC_CHECK;<host>;<service>
ENABLE_HOST_FLAP_DETECTION;<host>
DISABLE_HOST_FLAP_DETECTION;<host>
ENABLE_SVC_FLAP_DETECTION;<host>;<service>
DISABLE_SVC_FLAP_DETECTION;<host>;<service>
ENABLE_HOST_EVENT_HANDLER;<host>
DISABLE_HOST_EVENT_HANDLER;<host>
ENABLE_SVC_EVENT_HANDLER;<host>;<service>
DISABLE_SVC_EVENT_HANDLER;<host>;<service>
ENABLE_OBJECT_ACTIVE_CHECKS;<selector>;<scope>
DISABLE_OBJECT_ACTIVE_CHECKS;<selector>;<scope>
ENABLE_OBJECT_FLAP_DETECTION;<selector>;<scope>
DISABLE_OBJECT_FLAP_DETECTION;<selector>;<scope>
ENABLE_OBJECT_EVENT_HANDLER;<selector>;<scope>
DISABLE_OBJECT_EVENT_HANDLER;<selector>;<scope>
The first eight switch active checks per kind, flap detection and event
handlers for the whole program; the rest switch the same three for one
object, by name or by a <selector> and <scope> of host or service,
parsed the same way as the selector-scoped verbs above. A forced check
(SCHEDULE_FORCED_HOST_CHECK, SCHEDULE_FORCED_SVC_CHECK) still obeys a
stopped active-checks switch here, where Nagios runs it regardless.
3.9 Rescheduling a check
SCHEDULE_FORCED_HOST_CHECK;<host>;<check_time>
SCHEDULE_FORCED_SVC_CHECK;<host>;<service>;<check_time>
SCHEDULE_HOST_CHECK;<host>;<check_time>
SCHEDULE_SVC_CHECK;<host>;<service>;<check_time>
SCHEDULE_CHECK;<selector>;<scope>
The check runs at <check_time>, or now when that is 0 or past. The
forced and non-forced spellings are the same command here, because there
is no check period to bypass yet. The next regular check keeps its slot,
so asking for a check now does not shift the object's cadence.
3.10 Comments
ADD_HOST_COMMENT;<host>;<persistent>;<author>;<comment>
ADD_SVC_COMMENT;<host>;<service>;<persistent>;<author>;<comment>
DEL_HOST_COMMENT;<comment_id>
DEL_SVC_COMMENT;<comment_id>
<persistent> is parsed for arity and discarded, because every comment
is kept on the log and survives a restart. <comment_id> is the ID the
API returned when the comment was added, and the one the query API and
the dashboard show. DEL_HOST_COMMENT and DEL_SVC_COMMENT are one
command, as with downtimes.
4. Where these commands go
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.
5. Security considerations
The named pipe is filesystem-local IPC: anything able to write to
-command-file can inject commands, so its permissions are the operator's
to set, the same as they were under Nagios. Parsing does not soften that:
strict rejection of malformed input closes off one failure mode. It does
not change the trust boundary of the pipe itself.