From 6c2c8f99001c5c5051e988a7e5af5100b264580a Mon Sep 17 00:00:00 2001 From: Ulric Qin Date: Tue, 7 Dec 2021 18:39:44 +0800 Subject: [PATCH] add feishu support --- etc/script/notify.py | 42 ++++++++++++++++++++++++++++++++++++++++- etc/template/feishu.tpl | 6 ++++++ etc/webapi.conf | 6 +++++- 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 etc/template/feishu.tpl diff --git a/etc/script/notify.py b/etc/script/notify.py index 52896556..3d72e653 100755 --- a/etc/script/notify.py +++ b/etc/script/notify.py @@ -11,7 +11,8 @@ notify_channel_funcs = { "sms":"sms", "voice":"voice", "dingtalk":"dingtalk", - "wecom":"wecom" + "wecom":"wecom", + "feishu":"feishu" } mail_host = "smtp.163.com" @@ -118,6 +119,45 @@ class Sender(object): except urllib2.HTTPError, error: print(error) + @classmethod + def send_feishu(cls, payload): + users = payload.get('event').get("notify_users_obj") + + tokens = {} + phones = {} + + for u in users: + if u.get("phone"): + phones[u.get("phone")] = 1 + + contacts = u.get("contacts") + if contacts.get("feishu_robot_token", ""): + tokens[contacts.get("feishu_robot_token", "")] = 1 + + opener = urllib2.build_opener(urllib2.HTTPHandler()) + method = "POST" + + for t in tokens: + url = "https://open.feishu.cn/open-apis/bot/v2/hook/{}".format(t) + body = { + "msg_type": "text", + "content": { + "text": payload.get('tpls').get("feishu.tpl", "feishu.tpl not found") + }, + "at": { + "atMobiles": phones.keys(), + "isAtAll": False + } + } + request = urllib2.Request(url, data=json.dumps(body)) + request.add_header("Content-Type",'application/json;charset=utf-8') + request.get_method = lambda: method + try: + connection = opener.open(request) + print(connection.read()) + except urllib2.HTTPError, error: + print(error) + @classmethod def send_sms(cls, payload): users = payload.get('event').get("notify_users_obj") diff --git a/etc/template/feishu.tpl b/etc/template/feishu.tpl new file mode 100644 index 00000000..95019eba --- /dev/null +++ b/etc/template/feishu.tpl @@ -0,0 +1,6 @@ +级别状态: S{{.Severity}} {{if .IsRecovered}}Recovered{{else}}Triggered{{end}} +规则名称: {{.RuleName}}{{if .RuleNote}} +规则备注: {{.RuleNote}}{{end}} +监控指标: {{.TagsJSON}} +触发时间: {{timeformat .TriggerTime}} +触发时值: {{.TriggerValue}} \ No newline at end of file diff --git a/etc/webapi.conf b/etc/webapi.conf index 652bb0c8..cb16c515 100644 --- a/etc/webapi.conf +++ b/etc/webapi.conf @@ -8,7 +8,7 @@ RunMode = "release" AdminRole = "Admin" # Linkage with notify.py script -NotifyChannels = [ "email", "dingtalk", "wecom" ] +NotifyChannels = [ "email", "dingtalk", "wecom", "feishu" ] [[ContactKeys]] Label = "Wecom Robot Token" @@ -18,6 +18,10 @@ Key = "wecom_robot_token" Label = "Dingtalk Robot Token" Key = "dingtalk_robot_token" +[[ContactKeys]] +Label = "Feishu Robot Token" +Key = "feishu_robot_token" + [Log] # log write dir Dir = "logs" -- GitLab