|
@@ -1,10 +1,10 @@
|
|
|
import json
|
|
|
-from MyUtils.Dingtalk import send_message
|
|
|
from MyUtils.Dingtalk import send_message_markdown
|
|
|
import datetime
|
|
|
import time
|
|
|
import pymysql
|
|
|
import pytz
|
|
|
+import os
|
|
|
|
|
|
|
|
|
SELECT_BUILDING_SQL = "SELECT zj_building_id,sg_building_id FROM sagacloud_setup.zj_sync_config_building"
|
|
@@ -24,123 +24,142 @@ def datetime_now():
|
|
|
return datetime_now
|
|
|
|
|
|
|
|
|
-
|
|
|
-# 读取配置文件信息
|
|
|
-with open("config.json", "r") as f:
|
|
|
- data = json.load(f)
|
|
|
- mysql = data["mysql"]
|
|
|
- database = mysql["database"]
|
|
|
- dingding = data["dingding"]
|
|
|
-
|
|
|
-
|
|
|
# mysql插入数据
|
|
|
def insert_mysql(sqls):
|
|
|
- print("%s 开始往mysql插入数据..."%datetime_now())
|
|
|
+ print("%s 开始往mysql插入数据..." % datetime_now())
|
|
|
for i in range(0, len(sqls), 1000):
|
|
|
sqlranges = sqls[i:i + 1000]
|
|
|
sqlranges = INSERT_BUILDING_ROOMS_SQL + ",".join(sqlranges)
|
|
|
mysql_cur.execute(sqlranges)
|
|
|
conn.commit()
|
|
|
- print("%s mysql数据插入成功,合计%s条..." % (datetime_now(),len(sqls)))
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-#钉钉推送消息
|
|
|
-messages = []
|
|
|
-#存储zj_fc表的空间名称
|
|
|
-FC_NAMELIST_DICT = {}
|
|
|
-#存储space表的空间名称
|
|
|
-SPACE_NAMELIST_DICT={}
|
|
|
-
|
|
|
-# 连接mysql
|
|
|
-conn = pymysql.connect(**mysql)
|
|
|
-mysql_cur = conn.cursor()
|
|
|
-
|
|
|
-# 获取建筑列表
|
|
|
-mysql_cur.execute(SELECT_BUILDING_SQL)
|
|
|
-buildinglist = mysql_cur.fetchall()
|
|
|
-
|
|
|
-
|
|
|
-#获取需要对应的点位列表
|
|
|
-mysql_cur.execute(SELECT_STATE_SQL)
|
|
|
-roomid_list = mysql_cur.fetchall()
|
|
|
-roomid_list = [i[0] for i in roomid_list]
|
|
|
-
|
|
|
-
|
|
|
-# 获取zj_fc空间名称
|
|
|
-print("%s 获取zj_fc空间名称..."%datetime_now())
|
|
|
-mysql_cur.execute(SELECT_FC_SQL)
|
|
|
-fc_namelist = mysql_cur.fetchall()
|
|
|
-for building in buildinglist:
|
|
|
- if building[0] and building[1] != None:
|
|
|
- for fc_name in fc_namelist:
|
|
|
- #判断空间是否需要对比
|
|
|
- if fc_name[2] in roomid_list:
|
|
|
- if fc_name[0] == building[0]:
|
|
|
- FC_NAMELIST_DICT[building[1]+"_"+fc_name[1]] = building[0]+"_"+fc_name[1]
|
|
|
- # FC_NAMELIST_DICT[building[1]+"_"+fc_name[1]] = 1
|
|
|
- else:
|
|
|
- message = (" - **类型:** 建筑关系未对应 \n" + " - **建筑ID:** <font color=#FF0000>%s(%s)</font> \n")% (building[0],building[1])
|
|
|
- print(message)
|
|
|
- messages.append(message)
|
|
|
- messages.append("___")
|
|
|
-
|
|
|
-
|
|
|
-# 获取space空间名称
|
|
|
-print("%s 获取space空间名称..."%datetime_now())
|
|
|
-mysql_cur.execute(SELECT_SPACE_SQL)
|
|
|
-space_namelist = mysql_cur.fetchall()
|
|
|
-
|
|
|
-for space in space_namelist:
|
|
|
- SPACE_NAMELIST_DICT[space[0]+"_"+space[1]] = 1
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-# print(FC_NAMELIST_DICT)
|
|
|
-# print(SPACE_NAMELIST_DICT)
|
|
|
-
|
|
|
-
|
|
|
-#对比空间名称,取出差异数据生成sql语句
|
|
|
-sqls = []
|
|
|
-print("%s 开始对比差异数据..."%datetime_now())
|
|
|
-diff_namelist = set(FC_NAMELIST_DICT) - set(SPACE_NAMELIST_DICT)
|
|
|
-if diff_namelist != set():
|
|
|
- for diff_name in diff_namelist:
|
|
|
- diff_building_rooms = FC_NAMELIST_DICT[diff_name]
|
|
|
- diff_building_id = str(diff_building_rooms).split("_")[0]
|
|
|
- diff_room_name = str(diff_building_rooms).split("_")[1]
|
|
|
- mysql_cur.execute(SELECT_DIFF_FC_SQL%(diff_building_id,diff_room_name))
|
|
|
- diff_data = mysql_cur.fetchall()[0]
|
|
|
- building_name = diff_data[0]
|
|
|
- floor_id = diff_data[1]
|
|
|
- floor_name = diff_data[2]
|
|
|
- state = diff_data[3]
|
|
|
- type = diff_data[4]
|
|
|
- sqlline = "('%s','%s','%s','%s','%s','%s','%s','%s')"%(diff_building_id,building_name,diff_room_name,floor_id,floor_name,state,type,datetime_now())
|
|
|
- sqls.append(sqlline)
|
|
|
- # message = (" - **building_id:** %s \n" + " - **building_name:** %s \n" + " - **room_name:** %s \n" + " - **type:** %s \n")%(diff_building_id, building_name,diff_room_name,type)
|
|
|
- # messages.append(message)
|
|
|
- # messages.append("___")
|
|
|
- print("%s 差异数据共计%s条..."%(datetime_now(),len(diff_namelist)))
|
|
|
- message = (" - **类型:** 空间名称未对应 \n" + " - **数量:** <font color=#FF0000>%s</font> \n") % (len(diff_namelist))
|
|
|
- messages.append(message)
|
|
|
- messages.append("___")
|
|
|
-# 获取space空间名称
|
|
|
-print("%s 清空MySQL表数据..."%datetime_now())
|
|
|
-mysql_cur.execute(TRUNCATE_BUILDING_ROOMS_SQL)
|
|
|
-conn.commit()
|
|
|
-
|
|
|
-#往MySQL插入数据
|
|
|
-insert_mysql(sqls)
|
|
|
-
|
|
|
-if messages:
|
|
|
- messages.append("<font color=#0080FF>详情查看MySQL数据库sagacloud_setup里的zj_sync_building_rooms表</font>")
|
|
|
- messages_info = "\n".join(messages)
|
|
|
- # 如果有报警,发送钉钉
|
|
|
- title = "## **【之江实验室】空间名称报警** "
|
|
|
- messages_info = title + "\n" +"___"+"\n"+ messages_info
|
|
|
- print(messages_info)
|
|
|
- send_message_markdown(title, messages_info, dingding)
|
|
|
-
|
|
|
-mysql_cur.close()
|
|
|
-conn.close()
|
|
|
+ print("%s mysql数据插入成功,合计%s条..." % (datetime_now(), len(sqls)))
|
|
|
+
|
|
|
+
|
|
|
+# # 读取配置文件信息
|
|
|
+# with open("config.json", "r") as f:
|
|
|
+# data = json.load(f)
|
|
|
+# mysql = data["mysql"]
|
|
|
+# database = mysql["database"]
|
|
|
+# dingding = data["dingding"]
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+mysql = {
|
|
|
+ "host": os.getenv("host"),
|
|
|
+ "port": os.getenv("port"),
|
|
|
+ "user": os.getenv("user"),
|
|
|
+ "passwd": os.getenv("passwd"),
|
|
|
+ "database": os.getenv("database")
|
|
|
+}
|
|
|
+database = os.getenv("database")
|
|
|
+dingding = os.getenv("dingding")
|
|
|
+
|
|
|
+while True:
|
|
|
+ time_now = datetime.datetime.fromtimestamp(int(time.time()),
|
|
|
+ pytz.timezone('Asia/Shanghai')).strftime('%H:%M:%S')
|
|
|
+ # time_now = time.strftime("%H:%M:%S", time.localtime()) # 刷新
|
|
|
+ am_set_time = "05:00:00"
|
|
|
+ if time_now == am_set_time: # 此处设置每天定时的时间
|
|
|
+
|
|
|
+
|
|
|
+ #钉钉推送消息
|
|
|
+ messages = []
|
|
|
+ #存储zj_fc表的空间名称
|
|
|
+ FC_NAMELIST_DICT = {}
|
|
|
+ #存储space表的空间名称
|
|
|
+ SPACE_NAMELIST_DICT={}
|
|
|
+
|
|
|
+ # 连接mysql
|
|
|
+ conn = pymysql.connect(**mysql)
|
|
|
+ mysql_cur = conn.cursor()
|
|
|
+
|
|
|
+ # 获取建筑列表
|
|
|
+ mysql_cur.execute(SELECT_BUILDING_SQL)
|
|
|
+ buildinglist = mysql_cur.fetchall()
|
|
|
+
|
|
|
+
|
|
|
+ #获取需要对应的点位列表
|
|
|
+ mysql_cur.execute(SELECT_STATE_SQL)
|
|
|
+ roomid_list = mysql_cur.fetchall()
|
|
|
+ roomid_list = [i[0] for i in roomid_list]
|
|
|
+
|
|
|
+
|
|
|
+ # 获取zj_fc空间名称
|
|
|
+ print("%s 获取zj_fc空间名称..."%datetime_now())
|
|
|
+ mysql_cur.execute(SELECT_FC_SQL)
|
|
|
+ fc_namelist = mysql_cur.fetchall()
|
|
|
+ for building in buildinglist:
|
|
|
+ if building[0] and building[1] != None:
|
|
|
+ for fc_name in fc_namelist:
|
|
|
+ #判断空间是否需要对比
|
|
|
+ if fc_name[2] in roomid_list:
|
|
|
+ if fc_name[0] == building[0]:
|
|
|
+ FC_NAMELIST_DICT[building[1]+"_"+fc_name[1]] = building[0]+"_"+fc_name[1]
|
|
|
+ # FC_NAMELIST_DICT[building[1]+"_"+fc_name[1]] = 1
|
|
|
+ else:
|
|
|
+ message = (" - **类型:** 建筑关系未对应 \n" + " - **建筑ID:** <font color=#FF0000>%s(%s)</font> \n")% (building[0],building[1])
|
|
|
+ print(message)
|
|
|
+ messages.append(message)
|
|
|
+ messages.append("___")
|
|
|
+
|
|
|
+
|
|
|
+ # 获取space空间名称
|
|
|
+ print("%s 获取space空间名称..."%datetime_now())
|
|
|
+ mysql_cur.execute(SELECT_SPACE_SQL)
|
|
|
+ space_namelist = mysql_cur.fetchall()
|
|
|
+
|
|
|
+ for space in space_namelist:
|
|
|
+ SPACE_NAMELIST_DICT[space[0]+"_"+space[1]] = 1
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ # print(FC_NAMELIST_DICT)
|
|
|
+ # print(SPACE_NAMELIST_DICT)
|
|
|
+
|
|
|
+
|
|
|
+ #对比空间名称,取出差异数据生成sql语句
|
|
|
+ sqls = []
|
|
|
+ print("%s 开始对比差异数据..."%datetime_now())
|
|
|
+ diff_namelist = set(FC_NAMELIST_DICT) - set(SPACE_NAMELIST_DICT)
|
|
|
+ if diff_namelist != set():
|
|
|
+ for diff_name in diff_namelist:
|
|
|
+ diff_building_rooms = FC_NAMELIST_DICT[diff_name]
|
|
|
+ diff_building_id = str(diff_building_rooms).split("_")[0]
|
|
|
+ diff_room_name = str(diff_building_rooms).split("_")[1]
|
|
|
+ mysql_cur.execute(SELECT_DIFF_FC_SQL%(diff_building_id,diff_room_name))
|
|
|
+ diff_data = mysql_cur.fetchall()[0]
|
|
|
+ building_name = diff_data[0]
|
|
|
+ floor_id = diff_data[1]
|
|
|
+ floor_name = diff_data[2]
|
|
|
+ state = diff_data[3]
|
|
|
+ type = diff_data[4]
|
|
|
+ sqlline = "('%s','%s','%s','%s','%s','%s','%s','%s')"%(diff_building_id,building_name,diff_room_name,floor_id,floor_name,state,type,datetime_now())
|
|
|
+ sqls.append(sqlline)
|
|
|
+ # message = (" - **building_id:** %s \n" + " - **building_name:** %s \n" + " - **room_name:** %s \n" + " - **type:** %s \n")%(diff_building_id, building_name,diff_room_name,type)
|
|
|
+ # messages.append(message)
|
|
|
+ # messages.append("___")
|
|
|
+ print("%s 差异数据共计%s条..."%(datetime_now(),len(diff_namelist)))
|
|
|
+ message = (" - **类型:** 空间名称未对应 \n" + " - **数量:** <font color=#FF0000>%s</font> \n") % (len(diff_namelist))
|
|
|
+ messages.append(message)
|
|
|
+ messages.append("___")
|
|
|
+ # 获取space空间名称
|
|
|
+ print("%s 清空MySQL表数据..."%datetime_now())
|
|
|
+ mysql_cur.execute(TRUNCATE_BUILDING_ROOMS_SQL)
|
|
|
+ conn.commit()
|
|
|
+
|
|
|
+ #往MySQL插入数据
|
|
|
+ insert_mysql(sqls)
|
|
|
+
|
|
|
+ #关闭数据库
|
|
|
+ mysql_cur.close()
|
|
|
+ conn.close()
|
|
|
+
|
|
|
+ if messages:
|
|
|
+ print("%s 发送钉钉报警"%datetime_now())
|
|
|
+ messages.append("<font color=#0080FF>详情查看MySQL数据库sagacloud_setup里的zj_sync_building_rooms表</font>")
|
|
|
+ messages_info = "\n".join(messages)
|
|
|
+ # 如果有报警,发送钉钉
|
|
|
+ title = "## **【之江实验室】空间名称报警** "
|
|
|
+ messages_info = title + "\n" +"___"+"\n"+ messages_info
|
|
|
+ send_message_markdown(title, messages_info, dingding)
|
|
|
+
|