Commit Graph

2 Commits

Author SHA1 Message Date
rob 958168b3c9 Fix stale data served for limit-only requests
Add freshness check to _detect_gaps() in all cache layers (memory,
database, async_database). For limit-only requests (no start/end),
verify the most recent candle is within 2 intervals of current time.
If stale, flag as a gap so fresh data is fetched from exchange.

This fixes the issue where EDM served hours-old cached data instead
of fetching current candles when clients requested "latest N candles".

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-03 14:34:31 -04:00
rob e501d61445 Implement M1, M2, M3 milestones - full exchange data manager
M1: Core Infrastructure
- Three-tier caching (memory → database → exchange)
- SQLite async database with connection pooling
- Memory cache with LRU eviction and TTL
- Gap detection and forward-fill gap filling
- Completeness validation for data requests

M2: Multi-Exchange Support
- Generic CCXT connector supporting all ccxt exchanges
- Session-based credential management
- WebSocket streaming with pub/sub subscriptions
- Rate limiting via CCXT's built-in limiter

M3: Production Ready
- Health checks (/health, /health/detailed) and metrics (/metrics)
- Connection pooling with WAL mode for SQLite
- Performance benchmarks (pytest-benchmark)
- BrighterTrading integration tests
- Docker deployment (Dockerfile, docker-compose.yml)
- Documentation (API reference, deployment, integration guide)

Includes 284 tests covering all components.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-03 04:05:30 -04:00