redis_data_monitor.py 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. import datetime
  2. from my_config import set_config
  3. from my_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 = config_.REGION_CODE
  9. def rov_data_monitor(now_date, now_h):
  10. """rov模型预测列表"""
  11. if now_h > 6:
  12. rov_key_name = f"{config_.RECALL_KEY_NAME_PREFIX}{now_date}"
  13. if not redis_helper.key_exists(key_name=rov_key_name):
  14. msg_text = f"\n- 所属项目: rov-server/rov-offline" \
  15. f"\n- 告警名称: 离线更新数据未按时更新告警" \
  16. f"\n- 所属环境: {config_.ENV_TEXT}" \
  17. f"\n- now_date: {now_date}" \
  18. f"\n- now_h: {now_h}" \
  19. f"\n- 告警描述: rov模型预测列表数据未按时更新"
  20. log_.info(f"msg_text = {msg_text}")
  21. send_msg_to_feishu(
  22. webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
  23. key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
  24. msg_text=msg_text
  25. )
  26. def region_data_monitor(now_date, now_h, rule_params, key_prefix_dict):
  27. """地域分组数据"""
  28. region_code_list = [code for region, code in region_code.items()] +\
  29. [code for city, code in config_.CITY_CODE.items()]
  30. # print(region_code_list)
  31. for param in rule_params.get('params_list'):
  32. data_key = param.get('data')
  33. rule_key = param.get('rule')
  34. for key_con, key_prefix in key_prefix_dict.items():
  35. # if key_con == '不区分地域相对24h筛选后剩余去重后数据' and rule_key != 'rule4':
  36. # continue
  37. no_update_region_list = []
  38. for region in region_code_list:
  39. region_key_name = f"{key_prefix}{region}:{data_key}:{rule_key}:{now_date}:{now_h}"
  40. if not redis_helper.key_exists(key_name=region_key_name):
  41. no_update_region_list.append(region)
  42. if len(no_update_region_list) == len(region_code_list):
  43. msg_text = f"\n- 所属项目: rov-server/rov-offline" \
  44. f"\n- 告警名称: 离线更新数据未按时更新告警" \
  45. f"\n- 所属环境: {config_.ENV_TEXT}" \
  46. f"\n- now_date: {now_date}" \
  47. f"\n- now_h: {now_h}" \
  48. f"\n- 告警描述: {key_con}未按时更新, data_key={data_key}, rule_key={rule_key}"
  49. log_.info(f"msg_text = {msg_text}")
  50. send_msg_to_feishu(
  51. webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
  52. key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
  53. msg_text=msg_text
  54. )
  55. def special_videos_monitor(now_date, now_h):
  56. """特殊mid(屏蔽名单)指定视频列表"""
  57. if now_h > 4:
  58. rov_key_name = f"{config_.KEY_NAME_PREFIX_SPECIAL_VIDEOS}{now_date}"
  59. if not redis_helper.key_exists(key_name=rov_key_name):
  60. msg_text = f"\n- 所属项目: rov-server/rov-offline" \
  61. f"\n- 告警名称: 离线更新数据未按时更新告警" \
  62. f"\n- 所属环境: {config_.ENV_TEXT}" \
  63. f"\n- now_date: {now_date}" \
  64. f"\n- now_h: {now_h}" \
  65. f"\n- 告警描述: 特殊mid(屏蔽名单)指定视频列表数据未按时更新"
  66. log_.info(f"msg_text = {msg_text}")
  67. send_msg_to_feishu(
  68. webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
  69. key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
  70. msg_text=msg_text
  71. )
  72. def whole_movies_monitor(now_date, now_h):
  73. """完整影视资源列表"""
  74. rov_key_name = f"{config_.RECALL_KEY_NAME_PREFIX_WHOLE_MOVIES}{now_date}.{now_h}"
  75. if not redis_helper.key_exists(key_name=rov_key_name):
  76. msg_text = f"\n- 所属项目: rov-server/rov-offline" \
  77. f"\n- 告警名称: 离线更新数据未按时更新告警" \
  78. f"\n- 所属环境: {config_.ENV_TEXT}" \
  79. f"\n- now_date: {now_date}" \
  80. f"\n- now_h: {now_h}" \
  81. f"\n- 告警描述: 完整影视资源列表数据未按时更新"
  82. log_.info(f"msg_text = {msg_text}")
  83. send_msg_to_feishu(
  84. webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
  85. key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
  86. msg_text=msg_text
  87. )
  88. def get_redis_data_keys(now_date, now_h):
  89. # 检查所需列表是否已更新好
  90. redis_data_keys = []
  91. # rov模型预测列表
  92. if now_h > 6:
  93. rov_key_name = f"{config_.RECALL_KEY_NAME_PREFIX}{now_date}"
  94. redis_data_keys.append(rov_key_name)
  95. # 地域分组小时级列表
  96. rule_params = config_.RULE_PARAMS_REGION_APP_TYPE
  97. key_prefix_list = [
  98. config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H,
  99. config_.RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H,
  100. config_.RECALL_KEY_NAME_PREFIX_DUP2_REGION_24H_H,
  101. config_.RECALL_KEY_NAME_PREFIX_DUP_REGION_H
  102. ]
  103. region_code_list = [code for region, code in region_code.items()]
  104. for app_type, params in rule_params.items():
  105. for data_key, data_param in params['data_params'].items():
  106. for rule_key, rule_param in params['rule_params'].items():
  107. for region in region_code_list:
  108. if region == '-1':
  109. region_key_name = [f"{key_prefix_list[-1]}{region}.{app_type}.{data_key}.{rule_key}.{now_date}.{now_h}"]
  110. else:
  111. region_key_name = [f"{key_prefix}{region}.{app_type}.{data_key}.{rule_key}.{now_date}.{now_h}"
  112. for key_prefix in key_prefix_list]
  113. redis_data_keys.extend(region_key_name)
  114. return redis_data_keys
  115. def monitor(now_date, now_h):
  116. # rov_data_monitor(now_date=now_date, now_h=now_h)
  117. key_prefix_dict_24h = {
  118. '地域分组小时级数据': config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H,
  119. '地域分组相对24h去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H,
  120. '不区分地域相对24h去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP2_REGION_24H_H,
  121. '不区分地域相对24h筛选后剩余去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP3_REGION_24H_H,
  122. # 'rov模型预测列表去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP_REGION_H,
  123. }
  124. region_data_monitor(now_date=now_date, now_h=now_h, rule_params=config_.RULE_PARAMS_REGION_APP_TYPE,
  125. key_prefix_dict=key_prefix_dict_24h)
  126. # key_prefix_dict_48h = {
  127. # '地域分组小时级数据': config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H,
  128. # '地域分组相对24h去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H,
  129. # '不区分地域相对48h去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP2_REGION_48H_H,
  130. # '不区分地域相对48h筛选后剩余去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP3_REGION_48H_H,
  131. # 'rov模型预测列表去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP_REGION_H,
  132. # }
  133. # region_data_monitor(now_date=now_date, now_h=now_h, rule_params=config_.RULE_PARAMS_REGION_APP_TYPE_48H,
  134. # key_prefix_dict=key_prefix_dict_48h)
  135. special_videos_monitor(now_date=now_date, now_h=now_h)
  136. # whole_movies_monitor(now_date=now_date, now_h=now_h)
  137. if __name__ == '__main__':
  138. now_date = datetime.datetime.today().strftime('%Y%m%d')
  139. now_h = datetime.datetime.now().hour
  140. log_.info(f"now_date = {now_date}, now_h = {now_h}")
  141. monitor(now_date=now_date, now_h=now_h)
  142. log_.info("end!")