python实现对于告警规则的判断思路
2024-10-09 12:46:58
场景
监控一个后台服务各个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这四个方法进行判断,根据返回值,得到一个布尔值进行判断
最新文章
- grep 信息提取
- [转]ASP.NET Core 中间件详解及项目实战
- Cenos7 编译安装 Mariadb Nginx PHP Memcache ZendOpcache (实测 笔记 Centos 7.0 + Mariadb 10.0.15 + Nginx 1.6.2 + PHP 5.5.19)
- [Python] 利用commands模块执行Linux shell命令
- hdu 4296 贪心
- lintcode:格雷编码
- Keep the Customer Satisfied
- 浅谈strtok
- Git问题:Cannot update paths and switch to branch &#39;dev&#39; at the same time.
- Android 动态背景的实现以及SurfaceView中添加EditText控件
- SOLID (面向对象设计) 基本原则
- php 带cookie采集某页面
- IAR Embedded Workbench for ARM 6.50.6 &; 6.60.1 破解补丁
- pmap 命令详解
- js中的Hook
- PDA(Windows Mobile)调用远程WebService
- OpenCV——素描
- 2019年IntelliJ IDEA 最新注册码,亲测可用(截止到2020年3月11日)
- MySql中not in的优化
- NPOI使用教程附Helper
热门文章
- 《To C产品经理进阶》
- Mac安装mongodb并启动
- 每日一题 LeetCode 491. 递增子序列 【递推】【递增子序列】【动态规划】
- 多测师讲解python _函数中变量_高级讲师肖sir
- 一入Java深似海
- go内建方法 append copy delete
- 【认知服务 Azure Cognitive Service】使用认知服务的密钥无法访问语音服务[ErrorCode=AuthenticationFailure] (2020-08时的遇见的问题,2020-09月已解决)
- 纯JS自定义网页滚动条
- catch之后的代码什么时候执行
- docker compose 用法