поправил статус засыпания и просыпания если игра сегодня

This commit is contained in:
2025-11-01 19:02:28 +03:00
parent d69932c271
commit 2fa69cbe1b

View File

@@ -769,6 +769,47 @@ def status_broadcaster():
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) # можно 1560 сек
t = threading.Thread(target=_runner, daemon=True)
t.start()
@asynccontextmanager
async def lifespan(app: FastAPI):
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)
else:
# игра сегодня
# в любом случае запускаем сторож, если знаем время игры
start_prestart_watcher(game_dt)
if cal_status is None:
STATUS = "today_not_started"
start_offline_threads(SEASON, GAME_ID)
elif cal_status == "Scheduled":
if game_dt:
delta = game_dt - datetime.now()
if delta <= timedelta(hours=1):
# если мы уже МЕНЬШЕ чем за 1:10 до игры — сразу в live
if delta <= timedelta(hours=1, minutes=10):
STATUS = "live_soon"
start_live_threads(SEASON, GAME_ID)
else:
@@ -936,16 +982,17 @@ async def lifespan(app: FastAPI):
else:
STATUS = "today_not_started"
start_offline_threads(SEASON, GAME_ID)
elif cal_status == "Online":
STATUS = "live"
start_live_threads(SEASON, GAME_ID)
elif cal_status in ["Result", "ResultConfirmed"]:
STATUS = "finished_today"
start_offline_threads(SEASON, GAME_ID)
else:
STATUS = "today_not_started"
start_offline_threads(SEASON, GAME_ID)
yield
# -------- shutdown --------