Python Mysql+Json通过判断组合条件处理告警事件(学习笔记例程)

组合条件
1:参数大于X
2:参数小于Y
3:Y<参数>X
4:参数=X

参数字段:para_title
达到条件
更新高级库记录或插入告警库新记录
未达到条件判断如有告警记录清除
告警有效标识字段status 1为活动状态

#读取数据库触发条件规则
def mysql_rule(topic,payload):
    jsonpayload=json.loads(payload)
    db = pymysql.connect(mysqlhost, 
                     mysqluser, 
                     mysqlpassword, 
                     port=mysqlport,
                     database=mysqldatabase, 
                     charset=mysqlcharset)
    cursor = db.cursor(cursor =pymysql.cursors.DictCursor)
     
     
    jsonpayload=json.loads(payload)
    sql = """SELECT `trigger`.`para_title`, `trigger`.`rule_id` ,  `trigger`.`X` , `trigger`.`Y`     FROM `qc_device_devauth` AS  `dev` RIGHT  JOIN `qc_device_trigger` AS `trigger` ON `dev`.`cate_id` = `trigger`.`cate_id` WHERE `dev`.`clientid` ='"""+jsonpayload['ID']+"""'""" 
    try:
        cursor.execute(sql)
        results = cursor.fetchall() 
        if len(results)>0:
          for row in results:
             para_title = row['para_title']
             rule_id = row['rule_id']
             X = row['X']
             Y = row['Y'] 
             print("2222"+str(row['para_title']))
             #1,数值高于X;2,数值低于Y;3数值在X,Y之间4,数值=x,5,数值有变化
             if (rule_id==1 and int(jsonpayload[para_title])>X): 
                sql2 = """SELECT * FROM `qc_device_alarm` WHERE `clientid` ='"""+jsonpayload['ID']+"""'  and `rule_id` ="""+str(rule_id)+""" and `status`=1 and para='"""+row['para_title']+"""'"""
                
                cursor.execute(sql2)
                result2 = cursor.fetchone()
                
                if str(result2)!="None":
                #UPDATE `qcwulian`.`qc_device_alarm` SET `status`=1 WHERE `id`=4;
                   sql2 = """UPDATE qc_device_alarm SET update_time="""+str(int(time.time()))+""" WHERE id="""+str(result2['id']) 
                   try:
                     cursor.execute(sql2)
                     # 提交到数据库执行
                     db.commit()
                   except:
                     # 发生错误时回滚
                     db.rollback()
                   #print(str(sql2))
                else:
                  
                   sql2 = """INSERT INTO qc_device_alarm(clientid,topic,rule_id,status,para,create_time) VALUES ('"""+jsonpayload['ID']+"""','"""+str(topic)+"""',"""+str(rule_id)+""",1,'"""+row['para_title']+"""',"""+str(int(time.time()))+""")"""
                   print(str(sql2))
                   try:
                     cursor.execute(sql2)
                     # 提交到数据库执行
                     db.commit()
                   except:
                     # 发生错误时回滚
                     db.rollback()               
                   #print(str(tempstr)) 
             elif (rule_id==2 and jsonpayload[para_title]<Y):
                sql2 = """SELECT * FROM `qc_device_alarm` WHERE `clientid` ='"""+jsonpayload['ID']+"""'  and `rule_id` ="""+str(rule_id)+""" and `status`=1 and para='"""+row['para_title']+"""'"""
                
                cursor.execute(sql2)
                result2 = cursor.fetchone()
                
                if str(result2)!="None":
                #UPDATE `qcwulian`.`qc_device_alarm` SET `status`=1 WHERE `id`=4;
                   sql2 = """UPDATE qc_device_alarm SET update_time="""+str(int(time.time()))+""" WHERE id="""+str(result2['id']) 
                   try:
                     cursor.execute(sql2)
                     # 提交到数据库执行
                     db.commit()
                   except:
                     # 发生错误时回滚
                     db.rollback()
                   #print(str(sql2))
                else:
                  
                   sql2 = """INSERT INTO qc_device_alarm(clientid,topic,rule_id,status,para,create_time) VALUES ('"""+jsonpayload['ID']+"""','"""+str(topic)+"""',"""+str(rule_id)+""",1,'"""+row['para_title']+"""',"""+str(int(time.time()))+""")"""
                   print(str(sql2))
                   try:
                     cursor.execute(sql2)
                     # 提交到数据库执行
                     db.commit()
                   except:
                     # 发生错误时回滚
                     db.rollback()               
                   #print(str(tempstr)) 
             elif (rule_id==3 and Y>jsonpayload[para_title]>X):
                sql2 = """SELECT * FROM `qc_device_alarm` WHERE `clientid` ='"""+jsonpayload['ID']+"""'  and `rule_id` ="""+str(rule_id)+""" and `status`=1 and para='"""+row['para_title']+"""'"""
                
                cursor.execute(sql2)
                result2 = cursor.fetchone()
                
                if str(result2)!="None":
                #UPDATE `qcwulian`.`qc_device_alarm` SET `status`=1 WHERE `id`=4;
                   sql2 = """UPDATE qc_device_alarm SET update_time="""+str(int(time.time()))+""" WHERE id="""+str(result2['id']) 
                   try:
                     cursor.execute(sql2)
                     # 提交到数据库执行
                     db.commit()
                   except:
                     # 发生错误时回滚
                     db.rollback()
                   #print(str(sql2))
                else:
                  
                   sql2 = """INSERT INTO qc_device_alarm(clientid,topic,rule_id,status,para,create_time) VALUES ('"""+jsonpayload['ID']+"""','"""+str(topic)+"""',"""+str(rule_id)+""",1,'"""+row['para_title']+"""',"""+str(int(time.time()))+""")"""
                   print(str(sql2))
                   try:
                     cursor.execute(sql2)
                     # 提交到数据库执行
                     db.commit()
                   except:
                     # 发生错误时回滚
                     db.rollback()               
                   #print(str(tempstr))      
             elif (rule_id==4 and jsonpayload[para_title]==X):
                sql2 = """SELECT * FROM `qc_device_alarm` WHERE `clientid` ='"""+jsonpayload['ID']+"""'  and `rule_id` ="""+str(rule_id)+""" and `status`=1 and para='"""+row['para_title']+"""'"""
                
                cursor.execute(sql2)
                result2 = cursor.fetchone()
                
                if str(result2)!="None":
                #UPDATE `qcwulian`.`qc_device_alarm` SET `status`=1 WHERE `id`=4;
                   sql2 = """UPDATE qc_device_alarm SET update_time="""+str(int(time.time()))+""" WHERE id="""+str(result2['id']) 
                   try:
                     cursor.execute(sql2)
                     # 提交到数据库执行
                     db.commit()
                   except:
                     # 发生错误时回滚
                     db.rollback()
                   #print(str(sql2))
                else:
                  
                   sql2 = """INSERT INTO qc_device_alarm(clientid,topic,rule_id,status,para,create_time) VALUES ('"""+jsonpayload['ID']+"""','"""+str(topic)+"""',"""+str(rule_id)+""",1,'"""+row['para_title']+"""',"""+str(int(time.time()))+""")"""
                   print(str(sql2))
                   try:
                     cursor.execute(sql2)
                     # 提交到数据库执行
                     db.commit()
                   except:
                     # 发生错误时回滚
                     db.rollback()               
                   #print(str(tempstr))
             else:
               sql2 ="""SELECT * FROM qc_device_alarm WHERE clientid='"""+jsonpayload['ID']+"""'  and status=1 and para='"""+row['para_title']+"""'"""
               cursor.execute(sql2)
               results3 = cursor.fetchall() 
               if len(results3)>0:
                 sql2 = """UPDATE qc_device_alarm SET update_time="""+str(time.time())+""",status=0 WHERE clientid='"""+jsonpayload['ID']+"""'  and status=1 and para='"""+row['para_title']+"""'"""
                 cursor.execute(sql2)
                 try:
                     cursor.execute(sql2)
                     # 提交到数据库执行
                     db.commit()
                 except:
                     # 发生错误时回滚
                     db.rollback()  
    except:
        print("Error: unable to fecth data")
    
    cursor.close()
    db.close()

猜你喜欢

转载自blog.csdn.net/taogunet/article/details/111684691
今日推荐