rec_monitor_push.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #!/usr/bin/env python
  2. # coding=utf-8
  3. import argparse
  4. import json
  5. from datetime import datetime
  6. import requests
  7. server_robot = {
  8. 'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/c28a6fea-2323-4d09-94fb-943e5ccdb61b',
  9. }
  10. level_header_template_map = {
  11. "info": "turquoise",
  12. "error": "red",
  13. "warn": "yellow"
  14. }
  15. level_header_title_suffix_map = {
  16. "info": "自动更新通知",
  17. "error": "自动更新告警",
  18. "warn": "自动更新告警"
  19. }
  20. level_task_status_map = {
  21. "info": "任务执行成功",
  22. "error": "任务执行失败",
  23. "warn": "任务执行失败",
  24. }
  25. def send_card_msg_to_feishu(webhook, card_json):
  26. """发送消息到飞书"""
  27. headers = {'Content-Type': 'application/json'}
  28. payload_message = {
  29. "msg_type": "interactive",
  30. "card": card_json
  31. }
  32. print(f"推送飞书消息内容: {json.dumps(payload_message)}")
  33. response = requests.request('POST', url=webhook, headers=headers, data=json.dumps(payload_message))
  34. print(response.text)
  35. def _monitor(level, model, msg: str):
  36. """消息推送"""
  37. now = datetime.now()
  38. msg = msg.replace("\\n", "\n").replace("\\t", "\t")
  39. mgs_text = f"- 当前时间: {now.strftime('%Y-%m-%d %H:%M:%S')}" \
  40. f"\n- 任务状态: {level_task_status_map[level]}" \
  41. f"\n- 任务描述: {msg}"
  42. card_json = {
  43. "schema": "2.0",
  44. "header": {
  45. "title": {
  46. "tag": "plain_text",
  47. "content": model + level_header_title_suffix_map[level]
  48. },
  49. "template": level_header_template_map[level]
  50. },
  51. "body": {
  52. "elements": [
  53. {
  54. "tag": "markdown",
  55. "content": mgs_text,
  56. "text_align": "left",
  57. "text_size": "normal",
  58. "element_id": "overview"
  59. }
  60. ]
  61. }
  62. }
  63. send_card_msg_to_feishu(
  64. webhook=server_robot.get('webhook'),
  65. card_json=card_json
  66. )
  67. if __name__ == '__main__':
  68. parser = argparse.ArgumentParser(description='告警Utils')
  69. parser.add_argument('--level', type=str, help='通知级别, info, warn, error', required=True)
  70. parser.add_argument('--model', type=str, help='消息', required=True)
  71. parser.add_argument('--msg', type=str, help='消息', required=True)
  72. args = parser.parse_args()
  73. _monitor(
  74. level=args.level,
  75. model=args.model,
  76. msg=args.msg
  77. )