package clusters import ( "encoding/json" "strings" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/httpdns/httpdnsutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/actions" "github.com/iwind/TeaGo/maps" ) type UpgradeRemoteAction struct { actionutils.ParentAction } func (this *UpgradeRemoteAction) Init() { this.Nav("httpdns", "cluster", "index") } func (this *UpgradeRemoteAction) RunGet(params struct { NodeId int64 ClusterId int64 }) { httpdnsutils.AddLeftMenu(this.Parent()) cluster, err := findClusterMap(this.Parent(), params.ClusterId) if err != nil { this.ErrorPage(err) return } httpdnsutils.AddClusterTabbar(this.Parent(), cluster.GetString("name"), params.ClusterId, "node") this.Data["clusterId"] = params.ClusterId this.Data["cluster"] = cluster resp, err := this.RPC().HTTPDNSNodeRPC().FindAllUpgradeHTTPDNSNodesWithClusterId(this.AdminContext(), &pb.FindAllUpgradeHTTPDNSNodesWithClusterIdRequest{ ClusterId: params.ClusterId, }) if err != nil { this.ErrorPage(err) return } nodes := make([]maps.Map, 0, len(resp.GetNodes())) for _, upgradeNode := range resp.GetNodes() { node := upgradeNode.Node if node == nil { continue } loginParams := maps.Map{} if node.GetNodeLogin() != nil && len(node.GetNodeLogin().GetParams()) > 0 { _ = json.Unmarshal(node.GetNodeLogin().GetParams(), &loginParams) } status := decodeNodeStatus(node.GetStatusJSON()) accessIP := strings.TrimSpace(status.GetString("hostIP")) if len(accessIP) == 0 { accessIP = strings.TrimSpace(node.GetName()) } nodes = append(nodes, maps.Map{ "id": node.GetId(), "name": node.GetName(), "accessIP": accessIP, "oldVersion": upgradeNode.OldVersion, "newVersion": upgradeNode.NewVersion, "login": node.GetNodeLogin(), "loginParams": loginParams, "installStatus": decodeUpgradeInstallStatus(node.GetInstallStatusJSON()), }) } this.Data["nodes"] = nodes this.Show() } func (this *UpgradeRemoteAction) RunPost(params struct { NodeId int64 Must *actions.Must }) { _, err := this.RPC().HTTPDNSNodeRPC().UpgradeHTTPDNSNode(this.AdminContext(), &pb.UpgradeHTTPDNSNodeRequest{ NodeId: params.NodeId, }) if err != nil { this.ErrorPage(err) return } this.Success() } func decodeUpgradeInstallStatus(raw []byte) maps.Map { result := maps.Map{ "isRunning": false, "isFinished": false, "isOk": false, "error": "", "errorCode": "", } if len(raw) == 0 { return result } _ = json.Unmarshal(raw, &result) return result }