тайм слип

This commit is contained in:
2025-11-01 18:50:04 +03:00
parent bc396cb90d
commit 27faa3e78f
2 changed files with 69 additions and 17 deletions

View File

@@ -91,8 +91,8 @@ SEASON = None
GAME_START_DT = None # datetime начала матча (локальная из календаря)
GAME_TODAY = False # флаг: игра сегодня
GAME_SOON = False # флаг: игра сегодня и скоро (<1 часа)
OFFLINE_SWITCH_AT = None # timestamp, когда надо уйти в оффлайн
OFFLINE_DELAY_SEC = 600 # 10 минут
OFFLINE_SWITCH_AT = None # timestamp, когда надо уйти в оффлайн
OFFLINE_DELAY_SEC = 600 # 10 минут
# общая очередь
results_q = queue.Queue()
@@ -337,11 +337,12 @@ def get_data_from_API(
logger.debug(f"[{ts}] name: {name}, status: {value.get('status', 'no-status')}")
# сколько уже заняло
elapsed = time.time() - start
# elapsed = time.time() - start
# сколько надо доспать, чтобы в сумме вышла нужная частота
to_sleep = sleep_time - elapsed
if to_sleep > 0:
time.sleep(to_sleep)
# to_sleep = sleep_time - elapsed
# print(to_sleep)
# if to_sleep > 0:
time.sleep(sleep_time)
# если запрос занял дольше — просто сразу следующую итерацию
@@ -460,8 +461,12 @@ def results_consumer():
raw_ls_status_low = str(raw_ls_status).lower()
finished_markers = [
"finished", "result", "resultconfirmed",
"ended", "final", "game over",
"finished",
"result",
"resultconfirmed",
"ended",
"final",
"game over",
]
# 1) матч ЗАКОНЧЕН → запускаем ОТСРОЧЕННЫЙ переход
@@ -469,7 +474,9 @@ def results_consumer():
now_ts = time.time()
# если ещё не назначали переход — назначим
if globals().get("OFFLINE_SWITCH_AT") is None:
switch_at = now_ts + globals().get("OFFLINE_DELAY_SEC", 600)
switch_at = now_ts + globals().get(
"OFFLINE_DELAY_SEC", 600
)
globals()["OFFLINE_SWITCH_AT"] = switch_at
# статус тоже обозначим, что он завершён, но ждёт
@@ -481,20 +488,28 @@ def results_consumer():
else:
globals()["STATUS"] = "finished_wait"
human_time = datetime.fromtimestamp(switch_at).strftime("%H:%M:%S")
human_time = datetime.fromtimestamp(switch_at).strftime(
"%H:%M:%S"
)
logger.info(
f"[status] match finished → will switch to OFFLINE at {human_time} "
f"(in {globals().get('OFFLINE_DELAY_SEC', 600)}s)"
)
else:
# уже ждём — можно в debug
logger.debug("[status] match finished → OFFLINE already scheduled")
logger.debug(
"[status] match finished → OFFLINE already scheduled"
)
# 2) матч снова стал онлайном → СБРАСЫВАЕМ отложенный переход
elif "online" in raw_ls_status_low or "live" in raw_ls_status_low:
elif (
"online" in raw_ls_status_low or "live" in raw_ls_status_low
):
# если до этого стояла отложка — уберём
if globals().get("OFFLINE_SWITCH_AT") is not None:
logger.info("[status] match back to LIVE → cancel scheduled OFFLINE")
logger.info(
"[status] match back to LIVE → cancel scheduled OFFLINE"
)
globals()["OFFLINE_SWITCH_AT"] = None
if globals().get("STATUS") not in ["live", "live_soon"]:
@@ -505,8 +520,9 @@ def results_consumer():
start_live_threads(SEASON, GAME_ID)
except Exception as e:
logger.warning(f"results_consumer: live-status postprocess error: {e}")
logger.warning(
f"results_consumer: live-status postprocess error: {e}"
)
else:
if source == "game":
@@ -1007,6 +1023,7 @@ async def game():
@app.get("/status")
async def status(request: Request):
global STATUS # будем его править, если live-status свежее
def color_for_status(status_value: str) -> str:
"""Подбор цвета статуса в HEX"""
status_value = str(status_value).lower()
@@ -1100,7 +1117,6 @@ async def status(request: Request):
gs_class = status_raw
gs_text = "⚪ Unknown"
html = f"""
<html>
<head>

36
replace.bat Normal file
View File

@@ -0,0 +1,36 @@
@echo off
setlocal
rem === Проверка аргументов ===
if "%~1"=="" (
echo ❌ Укажите путь к XML-файлу.
echo Пример: replace_url.bat "C:\path\to\file.xml" "https://gfx.tvstart.ru"
exit /b 1
)
if "%~2"=="" (
echo ❌ Укажите новый базовый URL.
echo Пример: replace_url.bat "C:\path\to\file.xml" "https://gfx.tvstart.ru"
exit /b 1
)
set "FILE=%~1"
set "NEWURL=%~2"
echo 🔄 Обработка файла: %FILE%
echo 🔗 Новый базовый URL: %NEWURL%
echo.
powershell -NoLogo -NoProfile -Command ^
$file = '%FILE%'; ^
$newUrl = '%NEWURL%'; ^
$content = Get-Content -Raw $file; ^
# шаблон: ищем http(s)://домен или IP:порт и сохраняем хвост, если есть
$pattern = '(?s)(https?:\/\/\w{3,}\.\w+\.\w{2,}|http:\/\/\d+\.\d+\.\d+\.\d+:\d+)(\/[^\s<"]*)?'; ^
# замена: если есть хвост — добавляем его обратно, иначе только базовый URL
$content = [regex]::Replace($content, $pattern, {
if ($matches[2]) { "$newUrl$($matches[2])" } else { "$newUrl" }
}); ^
Set-Content -Path $file -Value $content -Encoding UTF8
echo ✅ Замена завершена.
pause