1. Wir machen einen Telegrammbot
Zuerst müssen Sie einen Bot schreiben, der die gewünschte IP anpingt und eine Nachricht sendet, wenn der gewünschte Dienst aus dem Netzwerk verschwindet und dann angezeigt wird

Ich verstehe, dass der Artikel für die Habr-Ressource recht einfach ist, und außerdem habe ich nicht versucht, jede Codezeile zu malen, da der gesamte Code für Anfänger einfach genug ist, um ihn zu verstehen. Ich habe beschlossen zu teilen, wie einfach es ist, Ihren Bot im Docker zu erstellen, was nützliche Arbeit leisten wird.
1.1 Speichern einer Konfiguration
Ich habe beschlossen, die Konfiguration als Yaml-Datei zu speichern.
botid: userid: id_, hosts: - "8.8.8.8:Google DNS Server" - "yandex.ru:Yandex domain name"
In der Reihenfolge ist botid das Token, das @botfather beim Erstellen eines neuen Bots ausgibt.
Benutzer-ID ist die ID des Telegrammbenutzers, der im Chat Nachrichten vom Bot erhält. Kann mit @userinfobot erhalten werden
Hosts sind die Dienste, die der Bot anpingen wird. Sie können sowohl eine IP-Adresse als auch einen Domainnamen angeben. Der Kommentar zur Adresse wird durch einen Doppelpunkt angezeigt. Dieser Kommentar wird in der Nachricht anstelle der Adresse ersetzt.
1.2 Das Skript selbst
Erstellen Sie zunächst eine Klasse für den Host.
class address: def __init__ (self, address, comment): self.address = address self.comment = comment self.status = True
Adresse ist eine IP oder ein Domainname.
Kommentar - Kommentar aus der Yaml-Datei.
Status - Host im Netzwerk oder nicht. Der Standardwert ist online.
Skript
from telegram import Bot from pythonping import ping import time import yaml from libs.host import address def init(): """ , userid set_hosts """ global bot, userid with open('/usr/src/app/config.yaml') as f: try: docs = yaml.load_all(f, Loader=yaml.FullLoader) for doc in docs: for k, v in doc.items(): if k == "botid": bot = Bot(v) elif k == "userid": userid = v elif k == "hosts": set_hosts(v) except yaml.YAMLError as exc: print(exc) def set_hosts(hosts): """ """ global hosts_list hosts_list = [] for item in hosts: ac = item.split(":") hosts_list.append(address(ac[0], ac[1])) def send_message(message): """ """ bot.send_message(userid, message, parse_mode='HTML', disable_web_page_preview=True) def ping_host(address): """ . . , . , . """ if ping_url(address.address): if not address.status: address.status = True send_message(address.comment + " is up again") else: if (address.status): address.status = False send_message(address.comment + " is down") def ping_url(url): """ . Response list - ping. . , . """ i = 0; try: response_list = ping(url) for response in response_list: if (not response.success): i += 1 if (i == 4): return False else: return True except Exception as e: send_message(str(e)) def main(): """ . , . """ init() while True: for host in hosts_list: ping_host(host) time.sleep(30) if __name__ == '__main__': main()
Das Docker-Image zusammenfügen
Wie installiere ich Docker und Docker-Compose? Ich habe in
diesem Artikel geschrieben.
Müssen Sie eine Docker-Datei erstellen. Fügen Sie neben dem Codeordner den Quellcode des Bots ein.
FROM python:buster RUN pip3 install python-telegram-bot pythonping pyyaml WORKDIR /usr/src/app COPY ./code/. . ENTRYPOINT ["python"] CMD ["main.py"]
Wir verbinden das Docker-Image aus dem offiziellen Python-Repository. Installieren Sie die Bibliotheken. Stellen Sie den aktuellen Ordner auf / usr / src / app ein. Kopieren Sie den Code in diesen Ordner. Das beim Start aufgerufene Dienstprogramm ist Python. CMD übergibt den Parameter an run - main.py.
Als nächstes müssen Sie das Bild sammeln und in das Repository stellen
docker build -t alsoeast/pingbot:1.0 . docker push alsoeast/pingbot:1.0
Um Docker-Images auszuführen, verwende ich Docker-Compose.
version: '3' networks: default: external: name: network services: pingbot: container_name: pingbot image: alsoeast/pingbot:1.0 restart: always volumes: - ./config.yaml:/usr/src/app/config.yaml
Das Image wird aus dem Repository entnommen, die Datei config.yaml wird gemountet, damit das Skript die Argumente empfangen kann. Es bleibt nur zu laufen
docker-compose up -d
Wenn jemand es braucht, ist der Bot auf dem Docker-Hub verfügbar.
UPD: Eine neue Version von 1.1 oder das neueste Image wird auf den Docker Hub hochgeladen. In der Konfigurationsdatei wurde der Parameter botid in botkey geändert, der optionale Intervallparameter wurde hinzugefügt