From fe681729a89f16c67e07abe98b8d415e0ffe2096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CjackieLiu?= Date: Tue, 14 Jul 2020 16:39:09 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E7=BE=A4=E6=9C=BA=E5=99=A8=E4=BA=BA=E9=80=9A=E7=9F=A5(webhook)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/templates/config.html | 13 +++++++++++++ common/utils/sendmsg.py | 16 ++++++++++++++++ sql/admin.py | 2 +- sql/models.py | 1 + sql/notify.py | 12 +++++++++--- src/init_sql/v1.7.11_v1.7.12.sql | 5 ++++- 6 files changed, 44 insertions(+), 5 deletions(-) diff --git a/common/templates/config.html b/common/templates/config.html index ed944d3f97..a226e973fb 100755 --- a/common/templates/config.html +++ b/common/templates/config.html @@ -625,6 +625,19 @@
注2:企业微信开启后,若未配置企业微信Use +
+ +
+
+ +
+
+
diff --git a/common/utils/sendmsg.py b/common/utils/sendmsg.py index e5095bb095..2bf9f882ed 100755 --- a/common/utils/sendmsg.py +++ b/common/utils/sendmsg.py @@ -185,6 +185,22 @@ def send_wx2user(self, msg, user_list): else: logger.error(f'企业微信推送失败\n请求连接:{send_url}\n请求参数:{data}\n请求响应:{r_json}') + def send_qywx_webhook(self,qywx_webhook, msg): + + send_url = qywx_webhook + data = { + "msgtype": "markdown", + "markdown": { + "content": msg + }, + } + res = requests.post(url=send_url, json=data, timeout=5) + r_json = res.json() + if r_json['errcode'] == 0: + logger.debug(f'企业微信机器人推送成功\n通知对象:机器人') + else: + logger.error(f'企业微信机器人推送失败\n请求连接:{send_url}\n请求参数:{data}\n请求响应:{r_json}') + @staticmethod def send_feishu_webhook(url, title, content): data = { diff --git a/sql/admin.py b/sql/admin.py index 50987daf55..e094aa52a6 100755 --- a/sql/admin.py +++ b/sql/admin.py @@ -38,7 +38,7 @@ class UsersAdmin(UserAdmin): # 资源组管理 @admin.register(ResourceGroup) class ResourceGroupAdmin(admin.ModelAdmin): - list_display = ('group_id', 'group_name', 'ding_webhook', 'feishu_webhook', 'is_deleted') + list_display = ('group_id', 'group_name', 'ding_webhook', 'feishu_webhook', 'qywx_webhook', 'is_deleted') exclude = ('group_parent_id', 'group_sort', 'group_level',) diff --git a/sql/models.py b/sql/models.py index e3774d27d7..98a1710ca5 100755 --- a/sql/models.py +++ b/sql/models.py @@ -17,6 +17,7 @@ class ResourceGroup(models.Model): group_level = models.IntegerField('层级', default=1) ding_webhook = models.CharField('钉钉webhook地址', max_length=255, blank=True) feishu_webhook = models.CharField('飞书webhook地址', max_length=255, blank=True) + qywx_webhook = models.CharField('企业微信webhook地址', max_length=255, blank=True) is_deleted = models.IntegerField('是否删除', choices=((0, '否'), (1, '是')), default=0) create_time = models.DateTimeField(auto_now_add=True) sys_time = models.DateTimeField(auto_now=True) diff --git a/sql/notify.py b/sql/notify.py index c3686a4fd8..8823fa3caf 100755 --- a/sql/notify.py +++ b/sql/notify.py @@ -23,9 +23,10 @@ def __notify_cnf_status(): ding_status = sys_config.get('ding_to_person') ding_webhook_status = sys_config.get('ding') wx_status = sys_config.get('wx') + qywx_webhook_status = sys_config.get("qywx_webhook") feishu_webhook_status = sys_config.get("feishu_webhook") feishu_status = sys_config.get("feishu") - if not any([mail_status, ding_status, ding_webhook_status, wx_status, feishu_status, feishu_webhook_status]): + if not any([mail_status, ding_status, ding_webhook_status, wx_status, feishu_status, feishu_webhook_status ,qywx_webhook_status]): logger.info('未开启任何消息通知,可在系统设置中开启') return False else: @@ -45,6 +46,7 @@ def __send(msg_title, msg_content, msg_to, msg_cc=None, **kwargs): msg_cc = msg_cc if msg_cc else [] dingding_webhook = kwargs.get('dingding_webhook') feishu_webhook = kwargs.get('feishu_webhook') + qywx_webhook = kwargs.get('qywx_webhook') msg_to_email = [user.email for user in msg_to if user.email] msg_cc_email = [user.email for user in msg_cc if user.email] msg_to_ding_user = [user.ding_user_id for user in chain(msg_to, msg_cc) if user.ding_user_id] @@ -64,6 +66,8 @@ def __send(msg_title, msg_content, msg_to, msg_cc=None, **kwargs): open_id = [user.feishu_open_id for user in chain(msg_to, msg_cc) if user.feishu_open_id] user_mail = [user.email for user in chain(msg_to, msg_cc) if not user.feishu_open_id] msg_sender.send_feishu_user(msg_title, msg_content, open_id, user_mail) + if sys_config.get('qywx_webhook') and qywx_webhook: + msg_sender.send_qywx_webhook(qywx_webhook, msg_title + '\n' + msg_content) def notify_for_audit(audit_id, **kwargs): @@ -92,6 +96,7 @@ def notify_for_audit(audit_id, **kwargs): group_name = audit_detail.group_name dingding_webhook = ResourceGroup.objects.get(group_id=audit_detail.group_id).ding_webhook feishu_webhook = ResourceGroup.objects.get(group_id=audit_detail.group_id).feishu_webhook + qywx_webhook = ResourceGroup.objects.get(group_id=audit_detail.group_id).qywx_webhook # 获取当前审批和审批流程 workflow_auditors, current_workflow_auditors = Audit.review_info(audit_detail.workflow_id, audit_detail.workflow_type) @@ -204,7 +209,7 @@ def notify_for_audit(audit_id, **kwargs): raise Exception('工单状态不正确') logger.info(f"通知Debug{msg_to}{msg_cc}") # 发送通知 - __send(msg_title, msg_content, msg_to, msg_cc, feishu_webhook=feishu_webhook, dingding_webhook=dingding_webhook) + __send(msg_title, msg_content, msg_to, msg_cc, feishu_webhook=feishu_webhook, dingding_webhook=dingding_webhook, qywx_webhook=qywx_webhook) def notify_for_execute(workflow): @@ -242,8 +247,9 @@ def notify_for_execute(workflow): # 处理接收人 dingding_webhook = ResourceGroup.objects.get(group_id=workflow.group_id).ding_webhook feishu_webhook = ResourceGroup.objects.get(group_id=workflow.group_id).feishu_webhook + qywx_webhook = ResourceGroup.objects.get(group_id=workflow.group_id).qywx_webhook # 发送通知 - __send(msg_title, msg_content, msg_to, msg_cc, dingding_webhook=dingding_webhook, feishu_webhook=feishu_webhook) + __send(msg_title, msg_content, msg_to, msg_cc, dingding_webhook=dingding_webhook, feishu_webhook=feishu_webhook, qywx_webhook=qywx_webhook) # DDL通知 if sys_config.get('ddl_notify_auth_group') and workflow.status == 'workflow_finish': diff --git a/src/init_sql/v1.7.11_v1.7.12.sql b/src/init_sql/v1.7.11_v1.7.12.sql index df38907908..b70bd2187d 100644 --- a/src/init_sql/v1.7.11_v1.7.12.sql +++ b/src/init_sql/v1.7.11_v1.7.12.sql @@ -33,4 +33,7 @@ CREATE TABLE `sql_instance` ( UNIQUE KEY `instance_name` (`instance_name`), KEY `sql_instance_tunnel_id_99377638_fk_ssh_tunnel_id` (`tunnel_id`), CONSTRAINT `sql_instance_tunnel_id_99377638_fk_ssh_tunnel_id` FOREIGN KEY (`tunnel_id`) REFERENCES `ssh_tunnel` (`id`) -) ; \ No newline at end of file +) ; + +-- 增加企业微信信息 +alter table resource_group add qywx_webhook varchar(255) not null default '' comment '企业微信webhook地址'; From bd027b19633b27febf9ec6b62f74318418a8701c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CjackieLiu?= Date: Tue, 14 Jul 2020 18:02:16 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E7=BE=A4=E6=9C=BA?= =?UTF-8?q?=E5=99=A8=E4=BA=BA=E9=80=9A=E7=9F=A5(=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E7=BD=91=E9=A1=B5=E6=8F=90=E7=A4=BA)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/templates/config.html | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/common/templates/config.html b/common/templates/config.html index a226e973fb..4ed93e6463 100755 --- a/common/templates/config.html +++ b/common/templates/config.html @@ -384,7 +384,8 @@
SQL优化

通知配置

   
注1:钉钉Webhook需要配置资源组Webhook地址,Webhook无法通知到指定用户
-
注2:企业微信开启后,若未配置企业微信UserID,则默认取用户的username作为UserId
+
注2:企业微信自建应用开启后,若未配置企业微信UserID,则默认取用户的username作为UserId
+
注3:企业微信群机器人需要配置资源组webhook地址(企业微信群机器人是通知到群;企业微信自建应用是通过应用通知到指定人)

@@ -572,13 +573,13 @@
注2:企业微信开启后,若未配置企业微信Use
+ class="col-sm-4 control-label">企业微信自建应用
@@ -627,7 +628,7 @@
注2:企业微信开启后,若未配置企业微信Use
+ class="col-sm-4 control-label">企业微信群机器人