Bagaimana berhenti khawatir dan mulai hidup

Memantau pekerjaan organisasi menggunakan buruh pelabuhan dan bot telegram

Banyak yang ingin tahu jika tiba-tiba terjadi sesuatu pada situs web, toko, dll., Terutama jika tidak memerlukan uang, waktu, atau tenaga. Tetapi ini cukup mudah dilakukan: setelah menghabiskan cukup banyak waktu luang, kami akan membuat kontainer buruh pelabuhan yang secara berkala akan membuat kueri ke database, menghitung beberapa metrik berdasarkan metrik tersebut, membandingkannya dengan nilai ambang batas dan, jika ini ambang batas terlampaui, beri tahu pihak yang berkepentingan.





Langkah pertama adalah memulai bot. Anda bisa google bagaimana melakukan ini dalam 5 menit. Misalnya, ada artikel di sini baru-baru ini . Selain itu, bot kami memerlukan izin untuk menambahkannya ke grup jika lebih dari satu orang berencana menerima pesan. Untuk melakukan ini, saat membuat bot, Anda perlu menulis perintah BotFather "/ setjoingroups". Setelah itu, sebenarnya, Anda perlu membuat grup, menambahkan bot kami, dan semua orang yang tertarik untuk menerima pesan ke dalamnya.





pytelegrambotapi , CHAT_ID , , , , ยซ/startยป. . , , , CHAT_ID :





import logging

import telebot

bot = telebot.TeleBot(TOKEN)
chat_id = CHAT_ID
logger = telebot.logger
telebot.logger.setLevel(logging.DEBUG)

@bot.message_handler(commands=['start'])
def start_message(message):
    bot.send_message(message.chat.id, ',    /start')
bot.polling()
      
      



:





bot.send_message(chat_id=CHAT_ID, text=TEXT)
      
      



, . , . , , - .





, . pymysql. :






import datetime
import os
from contextlib import closing
import pymysql
from pymysql.cursors import DictCursor
from constants import *

class Monitor:
    
def __init__(self):
        self.starttime = datetime.datetime.today()
        self.port = 3306
        self.host = os.environ.get('MYSQL_HOST')
        self.user = os.environ.get('USER')
        self.password = os.environ.get('MYSQL_PWD')
        self.db_name = 'backend'

def sms_log(self):
    with closing(pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.password,db=self.db_name, charset='utf8', cursorclass=DictCursor)) as connection:
        end_time = datetime.datetime.today()
        start_time = end_time - datetime.timedelta(minutes=TIME_PERIOD)
        st_time = start_time.strftime('%Y-%m-%d %H:%M:%S')        
        end_time = end_time.strftime('%Y-%m-%d %H:%M:%S')
        with connection.cursor() as cursor:
            query = f"SELECT COUNT(*) FROM sms_log WHERE created_at BETWEEN '{st_time}' AND '{end_time}'"
            cursor.execute(query)
            for row in cursor:
                result = row['COUNT(*)']
                if result < SMS_COUNT_ALERT:
                    return f" {TIME_PERIOD}   \
            f"{start_time.strftime('%H:%M')} " \
                 f"  {result} , : {SMS_COUNT_ALERT}"
      
      



, , , . :






def main():
    bot = telebot.TeleBot(TOKEN)
    chat_id = CHAT_ID
    logger = telebot.logger
    telebot.logger.setLevel(logging.DEBUG)  
    monitor = Monitor()
    while True:
        """ 
             15 (TIME_PERIOD) . 
        """
      result = monitor.sms_log()
      if result:
            bot.send_message(
            chat_id=chat_id, 
            text=result,
            disable_notification=not monitor.is_day()
        )

      . . .

      sleep(TIME_PERIOD*60)
      
      



, , :





disable_notification=not monitor.is_day()
      
      







@staticmethod
def is_day():
    if 9 <= (datetime.datetime.today()).hour <= 23:
        return True
    else:
        return False
      
      



.





, , - , .





:





FROM python:3.6-alpine

COPY requirements.txt requirements.txt

RUN python -m venv venv
RUN venv/bin/pip install -r requirements.txt
RUN apk add bash

COPY src src
COPY .gitignore .gitignore
COPY boot.sh boot.sh

CMD ["bash", "./boot.sh"]
      
      



requirements.txt:





PyMySQL==1.0.2
pyTelegramBotAPI==3.7.6
      
      



boot.sh:





#!/bin/sh
source venv/bin/activate
exec python ./src/bot.py
      
      



Anda dapat melewati penginstalan bash dan menggantinya dengan /bin/sh



, saya lebih terbiasa saat debugging, tetapi pada kondisi pertempuran itu berlebihan. Anda juga dapat memilih gambar yang lebih baru, tetapi yang ini akan baik-baik saja.





Sekarang Anda perlu membangunnya:





docker build -t bot:latest .
      
      



Dan jalankan dengan melewatkan variabel lingkungan untuk terhubung ke database dengan perintah:





docker run --name bot -d -e USER= -e MYSQL_HOST= -e \
MYSQL_PWD= bot:latest
      
      



Dan Anda bisa menunggu pesan. Baik, atau tidak menunggu, itu semua tergantung pada metriknya. Bisnis selama maksimal setengah hari. Namun, dengan membelanjakannya, kami mendapatkan pemantauan sistem sepanjang waktu. Hampir tidak ada apa-apa.





Kemudian Anda dapat, misalnya, mengonfigurasi transfer metrik yang dihitung ke Zabbix atau alat serupa untuk logging, grafik, laporan, dan lainnya.








All Articles