138 lines
3.8 KiB
Go
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)
|
|
}
|