Commit Graph

3 Commits

Author SHA1 Message Date
Ripley 638bcd2d91 feat: add monitoring API endpoints (10 read-only endpoints)
- GET /monitoring/cost-snapshots + /{id} — list/detail with gateway_id, date range filters
- GET /monitoring/cron-jobs + /{id} — list/detail with gateway_id, enabled, job_name filters
- GET /monitoring/sessions + /{id} — list/detail with gateway_id, session_key, model, event_type filters
- GET /monitoring/health + /{id} — list/detail with gateway_id, date range filters
- GET /monitoring/sub-agents + /{id} — list/detail with gateway_id, status, agent filters
- All endpoints org-scoped (require_org_member), paginated (DefaultLimitOffsetPage)
- Pydantic Read schemas for all 5 monitoring models
- Router registered in main.py
- Removed unused imports (OkResponse, utcnow)
2026-05-10 20:44:44 -05:00
Ripley d09822a821 feat: add gateway data collection service + fix model FK definitions
- Created src/backend/app/services/monitoring/ package:
  - gateway_collector.py: Background asyncio task that polls gateway RPC endpoints
    (usage.cost, usage.status, cron.list, sessions.list/preview, health, status)
    and stores results in monitoring models using upsert pattern
  - models.py: Pydantic schemas for parsing gateway RPC responses
  - __init__.py: Package init, exports GatewayCollectorService

- Added collector startup/shutdown in main.py lifespan:
  - Launches collector as background task when gateways exist
  - Clean shutdown on app termination

- Fixed model FK definitions in monitoring.py and alert_rules.py:
  - Replaced Column(UUID, ForeignKey(...)) with Field(foreign_key=...)
    to match codebase pattern (UUID is Python class, not SQLAlchemy type)
  - Added missing gateway_id field to AlertRule model
  - Removed OpenClawDBService inheritance from GatewayCollectorService
    (uses session factory pattern instead of injected session)
  - Cleaned up duplicate/conflicting imports

- Configurable collection intervals via env vars:
  COLLECTION_INTERVAL_COST (300s), COLLECTION_INTERVAL_CRON (60s),
  COLLECTION_INTERVAL_SESSION (30s), COLLECTION_INTERVAL_HEALTH (60s)
2026-05-10 20:13:16 -05:00
Ripley 9aee2e41e8 feat: initial project setup - base platform forked and running
- Copied base platform (Python/FastAPI backend + Next.js frontend)
- Adapted Dockerfile for src/ layout, fixed scripts paths for worker
- Created compose.yml with local dev configuration
- Auth mode: local (token-based)
- Ports: backend 8080, frontend 3080 (avoiding conflicts)
- All 4 services running: db, redis, backend, frontend, webhook-worker
- 97 API endpoints verified operational
- Database migrations auto-applied
- Git repo initialized on main branch
2026-05-10 11:14:55 -05:00