redis_data_monitor.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. import datetime
  2. from config import set_config
  3. from utils import RedisHelper, send_msg_to_feishu
  4. from log import Log
  5. config_, _ = set_config()
  6. log_ = Log()
  7. redis_helper = RedisHelper()
  8. region_code = {
  9. '河北省': '130000',
  10. '山西省': '140000',
  11. '辽宁省': '210000',
  12. '吉林省': '220000',
  13. '黑龙江省': '230000',
  14. '江苏省': '320000',
  15. '浙江省': '330000',
  16. '安徽省': '340000',
  17. '福建省': '350000',
  18. '江西省': '360000',
  19. '山东省': '370000',
  20. '河南省': '410000',
  21. '湖北省': '420000',
  22. '湖南省': '430000',
  23. '广东省': '440000',
  24. '海南省': '460000',
  25. '四川省': '510000',
  26. '贵州省': '520000',
  27. '云南省': '530000',
  28. '陕西省': '610000',
  29. '甘肃省': '620000',
  30. '青海省': '630000',
  31. '台湾省': '710000',
  32. '北京': '110000',
  33. '天津': '120000',
  34. '内蒙古': '150000',
  35. '上海': '310000',
  36. '广西': '450000',
  37. '重庆': '500000',
  38. '西藏': '540000',
  39. '宁夏': '640000',
  40. '新疆': '650000',
  41. '香港': '810000',
  42. '澳门': '820000',
  43. 'None': '-1'
  44. }
  45. def rov_data_monitor(now_date, now_h):
  46. """rov模型预测列表"""
  47. if now_h > 6:
  48. rov_key_name = f"{config_.RECALL_KEY_NAME_PREFIX}{now_date}"
  49. if not redis_helper.key_exists(key_name=rov_key_name):
  50. msg_text = f"\n- 所属项目: rov-server/rov-offline" \
  51. f"\n- 告警名称: 离线更新数据未按时更新告警" \
  52. f"\n- 所属环境: {config_.ENV_TEXT}" \
  53. f"\n- now_date: {now_date}" \
  54. f"\n- now_h: {now_h}" \
  55. f"\n- 告警描述: rov模型预测列表数据未按时更新"
  56. log_.info(f"msg_text = {msg_text}")
  57. send_msg_to_feishu(
  58. webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
  59. key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
  60. msg_text=msg_text
  61. )
  62. def region_data_monitor(now_date, now_h):
  63. """地域分组数据"""
  64. # 地域分组小时级列表
  65. rule_params = config_.RULE_PARAMS_REGION
  66. key_prefix_dict = {
  67. '地域分组小时级数据': config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H,
  68. '地域分组相对24h去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H,
  69. '不区分地域相对24h去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP2_REGION_24H_H,
  70. 'rov模型预测列表去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP_REGION_H,
  71. }
  72. region_code_list = [code for region, code in region_code.items()]
  73. for rule_key, _ in rule_params.items():
  74. for key_con, key_prefix in key_prefix_dict.items():
  75. no_update_region_list = []
  76. for region in region_code_list:
  77. region_key_name = f"{key_prefix}{region}.{rule_key}.{now_date}.{now_h}"
  78. if not redis_helper.key_exists(key_name=region_key_name):
  79. no_update_region_list.append(region)
  80. if len(no_update_region_list) == len(region_code_list):
  81. msg_text = f"\n- 所属项目: rov-server/rov-offline" \
  82. f"\n- 告警名称: 离线更新数据未按时更新告警" \
  83. f"\n- 所属环境: {config_.ENV_TEXT}" \
  84. f"\n- now_date: {now_date}" \
  85. f"\n- now_h: {now_h}" \
  86. f"\n- 告警描述: {key_con}未按时更新, rule_key={rule_key}"
  87. log_.info(f"msg_text = {msg_text}")
  88. send_msg_to_feishu(
  89. webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
  90. key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
  91. msg_text=msg_text
  92. )
  93. def special_videos_monitor(now_date, now_h):
  94. """特殊mid(屏蔽名单)指定视频列表"""
  95. if now_h > 4:
  96. rov_key_name = f"{config_.KEY_NAME_PREFIX_SPECIAL_VIDEOS}{now_date}"
  97. if not redis_helper.key_exists(key_name=rov_key_name):
  98. msg_text = f"\n- 所属项目: rov-server/rov-offline" \
  99. f"\n- 告警名称: 离线更新数据未按时更新告警" \
  100. f"\n- 所属环境: {config_.ENV_TEXT}" \
  101. f"\n- now_date: {now_date}" \
  102. f"\n- now_h: {now_h}" \
  103. f"\n- 告警描述: 特殊mid(屏蔽名单)指定视频列表数据未按时更新"
  104. log_.info(f"msg_text = {msg_text}")
  105. send_msg_to_feishu(
  106. webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
  107. key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
  108. msg_text=msg_text
  109. )
  110. def whole_movies_monitor(now_date, now_h):
  111. """完整影视资源列表"""
  112. rov_key_name = f"{config_.RECALL_KEY_NAME_PREFIX_WHOLE_MOVIES}{now_date}.{now_h}"
  113. if not redis_helper.key_exists(key_name=rov_key_name):
  114. msg_text = f"\n- 所属项目: rov-server/rov-offline" \
  115. f"\n- 告警名称: 离线更新数据未按时更新告警" \
  116. f"\n- 所属环境: {config_.ENV_TEXT}" \
  117. f"\n- now_date: {now_date}" \
  118. f"\n- now_h: {now_h}" \
  119. f"\n- 告警描述: 完整影视资源列表数据未按时更新"
  120. log_.info(f"msg_text = {msg_text}")
  121. send_msg_to_feishu(
  122. webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
  123. key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
  124. msg_text=msg_text
  125. )
  126. def get_redis_data_keys(now_date, now_h):
  127. # 检查所需列表是否已更新好
  128. redis_data_keys = []
  129. # rov模型预测列表
  130. if now_h > 6:
  131. rov_key_name = f"{config_.RECALL_KEY_NAME_PREFIX}{now_date}"
  132. redis_data_keys.append(rov_key_name)
  133. # 地域分组小时级列表
  134. rule_params = config_.RULE_PARAMS_REGION
  135. key_prefix_list = [
  136. config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H,
  137. config_.RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H,
  138. config_.RECALL_KEY_NAME_PREFIX_DUP2_REGION_24H_H,
  139. config_.RECALL_KEY_NAME_PREFIX_DUP_REGION_H
  140. ]
  141. region_code_list = [code for region, code in region_code.items()]
  142. for rule_key, _ in rule_params.items():
  143. for region in region_code_list:
  144. if region == '-1':
  145. region_key_name = [f"{key_prefix_list[-1]}{region}.{rule_key}.{now_date}.{now_h}"]
  146. else:
  147. region_key_name = [f"{key_prefix}{region}.{rule_key}.{now_date}.{now_h}"
  148. for key_prefix in key_prefix_list]
  149. redis_data_keys.extend(region_key_name)
  150. return redis_data_keys
  151. def monitor(now_date, now_h):
  152. rov_data_monitor(now_date=now_date, now_h=now_h)
  153. region_data_monitor(now_date=now_date, now_h=now_h)
  154. special_videos_monitor(now_date=now_date, now_h=now_h)
  155. whole_movies_monitor(now_date=now_date, now_h=now_h)
  156. if __name__ == '__main__':
  157. now_date = datetime.datetime.today().strftime('%Y%m%d')
  158. now_h = datetime.datetime.now().hour
  159. log_.info(f"now_date = {now_date}, now_h = {now_h}")
  160. monitor(now_date=now_date, now_h=now_h)
  161. log_.info("end!")