- Create src/openrouter_monitor/ package structure - Create models/, routers/, services/, utils/ subpackages - Create tests/unit/ and tests/integration/ structure - Create alembic/, docs/, scripts/ directories - Add test_project_structure.py with 13 unit tests - All tests passing (13/13) Refs: T01
8.7 KiB
8.7 KiB
Product Requirements Document (PRD)
OpenRouter API Key Monitor
1. Panoramica
1.1 Descrizione
OpenRouter API Key Monitor e un applicazione web multi-utente che permette agli utenti di monitorare l utilizzo delle loro API key della piattaforma OpenRouter. L applicazione raccoglie statistiche d uso, le persiste in un database SQLite e fornisce sia un interfaccia web che un API programmatica per l accesso ai dati.
1.2 Obiettivi
- Fornire una dashboard centralizzata per il monitoraggio delle API key OpenRouter
- Permettere a piu utenti di gestire le proprie chiavi in modo indipendente
- Offrire API programmatica per integrazioni esterne
- Persistere i dati storici per analisi nel tempo
1.3 Target Utenti
- Sviluppatori che utilizzano API OpenRouter
- Team che gestiscono multiple API key
- Utenti che necessitano di reportistica sull utilizzo
2. Requisiti Funzionali
2.1 Gestione Utenti (Multi-utente)
2.1.1 Registrazione
- F-001: Gli utenti devono potersi registrare con email e password
- F-002: La password deve essere salvata in modo sicuro (hash)
- F-003: Email deve essere univoca nel sistema
- F-004: Validazione formato email
2.1.2 Autenticazione
- F-005: Login con email e password
- F-006: Gestione sessione utente (JWT o session-based)
- F-007: Logout funzionante
- F-008: Protezione route autenticate
2.1.3 Profilo Utente
- F-009: Visualizzazione profilo personale
- F-010: Modifica password
- F-011: Eliminazione account con conferma
2.2 Gestione API Key
2.2.1 CRUD API Key
- F-012: Aggiungere nuova API key OpenRouter
- F-013: Visualizzare lista API key dell utente
- F-014: Modificare nome/descrizione API key
- F-015: Eliminare API key
- F-016: API key devono essere cifrate nel database
2.2.2 Validazione
- F-017: Verifica validita API key con chiamata test a OpenRouter
- F-018: Visualizzare stato attivo/inattivo per ogni key
2.3 Monitoraggio e Statistiche
2.3.1 Raccolta Dati
- F-019: Sincronizzazione automatica statistiche da OpenRouter API
- F-020: Storico utilizzo (richieste, token, costi)
- F-021: Aggregazione dati per modello LLM utilizzato
2.3.2 Dashboard
- F-022: Vista panoramica utilizzo totale
- F-023: Grafico utilizzo nel tempo (ultimi 30 giorni)
- F-024: Distribuzione utilizzo per modello
- F-025: Costi totali e medi
- F-026: Numero richieste totali e giornaliere medie
2.3.3 Report Dettagliati
- F-027: Filtraggio per intervallo date
- F-028: Filtraggio per API key specifica
- F-029: Filtraggio per modello
- F-030: Esportazione dati (CSV/JSON)
2.4 API Pubblica
2.4.1 Autenticazione API
- F-031: Generazione API token per accesso programmatico
- F-032: Revoca API token
- F-033: Autenticazione via Bearer token
2.4.2 Endpoint
- F-034: GET /api/v1/stats - statistiche aggregate (solo lettura)
- F-035: GET /api/v1/usage - dati di utilizzo dettagliati (solo lettura)
- F-036: GET /api/v1/keys - lista API key con statistiche (solo lettura)
- F-037: Rate limiting su API pubblica
2.4.3 Risposte
- F-038: Formato JSON standardizzato
- F-039: Gestione errori con codici HTTP appropriati
- F-040: Paginazione per risultati grandi
3. Requisiti Non Funzionali
3.1 Performance
- NF-001: Tempo di risposta web < 2 secondi
- NF-002: API response time < 500ms
- NF-003: Supporto per almeno 100 utenti concorrenti
3.2 Sicurezza
- NF-004: Tutte le API key cifrate in database (AES-256)
- NF-005: Password hash con bcrypt/Argon2
- NF-006: HTTPS obbligatorio in produzione
- NF-007: Protezione CSRF
- NF-008: Rate limiting su endpoint di autenticazione
- NF-009: SQL injection prevention (query parameterizzate)
- NF-010: XSS prevention
3.3 Affidabilita
- NF-011: Backup automatico database SQLite
- NF-012: Gestione errori graceful degradation
- NF-013: Logging operazioni critiche
3.4 Usabilita
- NF-014: Interfaccia responsive (mobile-friendly)
- NF-015: Tema chiaro/scuro
- NF-016: Messaggi di errore chiari
3.5 Manutenibilita
- NF-017: Codice documentato
- NF-018: Test coverage >= 90%
- NF-019: Struttura modulare
4. Architettura Tecnica
4.1 Stack Tecnologico
- Backend: Python 3.11+ con FastAPI
- Frontend: HTML + HTMX / React (opzionale)
- Database: SQLite
- ORM: SQLAlchemy
- Autenticazione: JWT
- Task Background: APScheduler / Celery (opzionale)
4.2 Struttura Database
Tabella: users
- id (PK, INTEGER)
- email (UNIQUE, TEXT)
- password_hash (TEXT)
- created_at (TIMESTAMP)
- updated_at (TIMESTAMP)
- is_active (BOOLEAN)
Tabella: api_keys
- id (PK, INTEGER)
- user_id (FK, INTEGER)
- name (TEXT)
- key_encrypted (TEXT)
- is_active (BOOLEAN)
- created_at (TIMESTAMP)
- last_used_at (TIMESTAMP)
Tabella: usage_stats
- id (PK, INTEGER)
- api_key_id (FK, INTEGER)
- date (DATE)
- model (TEXT)
- requests_count (INTEGER)
- tokens_input (INTEGER)
- tokens_output (INTEGER)
- cost (DECIMAL)
- created_at (TIMESTAMP)
Tabella: api_tokens
- id (PK, INTEGER)
- user_id (FK, INTEGER)
- token_hash (TEXT)
- name (TEXT)
- last_used_at (TIMESTAMP)
- created_at (TIMESTAMP)
- is_active (BOOLEAN)
4.3 Integrazione OpenRouter
- API Endpoint: https://openrouter.ai/api/v1/
- Endpoint utilizzati:
- /auth/key - per validazione key
- /credits - per controllo crediti
- (future estensioni per usage stats quando disponibili)
5. Interfaccia Utente
5.1 Pagine Web
5.1.1 Pubbliche
- Login (/login) - Form di accesso
- Registrazione (/register) - Form di registrazione
5.1.2 Autenticate
- Dashboard (/dashboard) - Panoramica utilizzo
- API Keys (/keys) - Gestione API key
- Statistiche (/stats) - Report dettagliati
- Profilo (/profile) - Gestione account
- API Tokens (/tokens) - Gestione token API
5.2 Componenti UI
5.2.1 Dashboard
- Card riepilogative (richieste totali, costi, etc.)
- Grafici utilizzo temporale
- Tabella modelli piu utilizzati
5.2.2 Gestione API Key
- Tabella con nome, stato, ultimo utilizzo
- Form aggiunta/modifica
- Bottone test validita
- Bottone eliminazione con conferma
5.2.3 Statistiche
- Filtri per data, key, modello
- Tabella dettagliata
- Bottone esportazione
6. API Endpoints (Dettaglio)
6.1 Web Routes (HTML)
- GET / - redirect a /dashboard o /login
- GET/POST /login
- GET/POST /register
- GET /logout
- GET /dashboard (protetta)
- GET /keys (protetta)
- GET /stats (protetta)
- GET /profile (protetta)
- GET /tokens (protetta)
6.2 API Routes (JSON)
-
POST /api/auth/login
-
POST /api/auth/register
-
POST /api/auth/logout
-
GET /api/v1/stats (auth: Bearer token)
-
GET /api/v1/usage (auth: Bearer token)
-
GET /api/v1/keys (auth: Bearer token)
7. Cron e Background Tasks
7.1 Sincronizzazione Dati
- Task: Sync Usage Data
- Frequenza: Ogni ora
- Azione: Recupera statistiche da OpenRouter per ogni key attiva
- Persistenza: Salva in usage_stats
7.2 Validazione API Key
- Task: Validate Keys
- Frequenza: Giornaliera
- Azione: Verifica validita di ogni key, aggiorna stato
7.3 Cleanup
- Task: Cleanup Old Data
- Frequenza: Settimanale
- Azione: Rimuove dati piu vecchi di 1 anno (configurabile)
8. Configurazione
8.1 Variabili d Ambiente
- DATABASE_URL - path database SQLite
- SECRET_KEY - chiave per JWT
- ENCRYPTION_KEY - chiave per cifratura API key
- OPENROUTER_API_URL - URL base API OpenRouter
- SYNC_INTERVAL_MINUTES - intervallo sincronizzazione
- MAX_API_KEYS_PER_USER - limite key per utente
- RATE_LIMIT_REQUESTS - limite richieste API
- RATE_LIMIT_WINDOW - finestra rate limit (secondi)
8.2 File Configurazione
- config.yaml (opzionale) - override env vars
9. Deployment
9.1 Requisiti
- Python 3.11+
- SQLite
- (Opzionale) Reverse proxy (nginx/traefik)
9.2 Installazione
- Clone repository
- pip install -r requirements.txt
- Configura variabili d ambiente
- Esegui migrazioni: alembic upgrade head
- Avvia: uvicorn main:app
9.3 Docker (Opzionale)
- Dockerfile fornito
- docker-compose.yml per stack completo
10. Roadmap
Fase 1 (MVP)
- Autenticazione utenti
- CRUD API key
- Dashboard base
- API lettura dati
Fase 2
- Grafici avanzati
- Esportazione dati
- Notifiche (email)
- Rate limiting avanzato
Fase 3
- Supporto multi-team
- RBAC (Ruoli)
- Webhook
- Mobile app
11. Note
- L applicazione e progettata per essere self-hosted
- I dati rimangono locali (SQLite)
- L integrazione con OpenRouter richiede API key valide
- Le API key degli utenti sono sempre cifrate nel database