2023-02-21 14:21:53 +08:00
|
|
|
|
from typing import Optional, List
|
|
|
|
|
|
2023-04-12 17:11:53 +08:00
|
|
|
|
from fastapi import APIRouter, status, Depends, Query, Request
|
2023-04-02 21:51:14 +08:00
|
|
|
|
from pydantic import BaseModel, Field
|
2023-02-21 14:21:53 +08:00
|
|
|
|
from starlette.responses import JSONResponse
|
2023-02-22 17:19:27 +08:00
|
|
|
|
import os, io, sys, platform, shutil, time, subprocess, json, datetime
|
2023-02-21 14:21:53 +08:00
|
|
|
|
|
|
|
|
|
from api.model.app import App
|
2023-04-02 21:51:14 +08:00
|
|
|
|
from api.model.response import Response
|
2023-02-21 14:21:53 +08:00
|
|
|
|
from api.service import manage
|
2023-04-14 11:50:18 +08:00
|
|
|
|
from api.utils import shell_execute, const
|
2023-03-15 17:55:05 +08:00
|
|
|
|
from api.utils.common_log import myLogger
|
2023-04-14 10:51:29 +08:00
|
|
|
|
from api.exception.command_exception import CommandException
|
2023-02-21 14:21:53 +08:00
|
|
|
|
|
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
2023-04-07 09:52:22 +08:00
|
|
|
|
rd1 = "code:请求操作内部响应码(0:成功 -1:失败)\n\nmessage:请求操作结果描述\n\ndata:返回请求结果内容\n\n" \
|
2023-04-06 09:18:30 +08:00
|
|
|
|
"[\n\n" \
|
|
|
|
|
"  app_id:应用ID,\n\n" \
|
|
|
|
|
"  name:应用名,\n\n" \
|
|
|
|
|
"  customer_name:自定义应用名,\n\n" \
|
|
|
|
|
"  trade_mark:应用商标,\n\n" \
|
|
|
|
|
"  status_code:应用运行状态码,\n\n"
|
|
|
|
|
|
|
|
|
|
status = '  status:应用运行状态,\n\n'
|
|
|
|
|
status_detail = "  status:应用运行状态,(running:正常运行,stop:停止,error:错误)\n\n"
|
|
|
|
|
status_list = "  status:应用运行状态,(waiting:等待安装,installing:安装中,running:正常运行,stop:停止,error:错误)\n\n"
|
|
|
|
|
|
|
|
|
|
rd2 = "  port:应用端口,\n\n" \
|
|
|
|
|
"  volume:yml文件路径,\n\n" \
|
|
|
|
|
"  url:应用网址,\n\n" \
|
|
|
|
|
"  image_url:图片路径,\n\n" \
|
|
|
|
|
"  admin_url:管理员网址,\n\n" \
|
|
|
|
|
"  user_name:用户名,\n\n" \
|
|
|
|
|
"  password:密码,\n\n" \
|
|
|
|
|
"  official_app:是否为官方应用\n\n" \
|
|
|
|
|
"]"
|
|
|
|
|
rd = rd1 + status + rd2
|
|
|
|
|
rd_detail = rd1 + status_detail + rd2
|
|
|
|
|
rd_list = rd1 + status_list + rd2
|
2023-04-07 09:52:22 +08:00
|
|
|
|
rd_process = "code:请求操作内部响应码(0:成功 -1:失败)\n\nmessage:请求操作结果描述\n\nstatus:应用运行状态," \
|
|
|
|
|
"(pulling:拉取镜像,creating:容器启动,inting:容器初始化,running:正常运行)"
|
|
|
|
|
rd_two = "code:请求操作内部响应码(0:成功 -1:失败)\n\nmessage:请求操作结果描述\n\ndata:None"
|
|
|
|
|
|
2023-04-06 09:18:30 +08:00
|
|
|
|
|
2023-04-14 09:27:08 +08:00
|
|
|
|
@router.api_route("/AppStatus", methods=["GET", "POST"], summary="获取指定APP的信息",
|
2023-04-06 09:18:30 +08:00
|
|
|
|
response_description=rd_detail,
|
2023-04-02 21:51:14 +08:00
|
|
|
|
response_model=Response)
|
2023-04-16 19:49:10 +08:00
|
|
|
|
def AppStatus(request: Request,app_id: Optional[str] = Query(default=None, description="应用ID")):
|
2023-04-14 19:42:42 +08:00
|
|
|
|
try:
|
|
|
|
|
myLogger.info_logger("Receive request: /AppStatus")
|
2023-04-16 19:49:10 +08:00
|
|
|
|
get_headers(request)
|
2023-04-14 19:42:42 +08:00
|
|
|
|
ret = {}
|
2023-04-15 07:43:13 +08:00
|
|
|
|
ret['ResponseData'] = manage.get_app_status(app_id)
|
2023-04-14 19:42:42 +08:00
|
|
|
|
except CommandException as ce:
|
|
|
|
|
ret = {}
|
|
|
|
|
ret['ResponseData'] = None
|
2023-04-17 14:36:03 +08:00
|
|
|
|
ret['Error'] = manage.get_error_info(ce.code, ce.message, ce.detail)
|
2023-04-14 19:42:42 +08:00
|
|
|
|
except Exception as e:
|
|
|
|
|
ret = {}
|
|
|
|
|
ret['ResponseData'] = None
|
|
|
|
|
ret['Error'] = manage.get_error_info(const.ERROR_SERVER_SYSTEM, "system original error", str(e))
|
|
|
|
|
return JSONResponse(ret)
|
2023-03-16 14:09:48 +08:00
|
|
|
|
|
2023-04-02 21:51:14 +08:00
|
|
|
|
|
2023-04-14 09:27:08 +08:00
|
|
|
|
@router.api_route("/AppList", methods=["GET", "POST"], summary="获取所有APP的信息", response_description=rd_list,
|
2023-04-06 09:18:30 +08:00
|
|
|
|
response_model=Response)
|
2023-04-14 19:42:42 +08:00
|
|
|
|
def AppList(request: Request, app_id: Optional[str] = Query(default=None, description="应用ID")):
|
2023-04-14 14:36:37 +08:00
|
|
|
|
try:
|
|
|
|
|
myLogger.info_logger("Receive request: /AppList")
|
|
|
|
|
get_headers(request)
|
2023-04-16 23:26:20 +08:00
|
|
|
|
app_list = manage.get_my_app(app_id)
|
|
|
|
|
myLogger.info_logger(len(app_list))
|
2023-04-16 23:37:51 +08:00
|
|
|
|
response = JSONResponse({'ResponseData': app_list})
|
2023-04-14 14:36:37 +08:00
|
|
|
|
except CommandException as ce:
|
|
|
|
|
ret = {}
|
|
|
|
|
ret['ResponseData'] = None
|
2023-04-14 19:42:42 +08:00
|
|
|
|
ret['Error'] = manage.get_error_info(ce.code, ce.message, str(ce))
|
2023-04-16 23:32:29 +08:00
|
|
|
|
response = JSONResponse(content=ret)
|
2023-04-14 14:36:37 +08:00
|
|
|
|
except Exception as e:
|
|
|
|
|
ret = {}
|
|
|
|
|
ret['ResponseData'] = None
|
2023-04-14 19:42:42 +08:00
|
|
|
|
ret['Error'] = manage.get_error_info(const.ERROR_SERVER_SYSTEM, "system original error", str(e))
|
2023-04-16 23:32:29 +08:00
|
|
|
|
response = JSONResponse(content=ret)
|
|
|
|
|
return response
|
2023-02-21 14:21:53 +08:00
|
|
|
|
|
2023-04-02 21:51:14 +08:00
|
|
|
|
|
2023-04-14 09:27:08 +08:00
|
|
|
|
@router.api_route("/AppInstall", methods=["GET", "POST"], summary="安装APP", response_description=rd_two,
|
2023-04-02 21:51:14 +08:00
|
|
|
|
response_model=Response)
|
2023-04-14 10:51:29 +08:00
|
|
|
|
def AppInstall(request: Request, app_name: Optional[str] = Query(default=None, description="应用名"),
|
2023-04-14 16:41:43 +08:00
|
|
|
|
customer_name: Optional[str] = Query(default=None, description="应用自定义名字"),
|
2023-04-12 17:11:53 +08:00
|
|
|
|
app_version: Optional[str] = Query(default=None, description="应用版本")):
|
2023-04-14 10:51:29 +08:00
|
|
|
|
try:
|
|
|
|
|
myLogger.info_logger("Receive request: /AppInstall")
|
2023-04-14 10:53:07 +08:00
|
|
|
|
get_headers(request)
|
2023-04-14 16:41:43 +08:00
|
|
|
|
ret = manage.install_app(app_name, customer_name, app_version)
|
2023-04-14 10:51:29 +08:00
|
|
|
|
except CommandException as ce:
|
2023-04-16 14:17:57 +08:00
|
|
|
|
|
2023-04-14 10:51:29 +08:00
|
|
|
|
ret = {}
|
2023-04-16 14:23:54 +08:00
|
|
|
|
ret['ResponseData'] = {}
|
2023-04-14 16:41:43 +08:00
|
|
|
|
ret['ResponseData']['AppID'] = app_name + "_" + customer_name
|
2023-04-14 19:42:42 +08:00
|
|
|
|
ret['Error'] = manage.get_error_info(ce.code, ce.message, ce.detail)
|
2023-04-16 14:03:29 +08:00
|
|
|
|
myLogger.error_logger("Ready for return fail message")
|
2023-04-14 10:51:29 +08:00
|
|
|
|
except Exception as e:
|
2023-04-16 13:36:46 +08:00
|
|
|
|
myLogger.error_logger(str(e))
|
2023-04-14 10:51:29 +08:00
|
|
|
|
ret = {}
|
2023-04-14 16:41:43 +08:00
|
|
|
|
ret['ResponseData']['AppID'] = app_name + "_" + customer_name
|
2023-04-14 19:42:42 +08:00
|
|
|
|
ret['Error'] = manage.get_error_info(const.ERROR_SERVER_SYSTEM, "system original error", str(e))
|
2023-04-16 13:57:32 +08:00
|
|
|
|
|
|
|
|
|
myLogger.info_logger(ret)
|
2023-04-14 10:51:29 +08:00
|
|
|
|
return JSONResponse(content=ret)
|
2023-04-02 21:51:14 +08:00
|
|
|
|
|
2023-04-14 19:42:42 +08:00
|
|
|
|
|
2023-04-14 09:27:08 +08:00
|
|
|
|
@router.api_route("/AppStart", methods=["GET", "POST"], summary="启动APP", response_description=rd_two,
|
2023-04-12 17:11:53 +08:00
|
|
|
|
response_model=Response)
|
2023-04-16 19:49:10 +08:00
|
|
|
|
def AppStart(request: Request,app_id: Optional[str] = Query(default=None, description="应用ID")):
|
2023-04-15 16:39:33 +08:00
|
|
|
|
try:
|
|
|
|
|
myLogger.info_logger("Receive request: /AppStart")
|
2023-04-16 18:59:09 +08:00
|
|
|
|
get_headers(request)
|
2023-04-15 16:39:33 +08:00
|
|
|
|
ret = {}
|
2023-04-16 18:59:09 +08:00
|
|
|
|
ret['ResponseData'] = {}
|
|
|
|
|
manage.start_app(app_id)
|
2023-04-16 19:25:56 +08:00
|
|
|
|
ret['ResponseData']['AppID'] = app_id
|
2023-04-15 16:39:33 +08:00
|
|
|
|
except CommandException as ce:
|
|
|
|
|
ret = {}
|
2023-04-16 19:12:44 +08:00
|
|
|
|
ret['ResponseData'] = {}
|
2023-04-16 19:25:56 +08:00
|
|
|
|
ret['ResponseData']['AppID'] = app_id
|
2023-04-15 16:39:33 +08:00
|
|
|
|
ret['Error'] = manage.get_error_info(ce.code, ce.message, ce.detail)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
ret = {}
|
2023-04-16 19:12:44 +08:00
|
|
|
|
ret['ResponseData'] = {}
|
2023-04-16 19:25:56 +08:00
|
|
|
|
ret['ResponseData']['AppID'] = app_id
|
2023-04-15 16:39:33 +08:00
|
|
|
|
ret['Error'] = manage.get_error_info(const.ERROR_SERVER_SYSTEM, "system original error", str(e))
|
2023-02-28 17:44:04 +08:00
|
|
|
|
return JSONResponse(content=ret)
|
2023-02-25 11:37:39 +08:00
|
|
|
|
|
2023-04-14 19:42:42 +08:00
|
|
|
|
|
2023-04-14 09:27:08 +08:00
|
|
|
|
@router.api_route("/AppStop", methods=["GET", "POST"], summary="停止APP", response_description=rd_two,
|
2023-04-12 17:11:53 +08:00
|
|
|
|
response_model=Response)
|
2023-04-16 19:49:10 +08:00
|
|
|
|
def AppStop(request: Request,app_id: Optional[str] = Query(default=None, description="应用ID")):
|
2023-04-15 16:39:33 +08:00
|
|
|
|
try:
|
|
|
|
|
myLogger.info_logger("Receive request: /AppStop")
|
2023-04-16 19:49:10 +08:00
|
|
|
|
get_headers(request)
|
2023-04-15 16:39:33 +08:00
|
|
|
|
ret = {}
|
2023-04-16 18:59:09 +08:00
|
|
|
|
ret['ResponseData'] = {}
|
|
|
|
|
manage.stop_app(app_id)
|
2023-04-16 19:25:56 +08:00
|
|
|
|
ret['ResponseData']['AppID'] = app_id
|
2023-04-15 16:39:33 +08:00
|
|
|
|
except CommandException as ce:
|
|
|
|
|
ret = {}
|
2023-04-16 19:12:44 +08:00
|
|
|
|
ret['ResponseData'] = {}
|
2023-04-16 19:25:56 +08:00
|
|
|
|
ret['ResponseData']['AppID'] = app_id
|
2023-04-15 16:39:33 +08:00
|
|
|
|
ret['Error'] = manage.get_error_info(ce.code, ce.message, ce.detail)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
ret = {}
|
2023-04-16 19:25:56 +08:00
|
|
|
|
ret['ResponseData'] = {}
|
|
|
|
|
ret['ResponseData']['AppID'] = app_id
|
2023-04-15 16:39:33 +08:00
|
|
|
|
ret['Error'] = manage.get_error_info(const.ERROR_SERVER_SYSTEM, "system original error", str(e))
|
2023-02-28 17:44:04 +08:00
|
|
|
|
return JSONResponse(content=ret)
|
2023-02-25 11:37:39 +08:00
|
|
|
|
|
2023-04-02 21:51:14 +08:00
|
|
|
|
|
2023-04-14 09:27:08 +08:00
|
|
|
|
@router.api_route("/AppRestart", methods=["GET", "POST"], summary="重启APP", response_description=rd_two,
|
2023-04-02 21:51:14 +08:00
|
|
|
|
response_model=Response)
|
2023-04-16 19:49:10 +08:00
|
|
|
|
def AppRestart(request: Request,app_id: Optional[str] = Query(default=None, description="应用ID")):
|
2023-04-15 16:39:33 +08:00
|
|
|
|
try:
|
|
|
|
|
myLogger.info_logger("Receive request: /AppRestart")
|
2023-04-16 19:49:10 +08:00
|
|
|
|
get_headers(request)
|
2023-04-15 16:39:33 +08:00
|
|
|
|
ret = {}
|
2023-04-16 18:59:09 +08:00
|
|
|
|
ret['ResponseData'] = {}
|
|
|
|
|
manage.restart_app(app_id)
|
2023-04-16 19:25:56 +08:00
|
|
|
|
ret['ResponseData']['AppID'] = app_id
|
2023-04-15 16:39:33 +08:00
|
|
|
|
except CommandException as ce:
|
|
|
|
|
ret = {}
|
2023-04-16 19:12:44 +08:00
|
|
|
|
ret['ResponseData'] = {}
|
2023-04-16 19:25:56 +08:00
|
|
|
|
ret['ResponseData']['AppID'] = app_id
|
2023-04-15 16:39:33 +08:00
|
|
|
|
ret['Error'] = manage.get_error_info(ce.code, ce.message, ce.detail)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
ret = {}
|
2023-04-16 19:12:44 +08:00
|
|
|
|
ret['ResponseData'] = {}
|
2023-04-16 19:25:56 +08:00
|
|
|
|
ret['ResponseData']['AppID'] = app_id
|
2023-04-15 16:39:33 +08:00
|
|
|
|
ret['Error'] = manage.get_error_info(const.ERROR_SERVER_SYSTEM, "system original error", str(e))
|
2023-02-28 17:44:04 +08:00
|
|
|
|
return JSONResponse(content=ret)
|
2023-02-25 11:37:39 +08:00
|
|
|
|
|
2023-04-02 21:51:14 +08:00
|
|
|
|
|
2023-04-14 09:27:08 +08:00
|
|
|
|
@router.api_route("/AppUninstall", methods=["GET", "POST"], summary="卸载APP", response_description=rd_two,
|
2023-04-02 21:51:14 +08:00
|
|
|
|
response_model=Response)
|
2023-04-16 20:26:41 +08:00
|
|
|
|
def AppUninstall(request: Request, app_id: Optional[str] = Query(default=None, description="应用ID")):
|
2023-04-12 17:11:53 +08:00
|
|
|
|
|
2023-04-15 07:47:11 +08:00
|
|
|
|
try:
|
|
|
|
|
myLogger.info_logger("Receive request: /AppUninstall")
|
|
|
|
|
get_headers(request)
|
2023-04-15 16:39:33 +08:00
|
|
|
|
ret = {}
|
2023-04-16 18:59:09 +08:00
|
|
|
|
ret['ResponseData'] = {}
|
2023-04-16 20:09:36 +08:00
|
|
|
|
manage.uninstall_app(app_id)
|
2023-04-16 19:25:56 +08:00
|
|
|
|
ret['ResponseData']['AppID'] = app_id
|
2023-04-15 07:47:11 +08:00
|
|
|
|
except CommandException as ce:
|
|
|
|
|
ret = {}
|
2023-04-16 19:12:44 +08:00
|
|
|
|
ret['ResponseData'] = {}
|
2023-04-16 19:25:56 +08:00
|
|
|
|
ret['ResponseData']['AppID'] = app_id
|
2023-04-15 07:47:11 +08:00
|
|
|
|
ret['Error'] = manage.get_error_info(ce.code, ce.message, ce.detail)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
ret = {}
|
2023-04-16 19:12:44 +08:00
|
|
|
|
ret['ResponseData'] = {}
|
2023-04-16 19:25:56 +08:00
|
|
|
|
ret['ResponseData']['AppID'] = app_id
|
2023-04-15 07:47:11 +08:00
|
|
|
|
ret['Error'] = manage.get_error_info(const.ERROR_SERVER_SYSTEM, "system original error", str(e))
|
|
|
|
|
|
|
|
|
|
return JSONResponse(content=ret)
|
2023-04-12 17:11:53 +08:00
|
|
|
|
|
2023-04-14 10:53:07 +08:00
|
|
|
|
def get_headers(request):
|
2023-04-12 17:11:53 +08:00
|
|
|
|
headers = request.headers
|
|
|
|
|
try:
|
|
|
|
|
version = headers.get('Version')
|
|
|
|
|
language = headers.get('Language')
|
2023-04-14 10:51:29 +08:00
|
|
|
|
myLogger.info_logger("Version: " + version + ", Language: " + language)
|
2023-04-12 17:11:53 +08:00
|
|
|
|
except:
|
|
|
|
|
pass
|