|
3182 | 3182 | "refId": "A" |
3183 | 3183 | } |
3184 | 3184 | ] |
| 3185 | + }, |
| 3186 | + { |
| 3187 | + "collapsed": false, |
| 3188 | + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 222 }, |
| 3189 | + "id": 200, |
| 3190 | + "title": "Cloudflare D1 (Central Cloud, #3810)", |
| 3191 | + "type": "row" |
| 3192 | + }, |
| 3193 | + { |
| 3194 | + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, |
| 3195 | + "fieldConfig": { |
| 3196 | + "defaults": { |
| 3197 | + "color": { "mode": "thresholds" }, |
| 3198 | + "thresholds": { |
| 3199 | + "mode": "absolute", |
| 3200 | + "steps": [ |
| 3201 | + { "color": "green", "value": null }, |
| 3202 | + { "color": "yellow", "value": 7000000000 }, |
| 3203 | + { "color": "red", "value": 9000000000 } |
| 3204 | + ] |
| 3205 | + }, |
| 3206 | + "unit": "decbytes" |
| 3207 | + } |
| 3208 | + }, |
| 3209 | + "gridPos": { "h": 4, "w": 8, "x": 0, "y": 223 }, |
| 3210 | + "id": 201, |
| 3211 | + "options": { |
| 3212 | + "colorMode": "background", |
| 3213 | + "graphMode": "area", |
| 3214 | + "justifyMode": "auto", |
| 3215 | + "orientation": "auto", |
| 3216 | + "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, |
| 3217 | + "textMode": "auto" |
| 3218 | + }, |
| 3219 | + "title": "D1 Database Size (-1 = probe disabled/no sample yet)", |
| 3220 | + "description": "Cloudflare D1 file size for the monitored database, from the opt-in Management API probe (src/selfhost/d1-size-probe.ts, CLOUDFLARE_D1_MONITOR_* env vars). -1 means the probe is disabled or has never completed a successful sample. D1's known per-database cap is ~10GB (#3810).", |
| 3221 | + "type": "stat", |
| 3222 | + "targets": [ |
| 3223 | + { |
| 3224 | + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, |
| 3225 | + "expr": "gittensory_d1_database_size_bytes", |
| 3226 | + "legendFormat": "size", |
| 3227 | + "refId": "A" |
| 3228 | + } |
| 3229 | + ] |
| 3230 | + }, |
| 3231 | + { |
| 3232 | + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, |
| 3233 | + "fieldConfig": { |
| 3234 | + "defaults": { |
| 3235 | + "color": { "mode": "thresholds" }, |
| 3236 | + "thresholds": { |
| 3237 | + "mode": "absolute", |
| 3238 | + "steps": [ |
| 3239 | + { "color": "green", "value": null }, |
| 3240 | + { "color": "yellow", "value": 10 }, |
| 3241 | + { "color": "red", "value": 50 } |
| 3242 | + ] |
| 3243 | + }, |
| 3244 | + "unit": "short" |
| 3245 | + } |
| 3246 | + }, |
| 3247 | + "gridPos": { "h": 4, "w": 8, "x": 8, "y": 223 }, |
| 3248 | + "id": 202, |
| 3249 | + "options": { |
| 3250 | + "colorMode": "background", |
| 3251 | + "graphMode": "area", |
| 3252 | + "justifyMode": "auto", |
| 3253 | + "orientation": "auto", |
| 3254 | + "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, |
| 3255 | + "textMode": "auto" |
| 3256 | + }, |
| 3257 | + "title": "signal_snapshots Rows per Dedup Key (-1 = unavailable)", |
| 3258 | + "description": "signal_snapshots row count divided by its distinct (signal_type, target_key) count, scoped to the latest-only-dedup signal types dedupeSignalSnapshots (src/db/retention.ts) converges to ~1 row per key. A climbing value means the daily dedup job has stopped running or its allowlist regressed -- the 2026-07-06 incident ratio was ~157 (342243 rows / 2183 keys).", |
| 3259 | + "type": "stat", |
| 3260 | + "targets": [ |
| 3261 | + { |
| 3262 | + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, |
| 3263 | + "expr": "gittensory_signal_snapshots_rows_per_key", |
| 3264 | + "legendFormat": "rows/key", |
| 3265 | + "refId": "A" |
| 3266 | + } |
| 3267 | + ] |
| 3268 | + }, |
| 3269 | + { |
| 3270 | + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, |
| 3271 | + "fieldConfig": { |
| 3272 | + "defaults": { |
| 3273 | + "color": { "mode": "thresholds" }, |
| 3274 | + "thresholds": { |
| 3275 | + "mode": "absolute", |
| 3276 | + "steps": [ |
| 3277 | + { "color": "green", "value": null }, |
| 3278 | + { "color": "red", "value": 1 } |
| 3279 | + ] |
| 3280 | + }, |
| 3281 | + "unit": "short" |
| 3282 | + } |
| 3283 | + }, |
| 3284 | + "gridPos": { "h": 4, "w": 8, "x": 16, "y": 223 }, |
| 3285 | + "id": 203, |
| 3286 | + "options": { |
| 3287 | + "colorMode": "background", |
| 3288 | + "graphMode": "none", |
| 3289 | + "justifyMode": "auto", |
| 3290 | + "orientation": "auto", |
| 3291 | + "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, |
| 3292 | + "textMode": "auto" |
| 3293 | + }, |
| 3294 | + "title": "D1 Probe Errors (total)", |
| 3295 | + "description": "Cloudflare Management API probe failures (src/selfhost/d1-size-probe.ts), labeled by part (database_info/table_row_count). Climbing while the size/row-count panels stay flat means the PROBE is broken (bad/expired token, wrong account or database id), not that the database stopped growing.", |
| 3296 | + "type": "stat", |
| 3297 | + "targets": [ |
| 3298 | + { |
| 3299 | + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, |
| 3300 | + "expr": "sum(gittensory_d1_probe_errors_total) or vector(0)", |
| 3301 | + "legendFormat": "errors", |
| 3302 | + "refId": "A" |
| 3303 | + } |
| 3304 | + ] |
| 3305 | + }, |
| 3306 | + { |
| 3307 | + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, |
| 3308 | + "fieldConfig": { |
| 3309 | + "defaults": { |
| 3310 | + "color": { "mode": "palette-classic" }, |
| 3311 | + "custom": { "lineWidth": 2, "fillOpacity": 10 }, |
| 3312 | + "unit": "short" |
| 3313 | + } |
| 3314 | + }, |
| 3315 | + "gridPos": { "h": 8, "w": 24, "x": 0, "y": 227 }, |
| 3316 | + "id": 204, |
| 3317 | + "options": { |
| 3318 | + "legend": { "calcs": ["lastNotNull"], "displayMode": "table", "placement": "bottom" }, |
| 3319 | + "tooltip": { "mode": "multi", "sort": "desc" } |
| 3320 | + }, |
| 3321 | + "title": "D1 Database Size & Monitored Table Row Counts", |
| 3322 | + "description": "Trend view of the same D1 size/row-count probe as the stat panels above -- database bytes on the left axis scale, monitored-table row counts (RETENTION_POLICY's tables, src/db/retention.ts) labeled by table.", |
| 3323 | + "type": "timeseries", |
| 3324 | + "targets": [ |
| 3325 | + { |
| 3326 | + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, |
| 3327 | + "expr": "gittensory_d1_database_size_bytes", |
| 3328 | + "legendFormat": "database bytes", |
| 3329 | + "refId": "A" |
| 3330 | + }, |
| 3331 | + { |
| 3332 | + "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" }, |
| 3333 | + "expr": "gittensory_d1_table_row_count", |
| 3334 | + "legendFormat": "{{table}} rows", |
| 3335 | + "refId": "B" |
| 3336 | + } |
| 3337 | + ] |
3185 | 3338 | } |
3186 | 3339 | ], |
3187 | 3340 | "refresh": "30s", |
|
3206 | 3359 | "timezone": "browser", |
3207 | 3360 | "title": "Gittensory Self-Host", |
3208 | 3361 | "uid": "gittensory-selfhost", |
3209 | | - "version": 9 |
| 3362 | + "version": 10 |
3210 | 3363 | } |
0 commit comments