Browse Source

app manage: add log

TooY 2 years ago
parent
commit
c50ce5e545

+ 41 - 0
appmanage/api/utils/common_log.py

@@ -0,0 +1,41 @@
+import logging
+import os
+from logging import handlers
+
+class MyLogging():
+    # init logging
+    def __init__(self):
+        # the file of log
+        logPath = '/data/apps/appmanage/logs/'
+        if not os.path.exists(logPath):
+            os.makedirs(logPath)
+        logName = 'app_manage_log.log'
+        logFile = logPath + logName
+        formatter = logging.Formatter('%(asctime)s %(levelname)s:  %(message)s')
+        # handler
+        time_rotating_file_handler = handlers.TimedRotatingFileHandler(filename=logFile, when='D', encoding='utf-8')
+        time_rotating_file_handler.setLevel(logging.DEBUG)
+        time_rotating_file_handler.setFormatter(formatter)
+        # config
+        logging.basicConfig(
+            level= logging.DEBUG,
+            handlers= [time_rotating_file_handler],
+            datefmt='%Y-%m-%d %H:%M:%S',
+            format='%(asctime)s %(levelname)s:  %(message)s'
+        )
+
+    def info_logger(self, content):
+        logging.info(content)
+
+    def error_logger(self, content):
+        logging.error(content)
+
+    def debug_logger(self, content):
+        logging.debug(content)
+
+    def warning_logger(self, content):
+        logging.warning(content)
+
+
+myLogger = MyLogging()
+

+ 11 - 5
appmanage/api/utils/docker.py

@@ -6,6 +6,7 @@ import psutil as p
 from dotenv import load_dotenv, find_dotenv
 from dotenv import load_dotenv, find_dotenv
 import dotenv
 import dotenv
 from pathlib import Path
 from pathlib import Path
+from api.utils.common_log import myLogger
 
 
 def get_process_perc(app_name, real_name):
 def get_process_perc(app_name, real_name):
     
     
@@ -28,6 +29,7 @@ def get_process_perc(app_name, real_name):
     return process_now
     return process_now
 
 
 def check_vm_resource(app_name):
 def check_vm_resource(app_name):
+    myLogger.info_logger("Checking virtual memory resource ...")
     cpu_count = p.cpu_count()
     cpu_count = p.cpu_count()
     mem = p.virtual_memory()
     mem = p.virtual_memory()
     mem_total = float(mem.total) / 1024 / 1024 / 1024
     mem_total = float(mem.total) / 1024 / 1024 / 1024
@@ -52,23 +54,24 @@ def check_vm_resource(app_name):
 
 
 def check_app_directory(app_name):
 def check_app_directory(app_name):
     # websoft9's support applist
     # websoft9's support applist
-    print("checking dir...")
+    myLogger.info_logger("Checking dir...")
     path = "/data/apps/"+app_name
     path = "/data/apps/"+app_name
     isexsits = os.path.exists(path)
     isexsits = os.path.exists(path)
     return isexsits
     return isexsits
 
 
 def check_app_compose(app_name):
 def check_app_compose(app_name):
-    print("checking port...")
+    myLogger.info_logger("Checking port...")
     path = "/data/apps/" + app_name + "/.env"
     path = "/data/apps/" + app_name + "/.env"
     port_dic = read_env(path, "APP_.*_PORT")
     port_dic = read_env(path, "APP_.*_PORT")
     #1.判断/data/apps/app_name/.env中的port是否占用,没有被占用,方法结束(network.py的get_start_port方法)
     #1.判断/data/apps/app_name/.env中的port是否占用,没有被占用,方法结束(network.py的get_start_port方法)
     for port_name in port_dic:
     for port_name in port_dic:
         port_value = network.get_start_port(port_dic[port_name])
         port_value = network.get_start_port(port_dic[port_name])
         modify_env(path, port_name, port_value)
         modify_env(path, port_name, port_value)
-    print("port check complete")
+    myLogger.info_logger("Port check complete")
     return
     return
 
 
 def read_env(path, key):
 def read_env(path, key):
+    myLogger.info_logger("Read " + path)
     output = shell_execute.execute_command_output_all("cat " + path + "|grep "+ key)
     output = shell_execute.execute_command_output_all("cat " + path + "|grep "+ key)
     code = output["code"]
     code = output["code"]
     env_dic = {}
     env_dic = {}
