diff --git a/etc/script/notify.py b/etc/script/notify.py index 52896556c05972f6d38285b3e948363c9bf00acc..3d72e6533326e954cf2e4a7477711d09aacdd18c 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 0000000000000000000000000000000000000000..95019ebac37cd0ae29eee8b50c83f8a43cb31873 --- /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 652bb0c803fa0c455490b34015a2a0637a110135..cb16c5157ff94051002a9d6ba8e907a353430cef 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"