zhangzengfei
2023-10-24 c5654846d3b8b002284dee57aa50e95d67649f0e
system-service/controllers/cluster.go
@@ -1,6 +1,7 @@
package controllers
import (
   "vamicro/config"
   "vamicro/system-service/models"
   "vamicro/system-service/service"
   "vamicro/system-service/vo"
@@ -11,6 +12,49 @@
)
type ClusterController struct {
}
// @Summary 查询当前集群状态
// @Description 查询本地集群
// @Produce json
// @Tags cluster
// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
// @Router /data/api-v/cluster/status [get]
func (cc ClusterController) GetClusterStat(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
   var clusterE models.Cluster
   var reply = bhomeclient.Reply{
      Success: false,
      Msg:     "",
      Data:    nil,
   }
   arr, err := clusterE.FindAll()
   if err == nil {
      if arr != nil && len(arr) > 0 {
         // 表示已加入集群
         reply.Success = true
         var nodeE models.Node
         nodes, _ := nodeE.FindNodesByClusterId(arr[0].ClusterId)
         //logger.Debug("查询集群节点:", nodes)
         for _, node := range nodes {
            //logger.Debug("节点:", node.NodeId, " serverId:", config.Server.AnalyServerId, " stat:", node.DriftState)
            if node.NodeId == config.Server.AnalyServerId {
               if node.DriftState == "master" {
                  reply.Msg = "master"
               } else {
                  reply.Msg = "slave"
               }
               break
            }
         }
         reply.Data = nodes
      }
   }
   return &reply
}
// @Summary 查询本地集群
@@ -27,13 +71,14 @@
      if arr != nil && len(arr) > 0 {
         var nodeE models.Node
         nodes, _ := nodeE.FindNodesByClusterId(arr[0].ClusterId)
         logger.Debugf("FindCluster nodes=%v", nodes)
         //logger.Debugf("FindCluster nodes=%v", nodes)
         return &bhomeclient.Reply{Success: true, Data: map[string]interface{}{
            "clusterId":   arr[0].ClusterId,
            "clusterName": arr[0].ClusterName,
            "password":    arr[0].Password,
            "nodes":       nodes,
            "virtualIp":   arr[0].VirtualIp,
            //"password":    arr[0].Password,
            "nodes":     nodes,
            "virtualIp": arr[0].VirtualIp,
            "localId":   config.Server.AnalyServerId,
         }}
      } else {
         return &bhomeclient.Reply{Success: true}
@@ -67,6 +112,22 @@
      return &bhomeclient.Reply{Success: true, Data: clusterVo}
   } else {
      return &bhomeclient.Reply{Success: false, Msg: "创建集群失败"}
   }
}
func (cc ClusterController) Update2Master(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
   var nodeVo vo.UpdateClusterVo
   err := c.BindJSON(&nodeVo)
   if err != nil || nodeVo.NodeId == "" {
      return &bhomeclient.Reply{Success: false, Msg: "参数有误"}
   }
   sv := service.NewClusterService(h.Bk)
   b, _ := sv.UpdateDriftStateByNodeId(nodeVo.ClusterId, nodeVo.NodeId, "master")
   if b {
      return &bhomeclient.Reply{Success: true, Data: nil}
   } else {
      return &bhomeclient.Reply{Success: false, Msg: "变更失败"}
   }
}
@@ -190,7 +251,8 @@
}
type LeaveArg struct {
   IsDel bool `json:"isDel"` //是否删除数据
   IsDel bool   `json:"isDel"`    //是否删除数据
   Pwd   string `json:"password"` //是否删除数据
}
// @Summary 退出集群
@@ -203,6 +265,21 @@
func (cc ClusterController) Leave(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
   var reqBody LeaveArg
   c.BindJSON(&reqBody)
   var clusterE models.Cluster
   arr, err := clusterE.FindAll()
   if err != nil {
      return &bhomeclient.Reply{Success: false, Msg: "集群查询失败"}
   }
   if arr != nil && len(arr) > 0 {
      if config.ClusterSet.PwdPre+reqBody.Pwd != arr[0].Password {
         return &bhomeclient.Reply{Success: false, Msg: "密码错误"}
      }
   } else {
      return &bhomeclient.Reply{Success: false, Msg: "集群查询失败"}
   }
   sv := service.NewClusterService(h.Bk)
   if b, err := sv.Leave(reqBody.IsDel); b {
      return &bhomeclient.Reply{Success: true, Msg: "退出成功"}