Python-企业微信机器人API调用实现监控告警

main.py

# -*- coding: utf-8 -*-
"""
Created on Sat Dec 16 13:43:13 2023
每20分钟执行一次
crontab -e

*/20 * * * * cd /data/niceloo; /usr/bin/python3 main.py >>run.log 
18,38,58 * * * * cd /data/niceloo; /usr/bin/python3 main.py >>run.log 
"""

import json
import requests
from datetime import datetime
from local_log import logger
from mysql_helper import mysql_db
from tools import transform_string, to_table
from sqls import make_sql1, make_sql2


current_time = datetime.now().strftime('%Y-%m-%d-%H:%M:%S')

sql="""
    select logTime, sum(advancePay) as advancePaySum, sum(advanceReturn) as advanceReturnSum
    FROM ads_fineReport.qc_school_total_mobile_uat_his 
    group by logTime
    order by 1 desc
    limit 2
    """
    
result = mysql_db.query(sql)

if result:
    line0 = result[0]
    line1 = result[1]
    
    time0 = line0[0].strftime('%Y-%m-%d-%H:%M:%S')
    time1 = line1[0].strftime('%Y-%m-%d-%H:%M:%S')
    
    collection0 = line0[1]
    collection1 = line1[1]
    
    refund0 = line0[2]
    refund1 = line1[2]
        
    payDiff = collection0 - collection1
    
    content0 = ""
    content1 = ""
    if payDiff < -5000:
        _s0 = "【收款】【系统异常变动提醒】\n"+time0+": "+transform_string(collection0)
        _s1 = time1+": " + transform_string(collection1)
        _diff = "diff: "+str(payDiff)
        
        pay_sql = make_sql1(time0, time1)
        logger.info(pay_sql)
        r0 = mysql_db.query(pay_sql)
        # print("r0:", r0)
        pay_table = ""
        if r0:
            pay_table = to_table(r0)
        
        content0 = '\n'.join([_s0, _s1, _diff, "明细:", pay_table])
        
    returnDiff = refund0 - refund1
    if returnDiff < -100000:
        _s0 = "【退款】【系统异常变动提醒】\n"+time0+": "+transform_string(refund0)
        _s1 = time1+": " + transform_string(refund1)
        _diff = "diff: "+str(returnDiff)
        
        return_sql = make_sql2(time0, time1)
        logger.info(return_sql)
        
        r1 = mysql_db.query(return_sql)
        # print("r1:", r1)
        return_table = ""
        if r1:
            return_table = to_table(r1)
        
        content1 = '\n'.join([_s0, _s1, _diff, "明细:", return_table])            
    # if content0 or content1:
    if content0:
        # content = '\n'.join([content0, content1])
        content = content0
        content = content.strip()
        if content:     
            content = "本次为20分钟间隔查询数据\n" + content
            url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=******" # 企业微信生成对应的key
            payload = json.dumps({
                "msgtype": "text",
                "text": {"content":content,
                         "mentioned_mobile_list":["@all"]}
            })
            
            headers = {
                'Content-Type': 'application/json'
            }
            
            response = requests.request("POST", url, headers=headers, data=payload)
            logger.info(response.text)
    logger.info(current_time + " " + "Done!")

    if content1:
        # content = '\n'.join([content0, content1])
        content = content1
        content = content.strip()
        if content:     
            content = "本次为20分钟间隔查询数据\n" + content
            url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=******" # 企业微信生成对应的key
            payload = json.dumps({
                "msgtype": "text",
                "text": {"content":content}
            })
            
            headers = {
                'Content-Type': 'application/json'
            }
            
            response = requests.request("POST", url, headers=headers, data=payload)
            logger.info(response.text)
    logger.info(current_time + " " + "Done!")
else:
    logger.info(current_time + " " + "异常")

posted on 2025-02-07 17:48  cloud_wh  阅读(36)  评论(0)    收藏  举报

导航