Novi scheduler kontejner, catchup u 05:00 UTC i churn ponedeljkom. Dva buga uhvaćena u validaciji: BTC parovi lažno delisted i provider koji je pisao otvorene sveće.
Klines cache sad ima automatsko održavanje. Dva nova cron job-a u scheduler-u:
update_klines_cache_daily: per (symbol, interval) inkrementalni fetch od MAX(open_time)+1interval do nowweekly_symbol_churn: detekcija novih USDT+BTC perpetuala, 2y backfill za njihsrc/klines_cache_maintenance.py (novi modul, ~250 lines)Dva entry-point-a:
daily_catchup(analyzer, intervals=DEFAULT_INTERVALS) → Dict — incremental updateweekly_symbol_churn(analyzer, intervals, backfill_days=730) → Dict — new symbol detection + backfillKarakteristike:
AsyncClient (isolated event loop) — radi pravilno kad se zove iz scheduler thread-aclose_time_ms > now_ms skip)INSERT OR REPLACE — idempotentno, stale rows mogu da budu refresh-ovanisrc/scheduler.py izmeneDodato:
last_klines_catchup_at, last_klines_catchup_status poljalast_symbol_churn_at, last_symbol_churn_status polja_write_klines_maintenance_status() — piše JSON status u reports/klines_maintenance_status.jsonrun_klines_catchup() i run_symbol_churn() metodesetup_schedule(): dva nova schedule.every().day/monday.at(...).do(...) redaSchedule setup: Scan every 5 minutes, Monitor every 10 minutes, Generator live every 10s,
Klines catchup daily at 05:00 UTC, Symbol churn weekly Mon at 06:00 UTCsrc/config.py — 2 nova ENV podržanaKLINES_CATCHUP_TIME_UTC (default 05:00)SYMBOL_CHURN_TIME_UTC (default 06:00)src/web_app.py — nova 2 admin endpoint-aPOST /api/admin/klines_catchup/run — manual triggerPOST /api/admin/symbol_churn/run — manual trigger/api/health proširena sa last_klines_catchup_* i last_symbol_churn_* poljimadocker-compose.yml — novi scheduler servicescheduler:
build:
context: .
network: host
restart: always
command: python scheduler_service.py
environment:
- DATABASE_URL=postgresql://...
- REDIS_URL=redis://redis:6379/0
- ENABLE_SCHEDULER=true
env_file:
- .env
volumes:
- ./reports:/app/reports
- ./database:/app/database
depends_on:
- db
- redisRazlog: web container koristi gunicorn app:app koji ne pokreće scheduler.start_scheduler(). Bez separate scheduler containera, nijedan cron job nije aktivan.
Backup originalnog compose-a: docker-compose.yml.bak.2026-05-20-v2
Originalni _async_get_eligible vraćao samo USDT verzije. Pošto cache sadrži oba (generator računa btc_growth_pct), 71 BTC pair je lažno označen kao delisted. Fix: eligible sad vraća OBA {base}USDT i {base}BTC.
Posle fix-a: 139 cached, 136 eligible, 3 stvarno delisted (BTCUSDT [koji nema BTCBTC pair], ENAUSDT i ENABTC).
Otkriveno: clean_stale_open_candles.py --dry-run našao 275 stale rows posle Faze 2 equivalence test-a. Source: KlinesProvider._write_cache nije imao open-candle skip. Fix: dodat if close_ms > now_ms: continue. Posle deploy-a + restart-a web/celery containera (gunicorn worker re-import), 0 stale rows.
Daily catchup (1d only): elapsed=32.8s, symbols=139, 69 fetched (open candles, skipped on insert)
Symbol churn: cached=139, eligible=136, new=0, delisted=3 (BTCUSDT, ENABTC, ENAUSDT)
Stale rows after run: 0Iz scheduler container log-a:
2026-05-20 16:38:27 [INFO] src.scheduler: Schedule setup: ..., Klines catchup daily at 05:00 UTC, Symbol churn weekly Mon at 06:00 UTC
2026-05-20 16:38:27 [INFO] src.scheduler: Scheduler started
2026-05-20 16:38:27 [INFO] __main__: Scheduler service runningcache_max i now na svaki generator backfillnow mora da napravi 100+ Binance poziva po simbolureports/klines_maintenance_status.json se piše posle svakog run-aklines_features tabela sa precomputed RSI/ADX/EMA/BB/Supertrenddf['rsi'] = compute_rsi(df, 14), koristi df['rsi'] = df['rsi_14']klines → recompute features za novi rangeexchange u PRIMARY KEYsrc/klines_cache_maintenance.py, src/scheduler.py (izmena), src/config.py (2 nove ENV), src/web_app.py (2 endpoint + health), tools/history_cache/inspect_stale.py, tools/analysis/faza3_smoke_test.pydocker-compose.yml + scheduler service; backup .bak.2026-05-20-v2reports/klines_maintenance_status.json (auto-updated)Izvor: crypto_scanner/reports/analysis/2026-05-20_faza3_cron_maintenance.md