import traceback import datetime import json import time from odps import ODPS from db_helper import RedisHelper from utils import send_msg_to_feishu from config import set_config from log import Log config_ = set_config() log_ = Log() def main(project, table): try: view_pv_sum = 0 click_pv_sum = 0 # 获取广告ad_idea_id对应的曝光次数和点击次数 odps = ODPS( access_id=config_.ODPS_CONFIG['ACCESSID'], secret_access_key=config_.ODPS_CONFIG['ACCESSKEY'], project=project, endpoint=config_.ODPS_CONFIG['ENDPOINT'], ) records = odps.read_table(name=table) ad_idea_data = [] for item in records: ad_idea_id = item['ad_idea_id'] view_pv = item['view_pv'] click_pv = item['click_pv'] if ad_idea_id is None or ad_idea_id == '': continue try: view_pv = int(view_pv) except: view_pv = 0 try: click_pv = int(click_pv) except: click_pv = 0 if view_pv < click_pv: continue param_alpha = click_pv param_beta = view_pv - click_pv ad_idea_data.append({'ad_idea_id': ad_idea_id, 'param': [param_alpha, param_beta]}) view_pv_sum += view_pv click_pv_sum += click_pv log_.info(f"ad_idea_data count: {len(ad_idea_data)}") log_.info(f"ad_idea_data: {ad_idea_data}") # 更新redis redis_helper = RedisHelper() i = 0 for ad_idea in ad_idea_data: try: key_name = f"{config_.THOMPSON_PARAM_KEY_PREFIX}{ad_idea['ad_idea_id']}" value = json.dumps(ad_idea['param']) redis_helper.set_data_to_redis(key_name=key_name, value=value, expire_time=24 * 3600) i += 1 except: continue # 更新均值 key_name = f"{config_.THOMPSON_PARAM_KEY_PREFIX}-1" value = json.dumps([int(click_pv_sum * 1.2), view_pv_sum]) redis_helper.set_data_to_redis(key_name=key_name, value=value, expire_time=24 * 3600) i += 1 log_.info(f"to redis count: {i}") log_.info(f"mean: {value}") except Exception as e: log_.error(f"广告Thompson参数更新失败, exception: {e}, traceback: {traceback.format_exc()}") send_msg_to_feishu( webhook=config_.FEISHU_ROBOT['server_robot'].get('webhook'), key_word=config_.FEISHU_ROBOT['server_robot'].get('key_word'), msg_text=f"rov-offline{config_.ENV_TEXT} - 广告Thompson参数更新失败\n" f"exception: {e}\n" f"traceback: {traceback.format_exc()}" ) if __name__ == '__main__': project = 'loghubods' table = 'ad_own_data_vc' now_date = datetime.datetime.today() dt = datetime.datetime.strftime(now_date, '%Y%m%d %H:%M:%S') log_.info(f"dt: {dt}") start_time = time.time() main(project=project, table=table) log_.info(f"excuteTime: {(time.time() - start_time) * 1000}ms")