Workflow: develop a modular n8n workflow that supports Schedule Stickynote Send Scheduled
Integrations: emailSend, if, merge, scheduleTrigger, ssh, stickyNote

{"nodes": [{"id": "ba168090-4727-4b72-a0cf-3f15ef3a9f17", "name": "Send Email", "type": "n8n-nodes-base.emailSend", "position": [580, 360], "parameters": {"text": "=System resources are above the threshold.\n\nCPU: {{ $json.CPU.toNumber().round(2) }}%\nRAM: {{ $json.RAM.toNumber().round(2) }}%\nDisk: {{ $json.Disk.toNumber().round(2) }}%", "options": {}, "subject": "System Resource Alert", "toEmail": "change@me.com", "fromEmail": "change@me.com"}, "credentials": {"smtp": {"id": "EuaQtRc5t8pWPY9b", "name": "SMTP account"}}, "typeVersion": 1}, {"id": "79afc30f-c3db-4ba1-8f0d-a1000b5e0abe", "name": "Check RAM usage", "type": "n8n-nodes-base.ssh", "position": [160, 40], "parameters": {"command": "free | awk '/Mem:/ {printf \"%.2f\", (1 - $7/$2) * 100}'"}, "credentials": {"sshPassword": {"id": "VMCCUQkaq46q3CpB", "name": "SSH Password account"}}, "executeOnce": false, "typeVersion": 1}, {"id": "d09aa314-8d60-42a8-9933-d7e8d73e2c7d", "name": "Check Disk usage", "type": "n8n-nodes-base.ssh", "position": [380, 40], "parameters": {"command": "df -h | awk '$NF==\"/\"{printf \"%.2f\", $5}'"}, "credentials": {"sshPassword": {"id": "VMCCUQkaq46q3CpB", "name": "SSH Password account"}}, "executeOnce": false, "typeVersion": 1}, {"id": "bc6a0df2-f4cc-484a-ac39-c92e8795175e", "name": "Check CPU usage", "type": "n8n-nodes-base.ssh", "position": [580, 40], "parameters": {"command": "top -bn 1 | grep \"Cpu(s)\" | sed \"s/.*, *\\([0-9.]*\\)%* id.*/\\1/\" | awk '{print 100 - $1}'"}, "credentials": {"sshPassword": {"id": "VMCCUQkaq46q3CpB", "name": "SSH Password account"}}, "executeOnce": false, "typeVersion": 1}, {"id": "de0df734-1e4a-4bf0-9f7d-d60b52e06f48", "name": "Merge check results", "type": "n8n-nodes-base.merge", "position": [-40, 380], "parameters": {"mode": "combineBySql", "query": "SELECT input1.stdout as CPU, input2.stdout as Disk, input3.stdout as RAM FROM input1 LEFT JOIN input2 ON input1.name = input2.id LEFT JOIN input3 ON input1.name = input3.id", "numberInputs": 3}, "typeVersion": 3}, {"id": "7b7d6c0a-3f46-48b3-aa1d-191839540196", "name": "Check results against thresholds", "type": "n8n-nodes-base.if", "position": [240, 380], "parameters": {"conditions": {"number": [{"value1": "={{ $json.CPU }}", "value2": 80, "operation": "largerEqual"}, {"value1": "={{ $json.Disk }}", "value2": 80, "operation": "largerEqual"}, {"value1": "={{ $json.RAM }}", "value2": 80, "operation": "largerEqual"}]}, "combineOperation": "any"}, "typeVersion": 1}, {"id": "92331c38-cab8-4719-8746-6fb341954516", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [560, 260], "parameters": {"width": 320, "height": 280, "content": "## Update email addresses\nUpdate From and To email addresses in this node to receive notifications"}, "typeVersion": 1}, {"id": "3117fdbc-fde9-469b-bd47-59f45c349162", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [-260, -120], "parameters": {"width": 320, "height": 260, "content": "## Check VPS resource usage every 15 minutes\nThis workflow checks VPS CPU, RAM and Disk usage every 15 minutes and if any of it exceeds 80% will inform you by email"}, "typeVersion": 1}, {"id": "45b4c33a-8f02-4535-b67f-56d9d0aaf2ae", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [180, 260], "parameters": {"width": 360, "height": 280, "content": "## Update threshold\nIf needed, you can increase/decrease the 80% threshold in this node individually per resource "}, "typeVersion": 1}, {"id": "0bf83ea8-b1c4-40f7-8a60-39f765e8ec2c", "name": "Schedule Trigger", "type": "n8n-nodes-base.scheduleTrigger", "position": [-40, 40], "parameters": {"rule": {"interval": [{"field": "minutes", "minutesInterval": 15}]}}, "typeVersion": 1.2}], "pinData": {}, "connections": {"Check CPU usage": {"main": [[{"node": "Merge check results", "type": "main", "index": 0}]]}, "Check RAM usage": {"main": [[{"node": "Check Disk usage", "type": "main", "index": 0}, {"node": "Merge check results", "type": "main", "index": 2}]]}, "Check Disk usage": {"main": [[{"node": "Check CPU usage", "type": "main", "index": 0}, {"node": "Merge check results", "type": "main", "index": 1}]]}, "Schedule Trigger": {"main": [[{"node": "Check RAM usage", "type": "main", "index": 0}]]}, "Merge check results": {"main": [[{"node": "Check results against thresholds", "type": "main", "index": 0}]]}, "Check results against thresholds": {"main": [[{"node": "Send Email", "type": "main", "index": 0}]]}}}