M54: harden operations and demo resilience
This commit is contained in:
@@ -17,9 +17,9 @@ credential values are never embedded; nodes reference named n8n credentials inst
|
||||
| Live workflow ID | `mobilityops-return-processing` |
|
||||
| Active status (as of 2026-08-04) | Active / Published |
|
||||
| Error Workflow | `Fleet Ops — Workflow Error Handler` (wired) |
|
||||
| Timeouts / bounded retries | `Record follow-up` and heartbeat HTTP nodes: 15s timeout, retry on fail (3 tries, 1000ms wait) |
|
||||
| Timeouts / bounded retries | `Record follow-up` and heartbeat HTTP nodes: 2s timeout, retry on fail (2 tries, 1000ms wait); their combined 10s worst-case retry budget remains below Fleet Ops's 15s dispatcher timeout and 120s delivery lease. |
|
||||
| Execution telemetry | Successful runs POST execution ID and status to `/api/v1/integrations/n8n/heartbeat`; failed runs are registered by the Error Workflow. |
|
||||
| Checksum (sha256) | `19f233b6de90a3474010d5495a53c75e969fb5de591e84dd3abcf9635304c1f1` (HTTPS callback definition, 2026-08-21) |
|
||||
| Checksum (sha256) | `a282d92dc33cb838609ab32ca2d9502d141d0c82d83668bdfb341a24e19e3bdc` (bounded retries and strict event/correlation forwarding, 2026-08-23) |
|
||||
|
||||
## 2. Fleet Ops — Scheduled Data Quality Scan
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
},
|
||||
{
|
||||
"parameters": {
|
||||
"jsCode": "const e = $json.body ?? $json;\nif (e.event_type !== 'vehicle.returned.v1') throw new Error('Unsupported event type');\nconst reasons = e.data?.attention_reasons ?? [];\nreturn [{json: {event_id: e.event_id, event_type: e.event_type, aggregate_ref: e.aggregate.public_ref, follow_up: reasons.length ? 'attention_required' : 'cleaning', summary: reasons.join('; ') || 'Create cleaning follow-up'}}];"
|
||||
"jsCode": "const e = $json.body ?? $json;\nif (e.event_type !== 'vehicle.returned.v1') throw new Error('Unsupported event type');\nconst reasons = e.data?.attention_reasons ?? [];\nreturn [{json: {event_id: e.event_id, correlation_id: e.correlation_id, event_type: e.event_type, aggregate_ref: e.aggregate.public_ref, follow_up: reasons.length ? 'attention_required' : 'cleaning', summary: reasons.join('; ') || 'Create cleaning follow-up'}}];"
|
||||
},
|
||||
"id": "validate-node",
|
||||
"name": "Validate and derive follow-up",
|
||||
@@ -52,7 +52,7 @@
|
||||
"rawContentType": "application/json",
|
||||
"body": "={{JSON.stringify($json)}}",
|
||||
"options": {
|
||||
"timeout": 15000
|
||||
"timeout": 2000
|
||||
}
|
||||
},
|
||||
"id": "callback-node",
|
||||
@@ -66,7 +66,7 @@
|
||||
}
|
||||
},
|
||||
"retryOnFail": true,
|
||||
"maxTries": 3,
|
||||
"maxTries": 2,
|
||||
"waitBetweenTries": 1000
|
||||
},
|
||||
{
|
||||
@@ -84,7 +84,7 @@
|
||||
{ "name": "execution_id", "value": "={{ $execution.id }}" },
|
||||
{ "name": "status", "value": "succeeded" }
|
||||
]},
|
||||
"options": { "timeout": 15000 }
|
||||
"options": { "timeout": 2000 }
|
||||
},
|
||||
"id": "heartbeat-node",
|
||||
"name": "Report workflow heartbeat",
|
||||
@@ -93,7 +93,7 @@
|
||||
"position": [980, 300],
|
||||
"credentials": { "httpHeaderAuth": { "name": "Fleet Ops Service Token" } },
|
||||
"retryOnFail": true,
|
||||
"maxTries": 3,
|
||||
"maxTries": 2,
|
||||
"waitBetweenTries": 1000
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user