mirror of
https://github.com/blackboxprogramming/blackroad-os-kpis.git
synced 2026-03-18 06:34:02 -05:00
RoadChain-SHA2048: f59eb7b3bb74e603 RoadChain-Identity: alexa@sovereign RoadChain-Full: f59eb7b3bb74e60325e3dc2bde2dce2d3f77e4afdadb4b559bf44b95318aac5e44854cc056bec1414243177e469feccdf8a5bf21697916f004706ac784fc70a9ce221703ff29c91581884e5903b5d4a6127a3b570eda54801cf7641a17b13490bb8a3d3be04ee01a96030087800f62f02f47e6ca3d76a3e832c8cdfbeefa3ffbd57acc133d9a7d684161e565dd53636a48410cd38d322620c3fac516a79e5831edf3dab2e81c484f583628c617f85f066351f403163cea6e939484ab33bdaaaa27b23695999aa0e68ae9bff10bf9dfbabcd2785b286600e940359f8e2122c708ed62e7a358accafd224da40151104d77017d4c91fa5b35cce8ca7a728d1b37e0
82 lines
2.2 KiB
Bash
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"
|