|
@@ -315,7 +315,7 @@ class PoolRecall(object):
|
|
|
|
|
|
def get_video_last_idx(self):
|
|
|
"""获取用户上一次在rov召回池对应的位置"""
|
|
|
- if self.ab_code == config_.AB_CODE['rank_by_h']:
|
|
|
+ if self.ab_code == config_.AB_CODE['rank_by_h'] or self.app_type == config_.APP_TYPE['APP']:
|
|
|
rov_pool_key, redis_date = self.get_pool_redis_key_with_h('rov')
|
|
|
else:
|
|
|
rov_pool_key, redis_date = self.get_pool_redis_key('rov')
|
|
@@ -456,24 +456,57 @@ class PoolRecall(object):
|
|
|
if pool_type == 'rov':
|
|
|
# 获取当前所在小时
|
|
|
h = datetime.now().hour
|
|
|
- # 判断热度列表是否更新,未更新则使用前一小时的热度列表
|
|
|
- key_name = '{}{}'.format(config_.RECALL_KEY_NAME_PREFIX_APP_TYPE, h)
|
|
|
- if self.redis_helper.key_exists(key_name):
|
|
|
- return key_name, h
|
|
|
+
|
|
|
+ # appType = 13, 票圈视频APP
|
|
|
+ # 数据更新周期:每天07:00-21:00, 2h/次
|
|
|
+ if self.app_type == config_.APP_TYPE['APP']:
|
|
|
+ now_date = date.today().strftime('%Y%m%d')
|
|
|
+ if h < 7:
|
|
|
+ key_h = 21
|
|
|
+ key_date = (date.today() - timedelta(days=1)).strftime('%Y%m%d')
|
|
|
+ elif h > 21:
|
|
|
+ key_h = 21
|
|
|
+ key_date = now_date
|
|
|
+ else:
|
|
|
+ if h % 2 == 0:
|
|
|
+ key_h = h - 1
|
|
|
+ key_date = now_date
|
|
|
+ else:
|
|
|
+ key_h = h
|
|
|
+ key_date = now_date
|
|
|
+ print(key_date, key_h)
|
|
|
+ key_name = f'{config_.APP_FINAL_RECALL_KEY_NAME_PREFIX}{key_date}.{key_h}'
|
|
|
+ if self.redis_helper.key_exists(key_name):
|
|
|
+ return key_name, key_h
|
|
|
+ else:
|
|
|
+ if key_h == 7:
|
|
|
+ redis_h = 21
|
|
|
+ redis_date = (date.today() - timedelta(days=1)).strftime('%Y%m%d')
|
|
|
+ else:
|
|
|
+ redis_h = h - 2
|
|
|
+ redis_date = key_date
|
|
|
+ key_name = f'{config_.APP_FINAL_RECALL_KEY_NAME_PREFIX}{redis_date}.{redis_h}'
|
|
|
+ return key_name, redis_h
|
|
|
+
|
|
|
else:
|
|
|
- if 0 <= h <= 8:
|
|
|
- redis_h = 23
|
|
|
+ # 判断热度列表是否更新,未更新则使用前一小时的热度列表
|
|
|
+ key_name = '{}{}'.format(config_.RECALL_KEY_NAME_PREFIX_APP_TYPE, h)
|
|
|
+ if self.redis_helper.key_exists(key_name):
|
|
|
+ return key_name, h
|
|
|
else:
|
|
|
- redis_h = h - 1
|
|
|
- key_name = '{}{}'.format(config_.RECALL_KEY_NAME_PREFIX_APP_TYPE, redis_h)
|
|
|
- # 判断当前时间是否晚于数据正常更新时间,发送消息到飞书
|
|
|
- now_m = datetime.now().minute
|
|
|
- feishu_text = '{} —— appType = {}, h = {} 数据未按时更新,请及时查看解决。'.format(
|
|
|
- config_.ENV_TEXT, self.app_type, h)
|
|
|
- if now_m > config_.ROV_UPDATE_MINUTE_6 and h > 0:
|
|
|
- # h=0时,因数据首次更新耗时长,不做报警
|
|
|
- send_msg_to_feishu(feishu_text)
|
|
|
- return key_name, redis_h
|
|
|
+ if 0 <= h <= 8:
|
|
|
+ redis_h = 23
|
|
|
+ else:
|
|
|
+ redis_h = h - 1
|
|
|
+ key_name = '{}{}'.format(config_.RECALL_KEY_NAME_PREFIX_APP_TYPE, redis_h)
|
|
|
+ # 判断当前时间是否晚于数据正常更新时间,发送消息到飞书
|
|
|
+ now_m = datetime.now().minute
|
|
|
+ feishu_text = '{} —— appType = {}, h = {} 数据未按时更新,请及时查看解决。'.format(
|
|
|
+ config_.ENV_TEXT, self.app_type, h)
|
|
|
+ if now_m > config_.ROV_UPDATE_MINUTE_6 and h > 8:
|
|
|
+ # 0<=h<8时,数据不做更新,不做报警
|
|
|
+ send_msg_to_feishu(feishu_text)
|
|
|
+ return key_name, redis_h
|
|
|
|
|
|
elif pool_type == 'flow':
|
|
|
return config_.FLOW_POOL_KEY_NAME_PREFIX + str(self.app_type)
|