TooY 2 years ago
parent
commit
18fdada33a
1 changed files with 50 additions and 22 deletions
  1. 50 22
      appmanage/api/service/manage.py

+ 50 - 22
appmanage/api/service/manage.py

@@ -15,8 +15,8 @@ from api.model.app import App
 from api.model.response import Response
 from api.model.response import Response
 from api.utils.common_log import myLogger
 from api.utils.common_log import myLogger
 from redis import Redis
 from redis import Redis
-from rq import Queue,Worker,Connection
-from rq.registry import StartedJobRegistry,FinishedJobRegistry,DeferredJobRegistry
+from rq import Queue, Worker, Connection
+from rq.registry import StartedJobRegistry, FinishedJobRegistry, DeferredJobRegistry
 
 
 # 指定 Redis 容器的主机名和端口
 # 指定 Redis 容器的主机名和端口
 redis_conn = Redis(host='websoft9-redis', port=6379)
 redis_conn = Redis(host='websoft9-redis', port=6379)
@@ -34,8 +34,9 @@ def get_my_app():
     output = shell_execute.execute_command_output_all(cmd)
     output = shell_execute.execute_command_output_all(cmd)
     if int(output["code"]) == 0:
     if int(output["code"]) == 0:
         output_list = json.loads(output["result"])
         output_list = json.loads(output["result"])
-        app_list, has_add = get_apps_from_compose(output_list)
-        list = get_apps_from_queue()
+        installed_list, has_add = get_apps_from_compose(output_list)
+        installing_list = get_apps_from_queue()
+        app_list = installed_list + installing_list
         ret = Response(code=const.RETURN_SUCCESS, message="The app query is successful.", data=app_list)
         ret = Response(code=const.RETURN_SUCCESS, message="The app query is successful.", data=app_list)
     ret = ret.dict()
     ret = ret.dict()
     return ret
     return ret
@@ -81,7 +82,10 @@ def get_app_detail(app_id):
 
 
 # 查询某个正在安装的app的 具体状态:waiting(等待安装)pulling(拉取镜像)initializing(初始化)running(正常运行)
 # 查询某个正在安装的app的 具体状态:waiting(等待安装)pulling(拉取镜像)initializing(初始化)running(正常运行)
 def install_app_process(app_id):
 def install_app_process(app_id):
-    ret = Response(code=const.RETURN_FAIL, message=" ",status="")
+    ret = {}
+    ret['code'] = const.RETURN_FAIL
+    ret['message'] = ""
+    ret['status'] = ""
     app_name = split_app_id(app_id)
     app_name = split_app_id(app_id)
     if docker.check_app_id(app_id):
     if docker.check_app_id(app_id):
         var_path = "/data/apps/" + app_name + "/variables.json"
         var_path = "/data/apps/" + app_name + "/variables.json"
@@ -89,13 +93,13 @@ def install_app_process(app_id):
         info, code = if_app_exits(app_id)
         info, code = if_app_exits(app_id)
         if code:
         if code:
             status = docker.get_process_perc(app_name, real_name)
             status = docker.get_process_perc(app_name, real_name)
-            ret.code = const.RETURN_SUCCESS
-            ret.message = "This app is installing."
-            ret.status = status
+            ret["code"] = const.RETURN_SUCCESS
+            ret['message'] = "This app is installing."
+            ret['status'] = percentage
         else:
         else:
-            ret.message = "This app is not currently installed."
+            ret['message'] = "This app is not currently installed."
     else:
     else:
-        ret.message = "AppID is not legal!"
+        ret['message'] = "AppID is not legal!"
 
 
     ret = ret.dict()
     ret = ret.dict()
     return ret
     return ret
@@ -109,11 +113,10 @@ def install_app(app_name, customer_app_name, app_version):
     if ret.code == const.RETURN_SUCCESS:
     if ret.code == const.RETURN_SUCCESS:
         ret.code, ret.message = prepare_app(app_name, customer_app_name)
         ret.code, ret.message = prepare_app(app_name, customer_app_name)
         if ret.code == const.RETURN_SUCCESS:
         if ret.code == const.RETURN_SUCCESS:
-
-            myLogger.info_logger("create job="+app_id)
+            myLogger.info_logger("create job=" + app_id)
             # 根据请求创建新作业
             # 根据请求创建新作业
-            new_job = q.enqueue(install_app_delay,customer_app_name,app_version,job_id=app_id)
-            ret.message = "The app is prepape to install, please check again in a few minutes."
+            new_job = q.enqueue(install_app_delay, customer_app_name, app_version, job_id=app_id)
+            ret.message = "The app is prepare to install, please check again in a few minutes."
     ret = ret.dict()
     ret = ret.dict()
     return ret
     return ret
 
 
@@ -240,8 +243,9 @@ def prepare_app(app_name, customer_app_name):
         code = const.RETURN_FAIL
         code = const.RETURN_FAIL
     return code, message
     return code, message
 
 
