# import os # os.chdir(os.path.dirname(__file__)) import asyncio import logging from pathlib import Path from config_manager import ConfigManager from config_manager.v1.log_manager import LogManager from config_manager.v2 import ManagementServerSettings logger = logging.getLogger() # Таймаут health: без успешного execute() дольше этого времени — unhealthy. HEALTH_TIMEOUT = 3.0 class MyApp(ConfigManager): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.iter = 0 def execute(self) -> None: """Успешный прогон сбрасывает таймер health (обновляет время последнего успеха).""" logger.info("current iteration %s", self.iter) self.iter += 1 async def main() -> None: log_manager = LogManager() # Один объект: и HTTP management-сервер (enabled, port), и health (health_timeout). management_settings = ManagementServerSettings( enabled=True, port=8000, health_timeout=HEALTH_TIMEOUT, ) config_path = Path(__file__).parent / "config.yaml" app = MyApp( str(config_path), log_manager=log_manager, management_settings=management_settings, ) logger.info("App starting (health_timeout=%s)", HEALTH_TIMEOUT) # Менеджер запускаем в фоне (start() не возвращает управление до stop). asyncio.create_task(app.start()) logger.info("App running; Ctrl+C to stop") while True: await asyncio.sleep(1) if __name__ == "__main__": logging.basicConfig(level=logging.INFO) asyncio.run(main())