- Read response as text first, then parse JSON
- Log raw body on parse failure (up to 500 chars)
- Log status code + body on non-2xx responses
- Helps diagnose 'expected ident at line 1 column 2' error
- Health endpoint now checks DB connectivity
- Track health check total/failures
- DEP_DB_UP gauge (1=up, 0=down) + latency histogram
- APP_UPTIME_SECONDS updated on each health check
- Metrics: A1-A10 (10 metrics instrumented)
- INGEST_RATE_1M/5M gauges defined (computed by Prometheus rate())
- LLM extract duration histogram defined
- Fact extract duration histogram defined
- Dedup and contradiction counters defined
- Active projects gauge defined
- Rate patterns derived from INGEST_REQUESTS_TOTAL via PromQL
- Metrics: IR1-IR10 (10 metrics defined, computed by Prometheus)
- DB pool size/idle/active gauges updated every 60s (background task)
- DB query total/errors counters defined
- DB query/transaction duration histograms defined
- Table row count gauges (entity, edge, chunk) updated periodically
- Deep PG stats (pg_stat_*, pg_statio_*) collected by pg_exporter
- Metrics: PG1-PG33 (app-visible subset, rest from pg_exporter)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Complete Observability Stack (O1-O13)
Implements all 13 observability issues in a single PR. 119 metrics total.
Commits (one per issue)
Key Changes
Testing
Deploy
Closes #27 #28 #29 #30 #31 #32 #33 #34 #35 #36 #37 #38 #39
- ERRORS_BY_USER: labeled counter {user_id, endpoint, error_name} - REQUESTS_BY_USER: labeled counter {user_id, endpoint} - extract_user_id(): decode JWT sub claim from Authorization header - Error names: auth_failure, forbidden, rate_limited, bad_request, embedding_failure - Ingest handler: tracks user_id from claims.sub - Query handler: tracks user_id from JWT decode - Context handler: tracks user_id from claims.sub - render_labeled_counter(): generic Prometheus label renderer - User identity from gateway JWT (claims.sub per API.md) - 515 tests passing