Bot Telegram sendiri untuk melacak uptime servernya dengan python dan docker

1. Kami membuat bot telegram


Pertama, Anda perlu menulis bot yang akan melakukan ping ke ip yang diinginkan dan mengirim pesan ketika layanan yang diinginkan menghilang dari jaringan, dan kemudian muncul



Saya mengerti bahwa untuk sumber habr, artikelnya cukup sederhana, dan selain itu, saya tidak mencoba untuk melukis setiap baris kode, karena semua kode cukup sederhana untuk dipahami oleh pemula. Saya memutuskan untuk membagikan betapa mudahnya membuat bot Anda di buruh pelabuhan, yang akan melakukan pekerjaan yang bermanfaat.

1.1 Cara menyimpan konfigurasi


Saya memutuskan untuk menyimpan konfigurasi sebagai file yaml.

botid:  userid: id_,    hosts: - "8.8.8.8:Google DNS Server" - "yandex.ru:Yandex domain name" 

Agar, botid adalah token yang @botfather masalah saat membuat bot baru.

userid adalah id dari pengguna telegram yang akan menerima pesan dari bot dalam obrolan. Dapat diperoleh menggunakan @userinfobot

host adalah layanan yang akan di-ping oleh bot. Anda dapat menentukan alamat ip dan nama domain. Komentar pada alamat ditunjukkan melalui titik dua, komentar ini akan diganti dalam pesan, bukan alamat.

1.2 Script itu sendiri


Pertama, buat kelas untuk host.

 class address: def __init__ (self, address, comment): self.address = address self.comment = comment self.status = True 

alamat adalah ip atau nama domain.
komentar - komentar dari file yaml.
status - host di jaringan atau tidak. Defaultnya adalah online.

Skrip

 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() 

Menyatukan gambar buruh pelabuhan


Cara menginstal docker dan docker-compose yang saya tulis di artikel ini .

Perlu membuat buruh pelabuhan. Di sebelah folder kode, masukkan kode sumber bot.

 FROM python:buster RUN pip3 install python-telegram-bot pythonping pyyaml WORKDIR /usr/src/app COPY ./code/. . ENTRYPOINT ["python"] CMD ["main.py"] 

Kami menghubungkan gambar buruh pelabuhan dari repositori python resmi. Instal pustaka. Setel folder saat ini ke / usr / src / app. Salin kode ke folder ini. Utilitas yang dipanggil saat startup adalah python. CMD meneruskan parameter untuk dijalankan - main.py.

Selanjutnya, Anda perlu mengumpulkan gambar dan memasukkannya ke dalam repositori

 docker build -t alsoeast/pingbot:1.0 . docker push alsoeast/pingbot:1.0 

Untuk menjalankan gambar buruh pelabuhan, saya menggunakan buruh pelabuhan.

 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 

Gambar diambil dari repositori, file config.yaml di-mount sehingga skrip dapat menerima argumen. Tetap hanya berjalan

 docker-compose up -d 

Jika ada yang membutuhkannya, bot tersedia di hub buruh pelabuhan.

UPD: versi baru 1.1 atau gambar terbaru diunggah ke hub docker. Dalam file konfigurasi, parameter botid berubah menjadi botkey, parameter interval opsional ditambahkan

Source: https://habr.com/ru/post/id474434/


All Articles