项目需要监控所有服务的响应时间,记录在postgresql数据库中,由于监控请求每分钟有一次,服务比较多,一天下来有十多万条数据,所以先临时把数据存放在redis中,第二天固定时间获取所有的数据,然后分别提交到正式和staging两个环境对应的数据库中。
获取到数据的时候,需要对服务的命名进行匹配和替换,所以定义了一个字典进行映射。
刚开始时这样做的
production_ins_list = []
for production_res in production_result_list:
ping_time = production_res.get("ping_time").split(" ")[0]
production_pings = ProductionPings()
production_pings.ping_url = production_res.get("ping_url")
production_pings.ping_time = ping_time
production_pings.time_unit = production_res.get("time_unit")
production_pings.service = production_res.get("service")
production_pings.create_time = datetime.datetime.now()
production_ins_list.append(production_pings)
db.session.add_all(production_ins_list)
db.session.commit()
当查看提交的数据的时候,发现所大部分的service字段的内容为空。
罗列了所有的可能:
1、保存到redis中时候内容为空
2、从映射字典获取对应的名称的时候为空
3、保存到数据库的时候出现了问题
然后逐个排除,发现只可能在保存到数据库的时候出现问题,然后修改db.session.add_all 为db.session.add问题得到解决
production_ins_list = []
for production_res in production_result_list:
ping_time = production_res.get("ping_time").split(" ")[0]
production_pings = ProductionPings()
production_pings.ping_url = production_res.get("ping_url")
production_pings.ping_time = ping_time
production_pings.time_unit = production_res.get("time_unit")
production_pings.service = production_res.get("service")
production_pings.create_time = datetime.datetime.now()
production_ins_list.append(production_pings)
db.session.add(production_pings)
db.session.commit()
为什么会出现这样的问题,等有空了研究下,再做补充