Refactor project structure and enhance Docker support

- Removed unnecessary `__init__.py` and `Dockerfile` to streamline project organization.
- Updated `.dockerignore` and `.gitignore` to improve exclusion patterns for build artifacts and environment files.
- Enhanced `Makefile` with new commands for managing Docker containers and added help documentation.
- Introduced `pyproject.toml` for better project metadata management and dependency tracking.
- Updated `requirements.txt` to reflect changes in dependencies for metrics and monitoring.
- Refactored various handler files to improve code organization and maintainability.
This commit is contained in:
2025-08-29 16:49:28 +03:00
parent 8cee629e28
commit c68db87901
37 changed files with 2177 additions and 175 deletions

View File

@@ -12,6 +12,7 @@ from helper_bot.main import start_bot
from helper_bot.utils.base_dependency_factory import get_global_instance
from helper_bot.server_monitor import ServerMonitor
from helper_bot.utils.auto_unban_scheduler import get_auto_unban_scheduler
from helper_bot.utils.metrics_exporter import MetricsManager
async def start_monitoring(bdf, bot):
@@ -46,6 +47,9 @@ async def main():
auto_unban_scheduler.set_bot(monitor_bot)
auto_unban_scheduler.start_scheduler()
# Инициализируем метрики
metrics_manager = MetricsManager(host="0.0.0.0", port=8000)
# Флаг для корректного завершения
shutdown_event = asyncio.Event()
@@ -58,9 +62,10 @@ async def main():
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
# Запускаем бота и мониторинг
# Запускаем бота, мониторинг и метрики
bot_task = asyncio.create_task(start_bot(bdf))
monitor_task = asyncio.create_task(monitor.monitor_loop())
metrics_task = asyncio.create_task(metrics_manager.start())
try:
# Ждем сигнала завершения
@@ -80,14 +85,18 @@ async def main():
print("Останавливаем планировщик автоматического разбана...")
auto_unban_scheduler.stop_scheduler()
print("Останавливаем метрики...")
await metrics_manager.stop()
print("Останавливаем задачи...")
# Отменяем задачи
bot_task.cancel()
monitor_task.cancel()
metrics_task.cancel()
# Ждем завершения задач
try:
await asyncio.gather(bot_task, monitor_task, return_exceptions=True)
await asyncio.gather(bot_task, monitor_task, metrics_task, return_exceptions=True)
except Exception as e:
print(f"Ошибка при остановке задач: {e}")
@@ -97,4 +106,12 @@ async def main():
if __name__ == '__main__':
asyncio.run(main())
try:
asyncio.run(main())
except AttributeError:
# Fallback for Python 3.6-3.7
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(main())
finally:
loop.close()