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 = 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!")