liuhaijun e94826ce29 add server
Change-Id: I0760f17f6a01c0121b59fcbfafc666032dbc30af
2024-09-19 09:44:15 +00:00

138 lines
3.8 KiB
Go

package v1
import (
"encoding/json"
"git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller"
"git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model"
"git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/agent"
devc "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/device"
"git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors"
"git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request"
"git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service"
"git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/validator"
"github.com/gin-gonic/gin"
"strconv"
"strings"
)
// 获取最新版本列表
func ListLastVersion(c *gin.Context) {
aget := &agent.AgentInfo{}
agents, err := aget.ListLastVersion()
if err != nil {
controller.FailCode(c, errors.ServerError, err, "内部错误!")
return
}
controller.Success(c, agents)
}
// 发布新版本
func Release(c *gin.Context) {
aget := &agent.AgentInfo{}
err := validator.CheckPostParams(c, aget)
if aget.BucketName == "" {
aget.BucketName = "cpn"
}
if err != nil {
controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!")
return
}
//转换版本号
masterVersion := "10"
secondVersion := "0"
minVersion := "0"
version := strings.Split(aget.Version, ".")
if len(version[0]) < 2 {
masterVersion = masterVersion + version[0]
} else {
masterVersion = "1" + version[0]
}
if len(version[1]) < 2 {
secondVersion = secondVersion + version[1]
} else {
secondVersion = version[1]
}
if len(version[2]) < 2 {
minVersion = minVersion + version[2]
} else {
minVersion = version[2]
}
versionNum, err := strconv.Atoi(masterVersion + secondVersion + minVersion)
if err != nil {
controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!")
return
}
agents := make([]agent.AgentInfo, 0)
agetJson, _ := json.Marshal(aget)
for _, t := range strings.Split(aget.OsType, ",") {
fields := map[string]interface{}{}
fields["os_type"] = t
fields["arch_type"] = aget.ArchType
fields["version_num"] = versionNum
b, err := aget.HasNewVersion(fields)
if err != nil {
controller.FailCode(c, errors.ServerError, err, "内部错误!")
return
}
if b {
controller.FailCode(c, errors.InvalidParameter, err, "版本号重复或小于历史版本!")
return
}
agt := agent.AgentInfo{}
json.Unmarshal(agetJson, &agt)
agt.OsType = t
agt.VersionNum = int64(versionNum)
if t == agent.OS_WINDOWS {
agt.OsPlatform = agent.OS_WINDOWS
} else if strings.Contains(agent.OS_LINUX_LIST, t) {
agt.OsPlatform = agent.OS_LINUX
} else {
agt.OsPlatform = "Other"
}
//不同平台+不同操作系统+不同架构添加多条记录
agents = append(agents, agt)
}
_, err = aget.CreateBatch(agents)
if err != nil {
controller.FailCode(c, errors.ServerError, err, "数据库错误!")
return
}
go func() {
_ = service.SendUpgradeCommand(agents)
}()
go func() {
dr := &devc.DeviceUpgradeRule{}
rules, err := dr.ListAll(nil)
if err == nil && len(rules) > 0 {
_ = service.SendUpgradePlans(rules, "create")
}
}()
controller.Success(c, "")
}
type PageBodyVersion struct {
PageInfo *request.PageInfo `json:"pageInfo" binding:"required"`
Keyword string `json:"keyword"`
}
// 根据扩展key获取规则
func PageVersions(c *gin.Context) {
var pageBody PageBodyVersion
err := c.ShouldBindJSON(&pageBody)
if err != nil {
controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!")
return
}
agt := &agent.AgentInfo{}
fields := map[string]interface{}{}
fields["keyword"] = pageBody.Keyword
page := &model.Page[agent.AgentInfo]{}
page.Covert(pageBody.PageInfo)
err = agt.Page(page, fields)
if err != nil {
controller.FailCode(c, errors.ServerError, err, "内部错误!")
return
}
controller.Success(c, page)
}