| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | 
							
- import argparse
 
- import json
 
- import pytz
 
- import requests
 
- from datetime import datetime
 
- server_robot = {
 
-     'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/926982f5-e7af-40f5-81fd-27d8f42718e4',
 
- }
 
- level_header_template_map = {
 
-     "info": "turquoise",
 
-     "error": "red",
 
-     "warn": "yellow"
 
- }
 
- level_header_title_content_map = {
 
-     "info": "广告模型自动更新通知",
 
-     "error": "广告模型自动更新告警",
 
-     "warn": "广告模型自动更新告警"
 
- }
 
- level_task_status_map = {
 
-     "info": "任务执行成功",
 
-     "error": "任务执行失败",
 
-     "warn": "任务执行失败",
 
- }
 
- def send_card_msg_to_feishu(webhook, card_json):
 
-     """发送消息到飞书"""
 
-     headers = {'Content-Type': 'application/json'}
 
-     payload_message = {
 
-         "msg_type": "interactive",
 
-         "card": card_json
 
-     }
 
-     print(f"推送飞书消息内容: {json.dumps(payload_message)}")
 
-     response = requests.request('POST', url=webhook, headers=headers, data=json.dumps(payload_message))
 
-     print(response.text)
 
- def timestamp_format(timestamp: str) -> str:
 
-     try:
 
-         return (datetime.utcfromtimestamp(int(timestamp))
 
-                 .replace(tzinfo=pytz.UTC)
 
-                 .astimezone(pytz.timezone('Asia/Shanghai'))
 
-                 .strftime('%Y-%m-%d %H:%M:%S')
 
-                 )
 
-     except ValueError as e:
 
-         return timestamp
 
- def seconds_convert(seconds):
 
-     hours = seconds // 3600
 
-     minutes = (seconds % 3600) // 60
 
-     seconds = seconds % 60
 
-     return f"{hours}小时 {minutes}分钟 {seconds}秒"
 
- def _monitor(level, msg: str, start, elapsed, top10):
 
-     """消息推送"""
 
-     """消息推送"""
 
-     now = datetime.now()
 
-     msg = msg.replace("\\n", "\n").replace("\\t", "\t")
 
-     mgs_text = f"- 当前时间: {now.strftime('%Y-%m-%d %H:%M:%S')}" \
 
-                f"\n- 任务开始时间: {timestamp_format(start)}" \
 
-                f"\n- 任务状态: {level_task_status_map[level]}" \
 
-                f"\n- 任务耗时: {seconds_convert(elapsed)}" \
 
-                f"\n- 任务描述: {msg}"
 
-     card_json = {
 
-         "schema": "2.0",
 
-         "header": {
 
-             "title": {
 
-                 "tag": "plain_text",
 
-                 "content": level_header_title_content_map[level]
 
-             },
 
-             "template": level_header_template_map[level]
 
-         },
 
-         "body": {
 
-             "elements": [
 
-                 {
 
-                     "tag": "markdown",
 
-                     "content": mgs_text,
 
-                     "text_align": "left",
 
-                     "text_size": "normal",
 
-                     "element_id": "overview"
 
-                 }
 
-             ]
 
-         }
 
-     }
 
-     if top10 is not None and len(top10) > 0:
 
-         collapsible_panel = {
 
-             "tag": "collapsible_panel",
 
-             "header": {
 
-                 "title": {
 
-                     "tag": "markdown",
 
-                     "content": "**Top10差异详情**"
 
-                 },
 
-                 "vertical_align": "center",
 
-                 "padding": "4px 0px 4px 8px"
 
-             },
 
-             "border": {
 
-                 "color": "grey",
 
-                 "corner_radius": "5px"
 
-             },
 
-             "element_id": "detail",
 
-             "elements": [
 
-                 {
 
-                     "tag": "markdown",
 
-                     "content": top10.replace("\\n", "\n").replace("\\t", "\t"),
 
-                     "element_id": "Top10CID"
 
-                 }
 
-             ]
 
-         }
 
-         card_json['body']['elements'].append(collapsible_panel)
 
-     send_card_msg_to_feishu(
 
-         webhook=server_robot.get('webhook'),
 
-         card_json=card_json
 
-     )
 
- if __name__ == '__main__':
 
-     parser = argparse.ArgumentParser(description='告警Utils')
 
-     parser.add_argument('--level', type=str, help='通知级别, info, warn, error', required=True)
 
-     parser.add_argument('--msg', type=str, help='消息', required=True)
 
-     parser.add_argument('--start', type=str, help='任务开始时间', required=True)
 
-     parser.add_argument('--elapsed', type=int, help='任务耗时【秒】', required=True)
 
-     parser.add_argument("--top10", type=str, help='Top10打分详情', required=False)
 
-     args = parser.parse_args()
 
-     _monitor(
 
-         level=args.level,
 
-         msg=args.msg,
 
-         start=args.start,
 
-         elapsed=args.elapsed,
 
-         top10=args.top10
 
-     )
 
 
  |