@@ -80,6 +83,7 @@ def read_env(path, key):
     return env_dic
     return env_dic
 
 
 def modify_env(path, env_name, value):
 def modify_env(path, env_name, value):
+    myLogger.info_logger("Modify " + path + "...")
     file_data = ""
     file_data = ""
     with open(path, "r", encoding="utf-8") as f:
     with open(path, "r", encoding="utf-8") as f:
         for line in f:
         for line in f:
@@ -88,18 +92,20 @@ def modify_env(path, env_name, value):
                 line = line.replace(line, env_name + "=" + value+"\n")
                 line = line.replace(line, env_name + "=" + value+"\n")
             file_data += line
             file_data += line
     with open(path, "w", encoding="utf-8") as f:
     with open(path, "w", encoding="utf-8") as f:
+        myLogger.info_logger("Modify " + path + ": Change " + env_name + " to " + value)
         f.write(file_data)
         f.write(file_data)
 
 
 def read_var(app_name, var_name):
 def read_var(app_name, var_name):
     value = "-"
     value = "-"
     var_path = "/data/apps/" + app_name + "/variables.json"
     var_path = "/data/apps/" + app_name + "/variables.json"
+    myLogger.info_logger("Read " + var_path)
     try:
     try:
         f = open(var_path, 'r', encoding='utf-8')
         f = open(var_path, 'r', encoding='utf-8')
         var = json.load(f)
         var = json.load(f)
         try:
         try:
             value = var[var_name]
             value = var[var_name]
         except KeyError:
         except KeyError:
-            pass
+            myLogger.warning_logger("Read " + var_path + ": No key " + var_name)
     except FileNotFoundError:
     except FileNotFoundError:
-        pass
+        myLogger.warning_logger(var_path + " not found")
     return value
     return value

+ 7 - 5
appmanage/api/utils/shell_execute.py

@@ -1,5 +1,6 @@
 #!/usr/bin/python3
 #!/usr/bin/python3
 import os, io, sys, platform, shutil, time, subprocess, json, datetime
 import os, io, sys, platform, shutil, time, subprocess, json, datetime
+from api.utils.common_log import myLogger
 
 
 # 执行Shell命令,处理报错和超时,并有返回值
 # 执行Shell命令,处理报错和超时,并有返回值
 def execute_Command(cmd_str, timeout=60, timeinner=3, retry=True):
 def execute_Command(cmd_str, timeout=60, timeinner=3, retry=True):
@@ -55,16 +56,17 @@ def execute_command_output(cmd_str):
 # cmd_str: 执行的command命令 times:如果不成功的重复次数
 # cmd_str: 执行的command命令 times:如果不成功的重复次数
 def execute_command_output_all(cmd_str, max_time = 3):
 def execute_command_output_all(cmd_str, max_time = 3):
     
     
-    print("start to excute cmd: " + cmd_str)
-    excutetime = 0
-    while excutetime < max_time:
+    myLogger.info_logger("Start to execute cmd: " + cmd_str)
+    execute_time = 0
+    while execute_time < max_time:
         process = subprocess.run(cmd_str, shell=True, stdout=subprocess.PIPE, universal_newlines=True)
         process = subprocess.run(cmd_str, shell=True, stdout=subprocess.PIPE, universal_newlines=True)
         if process.returncode == 0:
         if process.returncode == 0:
             return {"code": "0", "result": process.stdout,}
             return {"code": "0", "result": process.stdout,}
         else:
         else:
-            excutetime = excutetime + 1    
+            execute_time = execute_time + 1
 
 
-    return {"code": "-1", "result": "command excute failed, please check your command!"}
+    myLogger.warning_logger("Command execute failed   Commend: " + cmd_str)
+    return {"code": "-1", "result": "command execute failed, please check your command!"}
 
 
 def convert_command(cmd_str):
 def convert_command(cmd_str):
     convert_cmd = ""
     convert_cmd = ""

+ 8 - 0
appmanage/api/v1/routers/apps.py

@@ -8,40 +8,48 @@ import os, io, sys, platform, shutil, time, subprocess, json, datetime
 from api.model.app import App
 from api.model.app import App
 from api.service import manage
 from api.service import manage
 from api.utils import shell_execute
 from api.utils import shell_execute
