package controllers import ( "fmt" "github.com/gin-gonic/gin" "strings" "test/config" "test/util" "time" ) type SeaweedfsController struct{} type SWFSInfo struct { Role string `json:"role"` } //修改 func (sc *SeaweedfsController) UpdateSWFSServiceController(c *gin.Context) { oldPeers := GetOldPeers() newPeers := GetNewPeers() UpdatePeers(oldPeers, newPeers) } func (sc *SeaweedfsController) AddSWFSNodeController(c *gin.Context) { var body SWFSInfo c.BindJSON(&body) role := body.Role if role == "master" { AsMaster() } else if role == "volume" { AsVolume() } else { 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 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 }