组合条件
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()