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

129 lines
3.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}