فهرست منبع

Merge branch 'master' of https://git.yishihui.com/algorithm/rov-server

baichongyang 3 سال پیش
والد
کامیت
e037490bb0
6فایلهای تغییر یافته به همراه55 افزوده شده و 15 حذف شده
  1. 0 1
      .gitignore
  2. 3 1
      app.py
  3. 33 5
      config.py
  4. 5 4
      requirements.txt
  5. 2 2
      video_rank.py
  6. 12 2
      video_recall.py

+ 0 - 1
.gitignore

@@ -59,4 +59,3 @@ docs/_build/
 target/
 
 .idea/
-

+ 3 - 1
app.py

@@ -16,7 +16,9 @@ import ast
 from gevent.pywsgi import WSGIServer
 from multiprocessing import cpu_count, Process
 from utils import update_video_w_h_rate
-#from werkzeug.middleware.profiler import ProfilerMiddleware
+# from werkzeug.middleware.profiler import ProfilerMiddleware
+
+
 app = Flask(__name__)
 #app.wsgi_app = ProfilerMiddleware(app.wsgi_app)
 log_ = Log()

+ 33 - 5
config.py

@@ -1,3 +1,8 @@
+import os
+from log import Log
+log_ = Log()
+
+
 class BaseConfig(object):
     # 产品标识
     APP_TYPE = {
@@ -81,6 +86,9 @@ class BaseConfig(object):
     ROV_UPDATE_H = 6
     ROV_UPDATE_MINUTE = 30
 
+    # 短视频召回池更新时间 每个小时的15分更新成功
+    ROV_UPDATE_MINUTE_6 = 15
+
     # 置顶视频区域 为 全部 的code
     ALL_AREA_CODE = '000000'
 
@@ -92,7 +100,9 @@ class BaseConfig(object):
 
 
 class DevelopmentConfig(BaseConfig):
-    """测试环境配置"""
+    """开发环境配置"""
+    # 报警内容 环境区分
+    ENV_TEXT = "开发环境"
     # 测试环境redis地址
     REDIS_INFO = {
         'host': 'r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com',
@@ -132,6 +142,8 @@ class DevelopmentConfig(BaseConfig):
 
 class TestConfig(BaseConfig):
     """测试环境配置"""
+    # 报警内容 环境区分
+    ENV_TEXT = "测试环境"
     # 测试环境redis地址
     REDIS_INFO = {
         'host': 'r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com',
@@ -171,6 +183,8 @@ class TestConfig(BaseConfig):
 
 class PreProductionConfig(BaseConfig):
     """预发布环境配置"""
+    # 报警内容 环境区分
+    ENV_TEXT = "预发布环境"
     # 线上环境redis地址
     REDIS_INFO = {
         'host': 'r-bp1fogs2mflr1ybfot.redis.rds.aliyuncs.com',
@@ -210,6 +224,8 @@ class PreProductionConfig(BaseConfig):
 
 class ProductionConfig(BaseConfig):
     """生产环境配置"""
+    # 报警内容 环境区分
+    ENV_TEXT = "生产环境"
     # 线上环境redis地址
     REDIS_INFO = {
         'host': 'r-bp1fogs2mflr1ybfot.redis.rds.aliyuncs.com',
@@ -248,7 +264,19 @@ class ProductionConfig(BaseConfig):
 
 
 def set_config():
-    # return DevelopmentConfig()
-    # return TestConfig()
-    # return PreProductionConfig()
-    return ProductionConfig()
+    # 获取环境变量 ROV_SERVER_ENV
+    env = os.environ.get('ROV_SERVER_ENV')
+    if env is None:
+        log_.error('ENV ERROR: is None!')
+        return
+    if env == 'dev':
+        return DevelopmentConfig()
+    elif env == 'test':
+        return TestConfig()
+    elif env == 'pre':
+        return PreProductionConfig()
+    elif env == 'pro':
+        return ProductionConfig()
+    else:
+        log_.error('ENV ERROR: is {}'.format(env))
+        return

+ 5 - 4
requirements.txt

@@ -1,8 +1,9 @@
+numpy==1.19.2
+requests==2.24.0
 PyMySQL==1.0.2
+apache_skywalking==0.7.0
+Flask==1.1.2
 gevent==20.9.0
 redis==3.5.3
-requests==2.24.0
 psycopg2_binary==2.9.1
-numpy==1.19.2
-Flask==1.1.2
-psycopg2==2.9.2
+psycopg2==2.9.3

+ 2 - 2
video_rank.py

@@ -106,8 +106,8 @@ def bottom_strategy(size, app_type, ab_code):
     redis_helper = RedisHelper()
     data = redis_helper.get_data_zset_with_index(key_name=key_name, start=0, end=1000)
     if not data:
-        log_.info('生产环境 —— ROV推荐进入了二次兜底, data = {}'.format(data))
-        send_msg_to_feishu('生产环境 —— ROV推荐进入了二次兜底,请查看是否有数据更新失败问题。')
+        log_.info('{} —— ROV推荐进入了二次兜底, data = {}'.format(config_.ENV_TEXT, data))
+        send_msg_to_feishu('{} —— ROV推荐进入了二次兜底,请查看是否有数据更新失败问题。'.format(config_.ENV_TEXT))
         # 二次兜底
         bottom_data = bottom_strategy_last(size=size, app_type=app_type, ab_code=ab_code)
         return bottom_data

+ 12 - 2
video_recall.py

@@ -280,7 +280,17 @@ class PoolRecall(object):
                 if self.redis_helper.key_exists(key_name):
                     return key_name, redis_date
                 else:
-                    key_name = '{}{}.{}'.format(config_.RECALL_KEY_NAME_PREFIX_APP_TYPE, self.app_type, redis_date - 1)
+                    if redis_date == 0:
+                        key_name = '{}{}.{}'.format(config_.RECALL_KEY_NAME_PREFIX_APP_TYPE, self.app_type, 23)
+                    else:
+                        key_name = '{}{}.{}'.format(config_.RECALL_KEY_NAME_PREFIX_APP_TYPE, self.app_type,
+                                                    redis_date - 1)
+                    # 判断当前时间是否晚于数据正常更新时间,发送消息到飞书
+                    now_m = datetime.now().minute
+                    feishu_text = '{} —— appType = {}, h = {} 数据未按时更新,请及时查看解决。'.format(
+                        config_.ENV_TEXT, self.app_type, redis_date)
+                    if now_m > config_.ROV_UPDATE_MINUTE_6:
+                        send_msg_to_feishu(feishu_text)
                     return key_name, redis_date - 1
                 # 其他
             else:
@@ -297,7 +307,7 @@ class PoolRecall(object):
                     # 判断当前时间是否晚于rov召回池更新时间 + 1h,发送消息到飞书
                     now_h = datetime.now().hour
                     now_m = datetime.now().minute
-                    feishu_text = '生产环境 —— 今日ROV召回池数据未按时更新,请及时查看解决。'
+                    feishu_text = '{} —— 今日ROV召回池数据未按时更新,请及时查看解决。'.format(config_.ENV_TEXT)
                     if now_h == config_.ROV_UPDATE_H + 1 and now_m > config_.ROV_UPDATE_MINUTE:
                         send_msg_to_feishu(feishu_text)
                     elif now_h > config_.ROV_UPDATE_H + 2: