CLI 0.1.9/SSL check for servers

This commit is contained in:
Vladless
2025-06-11 01:32:41 +03:00
parent d97ca64ab5
commit e93d7e0baf
2 changed files with 29 additions and 6 deletions
+18 -2
View File
@@ -1,6 +1,7 @@
import asyncio
import re
from datetime import datetime, timedelta
import ssl
from aiogram.types import InlineKeyboardButton
from aiogram.utils.keyboard import InlineKeyboardBuilder
@@ -32,16 +33,31 @@ async def ping_server(server_ip: str) -> bool:
async def check_tcp_connection(host: str, port: int) -> bool:
"""Проверяет доступность сервера через TCP (порт 443)."""
"""Проверяет доступность сервера через TCP с попыткой SSL-соединения."""
try:
_reader, writer = await asyncio.open_connection(host, port)
ssl_context = ssl.create_default_context()
reader, writer = await asyncio.open_connection(host, port, ssl=ssl_context)
writer.close()
await writer.wait_closed()
return True
except ssl.SSLError as e:
logger.warning(f"[SSL Error] Сертификат сервера {host} вызвал ошибку: {e}")
await notify_ssl_error(host, str(e))
return False
except Exception:
return False
async def notify_ssl_error(server_host: str, error_text: str):
message = (
f"⚠️ <b>Ошибка SSL на сервере</b> <code>{server_host}</code>\n\n"
f"<b>Описание:</b> {error_text}\n"
"Проверьте корректность сертификата или конфигурации HTTPS."
)
for admin_id in ADMIN_ID:
await bot.send_message(admin_id, message)
async def notify_admin(server_name: str, status: str, down_duration: timedelta = None):
"""Отправляет уведомление администратору."""
builder = InlineKeyboardBuilder()