feat: suggestions engine, finding actions, alerts and health #4

Merged
KofTwentyTwo merged 1 commits from feature/findings into develop 2026-10-15 16:54:20 +00:00
KofTwentyTwo commented 2026-10-15 16:51:57 +00:00 (Migrated from github.com)

Phase B1 of docs/SPEC.md (sections 6, 8 record actions, 9, 10).

  • analyze: 14 rules (SLOW_QUERY, MISSING_INDEX, UNUSED_INDEX, DUPLICATE_INDEX, N_PLUS_ONE, HOT_JOB, OVER_AUDITED, BLOAT, VACUUM_STALE, POOL_SIZING, IDLE_IN_TRANSACTION, CACHE_HIT_LOW, TEMP_SPILL, DEADLOCKS), each driven by its seeded db_perf_rule row. Findings dedupe by key, rank by severity x impact, auto-resolve when no longer produced, IGNORED stays ignored, disabled rules are inert.
  • Liquibase snippets: CREATE INDEX CONCURRENTLY IF NOT EXISTS / DROP INDEX CONCURRENTLY IF EXISTS changesets with runInTransaction:false and rollbacks; never executed.
  • Scheduled dbPerfAnalyze (durable-eligible) and Analyze now table action.
  • Record actions Acknowledge, Mark resolved, Ignore (note required), Reopen: standard Review/Result, db_performance.manage_findings.
  • Alerts through core QAlerts: dbperf.collection_failed, dbperf.query_spike, dbperf.connection_saturation, dbperf.blocked_chain (core rejects underscores in alert type names, so types are dbperf.*; keys keep db_perf), raised and resolved after each snapshot.
  • Health: db_performance.collector, .stats_access, .connections.

Tests: 66 (H2 and PostgreSQL 17), checkstyle clean, JaCoCo gate met. Implementation by Codex, reviewed by Claude.

🤖 Generated with Claude Code

Phase B1 of docs/SPEC.md (sections 6, 8 record actions, 9, 10). - `analyze`: 14 rules (SLOW_QUERY, MISSING_INDEX, UNUSED_INDEX, DUPLICATE_INDEX, N_PLUS_ONE, HOT_JOB, OVER_AUDITED, BLOAT, VACUUM_STALE, POOL_SIZING, IDLE_IN_TRANSACTION, CACHE_HIT_LOW, TEMP_SPILL, DEADLOCKS), each driven by its seeded `db_perf_rule` row. Findings dedupe by key, rank by severity x impact, auto-resolve when no longer produced, IGNORED stays ignored, disabled rules are inert. - Liquibase snippets: `CREATE INDEX CONCURRENTLY IF NOT EXISTS` / `DROP INDEX CONCURRENTLY IF EXISTS` changesets with `runInTransaction:false` and rollbacks; never executed. - Scheduled `dbPerfAnalyze` (durable-eligible) and Analyze now table action. - Record actions Acknowledge, Mark resolved, Ignore (note required), Reopen: standard Review/Result, `db_performance.manage_findings`. - Alerts through core QAlerts: `dbperf.collection_failed`, `dbperf.query_spike`, `dbperf.connection_saturation`, `dbperf.blocked_chain` (core rejects underscores in alert type names, so types are `dbperf.*`; keys keep `db_perf`), raised and resolved after each snapshot. - Health: `db_performance.collector`, `.stats_access`, `.connections`. Tests: 66 (H2 and PostgreSQL 17), checkstyle clean, JaCoCo gate met. Implementation by Codex, reviewed by Claude. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.