1. نصنع بوت برقية
أولاً ، تحتاج إلى كتابة روبوت يقوم باختبار اتصال ip الضروري وإرسال رسالة عندما تختفي الخدمة المطلوبة من الشبكة ، ثم تظهر

أدرك أنه بالنسبة لمورد habr ، فإن المقالة بسيطة للغاية ، إلى جانب ذلك ، لم أحاول أن أرسم كل سطر من التعليمات البرمجية ، لأن كل الكود بسيط بما فيه الكفاية لفهم المبتدئين. قررت أن أشارك كم هو سهل جعل روبوتك في عامل الميناء ، والذي سيقوم بعمل مفيد.
1.1 كيفية تخزين التكوين
قررت تخزين التكوين كملف yaml.
botid: userid: id_, hosts: - "8.8.8.8:Google DNS Server" - "yandex.ru:Yandex domain name"
بالترتيب ، botid هو الرمز المميز الذي يصدرهbotfather عند إنشاء روبوت جديد.
معرف المستخدم هو معرف مستخدم التلغرام الذي سيتلقى رسائل من الروبوت في الدردشة. يمكن الحصول عليها باستخدامuserinfobot
المضيفين هي تلك الخدمات التي سيقوم برنامج الروبوت بنغ. يمكنك تحديد عنوان IP واسم المجال. تتم الإشارة إلى التعليق على العنوان من خلال نقطتين ، وسيتم استبدال هذا التعليق في الرسالة بدلاً من العنوان.
1.2 السيناريو نفسه
أولاً ، قم بإنشاء فصل للمضيف.
class address: def __init__ (self, address, comment): self.address = address self.comment = comment self.status = True
العنوان هو اسم IP أو المجال.
تعليق - تعليق من ملف yaml.
الحالة - مضيف على الشبكة أم لا. الافتراضي هو على الانترنت.
سيناريو
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()
وضع صورة عامل ميناء معا
كيفية تثبيت عامل ميناء ورسو السفن يؤلف كتبت في
هذه المقالة.
تحتاج إلى إنشاء dockerfile. بجانب مجلد الكود ، ضع الكود المصدري للبوت.
FROM python:buster RUN pip3 install python-telegram-bot pythonping pyyaml WORKDIR /usr/src/app COPY ./code/. . ENTRYPOINT ["python"] CMD ["main.py"]
نحن نربط صورة عامل ميناء من مستودع الثعبان الرسمي. تثبيت المكتبات. اضبط المجلد الحالي على / usr / src / app. انسخ الرمز إلى هذا المجلد. سوف الأداة المساعدة ودعا عند بدء التشغيل الثعبان. يقوم CMD بتمرير المعلمة ليتم تشغيلها - main.py.
بعد ذلك ، تحتاج إلى جمع الصورة ووضعها في المستودع
docker build -t alsoeast/pingbot:1.0 . docker push alsoeast/pingbot:1.0
لتشغيل صور عامل ميناء ، يمكنني استخدام عامل ميناء.
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
يتم التقاط الصورة من المستودع ، يتم تثبيت ملف config.yaml بحيث يمكن للبرنامج النصي استلام الوسائط. يبقى فقط لتشغيل
docker-compose up -d
إذا كان أي شخص يحتاج إليها ، فإن الروبوت متاح في لوحة الوصل.
UPD: يتم تحميل نسخة جديدة من 1.1 أو أحدث صورة إلى محور عامل ميناء. في ملف التكوين ، تغيرت المعلمة botid إلى botkey ، تمت إضافة المعلمة الفاصل الزمني الاختياري