场景

监控一个后台服务各个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这四个方法进行判断,根据返回值,得到一个布尔值进行判断

最新文章

  1. grep 信息提取
  2. [转]ASP.NET Core 中间件详解及项目实战
  3. Cenos7 编译安装 Mariadb Nginx PHP Memcache ZendOpcache (实测 笔记 Centos 7.0 + Mariadb 10.0.15 + Nginx 1.6.2 + PHP 5.5.19)
  4. [Python] 利用commands模块执行Linux shell命令
  5. hdu 4296 贪心
  6. lintcode:格雷编码
  7. Keep the Customer Satisfied
  8. 浅谈strtok
  9. Git问题:Cannot update paths and switch to branch &#39;dev&#39; at the same time.
  10. Android 动态背景的实现以及SurfaceView中添加EditText控件
  11. SOLID (面向对象设计) 基本原则
  12. php 带cookie采集某页面
  13. IAR Embedded Workbench for ARM 6.50.6 &amp; 6.60.1 破解补丁
  14. pmap 命令详解
  15. js中的Hook
  16. PDA(Windows Mobile)调用远程WebService
  17. OpenCV——素描
  18. 2019年IntelliJ IDEA 最新注册码,亲测可用(截止到2020年3月11日)
  19. MySql中not in的优化
  20. NPOI使用教程附Helper

热门文章

  1. 《To C产品经理进阶》
  2. Mac安装mongodb并启动
  3. 每日一题 LeetCode 491. 递增子序列 【递推】【递增子序列】【动态规划】
  4. 多测师讲解python _函数中变量_高级讲师肖sir
  5. 一入Java深似海
  6. go内建方法 append copy delete
  7. 【认知服务 Azure Cognitive Service】使用认知服务的密钥无法访问语音服务[ErrorCode=AuthenticationFailure] (2020-08时的遇见的问题,2020-09月已解决)
  8. 纯JS自定义网页滚动条
  9. catch之后的代码什么时候执行
  10. docker compose 用法