| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // codegraph telemetry ingest — see README.md and docs/design/telemetry.md.
- // Accepted events go straight into the bound D1 database and the worker makes no
- // outbound requests. The only secret is ADMIN_TOKEN, which guards the manual rollup
- // trigger (`wrangler secret put ADMIN_TOKEN`); leave it unset and that route 404s.
- {
- "$schema": "node_modules/wrangler/config-schema.json",
- "name": "codegraph-telemetry",
- "main": "src/index.ts",
- "compatibility_date": "2026-06-12",
- "compatibility_flags": ["nodejs_compat"],
- // First-party endpoint. The custom domain auto-provisions DNS + cert when the
- // getcodegraph.com zone is on the deploying account. workers.dev stays off so
- // the only public surface is the documented one.
- "routes": [{ "pattern": "telemetry.getcodegraph.com", "custom_domain": true }],
- "workers_dev": false,
- "observability": { "enabled": true, "head_sampling_rate": 1 },
- // Nightly rollup + retention purge (src/rollup.ts). 00:30 UTC — half an hour after
- // the day it rolls up closed, so straggling writes for it have landed. It also
- // re-runs the two days before that, because offline clients ship completed-day
- // rollups late; the writes are idempotent upserts, so re-running is free.
- "triggers": { "crons": ["30 0 * * *"] },
- // How many days of RAW events are kept. Rollups are kept forever, so shortening
- // this costs ad-hoc drill-back, never a chart. 90 is a storage limit, not a policy
- // one: raw events grow ≈74 MB/day, so 90 days ≈ 6.7 GB against D1's 10 GB
- // per-database cap — the arithmetic is in migrations/0001_init.sql's footer.
- // Measure real row size after cutover before widening it.
- "vars": { "RETENTION_DAYS": 90 },
- // Telemetry storage. Schema + the chart each table serves: migrations/0001_init.sql.
- // Apply with `npm run db:migrate:local` (local state) / `npm run db:migrate` (remote).
- // The admin dashboard worker binds this same database read-mostly, also as `DB`.
- "d1_databases": [
- {
- "binding": "DB",
- "database_name": "codegraph-telemetry",
- "database_id": "5ed36dfb-d2d7-4e35-9e63-a1b99d0b1ed3",
- "migrations_dir": "migrations"
- }
- ],
- // Per-machine_id rate limit. Legit clients flush a handful of times per day;
- // 6/min absorbs install+index bursts while capping abuse.
- "ratelimits": [
- {
- "name": "MACHINE_RATE_LIMITER",
- "namespace_id": "1001",
- "simple": { "limit": 6, "period": 60 }
- },
- // POST /admin/rollup. The ADMIN_TOKEN secret is the real guard; this only caps
- // how fast it can be guessed at, with enough room for a chunked backfill loop.
- {
- "name": "ADMIN_RATE_LIMITER",
- "namespace_id": "1002",
- "simple": { "limit": 10, "period": 60 }
- }
- ]
- }
|