Historical Sync
Arkitektur
CLI / Scheduler / Admin / API
|
v
SyncService
/ | \
Discovery Policy Import
| |
v v
competition_sources CompetitionDocument
|
v
historical_results import engine
historical_sync.py är ett tunt CLI. Synklogiken finns i services/sync_service.py och beslutspolicyn i services/sync_policy.py.
Smart arkivering
En tävling hoppas över utan resultat-API-anrop när:
- tävlingens slutdatum, eller startdatum som reserv, är äldre än 30 dagar,
- den tidigare har importerats korrekt,
- senaste status inte är
FAILED.
Status blir SKIPPED_ARCHIVED. FAILED, manuell tävlingssynk och --force-refresh kringgår regeln.
Statusar
DISCOVERED: hittad men ännu inte importerad.IMPORTED: importerad första gången.UPDATED: ändrat innehåll importerades.UNCHANGED: innehållshashen var oförändrad.SKIPPED_ARCHIVED: korrekt historisk tävling hoppades över lokalt.FAILED: senaste hämtningen eller importen misslyckades och ska provas igen.
Retry och statistik
competition_sources lagrar retry_count och last_retry_at. historical_sync_runs lagrar skipped_archived_count, retried_count, retry_success_count och duration_seconds.
Kommandon
python -m historical_sync --mode delta
python -m historical_sync --mode bootstrap
python -m historical_sync --mode bootstrap --force-refresh
python -m historical_sync --mode competition --competition-id 5668016
Avgränsning: lagtävlingar i matchspel
Historikimporten omfattar individuella scratchtävlingar med resultat som kan normaliseras till systemets individuella resultatmodell.
JSM Klubblag och andra lagtävlingar i matchspel/knockout importeras inte. De registreras som SKIPPED_UNSUPPORTED med skip_reason=TEAM_MATCH_PLAY. Statusen är avsiktlig, räknas inte som fel och retryas inte.
Inkrementell kontrollpolicy (v20.39.0)
För att undvika onödiga anrop till Min Golf används tävlingens slutdatum och senaste kontrolltid:
- pågående, framtida och dagens tävlingar kontrolleras vid varje körning,
- avslutade tävlingar som är högst 7 dagar gamla kontrolleras tidigast efter 12 timmar,
- avslutade tävlingar som är 8–30 dagar gamla kontrolleras tidigast efter 72 timmar,
- äldre korrekt importerade tävlingar arkiveras enligt befintlig 30-dagarspolicy,
- misslyckade importer retryas oberoende av intervallen,
SKIPPED_UNSUPPORTEDretryas aldrig,--force-refreshkringgår både arkivering och kontrollintervall.
En tävling som ännu inte ska kontrolleras redovisas som SKIPPED_FRESH. Statusen i
competition_sources skrivs inte över; den senaste riktiga importstatusen bevaras.
Intervallen kan konfigureras med:
HISTORICAL_SYNC_RECENT_WINDOW_DAYS(standard 7)HISTORICAL_SYNC_RECENT_RECHECK_HOURS(standard 12)HISTORICAL_SYNC_SETTLED_RECHECK_HOURS(standard 72)HISTORICAL_SYNC_ARCHIVE_DAYS(standard 30)