123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- import datetime
- from my_config import set_config
- from my_utils import RedisHelper, send_msg_to_feishu
- from log import Log
- config_, _ = set_config()
- log_ = Log()
- redis_helper = RedisHelper()
- region_code = config_.REGION_CODE
- def rov_data_monitor(now_date, now_h):
- """rov模型预测列表"""
- if now_h > 6:
- rov_key_name = f"{config_.RECALL_KEY_NAME_PREFIX}{now_date}"
- if not redis_helper.key_exists(key_name=rov_key_name):
- msg_text = f"\n- 所属项目: rov-server/rov-offline" \
- f"\n- 告警名称: 离线更新数据未按时更新告警" \
- f"\n- 所属环境: {config_.ENV_TEXT}" \
- f"\n- now_date: {now_date}" \
- f"\n- now_h: {now_h}" \
- f"\n- 告警描述: rov模型预测列表数据未按时更新"
- log_.info(f"msg_text = {msg_text}")
- send_msg_to_feishu(
- webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
- key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
- msg_text=msg_text
- )
- def region_data_monitor(now_date, now_h, rule_params, key_prefix_dict):
- """地域分组数据"""
- region_code_list = [code for region, code in region_code.items()] +\
- [code for city, code in config_.CITY_CODE.items()]
- # print(region_code_list)
- for param in rule_params.get('params_list'):
- data_key = param.get('data')
- rule_key = param.get('rule')
- for key_con, key_prefix in key_prefix_dict.items():
- # if key_con == '不区分地域相对24h筛选后剩余去重后数据' and rule_key != 'rule4':
- # continue
- no_update_region_list = []
- for region in region_code_list:
- region_key_name = f"{key_prefix}{region}:{data_key}:{rule_key}:{now_date}:{now_h}"
- if not redis_helper.key_exists(key_name=region_key_name):
- no_update_region_list.append(region)
- if len(no_update_region_list) == len(region_code_list):
- msg_text = f"\n- 所属项目: rov-server/rov-offline" \
- f"\n- 告警名称: 离线更新数据未按时更新告警" \
- f"\n- 所属环境: {config_.ENV_TEXT}" \
- f"\n- now_date: {now_date}" \
- f"\n- now_h: {now_h}" \
- f"\n- 告警描述: {key_con}未按时更新, data_key={data_key}, rule_key={rule_key}"
- log_.info(f"msg_text = {msg_text}")
- send_msg_to_feishu(
- webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
- key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
- msg_text=msg_text
- )
- def special_videos_monitor(now_date, now_h):
- """特殊mid(屏蔽名单)指定视频列表"""
- if now_h > 4:
- rov_key_name = f"{config_.KEY_NAME_PREFIX_SPECIAL_VIDEOS}{now_date}"
- if not redis_helper.key_exists(key_name=rov_key_name):
- msg_text = f"\n- 所属项目: rov-server/rov-offline" \
- f"\n- 告警名称: 离线更新数据未按时更新告警" \
- f"\n- 所属环境: {config_.ENV_TEXT}" \
- f"\n- now_date: {now_date}" \
- f"\n- now_h: {now_h}" \
- f"\n- 告警描述: 特殊mid(屏蔽名单)指定视频列表数据未按时更新"
- log_.info(f"msg_text = {msg_text}")
- send_msg_to_feishu(
- webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
- key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
- msg_text=msg_text
- )
- def whole_movies_monitor(now_date, now_h):
- """完整影视资源列表"""
- rov_key_name = f"{config_.RECALL_KEY_NAME_PREFIX_WHOLE_MOVIES}{now_date}.{now_h}"
- if not redis_helper.key_exists(key_name=rov_key_name):
- msg_text = f"\n- 所属项目: rov-server/rov-offline" \
- f"\n- 告警名称: 离线更新数据未按时更新告警" \
- f"\n- 所属环境: {config_.ENV_TEXT}" \
- f"\n- now_date: {now_date}" \
- f"\n- now_h: {now_h}" \
- f"\n- 告警描述: 完整影视资源列表数据未按时更新"
- log_.info(f"msg_text = {msg_text}")
- send_msg_to_feishu(
- webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'),
- key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'),
- msg_text=msg_text
- )
- def get_redis_data_keys(now_date, now_h):
- # 检查所需列表是否已更新好
- redis_data_keys = []
- # rov模型预测列表
- if now_h > 6:
- rov_key_name = f"{config_.RECALL_KEY_NAME_PREFIX}{now_date}"
- redis_data_keys.append(rov_key_name)
- # 地域分组小时级列表
- rule_params = config_.RULE_PARAMS_REGION_APP_TYPE
- key_prefix_list = [
- config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H,
- config_.RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H,
- config_.RECALL_KEY_NAME_PREFIX_DUP2_REGION_24H_H,
- config_.RECALL_KEY_NAME_PREFIX_DUP_REGION_H
- ]
- region_code_list = [code for region, code in region_code.items()]
- for app_type, params in rule_params.items():
- for data_key, data_param in params['data_params'].items():
- for rule_key, rule_param in params['rule_params'].items():
- for region in region_code_list:
- if region == '-1':
- region_key_name = [f"{key_prefix_list[-1]}{region}.{app_type}.{data_key}.{rule_key}.{now_date}.{now_h}"]
- else:
- region_key_name = [f"{key_prefix}{region}.{app_type}.{data_key}.{rule_key}.{now_date}.{now_h}"
- for key_prefix in key_prefix_list]
- redis_data_keys.extend(region_key_name)
- return redis_data_keys
- def monitor(now_date, now_h):
- # rov_data_monitor(now_date=now_date, now_h=now_h)
- key_prefix_dict_24h = {
- '地域分组小时级数据': config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H,
- '地域分组相对24h去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H,
- '不区分地域相对24h去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP2_REGION_24H_H,
- '不区分地域相对24h筛选后剩余去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP3_REGION_24H_H,
- # 'rov模型预测列表去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP_REGION_H,
- }
- region_data_monitor(now_date=now_date, now_h=now_h, rule_params=config_.RULE_PARAMS_REGION_APP_TYPE,
- key_prefix_dict=key_prefix_dict_24h)
- # key_prefix_dict_48h = {
- # '地域分组小时级数据': config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H,
- # '地域分组相对24h去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP1_REGION_24H_H,
- # '不区分地域相对48h去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP2_REGION_48H_H,
- # '不区分地域相对48h筛选后剩余去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP3_REGION_48H_H,
- # 'rov模型预测列表去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP_REGION_H,
- # }
- # region_data_monitor(now_date=now_date, now_h=now_h, rule_params=config_.RULE_PARAMS_REGION_APP_TYPE_48H,
- # key_prefix_dict=key_prefix_dict_48h)
- special_videos_monitor(now_date=now_date, now_h=now_h)
- # whole_movies_monitor(now_date=now_date, now_h=now_h)
- if __name__ == '__main__':
- now_date = datetime.datetime.today().strftime('%Y%m%d')
- now_h = datetime.datetime.now().hour
- log_.info(f"now_date = {now_date}, now_h = {now_h}")
- monitor(now_date=now_date, now_h=now_h)
- log_.info("end!")
|