45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
from pathlib import Path
|
|
from datetime import datetime
|
|
from zoneinfo import ZoneInfo
|
|
|
|
from modules.config import load_mail_config
|
|
from modules.domains import load_domains
|
|
from modules.checker import get_cert_expiry_utc
|
|
from modules.notifier import send_email
|
|
|
|
# Пути к файлам
|
|
BASE_DIR = Path(__file__).parent
|
|
CONF_DIR = BASE_DIR / 'conf'
|
|
MAIL_CONF = CONF_DIR / 'mail.conf'
|
|
DOMAINS_FILE = CONF_DIR / 'domains.conf'
|
|
|
|
# Настройки
|
|
MOSCOW_TZ = ZoneInfo('Europe/Moscow')
|
|
WARNING_DAYS = 10
|
|
|
|
def main():
|
|
# Загружаем настройки и список доменов
|
|
mail_cfg = load_mail_config(MAIL_CONF)
|
|
domains = load_domains(DOMAINS_FILE)
|
|
now_moscow = datetime.now(MOSCOW_TZ)
|
|
|
|
for host, port in domains:
|
|
expiry_utc = get_cert_expiry_utc(host, port)
|
|
expiry_local = expiry_utc.astimezone(MOSCOW_TZ)
|
|
days_left = (expiry_local.date() - now_moscow.date()).days
|
|
|
|
print(f"{host}:{port} — истекает {expiry_local:%Y-%m-%d %H:%M:%S %Z}, осталось {days_left} дн.")
|
|
|
|
if days_left < WARNING_DAYS:
|
|
subject = f"[WARNING] SSL {host} истекает через {days_left} дн."
|
|
body = (
|
|
f"Домен: {host}\n"
|
|
f"Порт: {port}\n"
|
|
f"Истекает: {expiry_local:%Y-%m-%d %H:%M:%S %Z}\n"
|
|
f"Осталось дней: {days_left}\n"
|
|
)
|
|
send_email(mail_cfg, subject, body)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|