Refactor metrics handling and improve logging

- Removed the MetricsManager initialization from `run_helper.py` to avoid duplication, as metrics are now handled in `main.py`.
- Updated logging levels in `server_prometheus.py` and `metrics_middleware.py` to use debug instead of info for less critical messages.
- Added metrics configuration to `BaseDependencyFactory` for better management of metrics settings.
- Deleted the obsolete `metrics_exporter.py` file to streamline the codebase.
- Updated various tests to reflect changes in the metrics handling and ensure proper functionality.
This commit is contained in:
2025-09-03 00:33:20 +03:00
parent 6fcecff97c
commit c8c7d50cbb
19 changed files with 402 additions and 605 deletions

View File

@@ -33,10 +33,8 @@ async def main():
auto_unban_scheduler.set_bot(auto_unban_bot)
auto_unban_scheduler.start_scheduler()
# Инициализируем метрики ПОСЛЕ импорта всех модулей
# Это гарантирует, что global instance полностью инициализирован
from helper_bot.utils.metrics_exporter import MetricsManager
metrics_manager = MetricsManager(host="0.0.0.0", port=8000)
# Метрики запускаются в main.py через server_prometheus.py
# Здесь не нужно дублировать функциональность
# Флаг для корректного завершения
shutdown_event = asyncio.Event()
@@ -50,9 +48,8 @@ async def main():
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
# Запускаем бота и метрики
# Запускаем бота (метрики запускаются внутри start_bot)
bot_task = asyncio.create_task(start_bot(bdf))
metrics_task = asyncio.create_task(metrics_manager.start())
main_bot = None
@@ -67,21 +64,16 @@ async def main():
logger.info("Останавливаем планировщик автоматического разбана...")
auto_unban_scheduler.stop_scheduler()
logger.info("Останавливаем метрики...")
try:
await metrics_manager.stop()
except Exception as e:
logger.error(f"Ошибка при остановке метрик: {e}")
# Метрики останавливаются в main.py
logger.info("Останавливаем задачи...")
# Отменяем задачи
# Отменяем задачу бота
bot_task.cancel()
metrics_task.cancel()
# Ждем завершения задач и получаем результат main bot
# Ждем завершения задачи бота и получаем результат main bot
try:
results = await asyncio.gather(bot_task, metrics_task, return_exceptions=True)
# Первый результат - это main bot
results = await asyncio.gather(bot_task, return_exceptions=True)
# Результат - это main bot
if results[0] and not isinstance(results[0], Exception):
main_bot = results[0]
except Exception as e: