python实现对于告警规则的判断思路
场景
监控一个后台服务各个url的响应时间,需要在mysql数据库的一张表中设计一个字段需要包含且不仅限于以下一种规则(1. 大于 2. 小于 3. 大于等于 4. 小于等于),表结构大概是这样的
每个接口有不同的响应时间范围,超出这个范围就说明这个接口异常了,我们需要定义这个规则,并且能够让代码通过规则进行通知,刚开始的时候规则为 ">100,<200" 这种格式的,采用python中eval()这个方法,这样虽然勉强可以实现,但是eval不是很安全,所以放弃eval,经过研究测试,发现了另一个方法,就是采用python自带的getattr及operator
环境
python 3+
代码
import operator def check_status(monitor_data: int, data: dict) -> list: try: data, result_list = data, [] for k, v in data.items(): f = getattr(operator, k) result_list.append(f(monitor_data, v)) return result_list except Exception: import traceback print(traceback.format_exc()) check_status(1001, {"gt": 1000, "le": 2000})
解释
这段代码用到了内置模块operator及getattr内置方法
getattr() 函数用于返回一个对象属性值
getattr(object, name[, default])
我们可以将规则设定为{"gt": 1000, "le": 2000},字典中的key正好对应operator中gt,lt,ge,le四个方法,用getattr获取operator对象中的gt,lt,ge,le这四个方法进行判断,根据返回值,得到一个布尔值进行判断
作者:jruing
出处:https://www.cnblogs.com/jruing/p/13955383.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
本文来自博客园,作者:Jruing,转载请注明原文链接:https://www.cnblogs.com/jruing/p/13955383.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了