zoukankan      html  css  js  c++  java
  • 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这四个方法进行判断,根据返回值,得到一个布尔值进行判断

  • 相关阅读:
    python-套接字编程之udp
    python-套接字编程之tcp
    用脚本获取windows的mac地址
    电脑控制安卓手机(手机投屏)
    人体内脏分布图
    电子发票打印出来太大了,怎么办?
    局域网内搭建各部门文件共享
    樊登读书会:《善战者说:孙子兵法与取胜法则十二讲》
    健康饮食——百万教程
    减肥十律
  • 原文地址:https://www.cnblogs.com/jruing/p/13955383.html
Copyright © 2011-2022 走看看