тайм слип
This commit is contained in:
48
get_data.py
48
get_data.py
@@ -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
36
replace.bat
Normal 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
|
||||
Reference in New Issue
Block a user