From 4aecc5eddf1d4dd2ec26625800a40196d9f5731b Mon Sep 17 00:00:00 2001 From: mt77 Date: Sat, 5 Apr 2025 16:12:13 +0500 Subject: [PATCH] update struct --- .dockerignore | 4 ++ .gitignore | 1 + dockerized/Dockerfile | 8 ++++ dockerized/docker-compose.yml | 15 ++++++ dockerized/monitor.py | 64 +++++++++++++++++++++++++ dockerized/requirements.txt | 2 + monitor.py => hard/monitor.py | 0 monitor.service => hard/monitor.service | 0 8 files changed, 94 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 dockerized/Dockerfile create mode 100644 dockerized/docker-compose.yml create mode 100644 dockerized/monitor.py create mode 100644 dockerized/requirements.txt rename monitor.py => hard/monitor.py (100%) rename monitor.service => hard/monitor.service (100%) diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..25a5e70 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +monitor.service +README.md +docker-compose.yml +.env diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env diff --git a/dockerized/Dockerfile b/dockerized/Dockerfile new file mode 100644 index 0000000..27f3686 --- /dev/null +++ b/dockerized/Dockerfile @@ -0,0 +1,8 @@ +FROM python:3.10-alpine3.20 + +WORKDIR /monitor +COPY monitor.py . +COPY requirements.txt . +RUN pip install --no-cache-dir -r ./requirements.txt + +CMD ["python", "monitor.py"] diff --git a/dockerized/docker-compose.yml b/dockerized/docker-compose.yml new file mode 100644 index 0000000..8547f28 --- /dev/null +++ b/dockerized/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3.8' + +# Переменные из .env будут подставлены автоматически +# Если .env нет, можно указать явно: docker-compose --env-file .custom.env up + +services: + monitor: + image: monitor:latest + container_name: monitor + environment: + - TARGET_DOMAINS=${TARGET_DOMAINS} # Список доменов через запятую + - TARGET_PROTOCOL=${TARGET_PROTOCOL} + - TARGET_SSL_VERIFY=${TARGET_SSL_VERIFY} + - BOT_TOKEN=${BOT_TOKEN} + - BOT_CHATID=${BOT_CHATID} diff --git a/dockerized/monitor.py b/dockerized/monitor.py new file mode 100644 index 0000000..8b96fd3 --- /dev/null +++ b/dockerized/monitor.py @@ -0,0 +1,64 @@ +import requests +import os +import time +from requests.packages.urllib3.exceptions import InsecureRequestWarning +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) # insecure warn disable + +domains = os.getenv("TARGET_DOMAINS", "").split(',') +domains = [d.strip() for d in domains if d.strip()] +protocol = os.getenv("TARGET_PROTOCOL", "https://") +verify_domain = bool(os.getenv("TARGET_SSL_VERIFY", "True")) +token = os.getenv("BOT_TOKEN", "") +chatid = int(os.getenv("BOT_CHATID", "")) +if not domains or not token or not chatid: + print("Error: Plese set domains, tg token, and tg chat id") + exit(1) + +print(domains) + +timeout_domains = [] + +def CheckDomain(domain): + try: + r = requests.get(f"{protocol}{domain}", verify=verify_domain) # verify SSL crt disable + code = int(r.status_code) + return code + except requests.exceptions.ConnectionError: + return 1 + except: + return 0 + +def SendAlert(msg): + response = requests.post( + url='https://api.telegram.org/bot{0}/sendMessage'.format(token), + data={'chat_id': chatid, 'text': msg} + ).json() + +def master(): + while True: + for domain in timeout_domains: + resp = CheckDomain(domain) + print(domain, resp) + if resp == 200: + timeout_domains.remove(domain) + domains.append(domain) + SendAlert(f'✅ RESOLVED ✅\n🔹Domain is avability\n🔹Domain: {domain}') + + + for domain in domains: + resp = CheckDomain(domain) + print(domain, resp) + if resp != 200: + timeout_domains.append(domain) + domains.remove(domain) + if resp == 1: + SendAlert(f'⚠️ ALARM! ⚠️\n🔹Response: no route to host\n🔹Domain: {domain}') + elif resp == 0: + SendAlert(f'⚠️ ALARM! ⚠️\n🔹Response: other connect error\n🔹Domain: {domain}') + else: + SendAlert(f'⚠️ ALARM! ⚠️\n🔹Response: {resp}\n🔹Domain: {domain}') + + time.sleep(20) + +if __name__ == "__main__": + master() diff --git a/dockerized/requirements.txt b/dockerized/requirements.txt new file mode 100644 index 0000000..cdfc35c --- /dev/null +++ b/dockerized/requirements.txt @@ -0,0 +1,2 @@ +requests +python-daemon diff --git a/monitor.py b/hard/monitor.py similarity index 100% rename from monitor.py rename to hard/monitor.py diff --git a/monitor.service b/hard/monitor.service similarity index 100% rename from monitor.service rename to hard/monitor.service