flask接收消息

python 复制代码
from flask import Flask, request, jsonify
import requests
import logging
import threading

# 初始化日志与 Flask 实例
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
logger = logging.getLogger("CloudCanalFlaskReceiver")

app = Flask(__name__)

# 如果需要将告警进行二次分发,在此填入对应的群机器人 Webhook 地址
FORWARD_WEBHOOK_URL = "https://webhook-notification.com?groupId=xxx"
headers = {
    # 模拟真实 Chrome 浏览器访问
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
def send_to_im_group_sync(summary_text):
    """
    使用线程在后台异步发送请求,避免阻塞 Flask 的响应
    """        
    payload = {
    "title":"cloudcanal告警",
    "message":f"{summary_text}",
    "openUrl":""
}
    try:
        response = requests.post(FORWARD_WEBHOOK_URL, json=payload, headers=headers,timeout=50)
        logger.info(f"转发通知成功,响应码: {response.status_code}")
    except Exception as e:
        logger.error(f"转发通知失败: {str(e)}")

@app.route("/webhook/alert", methods=["POST"])
def receive_cloudcanal_alert():
    try:
        # 获取 JSON 数据
        payload = request.json or {}
        logger.info(f"收到 CloudCanal 告警数据: {payload}")

        # 解析字段
        task_name = payload.get("taskName") or payload.get("task_name") or "未知任务"
        task_id = payload.get("taskId") or payload.get("task_id") or "N/A"
        alert_msg = payload.get("alertMessage") or payload.get("message") or str(payload)
        alert_level = payload.get("alertLevel") or "WARNING"

        summary = (
            f"任务名称: {task_name}\n"
            f"任务 ID: {task_id}\n"
            f"告警级别: {alert_level}\n"
            f"详细信息: {alert_msg}"
        )
        logger.warning(f"🚨 解析到告警事件:\n{summary}")

        # 使用多线程后台发送,防止请求阻塞
        threading.Thread(target=send_to_im_group_sync, args=(alert_msg,)).start()

        return jsonify({"status": "success", "message": "Alert received"}), 200

    except Exception as e:
        logger.error(f"解析 Webhook 请求失败: {str(e)}")
        return jsonify({"status": "error", "message": str(e)}), 400

if __name__ == "__main__":
    # 启动 Flask 服务,监听 8000 端口
    app.run(host="0.0.0.0", port=8888)
相关推荐
eric-sjq27 分钟前
小思框架 · 30M 级长上下文新架构对比技术报告
人工智能·python·深度学习·语言模型
reasonsummer2 小时前
【办公类-04-05】20261030整理手机照片(华为手机助手导出照片到日期文件夹+批量添加四级文件夹+手动转移照片更名+更改三级文件夹合并汉字名称)
python·智能手机
BD_Marathon3 小时前
【Python】初识迭代器
python
gz927cool3 小时前
Python 全栈应用最佳实践完整指南
开发语言·python·ai
智购科技智能售货柜3 小时前
顾客已经关门,视觉售货柜还在处理旧画面:延迟积压怎么查?~YH
python·单片机·嵌入式硬件·物联网·eclipse
梯度下降者3 小时前
Python从0到100(三):Python中的变量介绍
python·作用域·变量·数据类型·计算机常识
AIFQuant3 小时前
Python期货行情API接入:股指、黄金、原油多品种数据管道实战
开发语言·python·金融·区块链·量化开发
威哥爱编程4 小时前
Python 智能体开发实战 07:让它查课表它张口就编?给 Agent 接上真正能动手的工具
python·agent
Wang's Blog4 小时前
Java 项目实战:交友项目 - 即时通信总结:全链路复盘、可复用清单与自检
java·python·交友
2601_962885724 小时前
按主板/科创/创业/北交分板扫描选股
python