| | |
| | | "fmt" |
| | | "github.com/gin-gonic/gin" |
| | | "strings" |
| | | "test/config" |
| | | "test/util" |
| | | "swfs/code" |
| | | "swfs/config" |
| | | "swfs/tools/es" |
| | | "swfs/tools/middleware" |
| | | "swfs/tools/script" |
| | | "swfs/util" |
| | | "time" |
| | | ) |
| | | |
| | |
| | | Role string `json:"role"` |
| | | } |
| | | |
| | | //修改 |
| | | func (sc *SeaweedfsController) UpdateSWFSServiceController(c *gin.Context) { |
| | | oldPeers := GetOldPeers() |
| | | newPeers := GetNewPeers() |
| | | UpdatePeers(oldPeers, newPeers) |
| | | script.ReplaceLineContentBySearch(es.GetNewPeers(), config.Peer, config.Server.ScriptPath, config.StartServerScript) |
| | | util.ResponseFormat(c, code.Success, config.Server.EsServerIp+"更新成功") |
| | | } |
| | | |
| | | // @Security ApiKeyAuth |
| | | // @Summary 新节点加入 |
| | | // @Description 新节点加入 |
| | | // @Accept json |
| | | // @Produce json |
| | | // @Tags swfs |
| | | // @Param obj body SWFSInfo true "加入角色参数" |
| | | // @Success 200 {string} json "{"code":200, msg:"", success:true}" |
| | | // @Failure 500 {string} json "{"code":500, msg:"", success:false}" |
| | | // @Router /node/api-v/swfs/addSWFSNode [POST] |
| | | func (sc *SeaweedfsController) AddSWFSNodeController(c *gin.Context) { |
| | | var body SWFSInfo |
| | | c.BindJSON(&body) |
| | | role := body.Role |
| | | if role == "master" { |
| | | AsMaster() |
| | | middleware.AsMaster(role) |
| | | util.ResponseFormat(c, code.AddSuccess, "加入节点成功") |
| | | return |
| | | } else if role == "volume" { |
| | | AsVolume() |
| | | status := middleware.AsVolume() |
| | | if status == true { |
| | | util.ResponseFormat(c, code.AddSuccess, "加入节点成功") |
| | | return |
| | | } else { |
| | | util.ResponseFormat(c, code.AddClusterInfoErr, "当前还没有主节点") |
| | | return |
| | | } |
| | | } else if role == "master+volume" { |
| | | middleware.AsMaVo(role) |
| | | util.ResponseFormat(c, code.AddSuccess, "加入节点成功") |
| | | } else { |
| | | |
| | | util.ResponseFormat(c, code.RequestParamError, "选择节点类型错误") |
| | | return |
| | | } |
| | | |
| | | } |
| | | |
| | | func (sc *SeaweedfsController) RestartMaster(c *gin.Context) { |
| | | end := "sh /opt/vasystem/script/seaweedfs_stop.sh" |
| | | start := "sh /opt/vasystem/script/seaweedfs_start.sh" |
| | | util.RunScript(end) |
| | | util.RunScript(start) |
| | | func (sc *SeaweedfsController) RoleOfVolumeToMasterController(c *gin.Context) { |
| | | middleware.AsMaster("master+volume") |
| | | util.ResponseFormat(c, code.Success, "角色添加成功") |
| | | } |
| | | |
| | | func RequestMasterNodesOperation() { |
| | | nowPeers := GetNowPeersList() |
| | | coreThread := len(nowPeers)/100 + 1 |
| | | masterIp := make([]string, 0) |
| | | for i, val := range nowPeers { |
| | | ip := val.(string) |
| | | if (i+1)%coreThread == 0 { |
| | | masterIp = append(masterIp, strings.Split(ip, ":")[0]) |
| | | for _, val := range masterIp { |
| | | RestartOrtherMaster(val) |
| | | masterIp = append(masterIp[:0], masterIp[1:]...) |
| | | } |
| | | time.Sleep(time.Second * 2) |
| | | } else { |
| | | masterIp = append(masterIp, strings.Split(ip, ":")[0]) |
| | | if len(nowPeers) == i+1 { |
| | | for _, val := range masterIp { |
| | | RestartOrtherMaster(val) |
| | | } |
| | | break |
| | | } |
| | | continue |
| | | } |
| | | } |
| | | } |
| | | |
| | | func GetOldPeers() string { |
| | | str := "cat /opt/vasystem/seaweedfs_start.sh | grep peers=" |
| | | peers := strings.Split(util.RunScript(str), "\n")[0] |
| | | return peers |
| | | } |
| | | |
| | | func AsVolume() { |
| | | nowPeers := GetNowPeersList() |
| | | fmt.Println(nowPeers) |
| | | } |
| | | |
| | | func AsMaster() { |
| | | nowPeers := GetNowPeersList() |
| | | coreThread := len(nowPeers) / 100 |
| | | fmt.Println(coreThread) |
| | | |
| | | } |
| | | |
| | | func GetNowPeersList() []interface{} { |
| | | |
| | | getUrl := "http://" + config.Server.EsServerIp + ":" + config.Server.EsServerPort + "/" + config.BasicFS.IndexName + "/_search" |
| | | getJson := `{ |
| | | "query": { |
| | | "bool": { |
| | | "filter": [ |
| | | { |
| | | "term": { |
| | | "application":"nodeOperation" |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | "size": 1 |
| | | }` |
| | | |
| | | buf, _ := util.EsReq("POST", getUrl, []byte(getJson)) |
| | | source, _ := util.Sourcelist(buf) |
| | | //fmt.Println(source) |
| | | peers := source[0]["peers"].([]interface{}) |
| | | return peers |
| | | } |
| | | |
| | | func GetNewPeers() string { |
| | | |
| | | getUrl := "http://" + config.Server.EsServerIp + ":" + config.Server.EsServerPort + "/" + config.BasicFS.IndexName + "/_search" |
| | | getJson := `{ |
| | | "query": { |
| | | "bool": { |
| | | "filter": [ |
| | | { |
| | | "term": { |
| | | "application":"nodeOperation" |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | "size": 1 |
| | | }` |
| | | |
| | | buf, _ := util.EsReq("POST", getUrl, []byte(getJson)) |
| | | source, _ := util.Sourcelist(buf) |
| | | //fmt.Println(source) |
| | | peers := source[0]["peers"].([]interface{}) |
| | | fmt.Println(peers) |
| | | p := "peers=" + strings.Replace(strings.Trim(fmt.Sprint(peers), "[]"), " ", ",", -1) |
| | | return p |
| | | } |
| | | |
| | | func UpdatePeers(oldPeers string, newPeers string) { |
| | | str := "sed -ie 's/" + oldPeers + "/" + newPeers + "/g' /opt/vasystem/seaweedfs_start.sh" |
| | | util.RunScript(str) |
| | | } |
| | | |
| | | func AddNewMasterToPeers() (result bool) { |
| | | peer := config.Server.EsServerIp + ":6333" |
| | | addUrl := "http://" + config.Server.EsServerIp + ":" + config.Server.EsServerPort + "/" + config.BasicFS.IndexName + "/_update_by_query" |
| | | addJson := `{ |
| | | "script": { |
| | | "lang": "painless", |
| | | "inline": "ctx._source.peers.add(params.newpeer)", |
| | | "params": { |
| | | "newpeer": "` + peer + `" |
| | | } |
| | | }, |
| | | "query": { |
| | | "bool": { |
| | | "filter": [ |
| | | { |
| | | "term": { |
| | | "application": "nodeOperation" |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | }` |
| | | buf, _ := util.EsReq("POST", addUrl, []byte(addJson)) |
| | | updateRes, _ := util.SourceUpdated(buf) |
| | | if updateRes == -1 { |
| | | result = false |
| | | } else { |
| | | result = true |
| | | } |
| | | return result |
| | | func (sc *SeaweedfsController) RestartServerController(c *gin.Context) { |
| | | script.StopServer(config.Server.ScriptPath) |
| | | script.StartServer(config.Server.ScriptPath) |
| | | time.Sleep(time.Second * 1) |
| | | //fmt.Println("GetLocalStartupItem: ", GetLocalStartupItem(config.Server.ScriptPath, StartServerScript)) |
| | | result := strings.Split(middleware.GetLocalStartupItem(config.Server.ScriptPath, config.StartServerScript), "=")[1] |
| | | fmt.Println("result: ", result) |
| | | util.ResponseFormat(c, code.Success, result) |
| | | } |