admin_backend/controller/server.go
2025-07-31 15:39:08 +08:00

155 lines
3.1 KiB
Go

package controller
import (
"backend/Type"
"backend/common"
"backend/feishu"
"backend/model"
"backend/util"
"fmt"
"log"
"time"
"github.com/gin-gonic/gin"
)
func AppList(c *gin.Context) {
Server := model.Server{}
AppList, err := Server.AppList()
if err != nil {
failed(c, err.Error())
return
}
success(c, AppList)
}
func NodeList(c *gin.Context) {
NodeModel := model.Node{}
NodeList, err := NodeModel.NodeList()
if err != nil {
failed(c, err.Error())
return
}
success(c, NodeList)
}
func AddNode(c *gin.Context) {
Node := model.Node{}
c.BindJSON(&Node)
Node.Status = common.NODE_STATUS_ONLINE
Node.CreateTime = util.Now()
Node.UpdateTime = util.Now()
Node.Password, _ = util.Encrypt(Node.Password)
err := Node.AddNode()
if err != nil {
failed(c, err.Error())
return
}
util.AddAdminLog(c, "添加节点", Node)
success(c, nil)
}
func ServerList(c *gin.Context) {
Server := model.Server{}
c.BindJSON(&Server)
ServerList, err := Server.ServerList()
if err != nil {
failed(c, err.Error())
return
}
success(c, ServerList)
}
func AddServer(c *gin.Context) {
Server := model.Server{}
c.BindJSON(&Server)
err := Server.AddServer()
if err != nil {
failed(c, err.Error())
return
}
util.AddAdminLog(c, "添加服务器", Server)
success(c, nil)
}
func UpdateApp(c *gin.Context) {
Server := model.Server{}
c.BindJSON(&Server)
msg, err := Server.UpdateApp()
if err != nil {
failed(c, err.Error())
return
}
util.AddAdminLog(c, "更新应用", Server)
success(c, map[string]string{"msg": msg})
}
func UpdateAppFeishu(c *gin.Context) {
Server := model.Server{}
c.BindJSON(&Server)
go Server.UpdateAppFeishu()
success(c, map[string]string{"msg": "have send feishu"})
}
func RestartServer(c *gin.Context) {
Server := model.Server{}
c.BindJSON(&Server)
msg, err := Server.RestartServer()
if err != nil {
failed(c, err.Error())
return
}
util.AddAdminLog(c, "重启服务器", Server)
success(c, map[string]string{"msg": msg})
}
func ReloadServer(c *gin.Context) {
Server := model.Server{}
c.BindJSON(&Server)
msg, err := Server.ReloadServer()
if err != nil {
failed(c, err.Error())
return
}
success(c, map[string]string{"msg": msg})
}
func AppPortNmap() {
NMapEnable := common.GetNMap()
if !NMapEnable {
return
}
for {
Server := model.Server{}
AppList, err := Server.AppList()
if err != nil {
log.Printf("nmap failed to get app list: %v", err)
return
}
for _, app := range AppList {
Server.AppId = app.AppId
ServerList, err := Server.ServerList()
if err != nil {
log.Printf("nmap failed to get server list: %v", err)
continue
}
App, err := util.GetAppConfig(app.AppId)
if err != nil {
log.Printf("nmap failed to get app config: %v", err)
continue
}
for _, server := range ServerList {
go AppPortNmap_(App, server)
}
}
time.Sleep(1 * time.Minute)
}
}
func AppPortNmap_(App *Type.App, server *model.ServerInfo) {
err := model.PortMap(App.WsHost, fmt.Sprintf("%d", server.ServerId+App.WsPort))
if err != nil {
feishu.SendNoticeMsg(App.AppName, server.ServerName, err.Error())
}
}