123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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:
- # 获取广告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]})
- 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
- log_.info(f"to redis count: {i}")
- except Exception as e:
- log_.error(f"地域分组小时级数据更新失败, 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 = ''
- table = ''
- 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")
|