123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- 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]
- # 获取限流视频对应的score
- 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
- )
- # 将已超分发视频加入到地域分组24h的数据线上过滤应用列表中
- 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
- )
- # 将已超分发视频加入到不区分相对24h线上过滤应用列表中
- 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()
|