心配をやめて生活を始める方法

DockerとTelegramBotを使用して組織の作業を監視する

多くの人は、ウェブサイトや店舗などに突然何かが起こったかどうか、特にお金、時間、労力を必要としない場合に知りたいと思っています。しかし、これは非常に簡単です:かなりの自由時間を費やした後、データベースに定期的にクエリを実行し、それらに基づいていくつかのメトリックを計算し、それらをしきい値と比較するDockerコンテナを作成します。しきい値を超えた場合は、関係者に通知してください。





最初のステップは、ボットを起動することです。あなたは5分でこれを行う方法をグーグルすることができます。たとえば、最近ここに記事がありました。また、複数の人がメッセージを受信することを計画している場合、ボットはグループに追加するための許可が必要です。これを行うには、ボットを作成するときに、BotFatherコマンド「/ setjoingroups」を記述する必要があります。その後、実際には、グループを作成し、ボットとメッセージの受信に関心のあるすべての人を追加する必要があります。





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
      
      



bashのインストールをスキップして、に置き換えることができます。/bin/sh



デバッグするときは慣れていますが、戦闘条件では不要です。新しい画像を選択することもできますが、これで問題ありません。





今、あなたはそれを構築する必要があります:





docker build -t bot:latest .
      
      



そして、コマンドでデータベースに接続するための環境変数を渡すことによって実行します。





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



そして、あなたはメッセージを待つことができます。まあ、または待たないでください、それはすべてメトリックに依存します。最大半日営業。ただし、それらを使用することで、システムを24時間監視できます。ほとんど無料です。





次に、たとえば、計算されたメトリックのZabbixまたはログ、グラフ、レポートなどの同様のツールへの転送を構成できます。








All Articles