pbs-n8n/PBS_Cloudflare_Cache_Warmer_5_days.json
2026-06-30 14:04:00 -04:00

293 lines
8.1 KiB
JSON

{
"name": "PBS: Cloudflare Cache Warmer 5 days",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"daysInterval": 5
}
]
}
},
"id": "17b4e5fd-e821-477e-9df0-aade6ccefbbf",
"name": "Daily 4 AM ET",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-720,
-80
]
},
{
"parameters": {
"operation": "executeQuery",
"query": "SELECT recipe_url AS url, recipe_title AS title\nFROM pbs_recipes\nWHERE recipe_url IS NOT NULL\n AND recipe_url != ''\nORDER BY post_id ASC",
"options": {}
},
"id": "22f29499-7bcd-4699-8c3a-799c58d0cfec",
"name": "Get Recipe URLs",
"type": "n8n-nodes-base.mySql",
"typeVersion": 2.4,
"position": [
-496,
-80
],
"credentials": {
"mySql": {
"id": "4ETlVumrAq95ispJ",
"name": "MySQL account"
}
}
},
{
"parameters": {
"jsCode": "// Initialize tracking counters before the loop begins.\nconst staticData = $getWorkflowStaticData('global');\nstaticData.warmed = 0;\nstaticData.errors = 0;\nstaticData.errorUrls = [];\nstaticData.totalUrls = $input.all().length;\n\n// Pass all items through unchanged\nreturn $input.all();\n"
},
"id": "efebcbc9-c6a8-44c6-a92c-591e478bf0b0",
"name": "Init Counters",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-272,
-80
]
},
{
"parameters": {
"options": {}
},
"id": "beae05d0-c631-403c-b414-a224e3e1b531",
"name": "Loop Recipe URLs",
"type": "n8n-nodes-base.splitInBatches",
"typeVersion": 3,
"position": [
-32,
-80
]
},
{
"parameters": {
"url": "={{ $json.url }}",
"options": {
"redirect": {
"redirect": {}
},
"response": {
"response": {
"responseFormat": "text"
}
},
"timeout": 30000
}
},
"id": "f7cd0cc1-b755-49ff-b08c-e040da9f285d",
"name": "Warm Cache (GET)",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
208,
-80
],
"onError": "continueRegularOutput"
},
{
"parameters": {
"jsCode": "// Track success/failure for each URL warming attempt.\nconst staticData = $getWorkflowStaticData('global');\n\nconst item = $input.first().json;\nconst statusCode = item.statusCode || item.$response?.statusCode || 200;\nconst url = $('Loop Recipe URLs').first().json.url || 'unknown';\n\nif (statusCode >= 200 && statusCode < 400) {\n staticData.warmed++;\n} else {\n staticData.errors++;\n if (staticData.errorUrls.length < 10) {\n staticData.errorUrls.push(url + ' (' + statusCode + ')');\n }\n}\n\nreturn [{ json: { tracked: true } }];\n"
},
"id": "73caf61c-cd15-4dd1-977e-9bf053e1f062",
"name": "Track Results",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
384,
-80
]
},
{
"parameters": {
"jsCode": "// Build final summary message after all recipe URLs have been warmed.\nconst staticData = $getWorkflowStaticData('global');\nconst warmed = staticData.warmed || 0;\nconst errors = staticData.errors || 0;\nconst errorUrls = staticData.errorUrls || [];\nconst total = staticData.totalUrls || (warmed + errors);\n\nlet message = '🔥 *PBS Cache Warmer — Daily Run Complete*\\n';\nmessage += '\\n*Recipe URLs in database:* ' + total;\nmessage += '\\n*Warmed successfully:* ' + warmed;\nmessage += '\\n*Errors:* ' + errors;\n\nif (errors > 0 && errorUrls.length > 0) {\n message += '\\n\\n*Failed URLs (first 10):*';\n errorUrls.forEach(u => {\n message += '\\n• ' + u;\n });\n}\n\nif (errors === 0) {\n message += '\\n\\n✅ All recipe pages cached successfully.';\n}\n\n// Clean up static data for next run\nstaticData.warmed = 0;\nstaticData.errors = 0;\nstaticData.errorUrls = [];\nstaticData.totalUrls = 0;\nconst title = \"PBS-Cache Refresh\"\nconst timestamp = $now.toFormat('MMM dd, HH:mm:ss')\n\nreturn [{ json: { title, message, timestamp } }];\n"
},
"id": "866a4920-9d22-47e6-b48c-e121be8ec3e9",
"name": "Build Summary",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
176,
-272
]
},
{
"parameters": {
"workflowId": {
"__rl": true,
"value": "-DlPrT1UsgmacYJyoUJXU",
"mode": "list",
"cachedResultUrl": "/workflow/-DlPrT1UsgmacYJyoUJXU",
"cachedResultName": "PBS: Google Chat Notify (Sub-Workflow)"
},
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"options": {}
},
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.3,
"position": [
384,
-288
],
"id": "67d65c33-84ed-40bb-bfb3-7a54e1f1664c",
"name": "Call 'PBS: Google Chat Notify (Sub-Workflow)'"
},
{
"parameters": {},
"id": "0810a6a3-9440-4bae-a399-5c73f1f3f460",
"name": "Wait 5s",
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
608,
-80
],
"webhookId": "d3c0e894-852f-42ff-a7ef-d5b692b74958"
}
],
"pinData": {
"Daily 4 AM ET": [
{
"json": {
"timestamp": "2026-04-20T22:20:39.641-04:00",
"Readable date": "April 20th 2026, 10:20:39 pm",
"Readable time": "10:20:39 pm",
"Day of week": "Monday",
"Year": "2026",
"Month": "April",
"Day of month": "20",
"Hour": "22",
"Minute": "20",
"Second": "39",
"Timezone": "America/New_York (UTC-04:00)"
},
"pairedItem": {
"item": 0
}
}
]
},
"connections": {
"Daily 4 AM ET": {
"main": [
[
{
"node": "Get Recipe URLs",
"type": "main",
"index": 0
}
]
]
},
"Get Recipe URLs": {
"main": [
[
{
"node": "Init Counters",
"type": "main",
"index": 0
}
]
]
},
"Init Counters": {
"main": [
[
{
"node": "Loop Recipe URLs",
"type": "main",
"index": 0
}
]
]
},
"Loop Recipe URLs": {
"main": [
[
{
"node": "Build Summary",
"type": "main",
"index": 0
}
],
[
{
"node": "Warm Cache (GET)",
"type": "main",
"index": 0
}
]
]
},
"Warm Cache (GET)": {
"main": [
[
{
"node": "Track Results",
"type": "main",
"index": 0
}
]
]
},
"Track Results": {
"main": [
[
{
"node": "Wait 5s",
"type": "main",
"index": 0
}
]
]
},
"Build Summary": {
"main": [
[
{
"node": "Call 'PBS: Google Chat Notify (Sub-Workflow)'",
"type": "main",
"index": 0
}
]
]
},
"Wait 5s": {
"main": [
[
{
"node": "Loop Recipe URLs",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"executionOrder": "v1",
"availableInMCP": false
},
"versionId": "1139d52b-c9ea-4e78-8dc8-ef6904416593",
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "eeb18e777509f7207ee9abd45845e7fbf014989719160f3ed6ae633d872bf6c4"
},
"id": "UPgYRkjq9YrUbGmvWL_wC",
"tags": []
}