API Reference
Open the interactive OpenAPI reference:
Download Swagger OpenAPI spec (YAML)
Open ReDoc reference (new tab)
- GET /collectors
List Data Collectors
Lists the appliances that collect, and therefore hold collector logs.
Only collecting appliances are listed. An All-In-One and a Collector Unit collect; a Database Server does not and is excluded, because a log read queued against one would never run.
The
idor thenameof an entry here is what the collector log endpoints accept to identify which collector to read from.Requires the
DEV_COLLECTIONS_VIEWaccess hook.- Status Codes:
200 OK – The collecting appliances, ordered by name.
401 Unauthorized – Unauthenticated
403 Forbidden – Forbidden (insufficient access hooks)
500 Internal Server Error – The Data Collectors could not be listed
- Request JSON Object:
collectors[].id (integer) – The appliance id of the collector.
collectors[].ip (string) – The IP address of the collector.
collectors[].name (string) – The appliance name of the collector.
- POST /collector_logs/list
Queue or run a Data Collector log file listing
Queues a request to list the log files available on a Data Collector.
Listing a directory is work that happens on the collector, so this endpoint queues the request and returns a receipt rather than the listing. The queued request reaches the collector through a database update, so nothing is available immediately: measured pickup latency is 12 to 27 seconds, and can be minutes on a busy collector.
Read the listing back from
GET /collector_logs/list/{request_id}, polling untilterminatedis true.With
run_localset to true, the listing instead runs on the host this service runs on, an All-In-One or a Database Server, with the same command a queued request would run, run the way the Remote Toolbox runs it. The listing is returned directly with 200, all at once, and there is nothing to poll.collectoris not required for a local run and is ignored if given, since a local run always reads this host. A local run that does not finish within 90 seconds is stopped and answered with 504 and what it listed before then. Every response says which happened inmode.Requires the
DEV_TOOLS_RUNandDEV_COLLECTIONS_VIEWaccess hooks.- Response JSON Object:
collector (string) – The
idornameof the collector, as returned byGET /collectors. A numeric value is treated as an appliance id and anything else as an appliance name.directory (string) – Which log directory to read. The caller supplies a key, never a path, and the service resolves it server side, so a path traversal cannot be expressed. -
sl1resolves to/var/log/sl1, the current service logs written by rsyslog -em7resolves to/var/log/em7, thelogdirrecorded insilo.confThe default applies to the request body of the two POST endpoints. Thedirectoryquery parameter ofGET /collector_logs/list/{request_id}is required and has no default, because it labels the entries the listing returns. Note thatsilo.logis 0 bytes on current releases and is not a useful target.run_local (boolean) – True to run the tool on the host this service runs on, an All-In-One or a Database Server, and answer with its output directly, rather than queueing it for a collector. Also accepted as 1 or 0; anything else, including the strings “true” and “false”, is rejected with 400. Left out, it is true on an All-In-One and false otherwise.
- Status Codes:
200 OK – The listing was run locally, because
run_localwas true or was left out on an All-In-One, and has finished.202 Accepted – The listing was queued. The listing itself is not available yet; poll
GET /collector_logs/list/{request_id}untilterminatedis true.400 Bad Request – A collector was not supplied for a queued listing,
run_localis not true, false, 1 or 0, or the directory is not one ofsl1orem7.401 Unauthorized – Unauthenticated
403 Forbidden – Forbidden (insufficient access hooks)
404 Not Found – No collecting appliance matches the supplied collector. No alternatives are suggested, because a collector is looked up by exact id or name and there are no near misses to offer; use
GET /collectorsto find the right collector. Also returned for atool_namein the path other thanlistorfetch.429 Too Many Requests – A local run was refused because five are already in progress, the most that may run at once. Try again once one has finished.
500 Internal Server Error – The listing could not be queued or run
504 Gateway Timeout – A local listing did not finish within 90 seconds and was stopped. The body carries the error fields together with what the listing produced before then.
- Request JSON Object:
directory (any) – The directory key the caller named.
directory_path (string) – The absolute path the key resolves to on this host.
files[].base_name (string) – The log the file belongs to, with any rotation suffix removed.
files[].compressed (boolean) – Whether the file is gzip compressed.
files[].directory (any) – The directory key the file was found in. Send it, with
nameas thelog_name, toPOST /collector_logs/fetchto read this file.files[].directory_path (string) – The absolute path of the directory on the collector.
files[].generation (string) – The rotation suffix, or null for the current log.
files[].modified (string) – The modification time as an ISO 8601 timestamp in UTC.
files[].name (string) – The file name within the directory.
files[].rotated (boolean) – Whether this is a rotated generation rather than the current log.
files[].size_bytes (integer) – The size of the file on the collector. Worth reading before a fetch, because an active collector log reaches tens of megabytes.
last_id (integer) – The id of the run’s last output row.
mode (any) – Always
local.terminated (boolean) – True once the run finished, false only when it ran past its timeout. As for a queued listing, this reports termination only.
toolbox.phase (string) – Where the job is, derived from the spool row and the output together, since the Remote Toolbox can lose either signal. There is no stuck phase: a job the collector never picks up stays queued and one the toolbox abandons stays running, so judge from the two ages when to stop waiting.
unknownmeans neither the spool row nor any output could be read, which in practice is only a job pruned in the middle of a request, since a job with no spool row is reported as not found.toolbox.returncode (integer) – The return code recorded for the queued command. Null for as long as the command is still running.
toolbox.seconds_since_last_output (integer) – Seconds since the job last wrote output, or null when it has written none.
toolbox.seconds_since_queued (integer) – Seconds since the command was queued, or null when the spool row has been pruned.
toolbox.state (integer) – The spool row’s state as found: 1 scheduled, 2 launched, 3 running, 0 complete, 4 failed, 5 canceled. The updates can land out of order, so a finished job can still read 2;
phaseaccounts for that.truncated (boolean) – True when the listing was longer than the 32 MiB of output a local run keeps; the entries past the limit were discarded. A local listing is not paged, so it is otherwise false.
collector.id (integer) – The appliance id of the collector.
collector.ip (string) – The IP address of the collector.
collector.name (string) – The appliance name of the collector.
directory – The directory key the caller named. This round-trips: send it straight back as the
directoryof the next request.directory_path – The absolute path the key resolves to on the collector.
mode – Always
remote.note (string) – A reminder that the listing is not available yet and where to read it from.
request_id (integer) – The id to read the queued request’s output with. It is not a durable handle. Collector log output ages out of the platform’s log tables after about 31 days, independently of the row describing the request, so a request id can outlive its own description and an old id becomes unreadable.
- GET /collector_logs/list/{request_id}
Read a queued Data Collector log file listing
Reads back the log file listing for a queued request. A local listing is answered when it is run, so it has nothing to read back here.
An empty
fileslist withterminatedfalse means the collector has not produced the listing yet, not that the directory is empty. Call again with the returnedlast_idasafter_iduntilterminatedis true.Termination reports only that the collector has finished. It is reported for a command that worked, one that failed, and one the Remote Toolbox refused before running, so it must not be read as success.
Requires the
DEV_TOOLS_RUNaccess hook. Only the user that queued the request may read it.- Parameters:
request_id (integer) – The
request_idreturned when the listing was queued.
- Query Parameters:
directory (string) –
Which log directory the request was queued for. Required, and with no default here, unlike the two POST endpoints where it defaults to
sl1. A missingdirectoryis rejected with 400.It must match the directory the listing was queued with. The listing does not carry the directory back: the collector reports basenames only, and the service stamps each entry with the key given here. Polling an
em7listing without the parameter would return entries labelledsl1and/var/log/sl1, and feeding such an entry straight back toPOST /collector_logs/fetchwould then target a file that does not exist, or, for a basename present in both log trees, silently a different file. The mismatch cannot be detected server side.after_id (integer) – Read only output produced after this cursor. Pass the previous response’s
last_idto continue where it stopped, or omit it to read from the beginning.page_size (integer) – The maximum number of output rows to read. Values above the maximum are reduced to it. 0 is rejected rather than read as a request for the default.
wait_seconds (number) –
Opt-in server side waiting. Defaults to no wait, which returns whatever the collector has written so far.
The budget is capped at 90 seconds, deliberately below the 120 second reverse proxy read timeout, so a wait can never turn a request that is merely still running into a gateway timeout the caller cannot distinguish from a failure. A larger value is reduced to the cap. A non-finite value,
nanorinf, is rejected with 400.
- Status Codes:
200 OK – The files found so far, the cursor to resume from, and whether the collector has finished.
400 Bad Request – A missing or invalid
directory, or an invalidafter_id,page_sizeorwait_seconds.directoryis required on this endpoint. Apage_sizeof 0 is rejected rather than read as a request for the default, and a non-finitenanorinfis rejected forafter_id,page_sizeandwait_secondsalike.401 Unauthorized – Unauthenticated
403 Forbidden – Forbidden (insufficient access hooks)
404 Not Found – The request id is not a collector log listing belonging to this user. Returned identically whether the id was never issued, belongs to another Remote Toolbox tool, belongs to another user, or has aged out of the platform’s retention window. Also returned for a
tool_namein the path other thanlistorfetch.500 Internal Server Error – The listing could not be read
- Request JSON Object:
directory (any) – The directory key the caller named. This round-trips: send it straight back as the
directoryof the next request.directory_path (string) – The absolute path the key resolves to on the collector.
files[].base_name (string) – The log the file belongs to, with any rotation suffix removed.
files[].compressed (boolean) – Whether the file is gzip compressed.
files[].directory (any) – The directory key the file was found in. Send it, with
nameas thelog_name, toPOST /collector_logs/fetchto read this file.files[].directory_path (string) – The absolute path of the directory on the collector.
files[].generation (string) – The rotation suffix, or null for the current log.
files[].modified (string) – The modification time as an ISO 8601 timestamp in UTC.
files[].name (string) – The file name within the directory.
files[].rotated (boolean) – Whether this is a rotated generation rather than the current log.
files[].size_bytes (integer) – The size of the file on the collector. Worth reading before a fetch, because an active collector log reaches tens of megabytes.
last_id (integer) – The cursor to resume from. Pass it back as
after_idon the next call. Unchanged from the requested cursor when the page held no rows.mode (any) – Always
remote.request_id (integer) – The request id the listing belongs to.
terminated (boolean) – True when the collector has finished. This reports termination only: the same marker is written for a command that worked, one that failed, and one the Remote Toolbox refused before running, so it must not be read as success. Also true once a finished job’s output has been read to the end, which covers a completed marker the Remote Toolbox failed to write, once it has had no output for 90 seconds.
toolbox.phase (string) – Where the job is, derived from the spool row and the output together, since the Remote Toolbox can lose either signal. There is no stuck phase: a job the collector never picks up stays queued and one the toolbox abandons stays running, so judge from the two ages when to stop waiting.
unknownmeans neither the spool row nor any output could be read, which in practice is only a job pruned in the middle of a request, since a job with no spool row is reported as not found.toolbox.returncode (integer) – The return code recorded for the queued command. Null for as long as the command is still running.
toolbox.seconds_since_last_output (integer) – Seconds since the job last wrote output, or null when it has written none.
toolbox.seconds_since_queued (integer) – Seconds since the command was queued, or null when the spool row has been pruned.
toolbox.state (integer) – The spool row’s state as found: 1 scheduled, 2 launched, 3 running, 0 complete, 4 failed, 5 canceled. The updates can land out of order, so a finished job can still read 2;
phaseaccounts for that.truncated (boolean) – True when the page could not carry everything that was waiting: more rows were waiting than the page size allowed, the text returned reached the 1048576 character per response ceiling with rows still left behind, or any combination of the two. Request the next page from
last_idrather than assuming the listing ended. Both budgets are cumulative across await_secondspoll, which spends one row budget and one character budget over the whole wait rather than one of each per internal read.
- POST /collector_logs/fetch
Queue or run a Data Collector log file read
Queues a request to read one log file on a Data Collector.
Reading and filtering happen on the collector, so this endpoint queues the request and returns a receipt rather than the content. The queued request reaches the collector through a database update, so nothing is available immediately: measured pickup latency is 12 to 27 seconds, and can be minutes on a busy collector.
Every filter is applied on the collector rather than in the service, because the output returns through a shared platform log table in chunked rows and an active collector log reaches tens of megabytes.
Every read is capped twice on the collector, whatever filters it carries: a line cap of
lines, or 100000 whenlinesis omitted, and a byte cap ofmax_bytes, or 5242880 (5 MiB) whenmax_bytesis omitted. Both caps are applied afterpatternand after the timestamp window, so they bound the result of the filters rather than the file. Themax_bytesthat will be enforced is echoed on the receipt.Read the content back from
GET /collector_logs/fetch/{request_id}, polling untilterminatedis true.With
run_localset to true, the read instead runs on the host this service runs on, an All-In-One or a Database Server, with the same command a queued request would run, run the way the Remote Toolbox runs it, so both caps still apply. The content is returned directly with 200, all at once rather than paged, though each record is still cut to 4096 characters, and there is nothing to poll.collectoris not required for a local run and is ignored if given, since a local run always reads this host. A local run that does not finish within 90 seconds is stopped and answered with 504 and what it read before then. Every response says which happened inmode.Requires the
DEV_TOOLS_RUNandDEV_COLLECTIONS_VIEWaccess hooks.- Query Parameters:
combine_streams (boolean) – For a local run only: true to return the output as one stream,
combined, in the order it was written, the toolbox’s marker rows included, rather than split by stream. Only true, false, 1 and 0 are accepted, in any case; anything else is rejected with 400. Ignored for a queued read.
- Response JSON Object:
collector (string) – The
idornameof the collector, as returned byGET /collectors. A numeric value is treated as an appliance id and anything else as an appliance name.directory (string) – Which log directory to read. The caller supplies a key, never a path, and the service resolves it server side, so a path traversal cannot be expressed. -
sl1resolves to/var/log/sl1, the current service logs written by rsyslog -em7resolves to/var/log/em7, thelogdirrecorded insilo.confThe default applies to the request body of the two POST endpoints. Thedirectoryquery parameter ofGET /collector_logs/list/{request_id}is required and has no default, because it labels the entries the listing returns. Note thatsilo.logis 0 bytes on current releases and is not a useful target.lines (integer) – Return only this many trailing lines. Applied after
patternand after the timestamp window, so it is the last n matching records rather than the last n records in the file. Omitting it does not remove the line cap. Every read is bounded by both a line cap and a byte cap, whatever filters it carries: the line cap islineswhen supplied and 100000 otherwise, and the byte cap ismax_byteswhen supplied and 5242880 (5 MiB) otherwise. Both bound a plain read, a compressed generation, a pattern-only read and a window-only read alike.log_name (string) – The log file to read, within the chosen directory. Must have the shape the platform produces: a current log such as
sl1.log, or a rotated generation such assl1.log.20260913-1789312001.gz. A compressed generation is read in place rather than decompressed first. (required)max_bytes (integer) – A ceiling on the bytes the collector will return for this read. It defaults to 5242880 (5 MiB), which is also its maximum: a larger value is reduced to the maximum rather than rejected. 0, a negative number, a boolean and a non-numeric string are rejected with 400. The cap is enforced on the collector, as the final stage of the pipeline, and the value that will be enforced is echoed as
max_byteson the 202 receipt. The byte cap is the one that bounds the work, because 100000 records of an unknown width is not a size. The line cap is applied before the byte cap and both keep the trailing end of what they are given, so a read that the byte cap actually cuts returns the most recent records of the last n lines and drops the oldest of that window. The cut lands at a byte offset rather than on a record boundary, so the first record of such a read can be a partial line and a leading fragment should be expected. That is not the... [truncated]marker, which is a separate per-record limit applied as the output is read back.pattern (string) – An extended regular expression (
grep -E) to match records against, applied on the collector. A pattern may not contain whitespace, quotes or backslashes. Express whitespace with a POSIX class such as[[:space:]]; for exampleAID:[[:space:]]*907matches an application id of 907 written asAID: 907with any amount of space after the colon.run_local (boolean) – True to run the tool on the host this service runs on, an All-In-One or a Database Server, and answer with its output directly, rather than queueing it for a collector. Also accepted as 1 or 0; anything else, including the strings “true” and “false”, is rejected with 400. Left out, it is true on an All-In-One and false otherwise.
since (string) – Inclusive lower bound on the record timestamp. Any leading portion of an ISO 8601 timestamp is accepted, so
2026,2026-09,2026-09-23and2026-09-23T14:05are all valid. The bound is compared as text against the timestamp that begins each record. UseTbetween the date and the time. A space is not accepted as the separator and is rejected with 400. Against theem7directory a window is day granular only, because records there separate the date from the time with a space, so the field a bound is compared against is the date alone. A day bound works there; a bound carrying a time component matches nothing at all, and the 202 receipt says so in itsnote.until (string) – Inclusive upper bound on the record timestamp, in the same form as
since, and inclusive of everything the bound names rather than of the single instant it names.until=2026-09-24keeps every record stamped on the 24th, sosince=2026-09-23&until=2026-09-24is the whole of the 23rd together with the whole of the 24th. A longer bound still cuts exactly where it says:until=2026-09-24T09:30stops at the end of that minute.
- Status Codes:
200 OK – The read was run locally, because
run_localwas true or was left out on an All-In-One, and has finished.202 Accepted – The read was queued. The content itself is not available yet; poll
GET /collector_logs/fetch/{request_id}untilterminatedis true.400 Bad Request – A collector was not supplied for a queued read,
run_localorcombine_streamsis invalid, a log name was not supplied, or a filter was rejected. Apatternmay not contain whitespace, quotes or backslashes; asinceoruntilmust useTrather than a space between the date and the time; andmax_bytesmust be a positive integer.401 Unauthorized – Unauthenticated
403 Forbidden – Forbidden (insufficient access hooks)
404 Not Found – No collecting appliance matches the supplied collector. No alternatives are suggested, because a collector is looked up by exact id or name and there are no near misses to offer; use
GET /collectorsto find the right collector. Also returned for atool_namein the path other thanlistorfetch.429 Too Many Requests – A local run was refused because five are already in progress, the most that may run at once. Try again once one has finished.
500 Internal Server Error – The read could not be queued or run
504 Gateway Timeout – A local read did not finish within 90 seconds and was stopped. The body carries the error fields together with what the read produced before then.
- Request JSON Object:
directory (any) – The directory key the caller named.
directory_path (string) – The absolute path the key resolves to on this host.
last_id (integer) – The id of the run’s last output row.
line_counts (object) – A count of the run’s rows per stream, including the toolbox’s
startedandcompletedmarker rows, which are left out of a splitoutput.log_name (string) – The log file that was read.
max_bytes (integer) – The byte ceiling that was enforced for this read.
mode (any) – Always
local.note (string) – Present only when the read has a limitation worth stating, such as a time-bearing
sinceoruntilagainst theem7directory, where a window is day granular only.output (object) – The run’s output, one text per stream, with
stdoutandstderralways present. Withcombine_streamstrue, it holds onlycombined, every row in the order it was written, the marker rows included.terminated (boolean) – True once the run finished, false only when it ran past its timeout. As for a queued read, this reports termination only.
toolbox.phase (string) – Where the job is, derived from the spool row and the output together, since the Remote Toolbox can lose either signal. There is no stuck phase: a job the collector never picks up stays queued and one the toolbox abandons stays running, so judge from the two ages when to stop waiting.
unknownmeans neither the spool row nor any output could be read, which in practice is only a job pruned in the middle of a request, since a job with no spool row is reported as not found.toolbox.returncode (integer) – The return code recorded for the queued command. Null for as long as the command is still running.
toolbox.seconds_since_last_output (integer) – Seconds since the job last wrote output, or null when it has written none.
toolbox.seconds_since_queued (integer) – Seconds since the command was queued, or null when the spool row has been pruned.
toolbox.state (integer) – The spool row’s state as found: 1 scheduled, 2 launched, 3 running, 0 complete, 4 failed, 5 canceled. The updates can land out of order, so a finished job can still read 2;
phaseaccounts for that.truncated (boolean) – True when the read produced more than the 32 MiB of output a local run keeps; the lines past the limit were discarded. A local read is returned whole, so the per response ceiling does not apply, and it is otherwise false. Each record is still cut to 4096 characters, with
... [truncated]appended.collector.id (integer) – The appliance id of the collector.
collector.ip (string) – The IP address of the collector.
collector.name (string) – The appliance name of the collector.
directory – The directory key the caller named. This round-trips: send it straight back as the
directoryof the next request.directory_path – The absolute path the key resolves to on the collector.
log_name – The log file the request will read.
max_bytes – The byte ceiling that will be enforced on the collector for this read, after any reduction to the 5242880 byte (5 MiB) maximum. Present whether or not the caller supplied
max_bytes, because the cap always applies.mode – Always
remote.note – A reminder that the content is not available yet and where to read it from. It also carries a warning when the directory is
em7andsinceoruntilcarries a time component, because a window there is day granular only.request_id (integer) – The id to read the queued request’s output with. It is not a durable handle. Collector log output ages out of the platform’s log tables after about 31 days, independently of the row describing the request, so a request id can outlive its own description and an old id becomes unreadable.
- GET /collector_logs/fetch/{request_id}
Read a queued Data Collector log file read
Reads back the log content for a queued request. A local read is answered when it is run, so it has nothing to read back here.
The output is returned as text per stream, in
output. A read’s standard output is the log content asked for. A page ends on a line, so append each stream’s text from each page to what you already have.A page is bounded by
page_size, by a 1048576 character ceiling on the text returned across the whole response, and by a 4096 character ceiling per record.truncatedis true when either of the first two stopped the page with rows still left behind; a record cut by the third arrives with the marker... [truncated]appended. The response ceiling counts decoded characters rather than encoded bytes, so a page of heavily multibyte text can exceed 1 MiB once encoded.An empty page with
terminatedfalse means the collector has not produced more output yet, not that the log was empty. Call again with the returnedlast_idasafter_iduntilterminatedis true.Termination reports only that the collector has finished. It is reported for a command that worked, one that failed, and one the Remote Toolbox refused before running, so the outcome has to be judged from the content and the
toolboxfields.Requires the
DEV_TOOLS_RUNaccess hook. Only the user that queued the request may read it.- Parameters:
request_id (integer) – The
request_idreturned when the read was queued.
- Query Parameters:
after_id (integer) – Read only output produced after this cursor. Pass the previous response’s
last_idto continue where it stopped, or omit it to read from the beginning.page_size (integer) – The maximum number of output rows to return. Values above the maximum are reduced to it. 0 is rejected rather than read as a request for the default.
wait_seconds (number) –
Opt-in server side waiting. Defaults to no wait, which returns whatever the collector has written so far.
The budget is capped at 90 seconds, deliberately below the 120 second reverse proxy read timeout, so a wait can never turn a request that is merely still running into a gateway timeout the caller cannot distinguish from a failure. A larger value is reduced to the cap. A non-finite value,
nanorinf, is rejected with 400.
- Status Codes:
200 OK – The page’s output per stream, in
output, a count of rows per stream, the cursor to resume from, whether the collector has finished, whether more output was waiting than the page could hold, and the Remote Toolbox state.400 Bad Request – An invalid
after_id,page_sizeorwait_seconds. Apage_sizeof 0 is rejected rather than read as a request for the default, and a non-finitenanorinfis rejected for all three.401 Unauthorized – Unauthenticated
403 Forbidden – Forbidden (insufficient access hooks)
404 Not Found – The request id is not a collector log retrieval belonging to this user. Returned identically whether the id was never issued, belongs to another Remote Toolbox tool, belongs to another user, or has aged out of the platform’s retention window. Also returned for a
tool_namein the path other thanlistorfetch.500 Internal Server Error – The output could not be read
- Request JSON Object:
last_id (integer) – The cursor to resume from. Pass it back as
after_idon the next call. Unchanged from the requested cursor when the page held no rows.line_counts (object) – A count of this page’s rows per stream, including the toolbox’s
startedandcompletedmarker rows, which are left out ofoutput.mode (any) – Always
remote.output (object) – This page’s output, one text per stream. Always has
stdoutandstderr; a stream the toolbox does not normally write appears under its own name. Each record is one line ending in a newline; one that had none, such as a record cut to 4096 characters with... [truncated]appended, is given one. Empty streams withterminatedfalse mean the collector has not produced more output yet.request_id (integer) – The request id the output belongs to.
terminated (boolean) – True when the collector has finished. This reports termination only: the same marker is written for a command that worked, one that failed, and one the Remote Toolbox refused before running, so it must not be read as success. Judge the outcome from the content and the
toolboxfields. Also true once a finished job’s output has been read to the end, which covers a completed marker the Remote Toolbox failed to write, once it has had no output for 90 seconds.toolbox.phase (string) – Where the job is, derived from the spool row and the output together, since the Remote Toolbox can lose either signal. There is no stuck phase: a job the collector never picks up stays queued and one the toolbox abandons stays running, so judge from the two ages when to stop waiting.
unknownmeans neither the spool row nor any output could be read, which in practice is only a job pruned in the middle of a request, since a job with no spool row is reported as not found.toolbox.returncode (integer) – The return code recorded for the queued command. Null for as long as the command is still running.
toolbox.seconds_since_last_output (integer) – Seconds since the job last wrote output, or null when it has written none.
toolbox.seconds_since_queued (integer) – Seconds since the command was queued, or null when the spool row has been pruned.
toolbox.state (integer) – The spool row’s state as found: 1 scheduled, 2 launched, 3 running, 0 complete, 4 failed, 5 canceled. The updates can land out of order, so a finished job can still read 2;
phaseaccounts for that.truncated (boolean) – True when the page could not carry everything that was waiting: more rows were waiting than the page size allowed, the text returned reached the 1048576 character per response ceiling with rows still left behind, or any combination of the two. Request the next page from
last_idrather than assuming the output ended. Both budgets are cumulative across await_secondspoll, which spends one row budget and one character budget over the whole wait rather than one of each per internal read.