feat(telemetry): readable Sentry errors, Python tracebacks, and diagnostic mode

Keeps a real, redacted error message instead of "Error: Error", surfaces Python tracebacks in Sentry as a vetted context, and adds an opt-in SNAPOTTER_SENTRY_DIAGNOSTIC verbose mode plus SNAPOTTER_SENTRY_DSN_OVERRIDE. The default fleet path ships nothing on the never-collect list; raw detail is reachable only via the opt-in flag. Also classifies Redis OOM/READONLY replies as operational and removes a ReDoS in stack-frame extraction.
This commit is contained in:
SnapOtter
2026-08-03 13:13:38 +08:00
committed by GitHub
parent 865390ce66
commit 04ef1141fb
22 changed files with 593 additions and 178 deletions
+10
View File
@@ -112,6 +112,16 @@ LOG_DIR=./data/logs # rotating log ring for support bundles
# SNAPOTTER_TELEMETRY=1
# Label this instance's error reports (shows as the Sentry environment).
# SNAPOTTER_ENV=production
# Opt-in verbose diagnostics for THIS instance only (off by default). When on,
# error reports keep the raw message, request path, and breadcrumb data. Use it
# to reproduce a reported bug, or on your own canonical instance. It never
# re-enables telemetry when analytics is off.
# SNAPOTTER_SENTRY_DIAGNOSTIC=1
# Send this instance's errors to your OWN Sentry project instead of the baked one.
# SNAPOTTER_SENTRY_DSN_OVERRIDE=
# Performance tracing sample rate (0 = off, the default; 0.05 = light). A sampler
# zeroes db/redis/poll spans so it cannot cause a quota storm.
# SENTRY_TRACES_SAMPLE_RATE=0
# One-time SQLite import on first boot (1.x upgrade path). Leave unset normally.
# SQLITE_MIGRATE_PATH=/data/snapotter.db