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) }