Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
fb7d6dc
v1
clarkd Aug 17, 2026
2803790
Extending coverage & dashboards
clarkd Aug 18, 2026
3950597
Expand Cloudflare coverage: AI, Media, security and platform analytics
clarkd Aug 18, 2026
37d6263
Merge remote-tracking branch 'origin/main' into work/dc/cloudflare-pl…
clarkd Aug 18, 2026
8bdf7e0
Reset Cloudflare to 1.0.0 for a new-plugin PR
clarkd Aug 18, 2026
34ecb07
Move Cloudflare to v2 and set version 2.0.0
clarkd Aug 18, 2026
d8a38c6
Document that the first import only populates accounts and zones
clarkd Aug 19, 2026
ea213cc
Add four correlation rules and make Turnstile domains an array
clarkd Aug 19, 2026
f5e6d20
Add three more correlation rules across bindings, queues and Access
clarkd Aug 19, 2026
792be65
Document the seven correlation rules missing from the README
clarkd Aug 19, 2026
43536de
Correlate one-to-many relationships on a scalar, not an array
clarkd Aug 19, 2026
85fa486
Render a zone's name servers as a readable list
clarkd Aug 19, 2026
d1c75db
Address PR review on the Cloudflare plugin
clarkd Aug 19, 2026
1597788
Stamp zoneTraffic response with the scoped objects zoneName and zoneTag
andrewmumblebee Sep 9, 2026
0876fe6
Merge remote-tracking branch 'origin/main' into work/dc/cloudflare-pl…
claude Nov 3, 2026
bb09fad
Widen Cloudflare analytics timeframes to each dataset's real limits
claude Nov 3, 2026
4ec7666
Offer 30-day Turnstile analytics for Enterprise plans
claude Nov 3, 2026
60e15c7
Add Zone Firewall Event Volume for 30-day firewall trends on every plan
claude Nov 3, 2026
e70c142
Add account traffic and Workers, storage and RUM metric streams
claude Nov 3, 2026
9201d57
Send the rate-limit header from base config and simplify GraphQL Query
claude Nov 3, 2026
10e0b8e
Replace 19 bespoke GraphQL scripts with a shared graphqlFlatRows.js
claude Nov 4, 2026
c9aeb3d
Fix RUM host matching and review findings
claude Nov 4, 2026
6aecc2d
Drop the first-import limitation from the README
claude Nov 4, 2026
a6fdadb
Update the plugin description and README coverage summary
claude Nov 4, 2026
299fff9
Merge branch 'main' into work/dc/cloudflare-plugin
clarkd Nov 4, 2026
c88c2cd
Add dashboard screenshots
claude Nov 4, 2026
64cdfc0
Remove the read-only and coverage callout from the README intro
claude Nov 4, 2026
b4287ea
Set the plugin author to SquaredUp (first party)
claude Nov 4, 2026
09a99d0
Name the plugin "Cloudflare" to match v1
claude Nov 4, 2026
f68014e
Address Cloudflare v2 review feedback
claude Nov 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
/plugins/Algolia/ @andrewmumblebee
/plugins/AutoTask/ @TimWheeler-SQUP
/plugins/Checkmk/ @shawn149
/plugins/Cloudflare/ @clarkd
/plugins/CodeRabbit/ @TimWheeler-SQUP
/plugins/DattoRMM/ @TimWheeler-SQUP
/plugins/DigiCert/ @shaswot77
Expand Down
31 changes: 31 additions & 0 deletions plugins/Cloudflare/v2/configValidation.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"steps": [
{
"displayName": "Authenticate",
"dataStream": { "name": "verifyToken" },
"required": true,
"error": "Could not authenticate with Cloudflare. Check the API token is valid, has not expired, and has not been revoked.",
"success": "Connected to Cloudflare successfully."
},
{
"displayName": "Check account access",
"dataStream": {
"name": "accounts",
"config": { "errorOnEmptyResults": true }
},
"required": false,
"error": "Authenticated, but no accounts are visible. Add the Account Settings Read permission and set Account Resources to Include all accounts.",
"success": "Accounts accessible."
},
{
"displayName": "Check zone access",
"dataStream": {
"name": "zones",
"config": { "errorOnEmptyResults": true }
},
"required": false,
"error": "Authenticated, but no zones are visible. Add the Zone Read permission and set Zone Resources to Include all zones.",
"success": "Zones accessible."
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"displayName": "Access Application protects Zone",
"source": {
"types": "Cloudflare Access Application"
},
"target": {
"types": "Cloudflare Zone"
},
"conditions": [
{
"sourceProperty": "domain",
"sourceExpression": "{{ value.split('.').slice(-2).join('.') }}",
"operator": "equals",
"targetProperty": "name"
Comment thread
clarkd marked this conversation as resolved.
Resolved
}
],
"labels": {
"forward": "protects",
"reverse": "protected by"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"displayName": "Durable Object Namespace defined by Worker",
"source": {
"types": "Cloudflare Durable Object Namespace"
},
"target": {
"types": "Cloudflare Worker"
},
"conditions": [
{
"sourceProperty": "scriptName",
"operator": "equals",
"targetProperty": "name"
},
{
"sourceProperty": "accountId",
"operator": "equals",
"targetProperty": "accountId"
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
],
"labels": {
"forward": "defined by",
"reverse": "defines"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"displayName": "Pages Project served by Zone",
"source": {
"types": "Cloudflare Pages Project"
},
"target": {
"types": "Cloudflare Zone"
},
"conditions": [
{
"sourceProperty": "primaryDomain",
"operator": "equals",
"targetProperty": "name"
}
],
"labels": {
"forward": "served by",
"reverse": "serves"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"displayName": "Queue receives messages from Worker",
"source": {
"types": "Cloudflare Queue"
},
"target": {
"types": "Cloudflare Worker"
},
"conditions": [
{
"sourceProperty": "primaryProducerScript",
"operator": "equals",
"targetProperty": "name"
},
{
"sourceProperty": "accountId",
"operator": "equals",
"targetProperty": "accountId"
}
],
"labels": {
"forward": "receives messages from",
"reverse": "sends messages to"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"displayName": "Queue consumed by Worker",
"source": {
"types": "Cloudflare Queue"
},
"target": {
"types": "Cloudflare Worker"
},
"conditions": [
{
"sourceProperty": "primaryConsumerScript",
"operator": "equals",
"targetProperty": "name"
},
{
"sourceProperty": "accountId",
"operator": "equals",
"targetProperty": "accountId"
}
],
"labels": {
"forward": "consumed by",
"reverse": "consumes"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"displayName": "Account contains Resource",
"source": {
"types": [
"Cloudflare Zone",
"Cloudflare Worker",
"Cloudflare R2 Bucket",
"Cloudflare Pages Project",
"Cloudflare D1 Database",
"Cloudflare KV Namespace",
"Cloudflare Queue",
"Cloudflare Tunnel",
"Cloudflare Load Balancer Pool",
"Cloudflare Access Application",
"Cloudflare Durable Object Namespace",
"Cloudflare Vectorize Index",
"Cloudflare Hyperdrive Config",
"Cloudflare Stream Video",
"Cloudflare Turnstile Widget",
"Cloudflare AI Gateway",
"Cloudflare AutoRAG",
"Cloudflare Container Application",
"Cloudflare Pipeline",
"Cloudflare Realtime App"
]
},
"target": {
"types": "Cloudflare Account"
},
"conditions": [
{
"sourceProperty": "accountId",
"operator": "equals",
"targetProperty": "rawId"
}
],
"labels": {
"forward": "belongs to",
"reverse": "contains"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"displayName": "Turnstile Widget protects Zone",
"source": {
"types": "Cloudflare Turnstile Widget"
},
"target": {
"types": "Cloudflare Zone"
},
"conditions": [
{
"sourceProperty": "primaryDomain",
"operator": "equals",
"targetProperty": "name"
}
],
"labels": {
"forward": "protects",
"reverse": "protected by"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"displayName": "Worker Binding targets D1 Database",
"source": {
"types": "Cloudflare Worker Binding"
},
"target": {
"types": "Cloudflare D1 Database"
},
"conditions": [
{
"sourceProperty": "d1DatabaseId",
"operator": "equals",
"targetProperty": "rawId"
}
],
"labels": {
"forward": "targets",
"reverse": "targeted by"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"displayName": "Worker Binding targets Durable Object Namespace",
"source": {
"types": "Cloudflare Worker Binding"
},
"target": {
"types": "Cloudflare Durable Object Namespace"
},
"conditions": [
{
"sourceProperty": "durableObjectNamespaceId",
"operator": "equals",
"targetProperty": "rawId"
}
],
"labels": {
"forward": "targets",
"reverse": "targeted by"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"displayName": "Worker Binding targets Hyperdrive Config",
"source": {
"types": "Cloudflare Worker Binding"
},
"target": {
"types": "Cloudflare Hyperdrive Config"
},
"conditions": [
{
"sourceProperty": "hyperdriveConfigId",
"operator": "equals",
"targetProperty": "rawId"
}
],
"labels": {
"forward": "targets",
"reverse": "targeted by"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"displayName": "Worker Binding targets KV Namespace",
"source": {
"types": "Cloudflare Worker Binding"
},
"target": {
"types": "Cloudflare KV Namespace"
},
"conditions": [
{
"sourceProperty": "kvNamespaceId",
"operator": "equals",
"targetProperty": "rawId"
}
],
"labels": {
"forward": "targets",
"reverse": "targeted by"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"displayName": "Worker Binding targets Queue",
"source": {
"types": "Cloudflare Worker Binding"
},
"target": {
"types": "Cloudflare Queue"
},
"conditions": [
{
"sourceProperty": "queueName",
"operator": "equals",
"targetProperty": "name"
},
{
"sourceProperty": "accountId",
"operator": "equals",
"targetProperty": "accountId"
}
],
"labels": {
"forward": "targets",
"reverse": "targeted by"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"displayName": "Worker Binding targets R2 Bucket",
"source": {
"types": "Cloudflare Worker Binding"
},
"target": {
"types": "Cloudflare R2 Bucket"
},
"conditions": [
{
"sourceProperty": "r2BucketName",
"operator": "equals",
"targetProperty": "name"
},
{
"sourceProperty": "accountId",
"operator": "equals",
"targetProperty": "accountId"
}
],
"labels": {
"forward": "targets",
"reverse": "targeted by"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"displayName": "Worker Binding calls Worker",
"source": {
"types": "Cloudflare Worker Binding"
},
"target": {
"types": "Cloudflare Worker"
},
"conditions": [
{
"sourceProperty": "serviceName",
"operator": "equals",
"targetProperty": "name"
},
{
"sourceProperty": "accountId",
"operator": "equals",
"targetProperty": "accountId"
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
],
"labels": {
"forward": "calls",
"reverse": "called by"
}
}
Loading
Loading