# coding:utf-8 import os from log import Log log_ = Log() class BaseConfig(object): # 产品标识 APP_TYPE = { 'VLOG': 0, # vlog 'LOVE_LIVE': 4, # 票圈视频 'LONG_VIDEO': 5, # 内容精选 'SHORT_VIDEO': 6, # 票圈短视频 'WAN_NENG_VIDEO': 17, # 万能影视屋 'LAO_HAO_KAN_VIDEO': 18, # 老好看视频 'ZUI_JING_QI': 19, # 票圈最惊奇 'APP': 13, # 票圈视频APP } # 数据存放路径 DATA_DIR_PATH = './data' # oss 目标Bucket BUCKET_NAME = 'ali-recommend' # ODPS服务配置 ODPS_CONFIG = { 'ENDPOINT': 'http://service.cn.maxcompute.aliyun.com/api', 'ACCESSID': 'LTAIWYUujJAm7CbH', 'ACCESSKEY': 'RfSjdiWwED1sGFlsjXv0DlfTnZTG1P', } # 飞书机器人配置 FEISHU_ROBOT = { 'server_robot': { # webhook地址 'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/8de4de35-30ed-4692-8854-7a154e89b2f2', # 自定义关键词key_word 'key_word': '服务报警' }, 'feature_monitor_robot': { 'webhook': 'https://open.feishu.cn/open-apis/bot/v2/hook/0ca66b89-5e2b-4e89-a04a-a01fda31cc89', 'key_word': 'ROV特征监控' } } # 训练数据截止时间距当前日期间隔天数 TRAIN_DIFF = 7 # 训练数据所需数据范围天数 TRAIN_DELTA_DAYS = 30 # 训练数据表名 TRAIN_PROJECT = 'usercdm' TRAIN_TABLE = 'rov_feature_add_v1' # 训练数据文件存放路径 TRAIN_DATA_FILENAME = 'train_data.pickle' # 预测数据截止时间距当前日期间隔天数 PREDICT_DIFF = 1 # 预测数据所需数据范围天数 PREDICT_DELTA_DAYS = 1 # 预测数据表名 PREDICT_PROJECT = 'usercdm' PREDICT_TABLE = 'rov_predict_table_add_v1' # 预测数据文件存放路径 PREDICT_DATA_FILENAME = 'predict_data.pickle' # 模型存放文件 MODEL_FILENAME = 'model.pickle' # 小程序离线ROV模型结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.{date} RECALL_KEY_NAME_PREFIX = 'com.weiqu.video.recall.hot.item.score.' # app应用 小程序离线ROV模型结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.app.{date} RECALL_KEY_NAME_PREFIX_APP = 'com.weiqu.video.recall.hot.item.score.app.' # appType = 6, ROV召回池redis key前缀,完整格式:com.weiqu.video.recall.hot.apptype.h.item.score.{appType}.{h} RECALL_KEY_NAME_PREFIX_APP_TYPE = 'com.weiqu.video.recall.hot.apptype.h.item.score.' # 流量池离线模型结果存放 redis key前缀,完整格式 com.weiqu.video.flowpool.hot.item.score.{appType} FLOWPOOL_KEY_NAME_PREFIX = 'com.weiqu.video.flowpool.hot.item.score.' # 兜底视频redis存储key BOTTOM_KEY_NAME = 'com.weiqu.video.bottom' # 兜底视频数量 BOTTOM_NUM = 1000 # 首页兜底视频json存储 redis-key BOTTOM_JSON_KEY_NAME = 'com.weiqu.video.homepage.bottom.info.json.item' # 修改ROV的视频 redis key UPDATE_ROV_KEY_NAME = 'com.weiqu.video.update.rov.item.score' UPDATE_ROV_KEY_NAME_APP = 'com.weiqu.video.update.rov.item.score.app' # 生效中的置顶视频列表 redis key TOP_VIDEO_LIST_KEY_NAME = 'com.weiqu.video.top.item.score.area' TOP_VIDEO_LIST_KEY_NAME_APP = 'com.weiqu.video.top.item.score.area.app' # rovScore公差 ROV_SCORE_D = 0.001 # width : height > 1 的视频列表 redis key, zset存储,value为videoId,score为w_h_rate W_H_RATE_UP_1_VIDEO_LIST_KEY_NAME = { 'rov_recall': 'com.weiqu.video.rov.w.h.rate.1.item', # rov召回池视频 'bottom_last': 'com.weiqu.video.bottom.last.w.h.rate.1.item' # 二次兜底视频 } # 头部视频对应运营强插的相关视频 redis 存储 key 前缀, 完整key格式:com.weiqu.video.relevant.videos.item.{videoId} RELEVANT_VIDEOS_WITH_OP_KEY_NAME = 'com.weiqu.video.relevant.videos.item.' # 有设置运营强插相关视频的头部视频id redis存储key RELEVANT_TOP_VIDEOS_KEY_NAME = 'com.weiqu.video.relevant.top.video_ids' # 按位置排序redis存储key RECALL_POSITION1_KEY_NAME = 'com.weiqu.video.recall.hot.apptype.h.item.score.position.1' RECALL_POSITION2_KEY_NAME = 'com.weiqu.video.recall.hot.apptype.h.item.score.position.2' class DevelopmentConfig(BaseConfig): """开发环境配置""" # 报警内容 环境区分 ENV_TEXT = "开发环境" # 项目存放目录 PROJECT_PATH = '/data2/rov-offline' # 测试环境redis地址 REDIS_INFO = { 'host': 'r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com', 'port': 6379, 'password': 'Wqsd@2019', } # Hologres连接参数,本地使用 HOLOGRES_INFO = { 'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou.hologres.aliyuncs.com', 'port': 80, 'dbname': 'dssm', 'user': 'LTAI5tMPqPy9yboQAf1mBCCN', 'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj' } # 测试环境mysql地址 MYSQL_INFO = { 'host': 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com', 'port': 3306, 'user': 'wx2016_longvideo', 'password': 'wx2016_longvideoP@assword1234', 'db': 'longvideo', 'charset': 'utf8' } # Hologres视频状态存储表名 VIDEO_STATUS = 'longvideo_test.dwd_mdm_item_video_stat' # 从流量池获取视频接口地址 GET_VIDEOS_FROM_POOL_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/getAllVideo' # 获取视频在流量池中的剩余可分发数接口地址 GET_REMAIN_VIEW_COUNT_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/remainViewCount' # 计算完ROV通知后端接口地址 NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateRovScore' # 获取置顶视频列表接口地址 TOP_VIDEO_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/topVideoList' # 获取首页兜底视频json接口地址 BOTTOM_JSON_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/video/distribute/structure/video/list' # logs 上传oss 目标Bucket指定目录 OSS_FOLDER_LOGS = 'rov-offline/dev/logs/' # data 上传oss 目标Bucket指定目录 OSS_FOLDER_DATA = 'rov-offline/dev/data/' class TestConfig(BaseConfig): """测试环境配置""" # 报警内容 环境区分 ENV_TEXT = "测试环境" # 项目存放目录 PROJECT_PATH = '/data2/rov-offline' # 测试环境redis地址 REDIS_INFO = { 'host': 'r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com', 'port': 6379, 'password': 'Wqsd@2019', } # Hologres连接参数,服务器使用 HOLOGRES_INFO = { 'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou-vpc.hologres.aliyuncs.com', 'port': 80, 'dbname': 'dssm', 'user': 'LTAI5tMPqPy9yboQAf1mBCCN', 'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj' } # 测试环境mysql地址 MYSQL_INFO = { 'host': 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com', 'port': 3306, 'user': 'wx2016_longvideo', 'password': 'wx2016_longvideoP@assword1234', 'db': 'longvideo', 'charset': 'utf8' } # Hologres视频状态存储表名 VIDEO_STATUS = 'longvideo_test.dwd_mdm_item_video_stat' # 从流量池获取视频接口地址 GET_VIDEOS_FROM_POOL_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/getAllVideo' # 获取视频在流量池中的剩余可分发数接口地址 GET_REMAIN_VIEW_COUNT_URL = 'http://testapi-internal.piaoquantv.com/flowpool/video/remainViewCount' # 计算完ROV通知后端接口地址 NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/updateRovScore' # 获取置顶视频列表接口地址 TOP_VIDEO_LIST_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/recommend/topVideoList' # 获取首页兜底视频json接口地址 BOTTOM_JSON_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/video/distribute/structure/video/list' # logs 上传oss 目标Bucket指定目录 OSS_FOLDER_LOGS = 'rov-offline/test/logs/' # data 上传oss 目标Bucket指定目录 OSS_FOLDER_DATA = 'rov-offline/test/data/' class PreProductionConfig(BaseConfig): """预发布环境配置""" # 报警内容 环境区分 ENV_TEXT = "预发布环境" # 项目存放目录 PROJECT_PATH = '/data/rov-offline' # redis地址 REDIS_INFO = { 'host': 'r-bp1fogs2mflr1ybfot.redis.rds.aliyuncs.com', 'port': 6379, 'password': 'Wqsd@2019', } # Hologres连接参数,服务器使用 HOLOGRES_INFO = { 'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou-vpc.hologres.aliyuncs.com', 'port': 80, 'dbname': 'dssm', 'user': 'LTAI5tMPqPy9yboQAf1mBCCN', 'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj' } # 生产环境mysql地址 MYSQL_INFO = { 'host': 'rr-bp1x9785e8h5452bi157.mysql.rds.aliyuncs.com', 'port': 3306, 'user': 'wx2016_longvideo', 'password': 'wx2016_longvideoP@assword1234', 'db': 'longvideo', 'charset': 'utf8' } # Hologres视频状态存储表名 VIDEO_STATUS = 'longvideo.dwd_mdm_item_video_stat' # 从流量池获取视频接口地址 GET_VIDEOS_FROM_POOL_URL = 'http://preapi-internal.piaoquantv.com/flowpool/video/getAllVideo' # 获取视频在流量池中的剩余可分发数接口地址 GET_REMAIN_VIEW_COUNT_URL = 'http://preapi-internal.piaoquantv.com/flowpool/video/remainViewCount' # 计算完ROV通知后端接口地址 NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://videopre-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateRovScore' # 获取置顶视频列表接口地址 TOP_VIDEO_LIST_URL = 'http://speedpre.wx.com/longvideoapi/openapi/recommend/topVideoList' # 获取首页兜底视频json接口地址 BOTTOM_JSON_URL = 'http://speedpre.wx.com/longvideoapi/openapi/video/distribute/structure/video/list' # logs 上传oss 目标Bucket指定目录 OSS_FOLDER_LOGS = 'rov-offline/pre/logs/' # data 上传oss 目标Bucket指定目录 OSS_FOLDER_DATA = 'rov-offline/pre/data/' class ProductionConfig(BaseConfig): """生产环境配置""" # 报警内容 环境区分 ENV_TEXT = "生产环境" # 项目存放目录 PROJECT_PATH = '/data/rov-offline' # 线上环境redis地址 REDIS_INFO = { 'host': 'r-bp1fogs2mflr1ybfot.redis.rds.aliyuncs.com', 'port': 6379, 'password': 'Wqsd@2019', } # Hologres连接参数,服务器使用 HOLOGRES_INFO = { 'host': 'hgprecn-cn-7pp28y18c00c-cn-hangzhou-vpc.hologres.aliyuncs.com', 'port': 80, 'dbname': 'dssm', 'user': 'LTAI5tMPqPy9yboQAf1mBCCN', 'password': '4BEcOgxREOPq7t3A7EWkjciVULeQGj' } # 生产环境mysql地址 MYSQL_INFO = { 'host': 'rr-bp1x9785e8h5452bi157.mysql.rds.aliyuncs.com', 'port': 3306, 'user': 'wx2016_longvideo', 'password': 'wx2016_longvideoP@assword1234', 'db': 'longvideo', 'charset': 'utf8' } # Hologres视频状态存储表名 VIDEO_STATUS = 'longvideo.dwd_mdm_item_video_stat' # 从流量池获取视频接口地址 GET_VIDEOS_FROM_POOL_URL = 'http://api-internal.piaoquantv.com/flowpool/video/getAllVideo' # 获取视频在流量池中的剩余可分发数接口地址 GET_REMAIN_VIEW_COUNT_URL = 'http://api-internal.piaoquantv.com/flowpool/video/remainViewCount' # 计算完ROV通知后端接口地址 NOTIFY_BACKEND_UPDATE_ROV_SCORE_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/updateRovScore' # 获取置顶视频列表接口地址 TOP_VIDEO_LIST_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/recommend/topVideoList' # 获取首页兜底视频json接口地址 BOTTOM_JSON_URL = 'http://recommend-common-internal.piaoquantv.com/longvideoapi/openapi/video/distribute/structure/video/list' # logs 上传oss 目标Bucket指定目录 OSS_FOLDER_LOGS = 'rov-offline/pro/logs/' # data 上传oss 目标Bucket指定目录 OSS_FOLDER_DATA = 'rov-offline/pro/data/' def set_config(): # 获取环境变量 ROV_OFFLINE_ENV env = os.environ.get('ROV_OFFLINE_ENV') # env = 'dev' if env is None: log_.error('ENV ERROR: is None!') return if env == 'dev': return DevelopmentConfig(), env elif env == 'test': return TestConfig(), env elif env == 'pre': return PreProductionConfig(), env elif env == 'pro': return ProductionConfig(), env else: log_.error('ENV ERROR: is {}'.format(env)) return