* feat: add diagnostics console logs * test: avoid secret-like redaction fixtures * fix: address console logs review feedback * fix: harden console log capture lifecycle * fix: report console log drop summaries * fix: address diagnostics review cleanups
2.1 KiB
2.1 KiB
REST API Contract: Diagnostics Console Logs
All endpoints use the Elsa API route prefix and require read:diagnostics:console-logs.
Get Recent Console Logs
POST /diagnostics/console-logs/recent
Request body is ConsoleLogFilter.
{
"sourceId": "local",
"stream": "stdout",
"query": "workflow",
"from": "2026-05-18T10:00:00Z",
"to": "2026-05-18T10:05:00Z",
"limit": 100
}
Response body is RecentConsoleLogsResult.
{
"items": [
{
"id": "01j...",
"timestamp": "2026-05-18T10:00:01Z",
"receivedAt": "2026-05-18T10:00:01Z",
"sequence": 42,
"stream": "stdout",
"text": "Workflow order-123 started",
"source": {
"id": "local",
"displayName": "elsa-server",
"serviceName": "Elsa.Server.Web",
"processId": 12345,
"machineName": "dev-machine",
"podName": null,
"containerName": null,
"namespace": null,
"nodeName": null,
"lastSeen": "2026-05-18T10:00:01Z",
"health": "connected"
},
"truncated": false,
"dropped": null
}
],
"dropped": []
}
Rules:
- The server clamps
limittoConsoleLogsOptions.MaxRecentQuerySize. - Returned text and source metadata are redacted.
- ANSI escape sequences are stripped by default unless the host preserves them.
- Results are ordered deterministically by received order with a stable source-aware tiebreaker.
List Console Log Sources
GET /diagnostics/console-logs/sources
Response body is a collection of ConsoleLogSource.
[
{
"id": "local",
"displayName": "elsa-server",
"serviceName": "Elsa.Server.Web",
"processId": 12345,
"machineName": "dev-machine",
"podName": null,
"containerName": null,
"namespace": null,
"nodeName": null,
"lastSeen": "2026-05-18T10:00:01Z",
"health": "connected"
}
]
Rules:
- Source listing requires the same
read:diagnostics:console-logspermission as line access. - Sensitive source metadata is redacted before providers store or return it.
- Stale and disconnected sources remain listable while their recent history is still retained.