Files
blackroad-os-kpis/collectors/cloudflare.sh
Alexa Amundson 42fb629ba5 v2: 9 collectors, 60+ KPIs — cloudflare, services, local mac, github-deep, autonomy bars
RoadChain-SHA2048: f59eb7b3bb74e603
RoadChain-Identity: alexa@sovereign
RoadChain-Full: f59eb7b3bb74e60325e3dc2bde2dce2d3f77e4afdadb4b559bf44b95318aac5e44854cc056bec1414243177e469feccdf8a5bf21697916f004706ac784fc70a9ce221703ff29c91581884e5903b5d4a6127a3b570eda54801cf7641a17b13490bb8a3d3be04ee01a96030087800f62f02f47e6ca3d76a3e832c8cdfbeefa3ffbd57acc133d9a7d684161e565dd53636a48410cd38d322620c3fac516a79e5831edf3dab2e81c484f583628c617f85f066351f403163cea6e939484ab33bdaaaa27b23695999aa0e68ae9bff10bf9dfbabcd2785b286600e940359f8e2122c708ed62e7a358accafd224da40151104d77017d4c91fa5b35cce8ca7a728d1b37e0
2026-03-12 23:45:44 -05:00

82 lines
2.2 KiB
Bash

#!/bin/bash
# Collect Cloudflare KPIs: D1, KV, R2, Workers, Pages, Tunnels
source "$(dirname "$0")/../lib/common.sh"
log "Collecting Cloudflare KPIs..."
OUT=$(snapshot_file cloudflare)
CF_ACCOUNT="848cf0b18d51e0170e0d1537aec3505a"
# D1 databases
d1_count=0
d1_total_size=0
d1_json="[]"
d1_raw=$(npx wrangler d1 list --json 2>/dev/null || echo '[]')
if [ -n "$d1_raw" ]; then
d1_count=$(echo "$d1_raw" | python3 -c "import json,sys; d=json.load(sys.stdin); print(len(d))" 2>/dev/null || echo 0)
d1_json=$(echo "$d1_raw" | python3 -c "
import json, sys
dbs = json.load(sys.stdin)
print(json.dumps([{'name': d.get('name',''), 'uuid': d.get('uuid','')} for d in dbs]))
" 2>/dev/null || echo '[]')
fi
ok "D1: $d1_count databases"
# KV namespaces
kv_count=0
kv_raw=$(npx wrangler kv namespace list 2>/dev/null || echo '[]')
if [ -n "$kv_raw" ]; then
kv_count=$(echo "$kv_raw" | python3 -c "import json,sys; print(len(json.load(sys.stdin)))" 2>/dev/null || echo 0)
fi
ok "KV: $kv_count namespaces"
# R2 buckets
r2_count=0
# R2 outputs text, not JSON — count "name:" lines
r2_count=$(npx wrangler r2 bucket list 2>/dev/null | grep -c "^name:" || echo 0)
ok "R2: $r2_count buckets"
# Pages projects (table output, count data rows)
pages_count=$(npx wrangler pages project list 2>/dev/null | grep -c "│" || echo 0)
# Subtract header rows (2 per table: header + separator)
pages_count=$((pages_count > 2 ? pages_count - 2 : 0))
ok "Pages: $pages_count projects"
# D1 total size
d1_total_size_kb=0
if [ -n "$d1_raw" ] && [ "$d1_raw" != "[]" ]; then
d1_total_size_kb=$(echo "$d1_raw" | python3 -c "
import json, sys
dbs = json.load(sys.stdin)
total = sum(d.get('file_size', 0) for d in dbs)
print(total // 1024)
" 2>/dev/null || echo 0)
fi
cat > "$OUT" << ENDJSON
{
"source": "cloudflare",
"collected_at": "$TIMESTAMP",
"date": "$TODAY",
"d1": {
"count": $d1_count,
"total_size_kb": $d1_total_size_kb,
"databases": $d1_json
},
"kv": {
"count": $kv_count
},
"r2": {
"count": $r2_count
},
"pages": {
"count": $pages_count
},
"account_id": "$CF_ACCOUNT"
}
ENDJSON
ok "Cloudflare: ${d1_count} D1, ${kv_count} KV, ${r2_count} R2, ${pages_count} Pages"