182 lines
5.8 KiB
Go
182 lines
5.8 KiB
Go
package v1
|
|
|
|
import (
|
|
"github.com/IceWhaleTech/CasaOS/model"
|
|
"github.com/IceWhaleTech/CasaOS/pkg/utils/file"
|
|
oasis_err2 "github.com/IceWhaleTech/CasaOS/pkg/utils/oasis_err"
|
|
port2 "github.com/IceWhaleTech/CasaOS/pkg/utils/port"
|
|
"github.com/IceWhaleTech/CasaOS/pkg/utils/sort"
|
|
"github.com/IceWhaleTech/CasaOS/service"
|
|
"github.com/gin-gonic/gin"
|
|
"net/http"
|
|
"strconv"
|
|
)
|
|
|
|
// @Summary 获取远程列表
|
|
// @Produce application/json
|
|
// @Accept application/json
|
|
// @Tags app
|
|
// @Param index query int false "页码"
|
|
// @Param size query int false "每页数量"
|
|
// @Param category_id query int false "分类id"
|
|
// @Param type query string false "rank,new"
|
|
// @Param key query string false "search key"
|
|
// @Security ApiKeyAuth
|
|
// @Success 200 {string} string "ok"
|
|
// @Router /app/list [get]
|
|
func AppList(c *gin.Context) {
|
|
|
|
//service.MyService.Docker().DockerContainerCommit("test2")
|
|
|
|
index := c.DefaultQuery("index", "1")
|
|
size := c.DefaultQuery("size", "10")
|
|
t := c.DefaultQuery("type", "rank")
|
|
categoryId := c.DefaultQuery("category_id", "0")
|
|
key := c.DefaultQuery("key", "")
|
|
list, count := service.MyService.OAPI().GetServerList(index, size, t, categoryId, key)
|
|
for i := 0; i < len(list); i++ {
|
|
ct, _ := service.MyService.Docker().DockerListByImage(list[i].Image, list[i].ImageVersion)
|
|
if ct != nil {
|
|
list[i].State = ct.State
|
|
}
|
|
}
|
|
data := make(map[string]interface{}, 2)
|
|
data["count"] = count
|
|
data["items"] = list
|
|
|
|
c.JSON(http.StatusOK, &model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: data})
|
|
}
|
|
|
|
// @Summary 获取一个可用端口
|
|
// @Produce application/json
|
|
// @Accept application/json
|
|
// @Tags app
|
|
// @Param type query string true "端口类型 udp/tcp"
|
|
// @Security ApiKeyAuth
|
|
// @Success 200 {string} string "ok"
|
|
// @Router /app/getport [get]
|
|
func GetPort(c *gin.Context) {
|
|
t := c.DefaultQuery("type", "tcp")
|
|
var p int
|
|
ok := true
|
|
for ok {
|
|
p, _ = port2.GetAvailablePort(t)
|
|
ok = !port2.IsPortAvailable(p, t)
|
|
}
|
|
c.JSON(http.StatusOK, &model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: p})
|
|
}
|
|
|
|
// @Summary 检查端口是否可用
|
|
// @Produce application/json
|
|
// @Accept application/json
|
|
// @Tags app
|
|
// @Param port path int true "端口号"
|
|
// @Param type query string true "端口类型 udp/tcp"
|
|
// @Security ApiKeyAuth
|
|
// @Success 200 {string} string "ok"
|
|
// @Router /app/check/{port} [get]
|
|
func PortCheck(c *gin.Context) {
|
|
p, _ := strconv.Atoi(c.Param("port"))
|
|
t := c.DefaultQuery("type", "tcp")
|
|
c.JSON(http.StatusOK, &model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: port2.IsPortAvailable(p, t)})
|
|
}
|
|
|
|
// @Summary 我的应用列表
|
|
// @Produce application/json
|
|
// @Accept application/json
|
|
// @Tags app
|
|
// @Security ApiKeyAuth
|
|
// @Param index query int false "index"
|
|
// @Param size query int false "size"
|
|
// @Param position query bool false "是否是首页应用"
|
|
// @Success 200 {string} string "ok"
|
|
// @Router /app/mylist [get]
|
|
func MyAppList(c *gin.Context) {
|
|
index, _ := strconv.Atoi(c.DefaultQuery("index", "1"))
|
|
size, _ := strconv.Atoi(c.DefaultQuery("size", "0"))
|
|
position, _ := strconv.ParseBool(c.DefaultQuery("position", "true"))
|
|
list := service.MyService.App().GetMyList(index, size, position)
|
|
c.JSON(http.StatusOK, &model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: list})
|
|
}
|
|
|
|
// @Summary 应用详情
|
|
// @Produce application/json
|
|
// @Accept application/json
|
|
// @Tags app
|
|
// @Param id path int true "id"
|
|
// @Security ApiKeyAuth
|
|
// @Success 200 {string} string "ok"
|
|
// @Router /app/appinfo/{id} [get]
|
|
func AppInfo(c *gin.Context) {
|
|
|
|
id := c.Param("id")
|
|
info := service.MyService.App().GetServerAppInfo(id)
|
|
if info.NetworkModel != "host" {
|
|
port, _ := port2.GetAvailablePort("tcp")
|
|
info.PortMap = uint(port)
|
|
for i := 0; i < len(info.Configures.TcpPorts); i++ {
|
|
info.Configures.TcpPorts[i].CommendPort, _ = port2.GetAvailablePort("tcp")
|
|
}
|
|
for i := 0; i < len(info.Configures.UdpPorts); i++ {
|
|
info.Configures.UdpPorts[i].CommendPort, _ = port2.GetAvailablePort("udp")
|
|
}
|
|
} else {
|
|
info.PortMap = info.TcpPort
|
|
}
|
|
|
|
for i := 0; i < len(info.Configures.Devices); i++ {
|
|
if !file.CheckNotExist(info.Configures.Devices[i].ContainerPath) {
|
|
info.Configures.Devices[i].Path = info.Configures.Devices[i].ContainerPath
|
|
}
|
|
}
|
|
|
|
portOrder := func(c1, c2 *model.Ports) bool {
|
|
return c1.Type < c2.Type
|
|
}
|
|
|
|
envOrder := func(c1, c2 *model.Envs) bool {
|
|
return c1.Type < c2.Type
|
|
}
|
|
|
|
volOrder := func(c1, c2 *model.Volume) bool {
|
|
return c1.Type < c2.Type
|
|
}
|
|
|
|
devOrder := func(c1, c2 *model.Devices) bool {
|
|
return c1.Type < c2.Type
|
|
}
|
|
|
|
//sort
|
|
if info.NetworkModel != "host" {
|
|
sort.PortsSort(portOrder).Sort(info.Configures.TcpPorts)
|
|
sort.PortsSort(portOrder).Sort(info.Configures.UdpPorts)
|
|
}
|
|
|
|
sort.EnvSort(envOrder).Sort(info.Configures.Envs)
|
|
sort.VolSort(volOrder).Sort(info.Configures.Volumes)
|
|
sort.DevSort(devOrder).Sort(info.Configures.Devices)
|
|
|
|
info.MaxMemory = service.MyService.ZiMa().GetMemInfo().Total >> 20
|
|
|
|
c.JSON(http.StatusOK, &model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: info})
|
|
}
|
|
|
|
// @Summary 获取远程分类列表
|
|
// @Produce application/json
|
|
// @Accept application/json
|
|
// @Tags app
|
|
// @Security ApiKeyAuth
|
|
// @Success 200 {string} string "ok"
|
|
// @Router /app/category [get]
|
|
func CategoryList(c *gin.Context) {
|
|
list := service.MyService.OAPI().GetServerCategoryList()
|
|
var count uint = 0
|
|
for _, category := range list {
|
|
count += category.Count
|
|
}
|
|
|
|
rear := append([]model.ServerCategoryList{}, list[0:]...)
|
|
list = append(list[:0], model.ServerCategoryList{Count: count, Name: "All"})
|
|
list = append(list, rear...)
|
|
c.JSON(http.StatusOK, &model.Result{Success: oasis_err2.SUCCESS, Message: oasis_err2.GetMsg(oasis_err2.SUCCESS), Data: list})
|
|
}
|