+
 def install_app_delay(customer_app_name, app_version):
 def install_app_delay(customer_app_name, app_version):
-    myLogger.info_logger("start job="+customer_app_name)
+    myLogger.info_logger("start job=" + customer_app_name)
     # modify env
     # modify env
     env_path = "/data/apps/" + customer_app_name + "/.env"
     env_path = "/data/apps/" + customer_app_name + "/.env"
     docker.modify_env(env_path, 'APP_NAME', customer_app_name)
     docker.modify_env(env_path, 'APP_NAME', customer_app_name)
@@ -252,6 +256,7 @@ def install_app_delay(customer_app_name, app_version):
     cmd = "cd /data/apps/" + customer_app_name + " && sudo docker compose pull && sudo docker compose up -d"
     cmd = "cd /data/apps/" + customer_app_name + " && sudo docker compose pull && sudo docker compose up -d"
     shell_execute.execute_command_output_all(cmd)
     shell_execute.execute_command_output_all(cmd)
 
 
+
 def if_app_exits(app_id):
 def if_app_exits(app_id):
     app_name = app_id.split('_')[1]
     app_name = app_id.split('_')[1]
     real_name = app_id.split('_')[0]
     real_name = app_id.split('_')[0]
@@ -268,13 +273,15 @@ def if_app_exits(app_id):
             if name == real_name:
             if name == real_name:
                 flag = True
                 flag = True
         elif real_name == app_name:
         elif real_name == app_name:
-             flag = True
+            flag = True
     myLogger.info_logger("APP info: " + info)
     myLogger.info_logger("APP info: " + info)
     return info, flag
     return info, flag
 
 
+
 def split_app_id(app_id):
 def split_app_id(app_id):
     return app_id.split("_")[1]
     return app_id.split("_")[1]
 
 
+
 def get_apps_from_compose(output_list):
 def get_apps_from_compose(output_list):
     ip_result = shell_execute.execute_command_output_all("curl ifconfig.me")
     ip_result = shell_execute.execute_command_output_all("curl ifconfig.me")
     ip = ip_result["result"]
     ip = ip_result["result"]
@@ -372,7 +379,6 @@ def check_if_official_app(var_path):
 
 
 
 
 def get_apps_from_queue():
 def get_apps_from_queue():
-    
     # 获取 StartedJobRegistry 实例
     # 获取 StartedJobRegistry 实例
     registry = StartedJobRegistry(queue=q)
     registry = StartedJobRegistry(queue=q)
     finish = FinishedJobRegistry(queue=q)
     finish = FinishedJobRegistry(queue=q)
@@ -381,11 +387,32 @@ def get_apps_from_queue():
     run_job_ids = registry.get_job_ids()
     run_job_ids = registry.get_job_ids()
     finish_job_ids = finish.get_job_ids()
     finish_job_ids = finish.get_job_ids()
     wait_job_ids = deferred.get_job_ids()
     wait_job_ids = deferred.get_job_ids()
-    myLogger.info_logger(wait_job_ids)
-    myLogger.info_logger(run_job_ids)
-    myLogger.info_logger(finish_job_ids)
-
-    return wait_job_ids
+    myLogger.info_logger("waiting jobs' ID: " + wait_job_ids)
+    myLogger.info_logger("Running jobs' ID: " + run_job_ids)
+    myLogger.info_logger("Finished jobs' ID: " + finish_job_ids)
+    installing_list = []
+    for id in run_job_ids:
+        app = get_installing_app(id, const.APP_READY, 'installing')
+        installing_list.append(app)
+    for id in wait_job_ids:
+        app = get_installing_app(id, const.APP_WAIT, 'waiting')
+        installing_list.append(app)
+
+    return installing_list
+
+
+def get_installing_app(id, status_code, status):
+    real_name = id.split('_')[0]
+    app_name = id.split('_')[1]
+    var_path = "/data/apps/" + app_name + "/variables.json"
+    trade_mark = docker.read_var(var_path, 'trademark')
+    real_name = docker.read_var(var_path, 'name')
+    image_url = get_Image_url(real_name)
+    app = App(app_id=real_name + "_" + app_name, name=real_name, customer_name=app_name,
+              status_code=status_code, status=status, port=0, volume="",
+              url="", image_url=image_url, admin_url="", trade_mark=trade_mark, user_name="",
+              password="", official_app=True)
+    return app
 
 
 
 
 def get_Image_url(app_name):
 def get_Image_url(app_name):
@@ -403,6 +430,7 @@ def get_url(app_name, easy_url):
         url = easy_url
         url = easy_url
     return url
     return url
 
 
+
 def get_admin_url(app_name, url):
 def get_admin_url(app_name, url):
     admin_url = ""
     admin_url = ""
     if app_name == "wordpress":
     if app_name == "wordpress":