From edab0c37b662cbf2a338acbc5c69b69627dcda01 Mon Sep 17 00:00:00 2001 From: David Date: Sun, 23 Aug 2026 18:53:41 +0200 Subject: [PATCH] Add corrected n8n poller workflow (PB URL pre-set to live instance) - Swapped placeholder pocketbase.apphub.co.za for the real PB URL in all 6 PB-facing nodes - Updated setup note to reflect that URL is pre-set - Collections are already created in PB --- poller.n8n.json | 571 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 571 insertions(+) create mode 100644 poller.n8n.json diff --git a/poller.n8n.json b/poller.n8n.json new file mode 100644 index 0000000..c7fdf26 --- /dev/null +++ b/poller.n8n.json @@ -0,0 +1,571 @@ +{ + "name": "n8n Monitoring Dashboard - Poller", + "nodes": [ + { + "parameters": { + "content": "## Setup\n1. Create an \"HTTP Header Auth\" credential named \"n8n API Key\" (header X-N8N-API-KEY = your n8n API key).\n2. Create an \"HTTP Header Auth\" credential named \"PocketBase Admin\" (header Authorization = \"Bearer \").\n3. PocketBase base URL is pre-set to http://pocketbase-fftm1vu8twxfixup17v82xwe.169.239.180.130.sslip.io — no change needed.\n4. Collections already created in PocketBase.\n5. Activate this workflow when ready.", + "height": 200, + "width": 300, + "color": 4 + }, + "id": "ec8c99c4-8f93-4a84-af5b-8e64d74d553e", + "name": "Sticky Note 67b8b148", + "type": "n8n-nodes-base.stickyNote", + "typeVersion": 1, + "position": [ + -256, + 256 + ] + }, + { + "parameters": { + "rule": { + "interval": [ + { + "field": "minutes" + } + ] + } + }, + "id": "0b884dbe-36c1-420b-be75-671c93187ba5", + "name": "Every 5 Minutes", + "type": "n8n-nodes-base.scheduleTrigger", + "typeVersion": 1.3, + "position": [ + -192, + 304 + ] + }, + { + "parameters": { + "url": "https://wfdash.n8n.apphub.co.za/api/v1/workflows", + "authentication": "genericCredentialType", + "genericAuthType": "httpHeaderAuth", + "options": {} + }, + "id": "aa3f8fb7-e934-422b-ae7b-0684f40fcbc1", + "name": "Fetch n8n Workflows", + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.3, + "position": [ + 112, + 160 + ] + }, + { + "parameters": { + "fieldToSplitOut": "data", + "options": {} + }, + "id": "eea0d135-d067-46b3-9314-1e24787c603f", + "name": "Split Workflows Array", + "type": "n8n-nodes-base.splitOut", + "typeVersion": 1, + "position": [ + 400, + 160 + ] + }, + { + "parameters": {}, + "id": "53071f8d-f8be-4c41-aa85-4d6b87928c5a", + "name": "Workflows Sync Done", + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [ + 1904, + 160 + ] + }, + { + "parameters": { + "url": "http://pocketbase-fftm1vu8twxfixup17v82xwe.169.239.180.130.sslip.io/api/collections/workflows/records", + "authentication": "genericCredentialType", + "genericAuthType": "httpHeaderAuth", + "sendQuery": true, + "queryParameters": { + "parameters": [ + { + "name": "filter", + "value": "=(n8n_id=\"{{ $json.id }}\")" + } + ] + }, + "options": {} + }, + "id": "262ec577-9f0f-4914-80ec-23bde9ec37e5", + "name": "Check Workflow Record Exists", + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.3, + "position": [ + 1008, + 160 + ] + }, + { + "parameters": { + "conditions": { + "options": { + "caseSensitive": true, + "leftValue": "", + "typeValidation": "loose", + "version": 1 + }, + "conditions": [ + { + "leftValue": "={{ $json.totalItems }}", + "operator": { + "type": "number", + "operation": "gt" + }, + "rightValue": 0 + } + ], + "combinator": "and" + }, + "options": {} + }, + "id": "8a5df769-640f-4f57-889a-9d92ab304b69", + "name": "Workflow Record Exists?", + "type": "n8n-nodes-base.if", + "typeVersion": 2.2, + "position": [ + 1312, + 160 + ] + }, + { + "parameters": { + "method": "PATCH", + "url": "={{ \"http://pocketbase-fftm1vu8twxfixup17v82xwe.169.239.180.130.sslip.io/api/collections/workflows/records/\" + $json.items[0].id }}", + "authentication": "genericCredentialType", + "genericAuthType": "httpHeaderAuth", + "sendBody": true, + "specifyBody": "json", + "jsonBody": "={{ { \"name\": $(\"Split Workflows Array\").item.json.name, \"active\": $(\"Split Workflows Array\").item.json.active, \"n8n_updated_at\": $(\"Split Workflows Array\").item.json.updatedAt } }}", + "options": {} + }, + "id": "49ab8e98-0e47-48a4-8e78-1d7fb959f286", + "name": "Update Workflow Record", + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.3, + "position": [ + 1600, + 64 + ] + }, + { + "parameters": { + "options": {} + }, + "id": "a5290a91-9b2d-45e8-8851-2d702b406b5d", + "name": "Workflows: One At A Time", + "type": "n8n-nodes-base.splitInBatches", + "typeVersion": 3, + "position": [ + 704, + 160 + ] + }, + { + "parameters": { + "method": "POST", + "url": "http://pocketbase-fftm1vu8twxfixup17v82xwe.169.239.180.130.sslip.io/api/collections/workflows/records", + "authentication": "genericCredentialType", + "genericAuthType": "httpHeaderAuth", + "sendBody": true, + "specifyBody": "json", + "jsonBody": "={{ { \"n8n_id\": $(\"Split Workflows Array\").item.json.id, \"name\": $(\"Split Workflows Array\").item.json.name, \"active\": $(\"Split Workflows Array\").item.json.active, \"n8n_updated_at\": $(\"Split Workflows Array\").item.json.updatedAt } }}", + "options": {} + }, + "id": "ac8f44a6-03e4-48c1-9536-5adfa6295427", + "name": "Create Workflow Record", + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.3, + "position": [ + 1600, + 256 + ] + }, + { + "parameters": { + "url": "https://wfdash.n8n.apphub.co.za/api/v1/executions", + "authentication": "genericCredentialType", + "genericAuthType": "httpHeaderAuth", + "sendQuery": true, + "queryParameters": { + "parameters": [ + { + "name": "limit", + "value": "50" + }, + { + "name": "includeData", + "value": "false" + } + ] + }, + "options": {} + }, + "id": "18ae2824-df7d-46f6-8606-8487306e8616", + "name": "Fetch n8n Executions", + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.3, + "position": [ + 112, + 560 + ] + }, + { + "parameters": { + "fieldToSplitOut": "data", + "options": {} + }, + "id": "7c79adc6-7b7b-43e2-9b2c-b6d914bcbeab", + "name": "Split Executions Array", + "type": "n8n-nodes-base.splitOut", + "typeVersion": 1, + "position": [ + 400, + 560 + ] + }, + { + "parameters": {}, + "id": "c3af8ab7-2976-47b8-87b4-9abc5e54a379", + "name": "Executions Sync Done", + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [ + 1904, + 560 + ] + }, + { + "parameters": { + "url": "http://pocketbase-fftm1vu8twxfixup17v82xwe.169.239.180.130.sslip.io/api/collections/executions/records", + "authentication": "genericCredentialType", + "genericAuthType": "httpHeaderAuth", + "sendQuery": true, + "queryParameters": { + "parameters": [ + { + "name": "filter", + "value": "=(n8n_execution_id=\"{{ $json.id }}\")" + } + ] + }, + "options": {} + }, + "id": "bd057afd-4ac4-4834-8bde-f1e1824d42a4", + "name": "Check Execution Record Exists", + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.3, + "position": [ + 1008, + 560 + ] + }, + { + "parameters": { + "conditions": { + "options": { + "caseSensitive": true, + "leftValue": "", + "typeValidation": "loose", + "version": 1 + }, + "conditions": [ + { + "leftValue": "={{ $json.totalItems }}", + "operator": { + "type": "number", + "operation": "gt" + }, + "rightValue": 0 + } + ], + "combinator": "and" + }, + "options": {} + }, + "id": "79569deb-1551-4823-9488-de30c81392fe", + "name": "Execution Record Exists?", + "type": "n8n-nodes-base.if", + "typeVersion": 2.2, + "position": [ + 1312, + 560 + ] + }, + { + "parameters": { + "method": "PATCH", + "url": "={{ \"http://pocketbase-fftm1vu8twxfixup17v82xwe.169.239.180.130.sslip.io/api/collections/executions/records/\" + $json.items[0].id }}", + "authentication": "genericCredentialType", + "genericAuthType": "httpHeaderAuth", + "sendBody": true, + "specifyBody": "json", + "jsonBody": "={{ { \"status\": $(\"Split Executions Array\").item.json.status, \"started_at\": $(\"Split Executions Array\").item.json.startedAt, \"stopped_at\": $(\"Split Executions Array\").item.json.stoppedAt, \"workflow_n8n_id\": $(\"Split Executions Array\").item.json.workflowId } }}", + "options": {} + }, + "id": "15dc5e8c-9d0f-4583-a0ce-dc43ea1b609c", + "name": "Update Execution Record", + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.3, + "position": [ + 1600, + 464 + ] + }, + { + "parameters": { + "options": {} + }, + "id": "71fa9479-a294-42bc-93f6-80c6d6885105", + "name": "Executions: One At A Time", + "type": "n8n-nodes-base.splitInBatches", + "typeVersion": 3, + "position": [ + 704, + 560 + ] + }, + { + "parameters": { + "method": "POST", + "url": "http://pocketbase-fftm1vu8twxfixup17v82xwe.169.239.180.130.sslip.io/api/collections/executions/records", + "authentication": "genericCredentialType", + "genericAuthType": "httpHeaderAuth", + "sendBody": true, + "specifyBody": "json", + "jsonBody": "={{ { \"n8n_execution_id\": $(\"Split Executions Array\").item.json.id, \"workflow_n8n_id\": $(\"Split Executions Array\").item.json.workflowId, \"status\": $(\"Split Executions Array\").item.json.status, \"started_at\": $(\"Split Executions Array\").item.json.startedAt, \"stopped_at\": $(\"Split Executions Array\").item.json.stoppedAt } }}", + "options": {} + }, + "id": "acd3d95a-1e95-4312-88f2-16ba8978c7e2", + "name": "Create Execution Record", + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.3, + "position": [ + 1600, + 656 + ] + } + ], + "pinData": {}, + "connections": { + "Every 5 Minutes": { + "main": [ + [ + { + "node": "Fetch n8n Workflows", + "type": "main", + "index": 0 + }, + { + "node": "Fetch n8n Executions", + "type": "main", + "index": 0 + } + ] + ] + }, + "Fetch n8n Workflows": { + "main": [ + [ + { + "node": "Split Workflows Array", + "type": "main", + "index": 0 + } + ] + ] + }, + "Split Workflows Array": { + "main": [ + [ + { + "node": "Workflows: One At A Time", + "type": "main", + "index": 0 + } + ] + ] + }, + "Check Workflow Record Exists": { + "main": [ + [ + { + "node": "Workflow Record Exists?", + "type": "main", + "index": 0 + } + ] + ] + }, + "Workflow Record Exists?": { + "main": [ + [ + { + "node": "Update Workflow Record", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Create Workflow Record", + "type": "main", + "index": 0 + } + ] + ] + }, + "Update Workflow Record": { + "main": [ + [ + { + "node": "Workflows: One At A Time", + "type": "main", + "index": 0 + } + ] + ] + }, + "Workflows: One At A Time": { + "main": [ + [ + { + "node": "Workflows Sync Done", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Check Workflow Record Exists", + "type": "main", + "index": 0 + } + ] + ] + }, + "Create Workflow Record": { + "main": [ + [ + { + "node": "Workflows: One At A Time", + "type": "main", + "index": 0 + } + ] + ] + }, + "Fetch n8n Executions": { + "main": [ + [ + { + "node": "Split Executions Array", + "type": "main", + "index": 0 + } + ] + ] + }, + "Split Executions Array": { + "main": [ + [ + { + "node": "Executions: One At A Time", + "type": "main", + "index": 0 + } + ] + ] + }, + "Check Execution Record Exists": { + "main": [ + [ + { + "node": "Execution Record Exists?", + "type": "main", + "index": 0 + } + ] + ] + }, + "Execution Record Exists?": { + "main": [ + [ + { + "node": "Update Execution Record", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Create Execution Record", + "type": "main", + "index": 0 + } + ] + ] + }, + "Update Execution Record": { + "main": [ + [ + { + "node": "Executions: One At A Time", + "type": "main", + "index": 0 + } + ] + ] + }, + "Executions: One At A Time": { + "main": [ + [ + { + "node": "Executions Sync Done", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Check Execution Record Exists", + "type": "main", + "index": 0 + } + ] + ] + }, + "Create Execution Record": { + "main": [ + [ + { + "node": "Executions: One At A Time", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "active": false, + "settings": { + "executionOrder": "v1", + "binaryMode": "separate", + "availableInMCP": true + }, + "versionId": "6c005d1b-a2e9-4f00-94f9-a1dadedb1532", + "meta": { + "aiBuilderAssisted": true, + "builderVariant": "mcp", + "instanceId": "05bcfa3b50919141d3600718ff4b7b2b52a3883525b05573a27ba5ef437ac7fb" + }, + "nodeGroups": [], + "id": "cM8YciHiEwpslh1y", + "tags": [] +} \ No newline at end of file