c38b7d4c78
Add database foundation for observability features: - event_log table with severity/source filtering and pagination - standalone_proxies table for user-created reverse proxies - stale_threshold_days setting (default 7 days) - Auto-persist warn/error events from event bus to database - SSE broadcast of persistent events for real-time UI updates - Frontend types and API functions for downstream UI phases
1.9 KiB
1.9 KiB
Feature Context: Observability & Proxy Management
Configuration
- Development mode: Automated
- Execution mode: Orchestrator
- Strategy: Incremental
- Build (full):
make build - Build (frontend):
cd web && npm install && npm run build - Build (backend):
go build -o docker-watcher ./cmd/server - Test:
go test ./... - Lint (backend):
go vet ./... - Lint (frontend):
cd web && npm run check - Dev server:
make dev(port: 8080)
Current State
Feature branch just created. No implementation yet. Codebase is fully working on main.
Temporary Workarounds
(none yet)
Cross-Phase Dependencies
- Phases 2 & 3 depend on Phase 1 (schema, event_log table, store methods)
- Phases 4, 5, 6, 7 depend on their respective backend phases (1-3) for API endpoints
- Phase 8 depends on Phases 1-3 for backend infrastructure and event system
Deferred Work
(none yet)
Failed Approaches
(none yet)
Review Findings Log
(none yet)
Phase Execution Log
| Phase | Agent Used | Test Writer | Parallel | Notes |
|---|---|---|---|---|
| (none yet) |
Environment & Runtime Notes
- Build is currently blocked on Go 1.25 transitive dep from Docker SDK — may need to use Go 1.24 toolchain
- SQLite has MaxOpenConns=1, so all DB operations are serialized
- Frontend is embedded into Go binary via embed.FS
Implementation Notes
- Event bus (
internal/events/bus.go) uses buffered channels (64 cap), non-blocking publish - NPM client (
internal/npm/client.go) handles JWT auth with auto-refresh - Store uses additive migrations — new
ALTER TABLEstatements are appended to runMigrations(), errors ignored for idempotency - New tables use
CREATE TABLE IF NOT EXISTSin the schema constant - All API responses use envelope pattern:
{success: bool, data?: T, error?: string} - Frontend types in
web/src/lib/types.tsmirror Go models - API functions centralized in
web/src/lib/api.ts