diff --git a/website/db/enterprise_node/enterprise_node_alert.py b/website/db/enterprise_node/enterprise_node_alert.py new file mode 100644 index 0000000..7dfdb3c --- /dev/null +++ b/website/db/enterprise_node/enterprise_node_alert.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +from typing import List, Dict, Any + +from sqlalchemy import text + +from website.db_mysql import get_session, to_json_list, to_json + + +class EnterpriseNodeAlertRepository(object): + + def get_all(self) -> List[Dict]: + with get_session() as session: + sql = text( + """SELECT * FROM `enterprise_alert` WHERE `enterprise_node_id`=:enterprise_node_id ORDER BY `created_at` DESC;""" + ) + cursor = session.execute( + sql, {"enterprise_node_id": self.enterprise_node_id} + ) + + def get_one(self, enterprise_suid: str, enterprise_node_id: int) -> Dict | None: + with get_session() as session: + sql = text( + """SELECT * FROM `enterprise_alert` WHERE `enterprise_suid`=:enterprise_suid and `node_id`=:node_id;""" + ) + cursor = session.execute( + sql, {"enterprise_suid": enterprise_suid, "node_id": enterprise_node_id} + ) + return to_json(cursor) + + def update_or_inert(self, data: Dict) -> None: + with get_session() as session: + sql = text( + """ + INSERT INTO `enterprise_alert` (`enterprise_suid`, `node_id`, `node_suid`, `is_sms`, `sms_to`, `is_email`, `email_to`, `freq`) + VALUES (:enterprise_suid, :node_id, :node_suid, :is_sms, :sms_to, :is_email, :email_to, :freq) + ON DUPLICATE KEY UPDATE + `node_suid`=:node_suid, `is_sms`=:is_sms, `sms_to`=:sms_to, `is_email`=:is_email, `email_to`=:email_to, `freq`=:freq + WHERE `enterprise_suid` = :enterprise_suid AND `node_id` = :node_id; + """ + ) + session.execute(sql, data) + session.commit() diff --git a/website/handlers/enterprise_busi_model/url.py b/website/handlers/enterprise_busi_model/url.py index ae6c97e..f613eaa 100644 --- a/website/handlers/enterprise_busi_model/url.py +++ b/website/handlers/enterprise_busi_model/url.py @@ -8,8 +8,5 @@ handlers = [ ("/enterprise/model/deployment/add", handler.AddHandler), ("/enterprise/model/deployment/info", handler.InfoHandler), ("/enterprise/model/deployment/edit", handler.EditHandler), - ] -page_handlers = [ - -] \ No newline at end of file +page_handlers = [] diff --git a/website/handlers/enterprise_device/url.py b/website/handlers/enterprise_device/url.py index 3ce2eeb..e3c68b6 100644 --- a/website/handlers/enterprise_device/url.py +++ b/website/handlers/enterprise_device/url.py @@ -6,14 +6,15 @@ from website.handlers.enterprise_device import handler handlers = [ ("/enterprise/device/classification/add", handler.DeviceClassificationAddHandler), ("/enterprise/device/classification", handler.DeviceClassificationHandler), - ("/enterprise/device/classification/delete", handler.DeviceClassificationDeleteHandler), - + ( + "/enterprise/device/classification/delete", + handler.DeviceClassificationDeleteHandler, + ), ("/enterprise/entity/nodes/device/add", handler.DeviceAddHandler), ("/enterprise/entity/nodes/device/edit", handler.DeviceEditHandler), ("/enterprise/entity/nodes/device/delete", handler.DeviceDeleteHandler), ("/enterprise/entity/nodes/device/list", handler.DeviceListHandler), + ("/enterprise/entity/nodes/device/list/simple", handler.DeviceListSimpleHandler), ("/enterprise/entity/nodes/device/info", handler.DeviceInfoHandler), ] -page_handlers = [ - -] \ No newline at end of file +page_handlers = [] diff --git a/website/handlers/enterprise_node/handler.py b/website/handlers/enterprise_node/handler.py index f8d358b..42f54b1 100644 --- a/website/handlers/enterprise_node/handler.py +++ b/website/handlers/enterprise_node/handler.py @@ -9,6 +9,7 @@ from website.db.enterprise_busi_model import ( enterprise_busi_model_node_device as DB_BusiModelNodeDevice, ) from website.db.enterprise_device import enterprise_device as DB_Device +from website.db.enterprise_node import enterprise_node_alert as DB_NodeAlert from website.util import shortuuid @@ -380,3 +381,100 @@ class BusimodelDeployHandler(APIHandler): db_busi_model_node_device.batch_insert_record(records) self.finish() + + +class AlertHandler(APIHandler): + """ + - 描述:企业节点,节点信息 -> 设备列表 -> 告警设置信息 + - 请求方式:post + - 请求参数: + > - node_id, int, 节点id + - 返回值: + ``` + { + "is_sms": 1, # 是否sms + "sms_to": "xxxx", # 短信联系人 + "is_email": 1, # 是否email + "email_to": "xxx", # 邮件联系人 + "freq": "T", # T/每次,D/每天,W/每周,M/每月 + } + ``` + """ + + @authenticated + def post(self): + node_id = self.get_int_argument("node_id") + if not node_id: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误") + db_node = DB_Node.EnterpriseNodeRepository() + node = db_node.get_node_by_id(node_id) + if not node: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "节点不存在") + node_suid = node["suid"] + + row = db_node.get_entity_suid_by_node_id(node_id) + entity_suid = row["entity_suid"] + + db_alert = DB_NodeAlert.EnterpriseNodeAlertRepository() + data = db_alert.get_one(entity_suid, node_suid) + self.finish( + { + "is_sms": data["is_sms"], + "sms_to": data["sms_to"], + "is_email": data["is_email"], + "email_to": data["email_to"], + "freq": data["freq"], + } + ) + + +class AlertConfigHandler(APIHandler): + """ + - 描述:企业节点,节点信息 -> 设备列表 -> 告警设置,更新配置 + - 请求方式:post + - 请求参数: + > - node_id, int, 节点id + > - is_sms, int, 是否sms, 1/是,0/否 + > - sms_to, string, 短信联系人 + > - is_email, int, 是否email,1/是,0/否 + > - email_to, string, 邮件联系人 + > - freq, string, 频次, T/每次,D/每天,W/每周,M/每月 + - 返回值:无 + """ + + @authenticated + def post(self): + node_id = self.get_int_argument("node_id") + is_sms = self.get_int_argument("is_sms", 0) + sms_to = self.get_escaped_argument("sms_to", "") + is_email = self.get_int_argument("is_email", 0) + email_to = self.get_escaped_argument("email_to", "") + freq = self.get_escaped_argument("freq", "T") + if not node_id: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误") + if freq not in ("T", "D", "W", "M"): + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "参数错误") + + db_node = DB_Node.EnterpriseNodeRepository() + node = db_node.get_node_by_id(node_id) + if not node: + raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "节点不存在") + node_suid = node["suid"] + + row = db_node.get_entity_suid_by_node_id(node_id) + entity_suid = row["entity_suid"] + + insert_data = { + "entity_suid": entity_suid, + "node_id": node_id, + "node_suid": node_suid, + "is_sms": is_sms, + "sms_to": sms_to, + "is_email": is_email, + "email_to": email_to, + "freq": freq, + } + db_alert = DB_NodeAlert.EnterpriseNodeAlertRepository() + + db_alert.update_or_inert(insert_data) + self.finish() diff --git a/website/handlers/enterprise_node/url.py b/website/handlers/enterprise_node/url.py index f206a37..20fa9c9 100644 --- a/website/handlers/enterprise_node/url.py +++ b/website/handlers/enterprise_node/url.py @@ -2,18 +2,16 @@ from website.handlers.enterprise_node import handler handlers = [ - ('/enterprise/entity/nodes/add', handler.AddHandler), - ('/enterprise/entity/nodes/edit', handler.EditHandler), - ('/enterprise/entity/nodes', handler.TreeHandler), - ('/enterprise/entity/nodes/info', handler.InfoHandler), - ('/enterprise/entity/nodes/delete', handler.DeleteHandler), - + ("/enterprise/entity/nodes/add", handler.AddHandler), + ("/enterprise/entity/nodes/edit", handler.EditHandler), + ("/enterprise/entity/nodes", handler.TreeHandler), + ("/enterprise/entity/nodes/info", handler.InfoHandler), + ("/enterprise/entity/nodes/delete", handler.DeleteHandler), ("/enterprise/entity/nodes/busimodel", handler.BusimodelHandler), ("/enterprise/entity/nodes/busimodel/info", handler.BusimodelInfoHandler), ("/enterprise/entity/nodes/busimodel/deploy", handler.BusimodelDeployHandler), - + ("/enterprise/entity/nodes/alert", handler.AlertHandler), + ("/enterprise/entity/nodes/alert/config", handler.AlertConfigHandler), ] -page_handlers = [ - -] \ No newline at end of file +page_handlers = []