|
@@ -33,19 +33,19 @@ class AlarmPlanManager:
|
|
self.running = False
|
|
self.running = False
|
|
self.thread = None
|
|
self.thread = None
|
|
|
|
|
|
- def push(self, plan_uuid: str, alarm_plan: AlarmPlan) -> None:
|
|
|
|
|
|
+ def push_plan(self, plan_uuid: str, alarm_plan: AlarmPlan) -> None:
|
|
with self.lock_:
|
|
with self.lock_:
|
|
self.alarm_plan_map_[plan_uuid] = alarm_plan
|
|
self.alarm_plan_map_[plan_uuid] = alarm_plan
|
|
|
|
|
|
- def pop(self, plan_uuid: str) -> Optional[AlarmPlan]:
|
|
|
|
|
|
+ def pop_plan(self, plan_uuid: str) -> Optional[AlarmPlan]:
|
|
with self.lock_:
|
|
with self.lock_:
|
|
return self.alarm_plan_map_.pop(plan_uuid, None)
|
|
return self.alarm_plan_map_.pop(plan_uuid, None)
|
|
|
|
|
|
- def find(self, plan_uuid: str) -> Optional[AlarmPlan]:
|
|
|
|
|
|
+ def find_plan(self, plan_uuid: str) -> Optional[AlarmPlan]:
|
|
with self.lock_:
|
|
with self.lock_:
|
|
return self.alarm_plan_map_.get(plan_uuid, None)
|
|
return self.alarm_plan_map_.get(plan_uuid, None)
|
|
|
|
|
|
- def delete(self, plan_uuid: str) -> bool:
|
|
|
|
|
|
+ def delete_plan(self, plan_uuid: str) -> bool:
|
|
with self.lock_:
|
|
with self.lock_:
|
|
if plan_uuid in self.alarm_plan_map_:
|
|
if plan_uuid in self.alarm_plan_map_:
|
|
del self.alarm_plan_map_[plan_uuid]
|
|
del self.alarm_plan_map_[plan_uuid]
|
|
@@ -225,14 +225,32 @@ class AlarmPlanManager:
|
|
"plan_uuid": plan_uuid
|
|
"plan_uuid": plan_uuid
|
|
}
|
|
}
|
|
db_req_que.put(DBRequest_Async(sql=sqls.sql_query_one_alarm_plan, params=params,
|
|
db_req_que.put(DBRequest_Async(sql=sqls.sql_query_one_alarm_plan, params=params,
|
|
- callback=self.cb_query_one_alarm_plan))
|
|
|
|
|
|
+ callback=self.cb_query_one_alarm_plan, userdata=plan_uuid))
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ # 更新单条告警计划
|
|
|
|
+ def update_one_alarm_plan(self, alarm_plan:AlarmPlan):
|
|
|
|
+ plan_uuid = alarm_plan.plan_uuid_
|
|
|
|
+ plan_name = alarm_plan.name_
|
|
|
|
+ if alarm_plan.enable_:
|
|
|
|
+ # 塞入告警计划
|
|
|
|
+ if not alarm_plan.cron_:
|
|
|
|
+ self.push_plan(plan_uuid, alarm_plan)
|
|
|
|
+ else:
|
|
|
|
+ self.push_cron(plan_uuid, alarm_plan)
|
|
|
|
+ LOGINFO(f"update alarm_plan: {plan_uuid}, {plan_name}")
|
|
|
|
+ else:
|
|
|
|
+ self.remove_one_alarm_plan(plan_uuid)
|
|
|
|
+ LOGINFO(f"disable alarm_plan: {plan_uuid}, {plan_name}")
|
|
|
|
|
|
|
|
|
|
# 查询单个告警计划回调
|
|
# 查询单个告警计划回调
|
|
def cb_query_one_alarm_plan(self, result, userdata):
|
|
def cb_query_one_alarm_plan(self, result, userdata):
|
|
try:
|
|
try:
|
|
|
|
+ plan_uuid = userdata
|
|
if not result:
|
|
if not result:
|
|
LOGDBG("cb_query_one_alarm_plan, invalid result")
|
|
LOGDBG("cb_query_one_alarm_plan, invalid result")
|
|
|
|
+ self.remove_one_alarm_plan(plan_uuid)
|
|
|
|
|
|
for row in result:
|
|
for row in result:
|
|
plan_uuid: str = row["plan_uuid"]
|
|
plan_uuid: str = row["plan_uuid"]
|
|
@@ -302,12 +320,9 @@ class AlarmPlanManager:
|
|
if alarm_plan.event_attr_ is None:
|
|
if alarm_plan.event_attr_ is None:
|
|
LOGERR(f"drop plan {plan_uuid}, invalid event_type: {event_type}")
|
|
LOGERR(f"drop plan {plan_uuid}, invalid event_type: {event_type}")
|
|
continue
|
|
continue
|
|
- # 塞入告警计划
|
|
|
|
- if not alarm_plan.cron_:
|
|
|
|
- self.push(plan_uuid, alarm_plan)
|
|
|
|
- else:
|
|
|
|
- self.push_cron(plan_uuid, alarm_plan)
|
|
|
|
- LOGINFO(f"update alarm_plan: {plan_uuid}, {plan_name}")
|
|
|
|
|
|
+
|
|
|
|
+ # 更新告警计划
|
|
|
|
+ self.update_one_alarm_plan(alarm_plan)
|
|
|
|
|
|
except json.JSONDecodeError as e:
|
|
except json.JSONDecodeError as e:
|
|
tb_info = traceback.extract_tb(e.__traceback__)
|
|
tb_info = traceback.extract_tb(e.__traceback__)
|
|
@@ -353,88 +368,80 @@ def region_to_rect(region: dict) -> list:
|
|
# 回调函数,处理查询结果:查询所有的告警计划信息
|
|
# 回调函数,处理查询结果:查询所有的告警计划信息
|
|
def cb_handle_query_all_alarm_plan_info(result, userdata):
|
|
def cb_handle_query_all_alarm_plan_info(result, userdata):
|
|
try:
|
|
try:
|
|
- if result:
|
|
|
|
- for row in result:
|
|
|
|
- plan_uuid: str = row["plan_uuid"]
|
|
|
|
- plan_name: str = row["plan_name"]
|
|
|
|
- dev_id: str = row["dev_id"]
|
|
|
|
- dev_name: str = row["dev_name"]
|
|
|
|
- enable: int = bool(row["enable"])
|
|
|
|
- # region = row["region"]
|
|
|
|
- # rect = json.loads(region_to_rect(region))
|
|
|
|
- rect: list = json.loads(row["region"]) if row.get("region") else []
|
|
|
|
- threshold_time: int = row["threshold_time"]
|
|
|
|
- merge_time: int = row["merge_time"]
|
|
|
|
- param: dict = json.loads(row["param"])
|
|
|
|
-
|
|
|
|
- event_val: int = row["event_val"]
|
|
|
|
- event_type = event_val
|
|
|
|
- event_str: str = row["event_str"]
|
|
|
|
- event_desc: str = row["event_desc"]
|
|
|
|
- tenant_id: int = row.get("tenant_id", 0)
|
|
|
|
-
|
|
|
|
- start_date = row["start_date"]
|
|
|
|
- stop_date = row["stop_date"]
|
|
|
|
- time_range = json.loads(row["time_range"])
|
|
|
|
- month_days = None
|
|
|
|
- if row["month_days"]:
|
|
|
|
- month_days = ast.literal_eval(row["month_days"])
|
|
|
|
- weekdays = None
|
|
|
|
- if row["weekdays"]:
|
|
|
|
- weekdays = ast.literal_eval(row["weekdays"])
|
|
|
|
-
|
|
|
|
- linkage_push_wechat_service: int = row.get("linkage_push_wechat_service") or 0
|
|
|
|
- linkage_action = LinkageAction(wechat_service=linkage_push_wechat_service)
|
|
|
|
-
|
|
|
|
- cron = None
|
|
|
|
- if ((event_type == EventType.TOILETING_FREQUENCY.value) or
|
|
|
|
- (event_type == EventType.NIGHT_TOILETING_FREQUENCY.value) or
|
|
|
|
- (event_type == EventType.TOILETING_FREQUENCY_ABNORMAL.value) or
|
|
|
|
- (event_type == EventType.NIGHT_TOILETING_FREQUENCY_ABNORMAL.value) or
|
|
|
|
- (event_type == EventType.BATHROOM_STAY_FREQUENCY.value)):
|
|
|
|
- cron = {
|
|
|
|
- "hour": 7,
|
|
|
|
- "minute": 0
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- time_plan = TimePlan(
|
|
|
|
- time_range = time_range,
|
|
|
|
- start_date = start_date,
|
|
|
|
- stop_date = stop_date,
|
|
|
|
- weekdays = weekdays,
|
|
|
|
- month_days = month_days
|
|
|
|
- )
|
|
|
|
-
|
|
|
|
- alarm_plan = AlarmPlan(
|
|
|
|
- plan_uuid = plan_uuid,
|
|
|
|
- name = plan_name,
|
|
|
|
- dev_id = dev_id,
|
|
|
|
- dev_name = dev_name,
|
|
|
|
- enable = enable,
|
|
|
|
- time_plan = time_plan,
|
|
|
|
- rect = rect,
|
|
|
|
- event_type = event_type,
|
|
|
|
- threshold_time = threshold_time,
|
|
|
|
- merge_time = merge_time,
|
|
|
|
- param = param,
|
|
|
|
- cron = cron,
|
|
|
|
- linkage_action=linkage_action,
|
|
|
|
- tenant_id = tenant_id
|
|
|
|
- )
|
|
|
|
-
|
|
|
|
- if alarm_plan.event_attr_ is None:
|
|
|
|
- LOGERR(f"drop plan {plan_uuid}, invalid event_type: {event_type}")
|
|
|
|
- continue
|
|
|
|
-
|
|
|
|
- # 塞入告警计划
|
|
|
|
- if not alarm_plan.cron_:
|
|
|
|
- g_las.g_alarm_plan_mgr.push(plan_uuid, alarm_plan)
|
|
|
|
- else:
|
|
|
|
- g_las.g_alarm_plan_mgr.push_cron(plan_uuid, alarm_plan)
|
|
|
|
-
|
|
|
|
- LOGDBG(f"cb_handle_query_all_alarm_plan_info succeed")
|
|
|
|
- else:
|
|
|
|
|
|
+ if not result:
|
|
LOGDBG("cb_handle_query_all_alarm_plan_info, invalid result")
|
|
LOGDBG("cb_handle_query_all_alarm_plan_info, invalid result")
|
|
|
|
+ for row in result:
|
|
|
|
+ plan_uuid: str = row["plan_uuid"]
|
|
|
|
+ plan_name: str = row["plan_name"]
|
|
|
|
+ dev_id: str = row["dev_id"]
|
|
|
|
+ dev_name: str = row["dev_name"]
|
|
|
|
+ enable: int = bool(row["enable"])
|
|
|
|
+ # region = row["region"]
|
|
|
|
+ # rect = json.loads(region_to_rect(region))
|
|
|
|
+ rect: list = json.loads(row["region"]) if row.get("region") else []
|
|
|
|
+ threshold_time: int = row["threshold_time"]
|
|
|
|
+ merge_time: int = row["merge_time"]
|
|
|
|
+ param: dict = json.loads(row["param"])
|
|
|
|
+ event_val: int = row["event_val"]
|
|
|
|
+ event_type = event_val
|
|
|
|
+ event_str: str = row["event_str"]
|
|
|
|
+ event_desc: str = row["event_desc"]
|
|
|
|
+ tenant_id: int = row.get("tenant_id", 0)
|
|
|
|
+ start_date = row["start_date"]
|
|
|
|
+ stop_date = row["stop_date"]
|
|
|
|
+ time_range = json.loads(row["time_range"])
|
|
|
|
+ month_days = None
|
|
|
|
+ if row["month_days"]:
|
|
|
|
+ month_days = ast.literal_eval(row["month_days"])
|
|
|
|
+ weekdays = None
|
|
|
|
+ if row["weekdays"]:
|
|
|
|
+ weekdays = ast.literal_eval(row["weekdays"])
|
|
|
|
+ linkage_push_wechat_service: int = row.get("linkage_push_wechat_service") or 0
|
|
|
|
+ linkage_action = LinkageAction(wechat_service=linkage_push_wechat_service)
|
|
|
|
+ cron = None
|
|
|
|
+ if ((event_type == EventType.TOILETING_FREQUENCY.value) or
|
|
|
|
+ (event_type == EventType.NIGHT_TOILETING_FREQUENCY.value) or
|
|
|
|
+ (event_type == EventType.TOILETING_FREQUENCY_ABNORMAL.value) or
|
|
|
|
+ (event_type == EventType.NIGHT_TOILETING_FREQUENCY_ABNORMAL.value) or
|
|
|
|
+ (event_type == EventType.BATHROOM_STAY_FREQUENCY.value)):
|
|
|
|
+ cron = {
|
|
|
|
+ "hour": 7,
|
|
|
|
+ "minute": 0
|
|
|
|
+ }
|
|
|
|
+ time_plan = TimePlan(
|
|
|
|
+ time_range = time_range,
|
|
|
|
+ start_date = start_date,
|
|
|
|
+ stop_date = stop_date,
|
|
|
|
+ weekdays = weekdays,
|
|
|
|
+ month_days = month_days
|
|
|
|
+ )
|
|
|
|
+ alarm_plan = AlarmPlan(
|
|
|
|
+ plan_uuid = plan_uuid,
|
|
|
|
+ name = plan_name,
|
|
|
|
+ dev_id = dev_id,
|
|
|
|
+ dev_name = dev_name,
|
|
|
|
+ enable = enable,
|
|
|
|
+ time_plan = time_plan,
|
|
|
|
+ rect = rect,
|
|
|
|
+ event_type = event_type,
|
|
|
|
+ threshold_time = threshold_time,
|
|
|
|
+ merge_time = merge_time,
|
|
|
|
+ param = param,
|
|
|
|
+ cron = cron,
|
|
|
|
+ linkage_action=linkage_action,
|
|
|
|
+ tenant_id = tenant_id
|
|
|
|
+ )
|
|
|
|
+ if alarm_plan.event_attr_ is None:
|
|
|
|
+ LOGERR(f"drop plan {plan_uuid}, invalid event_type: {event_type}")
|
|
|
|
+ continue
|
|
|
|
+ # 塞入告警计划
|
|
|
|
+ if not alarm_plan.cron_:
|
|
|
|
+ g_las.g_alarm_plan_mgr.push_plan(plan_uuid, alarm_plan)
|
|
|
|
+ else:
|
|
|
|
+ g_las.g_alarm_plan_mgr.push_cron(plan_uuid, alarm_plan)
|
|
|
|
+
|
|
|
|
+ LOGDBG(f"cb_handle_query_all_alarm_plan_info succeed")
|
|
|
|
+
|
|
|
|
|
|
except json.JSONDecodeError as e:
|
|
except json.JSONDecodeError as e:
|
|
tb_info = traceback.extract_tb(e.__traceback__)
|
|
tb_info = traceback.extract_tb(e.__traceback__)
|