129 lines
3.8 KiB
Go
129 lines
3.8 KiB
Go
package service
|
||
|
||
import (
|
||
"fmt"
|
||
"git.inspur.com/sbg-jszt/cfn/cfn-schedule/data"
|
||
"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/model/message"
|
||
"github.com/goccy/go-json"
|
||
"github.com/golang/glog"
|
||
"strings"
|
||
)
|
||
|
||
type UpgradeCommand struct {
|
||
AgentId string `json:"agentId"`
|
||
DownUrl string `json:"downUrl"`
|
||
BucketName string `json:"bucketName"`
|
||
Filename string `json:"filename"`
|
||
CompressionType string `json:"compressionType"`
|
||
Command string `json:"command"`
|
||
Version string `json:"version"`
|
||
OsType string `json:"osType"` //字典:Windows\Ubuntu\CentOS\KylinOS
|
||
ArchType string `json:"archType"` //字典: X86\ARM
|
||
}
|
||
|
||
type UpgradePlan struct {
|
||
UpgradeTime string `json:"upgradeTime"` //指定升级时间;指定时间升级时有值
|
||
UpgradeRule string `json:"upgradeRule"` //升级策略;0:立刻升级,1:指定时间升级
|
||
DeviceType string `json:"deviceType"` //设备类型;0:为全部,1:应用一体机,2:调度一体机,3:纳管一体机
|
||
Status string `json:"status"` //字典:create:创建,delete:删除
|
||
}
|
||
|
||
func SendUpgradeCommand(agents []agent.AgentInfo) error {
|
||
cmds, err := getUpgradeCommands(agents)
|
||
if err != nil {
|
||
glog.Errorf("生成升级包下载命令失败!err:%v", err)
|
||
return err
|
||
}
|
||
for _, cmd := range cmds {
|
||
body, _ := json.Marshal(cmd)
|
||
mm := message.MsgModel{
|
||
Body: body,
|
||
Func: message.FUNC_AGENTDOWNLOAD,
|
||
Rid: "",
|
||
Version: "v1",
|
||
}
|
||
msg, _ := json.Marshal(mm)
|
||
err = data.Nc.Publish(message.TO_AGENT_BROADCAST_SUBJECT, msg)
|
||
if err != nil {
|
||
glog.Errorf("发送升级包下载命令失败!err:%v", err)
|
||
return err
|
||
}
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func SendUpgradePlans(rules []devc.DeviceUpgradeRule, option string) error {
|
||
for _, rule := range rules {
|
||
upgradeTime := "00:00"
|
||
if rule.UpgradeRule == "1" {
|
||
upgradeTime = fmt.Sprintf("%d:%d", rule.UpgradeTime.Hour(), rule.UpgradeTime.Minute())
|
||
}
|
||
up := UpgradePlan{
|
||
UpgradeTime: upgradeTime,
|
||
UpgradeRule: rule.UpgradeRule,
|
||
DeviceType: rule.DeviceType,
|
||
Status: option,
|
||
}
|
||
body, _ := json.Marshal(up)
|
||
mm := message.MsgModel{
|
||
Body: body,
|
||
Func: message.FUNC_UPGRADEPLAN,
|
||
Rid: "",
|
||
Version: "v1",
|
||
}
|
||
msg, _ := json.Marshal(mm)
|
||
sub := strings.ReplaceAll(message.TO_AGENT_BROADCAST_PUBLIC_SUBJECT, "{cid}", rule.VendorId)
|
||
err := data.Nc.Publish(sub, msg)
|
||
if err != nil {
|
||
glog.Errorf("发送升级计划失败!err:%v", err)
|
||
return err
|
||
}
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func GetUpgradeCommandNow(aget *agent.AgentInfo) (*UpgradeCommand, error) {
|
||
url, err := GetPresignedUrl(aget.BucketName, aget.Filename, 86400)
|
||
if err != nil {
|
||
glog.Errorf("未找到小助手包!err:%v", err)
|
||
return nil, err
|
||
}
|
||
up := &UpgradeCommand{
|
||
AgentId: aget.Id,
|
||
DownUrl: url.String(),
|
||
BucketName: aget.BucketName,
|
||
Filename: aget.Filename,
|
||
CompressionType: aget.CompressionType,
|
||
Command: aget.Command,
|
||
Version: aget.Version,
|
||
OsType: aget.OsType,
|
||
ArchType: aget.ArchType,
|
||
}
|
||
return up, nil
|
||
}
|
||
|
||
func getUpgradeCommands(agents []agent.AgentInfo) ([]UpgradeCommand, error) {
|
||
ups := make([]UpgradeCommand, 0)
|
||
for _, aget := range agents {
|
||
url, err := GetPresignedUrl(aget.BucketName, aget.Filename, 86400)
|
||
if err != nil {
|
||
glog.Errorf("未找到小助手包!err:%v", err)
|
||
return nil, err
|
||
}
|
||
up := UpgradeCommand{
|
||
DownUrl: url.String(),
|
||
BucketName: aget.BucketName,
|
||
Filename: aget.Filename,
|
||
CompressionType: aget.CompressionType,
|
||
Command: aget.Command,
|
||
Version: aget.Version,
|
||
OsType: aget.OsType,
|
||
ArchType: aget.ArchType,
|
||
}
|
||
ups = append(ups, up)
|
||
}
|
||
return ups, nil
|
||
}
|