package controllers import ( "basic.com/dbapi.git" "fmt" "github.com/gin-gonic/gin" "math/rand" "time" "webserver/extend/code" "webserver/extend/util" ) type ClusterController struct { } type Cluster struct { ClusterId string `json:"cluster_id"` ClusterName string `json:"cluster_name"` Password string `json:"password"` VirtualIp string `json:"virtual_ip"` } type Node struct { Id string `json:"id"` ClusterId string `json:"cluster_id"` NodeName string `json:"node_name"` NodeId string `json:"node_id"` NodeIp string `json:"node_ip"` CreateTime string `json:"create_time"` IsAlive int } type ClusterVo struct { ClusterInfo Cluster `json:"clusterInfo"` Nodes []Node `json:"nodes"` } type ClusterCreateVo struct { Password string `json:"password"` ClusterName string `json:"clusterName"` ClusterId string `json:"clusterId"` VirtualIp string `json:"virtualIp"` } type ClusterSearchVo struct { Password string `json:"password"` SearchNum string `json:"searchNum"` } type ClusterJoinVo struct { ClusterId string `json:"clusterId"` Password string `json:"password"` NodeIps []string `json:"nodeIps"` } type ClusterDb struct { ClusterId string `json:"clusterId"` ClusterName string `json:"clusterName"` Nodes []NodeDb `json:"nodes"` } type NodeDb struct { Id string `json:"id"` ClusterId string `json:"cluster_id"` NodeName string `json:"node_name"` NodeId string `json:"node_id"` NodeIp string `json:"node_ip"` CreateTime string `json:"create_time"` IsDelete bool `json:"isDelete"` } // @Security ApiKeyAuth // @Summary 创建集群 // @Description 创建集群 // @Accept json // @Produce json // @Tags cluster // @Param clusterArg body controllers.ClusterCreateVo true "集群创建参数" // @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/create [post] func (cc ClusterController) Create(c *gin.Context) { var clusterVo ClusterCreateVo err := c.BindJSON(&clusterVo) if err !=nil || clusterVo.Password == "" || clusterVo.ClusterName == "" { util.ResponseFormat(c,code.RequestParamError, "参数有误") return } var api dbapi.ClusterApi b, d := api.Create(clusterVo.ClusterName, clusterVo.Password, clusterVo.VirtualIp) if b { util.ResponseFormat(c,code.Success, d) } else { util.ResponseFormat(c,code.ComError,"创建失败") } } // @Security ApiKeyAuth // @Summary 生成集群6位随机密码 // @Description 生成集群6位随机密码 // @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/randomPwd [get] func (cc ClusterController) RandomPwd(c *gin.Context) { pwd := fmt.Sprintf("%06v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000)) util.ResponseFormat(c,code.Success,pwd) } // @Security ApiKeyAuth // @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/findCluster [get] func (cc ClusterController) FindCluster(c *gin.Context) { var clusterApi dbapi.ClusterApi b, d := clusterApi.FindCluster() if b { util.ResponseFormat(c,code.Success, d) } else { util.ResponseFormat(c,code.ComError,"集群查询失败") } } // @Security ApiKeyAuth // @Summary 搜索集群 // @Description 搜索集群 // @Accept json // @Produce json // @Tags cluster // @Param searchArg body controllers.ClusterSearchVo true "集群搜索参数" // @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/search [post] func (cc ClusterController) Search(c *gin.Context) { var csv ClusterSearchVo err := c.BindJSON(&csv) if err !=nil || csv.Password == ""{ util.ResponseFormat(c,code.RequestParamError, "参数有误") return } var api dbapi.ClusterApi b,d := api.Search(csv.SearchNum, csv.Password) if b { util.ResponseFormat(c,code.Success, d) } else { util.ResponseFormat(c,code.ComError,"搜索失败") } } // @Security ApiKeyAuth // @Summary 通过searchNum异步获取集群节点信息 // @Description 通过searchNum异步获取集群节点信息 // @Accept json // @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/getNodesByNum [get] func (cc ClusterController) GetSearchNodes(c *gin.Context) { var api dbapi.ClusterApi b, d := api.GetSearchNodes() if b { util.ResponseFormat(c,code.Success,d) } else { util.ResponseFormat(c,code.ClusterNodesEmpty,[]interface{}{}) } } // @Security ApiKeyAuth // @Summary 通过searchNum停止搜索 // @Description 通过searchNum停止搜索 // @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/stopSearching [post] func (cc ClusterController) StopSearching(c *gin.Context) { var api dbapi.ClusterApi b, d := api.StopSearching("") if b { util.ResponseFormat(c,code.Success, d) } else { util.ResponseFormat(c,code.ComError,"停止失败") } } // @Security ApiKeyAuth // @Summary 加入集群 // @Description 加入集群 // @Accept json // @Produce json // @Tags cluster // @Param clusterArg body controllers.ClusterJoinVo true "集群创建参数" // @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/joinCluster [post] func (cc ClusterController) JoinCluster(c *gin.Context) { var arg ClusterJoinVo err := c.BindJSON(&arg) if err!=nil || arg.ClusterId == "" || arg.Password == "" || len(arg.NodeIps) == 0{ util.ResponseFormat(c,code.RequestParamError, "参数有误") return } var api dbapi.ClusterApi paramBody := util.Struct2Map(arg) b, d := api.JoinCluster(paramBody) if b { util.ResponseFormat(c,code.Success,d) } else { util.ResponseFormat(c,code.ComError,"加入失败") } } // @Security ApiKeyAuth // @Summary 保存集群名称 // @Description 保存集群名称 // @Accept x-www-form-urlencoded // @Produce json // @Tags cluster // @Param clusterName formData string true "集群名称" // @Param virtualIp formData string false "虚拟ip" // @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/updateClusterName [post] func (cc ClusterController) UpdateClusterName(c *gin.Context) { clusterName := c.PostForm("clusterName") if clusterName == "" { util.ResponseFormat(c,code.RequestParamError, "参数有误") return } virtualIp := c.PostForm("virtualIp") var api dbapi.ClusterApi b,_ := api.UpdateClusterName(clusterName,virtualIp) if b { util.ResponseFormat(c,code.UpdateSuccess,"更新成功") } else { util.ResponseFormat(c,code.ComError, "更新失败") } } // @Security ApiKeyAuth // @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/leave [post] func (cc ClusterController) Leave(c *gin.Context) { var api dbapi.ClusterApi if b,_:= api.Leave();b { util.ResponseFormat(c,code.Success,"退出成功") } else { util.ResponseFormat(c,code.ComError,"退出失败") } }