update notify.py in docker dir
This commit is contained in:
parent
1f4e8e752e
commit
93f88296da
|
@ -0,0 +1,206 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: UTF-8 -*-
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
import urllib2
|
||||||
|
import smtplib
|
||||||
|
from email.mime.text import MIMEText
|
||||||
|
|
||||||
|
notify_channel_funcs = {
|
||||||
|
"email":"email",
|
||||||
|
"sms":"sms",
|
||||||
|
"voice":"voice",
|
||||||
|
"dingtalk":"dingtalk",
|
||||||
|
"wecom":"wecom",
|
||||||
|
"feishu":"feishu"
|
||||||
|
}
|
||||||
|
|
||||||
|
mail_host = "smtp.163.com"
|
||||||
|
mail_port = 994
|
||||||
|
mail_user = "ulricqin"
|
||||||
|
mail_pass = "password"
|
||||||
|
mail_from = "ulricqin@163.com"
|
||||||
|
|
||||||
|
class Sender(object):
|
||||||
|
@classmethod
|
||||||
|
def send_email(cls, payload):
|
||||||
|
if mail_user == "ulricqin" and mail_pass == "password":
|
||||||
|
print("invalid smtp configuration")
|
||||||
|
return
|
||||||
|
|
||||||
|
users = payload.get('event').get("notify_users_obj")
|
||||||
|
|
||||||
|
emails = {}
|
||||||
|
for u in users:
|
||||||
|
if u.get("email"):
|
||||||
|
emails[u.get("email")] = 1
|
||||||
|
|
||||||
|
if not emails:
|
||||||
|
return
|
||||||
|
|
||||||
|
recipients = emails.keys()
|
||||||
|
mail_body = payload.get('tpls').get("mailbody.tpl", "mailbody.tpl not found")
|
||||||
|
message = MIMEText(mail_body, 'html', 'utf-8')
|
||||||
|
message['From'] = mail_from
|
||||||
|
message['To'] = ", ".join(recipients)
|
||||||
|
message["Subject"] = payload.get('tpls').get("subject.tpl", "subject.tpl not found")
|
||||||
|
|
||||||
|
try:
|
||||||
|
smtp = smtplib.SMTP_SSL(mail_host, mail_port)
|
||||||
|
smtp.login(mail_user, mail_pass)
|
||||||
|
smtp.sendmail(mail_from, recipients, message.as_string())
|
||||||
|
smtp.close()
|
||||||
|
except smtplib.SMTPException, error:
|
||||||
|
print(error)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def send_wecom(cls, payload):
|
||||||
|
users = payload.get('event').get("notify_users_obj")
|
||||||
|
|
||||||
|
tokens = {}
|
||||||
|
|
||||||
|
for u in users:
|
||||||
|
contacts = u.get("contacts")
|
||||||
|
if contacts.get("wecom_robot_token", ""):
|
||||||
|
tokens[contacts.get("wecom_robot_token", "")] = 1
|
||||||
|
|
||||||
|
opener = urllib2.build_opener(urllib2.HTTPHandler())
|
||||||
|
method = "POST"
|
||||||
|
|
||||||
|
for t in tokens:
|
||||||
|
url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={}".format(t)
|
||||||
|
body = {
|
||||||
|
"msgtype": "markdown",
|
||||||
|
"markdown": {
|
||||||
|
"content": payload.get('tpls').get("wecom.tpl", "wecom.tpl not found")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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_dingtalk(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("dingtalk_robot_token", ""):
|
||||||
|
tokens[contacts.get("dingtalk_robot_token", "")] = 1
|
||||||
|
|
||||||
|
opener = urllib2.build_opener(urllib2.HTTPHandler())
|
||||||
|
method = "POST"
|
||||||
|
|
||||||
|
for t in tokens:
|
||||||
|
url = "https://oapi.dingtalk.com/robot/send?access_token={}".format(t)
|
||||||
|
body = {
|
||||||
|
"msgtype": "text",
|
||||||
|
"text": {
|
||||||
|
"content": payload.get('tpls').get("dingtalk.tpl", "dingtalk.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_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")
|
||||||
|
phones = {}
|
||||||
|
for u in users:
|
||||||
|
if u.get("phone"):
|
||||||
|
phones[u.get("phone")] = 1
|
||||||
|
if phones:
|
||||||
|
print("send_sms not implemented, phones: {}".format(phones.keys()))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def send_voice(cls, payload):
|
||||||
|
users = payload.get('event').get("notify_users_obj")
|
||||||
|
phones = {}
|
||||||
|
for u in users:
|
||||||
|
if u.get("phone"):
|
||||||
|
phones[u.get("phone")] = 1
|
||||||
|
if phones:
|
||||||
|
print("send_voice not implemented, phones: {}".format(phones.keys()))
|
||||||
|
|
||||||
|
def main():
|
||||||
|
payload = json.load(sys.stdin)
|
||||||
|
with open(".payload", 'w') as f:
|
||||||
|
f.write(json.dumps(payload, indent=4))
|
||||||
|
for ch in payload.get('event').get('notify_channels'):
|
||||||
|
send_func_name = "send_{}".format(notify_channel_funcs.get(ch.strip()))
|
||||||
|
if not hasattr(Sender, send_func_name):
|
||||||
|
print("function: {} not found", send_func_name)
|
||||||
|
continue
|
||||||
|
send_func = getattr(Sender, send_func_name)
|
||||||
|
send_func(payload)
|
||||||
|
|
||||||
|
def hello():
|
||||||
|
print("hello nightingale")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if len(sys.argv) == 1:
|
||||||
|
main()
|
||||||
|
elif sys.argv[1] == "hello":
|
||||||
|
hello()
|
||||||
|
else:
|
||||||
|
print("I am confused")
|
|
@ -2,165 +2,27 @@
|
||||||
# -*- coding: UTF-8 -*-
|
# -*- coding: UTF-8 -*-
|
||||||
import sys
|
import sys
|
||||||
import json
|
import json
|
||||||
import urllib2
|
|
||||||
import smtplib
|
|
||||||
from email.mime.text import MIMEText
|
|
||||||
|
|
||||||
notify_channel_funcs = {
|
|
||||||
"email":"email",
|
|
||||||
"sms":"sms",
|
|
||||||
"voice":"voice",
|
|
||||||
"dingtalk":"dingtalk",
|
|
||||||
"wecom":"wecom",
|
|
||||||
"feishu":"feishu"
|
|
||||||
}
|
|
||||||
|
|
||||||
mail_host = "smtp.163.com"
|
|
||||||
mail_port = 994
|
|
||||||
mail_user = "ulricqin"
|
|
||||||
mail_pass = "password"
|
|
||||||
mail_from = "ulricqin@163.com"
|
|
||||||
|
|
||||||
class Sender(object):
|
class Sender(object):
|
||||||
@classmethod
|
@classmethod
|
||||||
def send_email(cls, payload):
|
def send_email(cls, payload):
|
||||||
if mail_user == "ulricqin" and mail_pass == "password":
|
# already done in go code
|
||||||
print("invalid smtp configuration")
|
pass
|
||||||
return
|
|
||||||
|
|
||||||
users = payload.get('event').get("notify_users_obj")
|
|
||||||
|
|
||||||
emails = {}
|
|
||||||
for u in users:
|
|
||||||
if u.get("email"):
|
|
||||||
emails[u.get("email")] = 1
|
|
||||||
|
|
||||||
if not emails:
|
|
||||||
return
|
|
||||||
|
|
||||||
recipients = emails.keys()
|
|
||||||
mail_body = payload.get('tpls').get("mailbody.tpl", "mailbody.tpl not found")
|
|
||||||
message = MIMEText(mail_body, 'html', 'utf-8')
|
|
||||||
message['From'] = mail_from
|
|
||||||
message['To'] = ", ".join(recipients)
|
|
||||||
message["Subject"] = payload.get('tpls').get("subject.tpl", "subject.tpl not found")
|
|
||||||
|
|
||||||
try:
|
|
||||||
smtp = smtplib.SMTP_SSL(mail_host, mail_port)
|
|
||||||
smtp.login(mail_user, mail_pass)
|
|
||||||
smtp.sendmail(mail_from, recipients, message.as_string())
|
|
||||||
smtp.close()
|
|
||||||
except smtplib.SMTPException, error:
|
|
||||||
print(error)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def send_wecom(cls, payload):
|
def send_wecom(cls, payload):
|
||||||
users = payload.get('event').get("notify_users_obj")
|
# already done in go code
|
||||||
|
pass
|
||||||
tokens = {}
|
|
||||||
|
|
||||||
for u in users:
|
|
||||||
contacts = u.get("contacts")
|
|
||||||
if contacts.get("wecom_robot_token", ""):
|
|
||||||
tokens[contacts.get("wecom_robot_token", "")] = 1
|
|
||||||
|
|
||||||
opener = urllib2.build_opener(urllib2.HTTPHandler())
|
|
||||||
method = "POST"
|
|
||||||
|
|
||||||
for t in tokens:
|
|
||||||
url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={}".format(t)
|
|
||||||
body = {
|
|
||||||
"msgtype": "markdown",
|
|
||||||
"markdown": {
|
|
||||||
"content": payload.get('tpls').get("wecom.tpl", "wecom.tpl not found")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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
|
@classmethod
|
||||||
def send_dingtalk(cls, payload):
|
def send_dingtalk(cls, payload):
|
||||||
users = payload.get('event').get("notify_users_obj")
|
# already done in go code
|
||||||
|
pass
|
||||||
tokens = {}
|
|
||||||
phones = {}
|
|
||||||
|
|
||||||
for u in users:
|
|
||||||
if u.get("phone"):
|
|
||||||
phones[u.get("phone")] = 1
|
|
||||||
|
|
||||||
contacts = u.get("contacts")
|
|
||||||
if contacts.get("dingtalk_robot_token", ""):
|
|
||||||
tokens[contacts.get("dingtalk_robot_token", "")] = 1
|
|
||||||
|
|
||||||
opener = urllib2.build_opener(urllib2.HTTPHandler())
|
|
||||||
method = "POST"
|
|
||||||
|
|
||||||
for t in tokens:
|
|
||||||
url = "https://oapi.dingtalk.com/robot/send?access_token={}".format(t)
|
|
||||||
body = {
|
|
||||||
"msgtype": "text",
|
|
||||||
"text": {
|
|
||||||
"content": payload.get('tpls').get("dingtalk.tpl", "dingtalk.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
|
@classmethod
|
||||||
def send_feishu(cls, payload):
|
def send_feishu(cls, payload):
|
||||||
users = payload.get('event').get("notify_users_obj")
|
# already done in go code
|
||||||
|
pass
|
||||||
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
|
@classmethod
|
||||||
def send_sms(cls, payload):
|
def send_sms(cls, payload):
|
||||||
|
@ -187,7 +49,7 @@ def main():
|
||||||
with open(".payload", 'w') as f:
|
with open(".payload", 'w') as f:
|
||||||
f.write(json.dumps(payload, indent=4))
|
f.write(json.dumps(payload, indent=4))
|
||||||
for ch in payload.get('event').get('notify_channels'):
|
for ch in payload.get('event').get('notify_channels'):
|
||||||
send_func_name = "send_{}".format(notify_channel_funcs.get(ch.strip()))
|
send_func_name = "send_{}".format(ch.strip())
|
||||||
if not hasattr(Sender, send_func_name):
|
if not hasattr(Sender, send_func_name):
|
||||||
print("function: {} not found", send_func_name)
|
print("function: {} not found", send_func_name)
|
||||||
continue
|
continue
|
||||||
|
|
Loading…
Reference in New Issue