+from api.utils.common_log import myLogger
 
 
 router = APIRouter()
 router = APIRouter()
 
 
 @router.api_route("", methods=["GET", "POST"])
 @router.api_route("", methods=["GET", "POST"])
 def list_my_apps():
 def list_my_apps():
+    myLogger.info_logger("Receive request: /api/v1/apps")
     list = manage.get_my_app()
     list = manage.get_my_app()
     return JSONResponse(content=list)
     return JSONResponse(content=list)
 
 
 @router.api_route("/install", methods=["GET", "POST"])
 @router.api_route("/install", methods=["GET", "POST"])
 def install_app(app_name: Optional[str] = None, customer_app_name: Optional[str] = None, app_version: Optional[str] = None):
 def install_app(app_name: Optional[str] = None, customer_app_name: Optional[str] = None, app_version: Optional[str] = None):
+    myLogger.info_logger("Receive request: /api/v1/apps/install")
     ret = manage.install_app(app_name, customer_app_name, app_version)
     ret = manage.install_app(app_name, customer_app_name, app_version)
     return JSONResponse(content=ret)
     return JSONResponse(content=ret)
 
 
 @router.api_route("/process", methods=["GET", "POST"])
 @router.api_route("/process", methods=["GET", "POST"])
 def install_app_process(app_id: Optional[str] = None):
 def install_app_process(app_id: Optional[str] = None):
+    myLogger.info_logger("Receive request: /api/v1/apps/process")
     ret = manage.install_app_process(app_id)
     ret = manage.install_app_process(app_id)
     return JSONResponse(content=ret)
     return JSONResponse(content=ret)
 
 
 @router.api_route("/start", methods=["GET", "POST"])
 @router.api_route("/start", methods=["GET", "POST"])
 def start_app(app_id: Optional[str] = None):
 def start_app(app_id: Optional[str] = None):
+    myLogger.info_logger("Receive request: /api/v1/apps/start")
     ret = manage.start_app(app_id)
     ret = manage.start_app(app_id)
     return JSONResponse(content=ret)
     return JSONResponse(content=ret)
 
 
 @router.api_route("/stop", methods=["GET", "POST"])
 @router.api_route("/stop", methods=["GET", "POST"])
 def stop_app(app_id: Optional[str] = None):
 def stop_app(app_id: Optional[str] = None):
+    myLogger.info_logger("Receive request: /api/v1/apps/stop")
     ret = manage.stop_app(app_id)
     ret = manage.stop_app(app_id)
     return JSONResponse(content=ret)
     return JSONResponse(content=ret)
 
 
 @router.api_route("/restart", methods=["GET", "POST"])
 @router.api_route("/restart", methods=["GET", "POST"])
 def restart_app(app_id: Optional[str] = None):
 def restart_app(app_id: Optional[str] = None):
+    myLogger.info_logger("Receive request: /api/v1/apps/restart")
     ret = manage.restart(app_id)
     ret = manage.restart(app_id)
     return JSONResponse(content=ret)
     return JSONResponse(content=ret)
 
 
 @router.api_route("/uninstall", methods=["GET", "POST"])
 @router.api_route("/uninstall", methods=["GET", "POST"])
 def uninstall_app(app_id: Optional[str] = None):
 def uninstall_app(app_id: Optional[str] = None):
+    myLogger.info_logger("Receive request: /api/v1/apps/uninstall")
     ret = manage.uninstall_app(app_id)
     ret = manage.uninstall_app(app_id)
     return JSONResponse(content=ret)
     return JSONResponse(content=ret)

+ 2 - 6
appmanage/main.py

@@ -1,15 +1,11 @@
-import logging
+from api.utils.common_log import myLogger
 
 
 import api.v1.api as api_router_v1
 import api.v1.api as api_router_v1
 import uvicorn
 import uvicorn
 from fastapi import FastAPI
 from fastapi import FastAPI
 from fastapi.middleware.cors import CORSMiddleware
 from fastapi.middleware.cors import CORSMiddleware
 
 
-logging_format = '[%(asctime)s][%(levelname)s] %(message)s'
-logging.basicConfig(format=logging_format, level=logging.DEBUG)
-logging.getLogger().setLevel(level=logging.DEBUG)
-logging.info("Starting server")
-
+myLogger.info_logger("Starting server")
 
 
 def get_app():
 def get_app():
     app = FastAPI()
     app = FastAPI()