29 lines
892 B
Python
29 lines
892 B
Python
"""Heartbeat для Docker healthcheck.
|
||
|
||
Бот периодически обновляет mtime файла; healthcheck считает контейнер живым,
|
||
если файл свежий. Если event loop завис — heartbeat перестаёт обновляться.
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import asyncio
|
||
import logging
|
||
from pathlib import Path
|
||
|
||
from common.config import get_settings
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
HEARTBEAT_INTERVAL = 30
|
||
|
||
|
||
async def run_heartbeat() -> None:
|
||
"""Обновлять файл-heartbeat каждые ``HEARTBEAT_INTERVAL`` секунд."""
|
||
path = Path(get_settings().heartbeat_path)
|
||
while True:
|
||
try:
|
||
path.touch()
|
||
except OSError:
|
||
logger.exception("Не удалось обновить heartbeat-файл %s", path)
|
||
await asyncio.sleep(HEARTBEAT_INTERVAL)
|