From cf6bbffd9bd520523fda0b3c216906b5d596e2a7 Mon Sep 17 00:00:00 2001 From: Egor Date: Fri, 31 Oct 2025 21:45:58 +0300 Subject: [PATCH] Respect maintenance monitoring setting --- .env.example | 1 + README.md | 2 ++ app/bot.py | 13 ++++++++----- app/config.py | 8 ++++++-- app/handlers/admin/maintenance.py | 1 + app/services/maintenance_service.py | 1 + app/services/system_settings_service.py | 11 +++++++++++ main.py | 5 ++++- 8 files changed, 34 insertions(+), 8 deletions(-) diff --git a/.env.example b/.env.example index b92cb0a6..c9a3b5e4 100644 --- a/.env.example +++ b/.env.example @@ -395,6 +395,7 @@ SERVER_STATUS_ITEMS_PER_PAGE=10 MAINTENANCE_MODE=false MAINTENANCE_CHECK_INTERVAL=30 MAINTENANCE_AUTO_ENABLE=true +MAINTENANCE_MONITORING_ENABLED=true MAINTENANCE_MESSAGE=Ведутся технические работы. Сервис временно недоступен. Попробуйте позже. # ===== ЛОКАЛИЗАЦИЯ ===== diff --git a/README.md b/README.md index d08f3dcd..3e159fdb 100644 --- a/README.md +++ b/README.md @@ -471,6 +471,7 @@ REMNAWAVE_AUTO_SYNC_TIMES=03:00,15:00 # Автоматический режим тех. работ MAINTENANCE_MODE=false MAINTENANCE_AUTO_ENABLE=true +MAINTENANCE_MONITORING_ENABLED=true MAINTENANCE_CHECK_INTERVAL=30 # Интервал проверки состояния панели (секунды) @@ -663,6 +664,7 @@ SERVER_STATUS_ITEMS_PER_PAGE=10 MAINTENANCE_MODE=false MAINTENANCE_CHECK_INTERVAL=30 MAINTENANCE_AUTO_ENABLE=true +MAINTENANCE_MONITORING_ENABLED=true # ===== ЛОКАЛИЗАЦИЯ ===== DEFAULT_LANGUAGE=ru diff --git a/app/bot.py b/app/bot.py index 19097554..4d4c9d87 100644 --- a/app/bot.py +++ b/app/bot.py @@ -182,11 +182,14 @@ async def setup_bot() -> tuple[Bot, Dispatcher]: logger.info("⚡ Зарегистрированы обработчики простой покупки") logger.info("⚡ Зарегистрированы обработчики простой подписки") - try: - await maintenance_service.start_monitoring() - logger.info("Мониторинг техработ запущен") - except Exception as e: - logger.error(f"Ошибка запуска мониторинга техработ: {e}") + if settings.is_maintenance_monitoring_enabled(): + try: + await maintenance_service.start_monitoring() + logger.info("Мониторинг техработ запущен") + except Exception as e: + logger.error(f"Ошибка запуска мониторинга техработ: {e}") + else: + logger.info("Мониторинг техработ отключен настройками") logger.info("🛡️ GlobalErrorMiddleware активирован - бот защищен от устаревших callback queries") logger.info("Бот успешно настроен") diff --git a/app/config.py b/app/config.py index 12d9f9ea..3ecdb6b5 100644 --- a/app/config.py +++ b/app/config.py @@ -156,8 +156,9 @@ class Settings(BaseSettings): INACTIVE_USER_DELETE_MONTHS: int = 3 MAINTENANCE_MODE: bool = False - MAINTENANCE_CHECK_INTERVAL: int = 30 - MAINTENANCE_AUTO_ENABLE: bool = True + MAINTENANCE_CHECK_INTERVAL: int = 30 + MAINTENANCE_AUTO_ENABLE: bool = True + MAINTENANCE_MONITORING_ENABLED: bool = True MAINTENANCE_MESSAGE: str = "🔧 Ведутся технические работы. Сервис временно недоступен. Попробуйте позже." TELEGRAM_STARS_ENABLED: bool = True @@ -1052,6 +1053,9 @@ class Settings(BaseSettings): def is_maintenance_auto_enable(self) -> bool: return self.MAINTENANCE_AUTO_ENABLE + def is_maintenance_monitoring_enabled(self) -> bool: + return self.MAINTENANCE_MONITORING_ENABLED + def get_available_subscription_periods(self) -> List[int]: try: periods_str = self.AVAILABLE_SUBSCRIPTION_PERIODS diff --git a/app/handlers/admin/maintenance.py b/app/handlers/admin/maintenance.py index 33959296..09bfe6d4 100644 --- a/app/handlers/admin/maintenance.py +++ b/app/handlers/admin/maintenance.py @@ -74,6 +74,7 @@ async def show_maintenance_panel( {status_emoji} Режим техработ: {status_text} {api_emoji} API Remnawave: {api_text} {monitoring_emoji} Мониторинг: {monitoring_text} +🛠️ Автозапуск мониторинга: {'Включен' if status_info['monitoring_configured'] else 'Отключен'} ⏱️ Интервал проверки: {status_info['check_interval']}с 🤖 Автовключение: {'Включено' if status_info['auto_enable_configured'] else 'Отключено'} {panel_info} diff --git a/app/services/maintenance_service.py b/app/services/maintenance_service.py index ae8f4fb9..11509f6a 100644 --- a/app/services/maintenance_service.py +++ b/app/services/maintenance_service.py @@ -398,6 +398,7 @@ API снова отвечает на запросы.""", "success") "api_status": self._status.api_status, "consecutive_failures": self._status.consecutive_failures, "monitoring_active": self._check_task is not None and not self._check_task.done(), + "monitoring_configured": settings.is_maintenance_monitoring_enabled(), "auto_enable_configured": settings.is_maintenance_auto_enable(), "check_interval": settings.get_maintenance_check_interval(), "bot_connected": self._bot is not None diff --git a/app/services/system_settings_service.py b/app/services/system_settings_service.py index 9666ba6a..e6615804 100644 --- a/app/services/system_settings_service.py +++ b/app/services/system_settings_service.py @@ -516,6 +516,17 @@ class BotConfigurationService: "warning": "Не забудьте отключить после завершения работ, иначе бот останется недоступен.", "dependencies": "MAINTENANCE_MESSAGE, MAINTENANCE_CHECK_INTERVAL", }, + "MAINTENANCE_MONITORING_ENABLED": { + "description": ( + "Управляет автоматическим запуском мониторинга панели Remnawave при старте бота." + ), + "format": "Булево значение.", + "example": "false", + "warning": ( + "При отключении мониторинг можно запустить вручную из панели администратора." + ), + "dependencies": "MAINTENANCE_CHECK_INTERVAL", + }, "DISPLAY_NAME_BANNED_KEYWORDS": { "description": ( "Список слов и фрагментов, при наличии которых в отображаемом имени " diff --git a/main.py b/main.py index f8a68603..2ae6780b 100644 --- a/main.py +++ b/main.py @@ -403,7 +403,10 @@ async def main(): "🛡️", success_message="Служба техработ запущена", ) as stage: - if not maintenance_service._check_task or maintenance_service._check_task.done(): + if not settings.is_maintenance_monitoring_enabled(): + maintenance_task = None + stage.skip("Мониторинг техработ отключен настройками") + elif not maintenance_service._check_task or maintenance_service._check_task.done(): maintenance_task = asyncio.create_task(maintenance_service.start_monitoring()) stage.log(f"Интервал проверки: {settings.MAINTENANCE_CHECK_INTERVAL}с") else: