refactor: engineering improvements -- API versioning, structured logging, Alembic, error standardization, test coverage
- API versioning: all REST endpoints prefixed with /api/v1/ - Structured logging: replaced stdlib logging with structlog (console/JSON modes) - Alembic migrations: versioned DB schema with initial migration - Error standardization: global exception handlers for consistent envelope format - Interrupt cleanup: asyncio background task for expired interrupt removal - Integration tests: +30 tests (analytics, replay, openapi, error, session APIs) - Frontend tests: +57 tests (all components, pages, useWebSocket hook) - Backend: 557 tests, 89.75% coverage | Frontend: 80 tests, 16 test files
This commit is contained in:
@@ -54,11 +54,19 @@ Set these in production (never commit secrets):
|
||||
| `ANTHROPIC_API_KEY` | Yes* | LLM provider API key |
|
||||
| `LLM_PROVIDER` | Yes | `anthropic`, `openai`, or `google` |
|
||||
| `LLM_MODEL` | Yes | Model name for your provider |
|
||||
| `ADMIN_API_KEY` | Recommended | API key for admin endpoints (analytics, replay, openapi, WS). Leave empty to disable auth (dev mode only) |
|
||||
| `WEBHOOK_URL` | No | Escalation notification endpoint |
|
||||
| `SESSION_TTL_MINUTES` | No | Session timeout (default: 30) |
|
||||
|
||||
*Or `OPENAI_API_KEY` / `GOOGLE_API_KEY` depending on `LLM_PROVIDER`.
|
||||
|
||||
### Authentication
|
||||
|
||||
When `ADMIN_API_KEY` is set, all admin REST endpoints require the `X-API-Key` header,
|
||||
and WebSocket connections require a `?token=<key>` query parameter.
|
||||
|
||||
When unset or empty, authentication is disabled (suitable for local development only).
|
||||
|
||||
### HTTPS
|
||||
|
||||
For production, place a reverse proxy (nginx, Caddy, or a load balancer) in
|
||||
@@ -87,10 +95,12 @@ cat backup.sql | docker compose exec -T postgres psql -U smart_support smart_sup
|
||||
|
||||
### Scaling
|
||||
|
||||
The backend is stateless (session state is in PostgreSQL via LangGraph's
|
||||
PostgresSaver). You can run multiple backend replicas behind a load balancer.
|
||||
The backend supports multi-worker deployments. LangGraph session state is
|
||||
persisted in PostgreSQL via PostgresSaver. For full horizontal scaling, use
|
||||
`PgSessionManager` and `PgInterruptManager` (instead of the default in-memory
|
||||
managers) to share session and interrupt state across workers.
|
||||
|
||||
The WebSocket connections are session-specific. Use sticky sessions or a shared
|
||||
WebSocket connections are session-specific. Use sticky sessions or a shared
|
||||
session backend if load balancing WebSockets across multiple instances.
|
||||
|
||||
## Manual / Development Setup
|
||||
@@ -139,7 +149,7 @@ GET /api/health
|
||||
|
||||
Response:
|
||||
```json
|
||||
{"status": "ok", "version": "0.5.0"}
|
||||
{"status": "ok", "version": "0.6.0"}
|
||||
```
|
||||
|
||||
### WebSocket health
|
||||
|
||||
Reference in New Issue
Block a user