поправил статус засыпания и просыпания если игра сегодня
This commit is contained in:
51
get_data.py
51
get_data.py
@@ -769,6 +769,47 @@ def status_broadcaster():
|
|||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
|
|
||||||
|
def start_prestart_watcher(game_dt: datetime | None):
|
||||||
|
"""
|
||||||
|
Следит за временем начала игры.
|
||||||
|
Как только до матча остаётся <= 1ч10м — включает live-треды.
|
||||||
|
Работает только для "игра сегодня".
|
||||||
|
"""
|
||||||
|
if not game_dt:
|
||||||
|
return # нечего ждать
|
||||||
|
|
||||||
|
def _runner():
|
||||||
|
global STATUS
|
||||||
|
# за сколько включать live
|
||||||
|
lead = timedelta(hours=1, minutes=10)
|
||||||
|
switch_at = game_dt - lead
|
||||||
|
|
||||||
|
while not stop_event.is_set():
|
||||||
|
now = datetime.now()
|
||||||
|
|
||||||
|
# если игра уже live/finished — не мешаем
|
||||||
|
if STATUS in ("live", "finished", "finished_wait", "finished_today"):
|
||||||
|
break
|
||||||
|
|
||||||
|
# если время подошло — включаем live и выходим
|
||||||
|
if now >= switch_at:
|
||||||
|
logger.info(
|
||||||
|
f"[prestart] it's {now}, game at {game_dt}, enabling LIVE threads (1h10m rule)"
|
||||||
|
)
|
||||||
|
STATUS = "live_soon"
|
||||||
|
# сначала гасим оффлайн, если он крутится
|
||||||
|
stop_offline_threads()
|
||||||
|
# а потом включаем live
|
||||||
|
start_live_threads(SEASON, GAME_ID)
|
||||||
|
break
|
||||||
|
|
||||||
|
# иначе спим немного и проверяем снова
|
||||||
|
time.sleep(30) # можно 15–60 сек
|
||||||
|
|
||||||
|
t = threading.Thread(target=_runner, daemon=True)
|
||||||
|
t.start()
|
||||||
|
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
async def lifespan(app: FastAPI):
|
async def lifespan(app: FastAPI):
|
||||||
global STATUS, GAME_ID, SEASON, GAME_START_DT, GAME_TODAY, GAME_SOON
|
global STATUS, GAME_ID, SEASON, GAME_START_DT, GAME_TODAY, GAME_SOON
|
||||||
@@ -921,13 +962,18 @@ async def lifespan(app: FastAPI):
|
|||||||
start_offline_threads(SEASON, GAME_ID)
|
start_offline_threads(SEASON, GAME_ID)
|
||||||
else:
|
else:
|
||||||
# игра сегодня
|
# игра сегодня
|
||||||
|
# в любом случае запускаем сторож, если знаем время игры
|
||||||
|
start_prestart_watcher(game_dt)
|
||||||
|
|
||||||
if cal_status is None:
|
if cal_status is None:
|
||||||
STATUS = "today_not_started"
|
STATUS = "today_not_started"
|
||||||
start_offline_threads(SEASON, GAME_ID)
|
start_offline_threads(SEASON, GAME_ID)
|
||||||
|
|
||||||
elif cal_status == "Scheduled":
|
elif cal_status == "Scheduled":
|
||||||
if game_dt:
|
if game_dt:
|
||||||
delta = game_dt - datetime.now()
|
delta = game_dt - datetime.now()
|
||||||
if delta <= timedelta(hours=1):
|
# если мы уже МЕНЬШЕ чем за 1:10 до игры — сразу в live
|
||||||
|
if delta <= timedelta(hours=1, minutes=10):
|
||||||
STATUS = "live_soon"
|
STATUS = "live_soon"
|
||||||
start_live_threads(SEASON, GAME_ID)
|
start_live_threads(SEASON, GAME_ID)
|
||||||
else:
|
else:
|
||||||
@@ -936,16 +982,17 @@ async def lifespan(app: FastAPI):
|
|||||||
else:
|
else:
|
||||||
STATUS = "today_not_started"
|
STATUS = "today_not_started"
|
||||||
start_offline_threads(SEASON, GAME_ID)
|
start_offline_threads(SEASON, GAME_ID)
|
||||||
|
|
||||||
elif cal_status == "Online":
|
elif cal_status == "Online":
|
||||||
STATUS = "live"
|
STATUS = "live"
|
||||||
start_live_threads(SEASON, GAME_ID)
|
start_live_threads(SEASON, GAME_ID)
|
||||||
|
|
||||||
elif cal_status in ["Result", "ResultConfirmed"]:
|
elif cal_status in ["Result", "ResultConfirmed"]:
|
||||||
STATUS = "finished_today"
|
STATUS = "finished_today"
|
||||||
start_offline_threads(SEASON, GAME_ID)
|
start_offline_threads(SEASON, GAME_ID)
|
||||||
else:
|
else:
|
||||||
STATUS = "today_not_started"
|
STATUS = "today_not_started"
|
||||||
start_offline_threads(SEASON, GAME_ID)
|
start_offline_threads(SEASON, GAME_ID)
|
||||||
|
|
||||||
yield
|
yield
|
||||||
|
|
||||||
# -------- shutdown --------
|
# -------- shutdown --------
|
||||||
|
|||||||
Reference in New Issue
Block a user