sunty
2020-04-17 f4c1ad199cdd31a454a60e50661db0de1747977a
controllers/swfsControllers.go
@@ -4,8 +4,12 @@
   "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"
)
@@ -15,165 +19,59 @@
   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)
}