import datetime from config import set_config from utils import RedisHelper, send_msg_to_feishu from log import Log config_, _ = set_config() log_ = Log() redis_helper = RedisHelper() region_code = { '河北省': '130000', '山西省': '140000', '辽宁省': '210000', '吉林省': '220000', '黑龙江省': '230000', '江苏省': '320000', '浙江省': '330000', '安徽省': '340000', '福建省': '350000', '江西省': '360000', '山东省': '370000', '河南省': '410000', '湖北省': '420000', '湖南省': '430000', '广东省': '440000', '海南省': '460000', '四川省': '510000', '贵州省': '520000', '云南省': '530000', '陕西省': '610000', '甘肃省': '620000', '青海省': '630000', '台湾省': '710000', '北京': '110000', '天津': '120000', '内蒙古': '150000', '上海': '310000', '广西': '450000', '重庆': '500000', '西藏': '540000', '宁夏': '640000', '新疆': '650000', '香港': '810000', '澳门': '820000', 'None': '-1' } 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 = config_.RULE_PARAMS_REGION key_prefix_dict = { '地域分组小时级数据': 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, 'rov模型预测列表去重后数据': config_.RECALL_KEY_NAME_PREFIX_DUP_REGION_H, } region_code_list = [code for region, code in region_code.items()] for rule_key, _ in rule_params.items(): for key_con, key_prefix in key_prefix_dict.items(): no_update_region_list = [] for region in region_code_list: region_key_name = f"{key_prefix}{region}.{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}未按时更新, 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 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 rule_key, _ in rule_params.items(): for region in region_code_list: if region == '-1': region_key_name = [f"{key_prefix_list[-1]}{region}.{rule_key}.{now_date}.{now_h}"] else: region_key_name = [f"{key_prefix}{region}.{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) region_data_monitor(now_date=now_date, now_h=now_h) 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!")