|
@@ -0,0 +1,117 @@
|
|
|
+import datetime
|
|
|
+from config import set_config
|
|
|
+from log import Log
|
|
|
+from utils import RedisHelper
|
|
|
+
|
|
|
+config_ = set_config()
|
|
|
+log_ = Log()
|
|
|
+redis_helper = RedisHelper()
|
|
|
+
|
|
|
+
|
|
|
+def update_limit_video_score(initial_videos, key_name):
|
|
|
+ """
|
|
|
+ 调整限流视频的分数: 将视频移至所在列表的中位数之后,多个视频时,按照原本的顺序进行排列
|
|
|
+ :param initial_videos: 视频列表及score type-dict, {videoId: score, ...}
|
|
|
+ :param key_name: 视频列表对应的key
|
|
|
+ :return:
|
|
|
+ """
|
|
|
+
|
|
|
+ data = redis_helper.get_data_from_redis(key_name=config_.KEY_NAME_PREFIX_LIMIT_VIDEOS)
|
|
|
+ if data is None:
|
|
|
+ return
|
|
|
+ limit_video_id_list = [int(video[0]) for video in data]
|
|
|
+
|
|
|
+ limit_video_initial_score = {}
|
|
|
+ for video_id in limit_video_id_list:
|
|
|
+ initial_score = initial_videos.get(video_id, None)
|
|
|
+ if initial_score is not None:
|
|
|
+ limit_video_initial_score[video_id] = initial_score
|
|
|
+ if len(limit_video_initial_score) == 0:
|
|
|
+ return
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+def check_videos_distribute():
|
|
|
+ """
|
|
|
+ 检查当前限流视频分发数
|
|
|
+ :return: stop_distribute_video_id_list
|
|
|
+ """
|
|
|
+
|
|
|
+ data = redis_helper.get_data_from_redis(key_name=config_.KEY_NAME_PREFIX_LIMIT_VIDEOS)
|
|
|
+ if data is None:
|
|
|
+ return []
|
|
|
+
|
|
|
+ stop_distribute_video_id_list = []
|
|
|
+ for video_id, max_distribute_count in eval(data):
|
|
|
+ distributed_count = redis_helper.get_data_from_redis(
|
|
|
+ key_name=f"{config_.KEY_NAME_PREFIX_LIMIT_VIDEO_DISTRIBUTE_COUNT}{video_id}"
|
|
|
+ )
|
|
|
+ if distributed_count is None:
|
|
|
+ continue
|
|
|
+ if int(distributed_count) >= int(max_distribute_count):
|
|
|
+ stop_distribute_video_id_list.append(int(video_id))
|
|
|
+
|
|
|
+ return stop_distribute_video_id_list
|
|
|
+
|
|
|
+
|
|
|
+def check_region_videos():
|
|
|
+ """检查限流视频分发数"""
|
|
|
+
|
|
|
+ now_date = datetime.datetime.today()
|
|
|
+
|
|
|
+ now_h = datetime.datetime.now().hour
|
|
|
+ log_.info(f'now_date = {now_date}, now_h = {now_h}.')
|
|
|
+
|
|
|
+
|
|
|
+ stop_distribute_video_id_list = check_videos_distribute()
|
|
|
+ if len(stop_distribute_video_id_list) == 0:
|
|
|
+ return
|
|
|
+
|
|
|
+
|
|
|
+ region_code_list = [code for region, code in config_.REGION_CODE.items()]
|
|
|
+ rule_params = config_.RULE_PARAMS_REGION
|
|
|
+
|
|
|
+ for region in region_code_list:
|
|
|
+ log_.info(f"region = {region}")
|
|
|
+ for key, value in rule_params.items():
|
|
|
+ log_.info(f"rule = {key}, param = {value}")
|
|
|
+
|
|
|
+ redis_helper.add_data_with_set(
|
|
|
+ key_name=f"{config_.REGION_H_VIDEO_FILER}{region}.{key}",
|
|
|
+ values=stop_distribute_video_id_list,
|
|
|
+ expire_time=2 * 3600
|
|
|
+ )
|
|
|
+
|
|
|
+ redis_helper.add_data_with_set(
|
|
|
+ key_name=f"{config_.REGION_H_VIDEO_FILER_24H}{region}.{key}",
|
|
|
+ values=stop_distribute_video_id_list,
|
|
|
+ expire_time=2 * 3600
|
|
|
+ )
|
|
|
+
|
|
|
+ redis_helper.add_data_with_set(
|
|
|
+ key_name=f"{config_.H_VIDEO_FILER_24H}{region}.{key}",
|
|
|
+ values=stop_distribute_video_id_list,
|
|
|
+ expire_time=2 * 3600
|
|
|
+ )
|
|
|
+
|
|
|
+ key_name = f"{config_.RECALL_KEY_NAME_PREFIX_DUP_REGION_H}{region}.{key}." \
|
|
|
+ f"{datetime.datetime.strftime(now_date, '%Y%m%d')}.{now_h}"
|
|
|
+ if not redis_helper.key_exists(key_name=key_name):
|
|
|
+ if now_h == 0:
|
|
|
+ redis_date = now_date - datetime.timedelta(days=1)
|
|
|
+ redis_h = 23
|
|
|
+ else:
|
|
|
+ redis_date = now_date
|
|
|
+ redis_h = now_h - 1
|
|
|
+ key_name = f"{config_.RECALL_KEY_NAME_PREFIX_DUP_REGION_H}{region}.{key}." \
|
|
|
+ f"{datetime.datetime.strftime(redis_date, '%Y%m%d')}.{redis_h}"
|
|
|
+ redis_helper.remove_value_from_zset(key_name=key_name, value=stop_distribute_video_id_list)
|
|
|
+
|
|
|
+ log_.info(f"region = {region} videos check end!")
|
|
|
+ log_.info("region_h videos check end!")
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ check_region_videos()
|