websoft9/appmanage/api/v1/routers/apps.py

109 lines
5.2 KiB
Python
Raw Normal View History

2023-02-21 14:21:53 +08:00
from typing import Optional, List
2023-04-02 21:51:14 +08:00
from fastapi import APIRouter, status, Depends, Query
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-02-22 17:19:27 +08:00
from api.utils import shell_execute
2023-03-15 17:55:05 +08:00
from api.utils.common_log import myLogger
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" \
"  volumeyml文件路径,\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\ndataNone"
2023-04-06 09:18:30 +08:00
@router.api_route("/details", methods=["GET", "POST"], summary="获取指定APP的信息",
response_description=rd_detail,
2023-04-02 21:51:14 +08:00
response_model=Response)
def app_detail(app_id: Optional[str] = Query(default=None, description="应用ID")):
2023-03-16 14:09:48 +08:00
myLogger.info_logger("Receive request: /api/v1/apps/details")
2023-03-16 14:27:42 +08:00
list = manage.get_app_detail(app_id)
2023-03-28 16:07:39 +08:00
return JSONResponse(list)
2023-03-16 14:09:48 +08:00
2023-04-02 21:51:14 +08:00
2023-04-06 09:18:30 +08:00
@router.api_route("", methods=["GET", "POST"], summary="获取所有APP的信息", response_description=rd_list,
response_model=Response)
2023-02-22 17:19:27 +08:00
def list_my_apps():
2023-03-15 17:55:05 +08:00
myLogger.info_logger("Receive request: /api/v1/apps")
2023-02-22 17:19:27 +08:00
list = manage.get_my_app()
return JSONResponse(content=list)
2023-02-21 14:21:53 +08:00
2023-04-02 21:51:14 +08:00
2023-04-07 09:52:22 +08:00
@router.api_route("/install", methods=["GET", "POST"], summary="安装APP", response_description=rd_two,
2023-04-02 21:51:14 +08:00
response_model=Response)
def install_app(app_name: Optional[str] = Query(default=None, description="应用名"),
customer_app_name: Optional[str] = Query(default=None, description="应用自定义名字"),
app_version: Optional[str] = Query(default=None, description="应用版本")):
2023-03-15 17:55:05 +08:00
myLogger.info_logger("Receive request: /api/v1/apps/install")
2023-03-15 15:23:10 +08:00
ret = manage.install_app(app_name, customer_app_name, app_version)
2023-02-23 16:19:55 +08:00
return JSONResponse(content=ret)
2023-02-22 17:43:09 +08:00
2023-04-02 21:51:14 +08:00
2023-04-06 09:18:30 +08:00
@router.api_route("/process", methods=["GET", "POST"], summary="获取指定APP的安装进度",
response_description=rd_process,
2023-04-02 21:51:14 +08:00
response_model=Response)
def install_app_process(app_id: Optional[str] = Query(default=None, description="应用ID")):
2023-03-15 17:55:05 +08:00
myLogger.info_logger("Receive request: /api/v1/apps/process")
2023-03-15 11:43:04 +08:00
ret = manage.install_app_process(app_id)
2023-03-09 10:29:11 +08:00
return JSONResponse(content=ret)
2023-04-02 21:51:14 +08:00
2023-04-07 09:52:22 +08:00
@router.api_route("/start", methods=["GET", "POST"], summary="启动APP", response_description=rd_two, response_model=Response)
2023-04-02 21:51:14 +08:00
def start_app(app_id: Optional[str] = Query(default=None, description="应用ID")):
2023-03-15 17:55:05 +08:00
myLogger.info_logger("Receive request: /api/v1/apps/start")
2023-03-15 11:43:04 +08:00
ret = manage.start_app(app_id)
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-07 09:52:22 +08:00
@router.api_route("/stop", methods=["GET", "POST"], summary="停止APP", response_description=rd_two, response_model=Response)
2023-04-02 21:51:14 +08:00
def stop_app(app_id: Optional[str] = Query(default=None, description="应用ID")):
2023-03-15 17:55:05 +08:00
myLogger.info_logger("Receive request: /api/v1/apps/stop")
2023-03-15 11:43:04 +08:00
ret = manage.stop_app(app_id)
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-07 09:52:22 +08:00
@router.api_route("/restart", methods=["GET", "POST"], summary="重启APP", response_description=rd_two,
2023-04-02 21:51:14 +08:00
response_model=Response)
def restart_app(app_id: Optional[str] = Query(default=None, description="应用ID")):
2023-03-15 17:55:05 +08:00
myLogger.info_logger("Receive request: /api/v1/apps/restart")
2023-03-16 10:07:17 +08:00
ret = manage.restart_app(app_id)
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-07 09:52:22 +08:00
@router.api_route("/uninstall", methods=["GET", "POST"], summary="卸载APP", response_description=rd_two,
2023-04-02 21:51:14 +08:00
response_model=Response)
def uninstall_app(app_id: Optional[str] = Query(default=None, description="应用ID")):
2023-03-15 17:55:05 +08:00
myLogger.info_logger("Receive request: /api/v1/apps/uninstall")
2023-03-15 15:22:56 +08:00
ret = manage.uninstall_app(app_id)
2023-02-28 17:44:04 +08:00
return JSONResponse(content=ret)