o
    ÕSHi  ã                   @  sÀ   d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ e d
¡Zejejdd dd„ Zdd„ Zedkr^eƒ  dS dS )é    )ÚannotationsN)Úsettings)Úinit_db)ÚDatabaseManager)ÚFlashscoreParser)ÚPredictorAgent)Úcompute_metrics)ÚAnalyzerAgentzcore.workerz4%(asctime)s | %(levelname)s | %(name)s | %(message)s)ÚlevelÚformatc                  Ã  sÒ  t ƒ I d H  tƒ } tƒ }t| dd}t| ƒ}d}d}d}d}t ¡ }|s)tdƒ‚t 	dt
|ƒ¡ 	 t ¡ }	|	| tjkr|	}|D ]?}
z$| |
¡I d H }|d d… D ]
}|  |¡I d H  qRt 	dt
|ƒ|
¡ W qA ty€ } zt d	|
|¡ W Y d }~qAd }~ww |	| tjkr|	}zc| jd
ddI d H }|| jdddI d H  }|D ]>}|jsªq¤| |j¡I d H }|j|j|j|j|j|j| d|j¡| d|j¡| d|j¡| d|j¡dœ
}|  |¡I d H  q¤|rít 	dt
|ƒ¡ W n ty } zt d|¡ W Y d }~nd }~ww |	| dkr:|	}z| ¡ I d H }t 	d|¡ W n ty9 } zt d|¡ W Y d }~nd }~ww z7| jdddI d H | jd
ddI d H  }|D ]}|  |¡I d H }|  !|¡I d H  qQ|rpt 	dt
|ƒ¡ W n tyŠ } zt d|¡ W Y d }~nd }~ww |	| dkrß|	}z1t"| ddI d H }| j#d|d |d  |d! |d" d#I d H  t 	d$|d |d  |d! |d" ¡ W n tyÞ } zt d%|¡ W Y d }~nd }~ww t$ %tj&¡I d H  q2)&Né   )Úwindowg        z)No FLASHSCORE_COMPETITION_URLS configuredzWorker started. competitions=%dTéú   zSynced %d matches from %sz#Competition fetch failed for %s: %sÚliveéx   )ÚstatusÚlimitÚ	scheduledé(   r   ÚminuteÚ
home_scoreÚ
away_score)
ÚidÚcompetition_urlÚ	match_urlÚ
kickoff_tsÚ	home_teamÚ	away_teamr   r   r   r   zLive refresh candidates=%dzLive refresh failed: %si„  z%Team strengths recomputed: updated=%dz#Team strengths recompute failed: %séP   z"Predictions updated for %d matcheszPrediction update failed: %siX  zpoisson+form)ÚmodelÚ	n_matchesÚaccuracyÚbrierÚlogloss)r   ÚnÚaccr"   r#   z1Metrics updated: n=%d acc=%.3f brier=%.3f ll=%.3fzMetrics compute failed: %s)'r   r   r   r	   r   r   Úcompetition_urlsÚRuntimeErrorÚlogÚinfoÚlenÚtimeÚREFRESH_UPCOMING_EVERY_SÚfetch_competition_matchesÚupsert_matchÚ	ExceptionÚ	exceptionÚREFRESH_LIVE_EVERY_SÚlist_matchesr   Úfetch_match_detail_updater   r   r   r   r   Úgetr   r   r   r   Úrecompute_team_strengthsÚpredict_for_matchÚupsert_predictionr   Úsave_metricsÚasyncioÚsleepÚLOOP_TICK_S)ÚdbÚparserÚanalyzerÚ	predictorÚlast_upcomingÚ	last_liveÚlast_metricsÚlast_strengthsr&   ÚnowÚcuÚmatchesÚmÚeÚlive_matchesÚ
candidatesÚupdÚmergedÚupdatedÚtargetsÚprÚmet© rQ   ú5/var/www/www-root/data/www/77.83.87.30/core/worker.pyÚworker_loop   s²   €€ÿö€€ÿ€ÿ(€€ÿ*&€ÿ´rS   c                   C  s   t  tƒ ¡ d S )N)r9   ÚrunrS   rQ   rQ   rQ   rR   Úmaino   s   rU   Ú__main__)Ú
__future__r   r9   r+   ÚjsonÚloggingÚconfigr   Údatabase.dbr   Údatabase.managerr   Úagents.parser_agentr   Úagents.predictor_agentr   Úanalytics.metricsr   Úagents.analyzer_agentr	   Ú	getLoggerr(   ÚbasicConfigÚINFOrS   rU   Ú__name__rQ   rQ   rQ   rR   Ú<module>   s      
a
ÿ