|
import requests |
|
import json |
|
import socket |
|
from loguru import logger |
|
from enum import Enum |
|
|
|
|
|
class MSGTYPE(Enum): |
|
INCIDENT = 1 |
|
ERROR = 2 |
|
REPORT = 3 |
|
INFO = 4 |
|
SUCCESS = 0 |
|
|
|
|
|
icons = { |
|
MSGTYPE.SUCCESS: "https://img.icons8.com/ios-glyphs/30/000000/rocket.png", |
|
MSGTYPE.INCIDENT: "https://img.icons8.com/ios-filled/30/car-accident.png", |
|
MSGTYPE.ERROR: "https://img.icons8.com/ios-glyphs/30/000000/error--v2.png", |
|
MSGTYPE.REPORT: "https://img.icons8.com/ios-glyphs/90/000000/checkmark--v2.png", |
|
MSGTYPE.INFO: "https://img.icons8.com/ios-glyphs/30/000000/info--v2.png", |
|
} |
|
|
|
|
|
class Message: |
|
host_name = socket.gethostname() |
|
host_ip = socket.gethostbyname(socket.gethostname()) |
|
type = MSGTYPE.INCIDENT |
|
type_hint = "" |
|
content = "" |
|
|
|
|
|
class dummyRequest: |
|
def __init__(self) -> None: |
|
self.status_code = 200 |
|
|
|
|
|
class Bot: |
|
def __init__( |
|
self, |
|
app_name="", |
|
bot_key="", |
|
enabled=True, |
|
): |
|
self.Bot_URL = f"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={bot_key}" |
|
self.template = { |
|
|
|
"msgtype": "template_card", |
|
"template_card": { |
|
"card_type": "text_notice", |
|
"source": { |
|
"icon_url": "", |
|
"desc": app_name, |
|
"desc_color": 0 |
|
}, |
|
"main_title": { |
|
"title": "", |
|
"desc": "" |
|
}, |
|
"emphasis_content": { |
|
"title": "", |
|
"desc": "" |
|
}, |
|
"horizontal_content_list": [ |
|
], |
|
"card_action": { |
|
"type": 1, |
|
"url": "https://huggingface.co/myscale" |
|
}, |
|
} |
|
} |
|
self.app_name = app_name |
|
self.enabled = enabled |
|
|
|
def __constuct_msg(self, msg: Message): |
|
_dict = self.template.copy() |
|
_dict["template_card"]["source"]["icon_url"] = icons[msg.type] |
|
_dict["template_card"]["main_title"]["title"] = msg.type.name[:13] |
|
_dict["template_card"]["main_title"]["desc"] = msg.type_hint[:15] |
|
_dict["template_card"]["horizontal_content_list"].extend( |
|
self.__convert_dict2clist(msg)[:6]) |
|
_dict["template_card"]["sub_title_text"] = msg.content |
|
return _dict |
|
|
|
def __convert_dict2clist(self, msg: Message): |
|
return [ |
|
{"keyname": "App Name", "value": self.app_name}, |
|
{"keyname": "Host Name", "value": msg.host_name}, |
|
{"keyname": "Host IP", "value": str(msg.host_ip)}, |
|
] |
|
|
|
def __send_md_msg(self, msg: Message): |
|
msg = json.dumps(self.__constuct_msg(msg), ensure_ascii=True) |
|
return requests.post( |
|
self.Bot_URL, data=msg, headers={ |
|
"Content-Type": "application/json"} |
|
) |
|
|
|
def error(self, msg: Message): |
|
msg.type = MSGTYPE.ERROR |
|
if self.enabled: |
|
return self.__send_md_msg(msg) |
|
else: |
|
return dummyRequest() |
|
|
|
def incident(self, msg: Message): |
|
msg.type = MSGTYPE.INCIDENT |
|
if self.enabled: |
|
return self.__send_md_msg(msg) |
|
else: |
|
return dummyRequest() |
|
|
|
def report(self, msg: Message): |
|
msg.type = MSGTYPE.REPORT |
|
if self.enabled: |
|
return self.__send_md_msg(msg) |
|
else: |
|
return dummyRequest() |