From d2d968c2edf5518dda717f1602dd6204e0256e35 Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期四, 16 四月 2020 15:52:06 +0800
Subject: [PATCH] Organize the structure
---
controllers/swfsControllers.go | 279 ++-----------------------------------------------------
1 files changed, 12 insertions(+), 267 deletions(-)
diff --git a/controllers/swfsControllers.go b/controllers/swfsControllers.go
index 8f12e0a..df77018 100644
--- a/controllers/swfsControllers.go
+++ b/controllers/swfsControllers.go
@@ -1,34 +1,16 @@
package controllers
import (
- "encoding/json"
"fmt"
"github.com/gin-gonic/gin"
- "io/ioutil"
- "net/http"
- "strconv"
"strings"
"swfs/code"
"swfs/config"
+ "swfs/tools/es"
+ "swfs/tools/middleware"
+ "swfs/tools/script"
"swfs/util"
- "sync"
"time"
-)
-
-const (
- StartServerScript = "seaweedfs_start.sh"
- StopServerScript = "seaweedfs_stop.sh"
- //浣滀负 volume 鍚姩
- StartScriptAsVolume = "1"
- //浣滀负 master 鍚姩
- StartScriptAsMaster = "2"
- //浣滀负 master + volume 鍚姩
- StartScriptAsMaVo = "3"
- //鍚姩椤瑰弬鏁板ご
- Option = "option="
- //master鍒楄〃椤瑰弬鏁板ご
- Peer = "peers="
- //StartScriptAsFiler = "option=4"
)
type SeaweedfsController struct{}
@@ -38,7 +20,7 @@
}
func (sc *SeaweedfsController) UpdateSWFSServiceController(c *gin.Context) {
- ReplaceLineContentBySearch(GetNewPeers(), Peer, config.Server.ScriptPath, StartServerScript)
+ script.ReplaceLineContentBySearch(es.GetNewPeers(), config.Peer, config.Server.ScriptPath, config.StartServerScript)
util.ResponseFormat(c, code.Success, config.Server.EsServerIp+"鏇存柊鎴愬姛")
}
@@ -57,11 +39,11 @@
c.BindJSON(&body)
role := body.Role
if role == "master" {
- AsMaster()
+ middleware.AsMaster(role)
util.ResponseFormat(c, code.AddSuccess, "鍔犲叆鑺傜偣鎴愬姛")
return
} else if role == "volume" {
- status := AsVolume()
+ status := middleware.AsVolume()
if status == true {
util.ResponseFormat(c, code.AddSuccess, "鍔犲叆鑺傜偣鎴愬姛")
return
@@ -70,7 +52,7 @@
return
}
} else if role == "master+volume" {
- AsMaVo()
+ middleware.AsMaVo(role)
util.ResponseFormat(c, code.AddSuccess, "鍔犲叆鑺傜偣鎴愬姛")
} else {
util.ResponseFormat(c, code.RequestParamError, "閫夋嫨鑺傜偣绫诲瀷閿欒")
@@ -79,254 +61,17 @@
}
-func AsMaVo() {
- AsMaster()
- ReplaceLineContentBySearch(Option+StartScriptAsMaVo, Option, config.Server.ScriptPath, StartServerScript)
-}
-
func (sc *SeaweedfsController) RoleOfVolumeToMasterController(c *gin.Context) {
- AsMaster()
- ReplaceLineContentBySearch(Option+StartScriptAsMaVo, Option, config.Server.ScriptPath, StartServerScript)
+ middleware.AsMaster("master")
+ script.ReplaceLineContentBySearch(config.Option+config.StartScriptAsMaVo, config.Option, config.Server.ScriptPath, config.StartServerScript)
}
func (sc *SeaweedfsController) RestartServerController(c *gin.Context) {
- StopServer(config.Server.ScriptPath)
+ script.StopServer(config.Server.ScriptPath)
+ script.StartServer(config.Server.ScriptPath)
time.Sleep(time.Second * 1)
- StartServer(config.Server.ScriptPath)
//fmt.Println("GetLocalStartupItem: ", GetLocalStartupItem(config.Server.ScriptPath, StartServerScript))
- result := strings.Split(GetLocalStartupItem(config.Server.ScriptPath, StartServerScript), "=")[1]
+ result := strings.Split(middleware.GetLocalStartupItem(config.Server.ScriptPath, config.StartServerScript), "=")[1]
fmt.Println("result: ", result)
util.ResponseFormat(c, code.Success, result)
-}
-
-//鍚姩鏈嶅姟
-func StartServer(scriptPath string) {
- util.RunScript("sh " + scriptPath + StartServerScript)
-}
-
-//鍋滄鏈嶅姟
-func StopServer(scriptPath string) {
- util.RunScript("sh " + scriptPath + StopServerScript)
-}
-
-//鏍规嵁鎼滅储鍐呭鏇挎崲鏁磋鍐呭
-func ReplaceLineContentBySearch(replaceContent string, searchContent string, scriptPath string, scriptFile string) {
- resSearchContent := GetNowLineContent(scriptPath+"/"+scriptFile, searchContent)
- replaceStr := "sed -ie 's/" + resSearchContent + "/" + replaceContent + "/g' " + scriptPath + "/" + scriptFile
- util.RunScript(replaceStr)
-}
-
-//鏇存柊鎵�鏈夎妭鐐圭殑鑴氭湰鍙傛暟
-func UpdateAllNodesScriptArgument(peersIp []string) {
- for _, ip := range peersIp {
- fmt.Println("ip: ", ip)
- url := "http://" + ip + ":7020/node/api-v/swfs/updateSWFSService"
- fmt.Println("url", url)
- resp, _ := http.Get(url)
- if resp.StatusCode == 200 {
- fmt.Println("璇锋眰瀹屾瘯", resp.StatusCode)
- }
- }
-}
-
-//璇锋眰浣滀负涓昏妭鐐规搷浣滄祦绋�
-func RequestMasterNodesOperation(nowPeers []interface{}) {
- peersIp := make([]string, 0)
- for _, val := range nowPeers {
- peersIp = append(peersIp, strings.Split(val.(string), ":")[0])
- }
- coreBaseUnit, _ := strconv.Atoi(config.Server.CoreBaseUnit)
- UpdateAllNodesScriptArgument(peersIp)
- RestartAllServer(peersIp, coreBaseUnit)
-}
-
-//閲嶅惎鎵�鏈夎妭鐐规湇鍔″苟楠岃瘉
-func Restart(ip string, timeOut int) {
- url := "http://" + ip + ":7020/node/api-v/swfs/restartServer"
- var info interface{}
- httpRes, _ := http.Get(url)
- defer httpRes.Body.Close()
- body, _ := ioutil.ReadAll(httpRes.Body)
- json.Unmarshal(body, &info)
- res, ok := info.(map[string]interface{})
- if !ok {
- fmt.Println("http response interface can not change map[string]interface{}")
- }
- startupItem := res["data"].(string)
- if httpRes.StatusCode == 200 {
- startupItem = string(body)
- }
- tick := time.Tick(1 * time.Second)
- fmt.Println("鍑嗗寮�濮嬮獙璇佽妭鐐规湇鍔�")
- for countdown := timeOut; countdown > 0; countdown-- {
- fmt.Println("绗竴娆¢獙璇�")
- result := Verification(startupItem, ip)
- if result == true {
- break
- }
- <-tick
- }
-}
-
-//楠岃瘉鏈嶅姟鐘舵��
-func Verification(startupItem string, ip string) bool {
- resStatu := false
- switch startupItem {
- case StartScriptAsVolume:
- verificationVolumeUrl := "http://" + ip + ":6700"
- _, volume1Err := http.Get(verificationVolumeUrl)
- if volume1Err == nil {
- resStatu = true
- }
- case StartScriptAsMaster:
- verificationMasterUrl := "http://" + ip + ":6333"
- _, masterErr := http.Get(verificationMasterUrl)
- if masterErr == nil {
- resStatu = true
- }
- case StartScriptAsMaVo:
- verificationMasterUrl := "http://" + ip + ":6333"
- verificationVolumeUrl := "http://" + ip + ":6700"
- _, masterErr := http.Get(verificationMasterUrl)
- _, volume1Err := http.Get(verificationVolumeUrl)
- if masterErr == nil && volume1Err == nil {
- resStatu = true
- }
- }
- return resStatu
-}
-
-//鑾峰彇鏈湴鍚姩椤�
-func GetLocalStartupItem(scriptPath string, scriptFile string) string {
- startupItem := GetNowLineContent(scriptPath+"/"+scriptFile, Option)
- fmt.Println("startupItem: ", startupItem)
- return startupItem
-}
-
-//鏋勫缓閲嶅惎娴佺▼
-func RestartAllServer(peersIp []string, coreBaseUnit int) {
- fmt.Println("寮�濮嬫瀯寤洪噸鍚祦绋�")
- coreThread := len(peersIp)/coreBaseUnit + 1
- masterIp := make([]string, 0)
- timeOut, _ := strconv.Atoi(config.Server.TimeOut)
- var waitGroup sync.WaitGroup
- for i, ip := range peersIp {
- fmt.Println("閲嶅惎绗竴缁勬湇鍔�" + ip)
- if (i+1)%coreThread == 0 {
- masterIp = append(masterIp, strings.Split(ip, ":")[0])
- fmt.Println("鍔犲叆绗竴缁勫苟寮�濮嬮獙璇佺涓�缁� masterIp: ", masterIp)
- for i := 0; i < len(masterIp); i++ {
- go Restart(masterIp[i], timeOut)
- waitGroup.Add(1) //姣忓垱寤轰竴涓猤oroutine锛屽氨鎶婁换鍔¢槦鍒椾腑浠诲姟鐨勬暟閲�+1
- }
- waitGroup.Wait() //.Wait()杩欓噷浼氬彂鐢熼樆濉烇紝鐩村埌闃熷垪涓墍鏈夌殑浠诲姟缁撴潫灏变細瑙i櫎闃诲
- masterIp = make([]string, 0)
- } else {
- masterIp = append(masterIp, strings.Split(ip, ":")[0])
- if len(peersIp) == i+1 {
- var waitGroup sync.WaitGroup
- for i := 0; i < len(masterIp); i++ {
- go Restart(masterIp[i], timeOut)
- waitGroup.Add(1) //姣忓垱寤轰竴涓猤oroutine锛屽氨鎶婁换鍔¢槦鍒椾腑浠诲姟鐨勬暟閲�+1
- }
- waitGroup.Wait() //.Wait()杩欓噷浼氬彂鐢熼樆濉烇紝鐩村埌闃熷垪涓墍鏈夌殑浠诲姟缁撴潫灏变細瑙i櫎闃诲
- masterIp = make([]string, 0)
- break
- }
- }
- continue
- }
-}
-
-//鑾峰彇鏌ユ壘鍐呭褰撳墠琛屽唴瀹�
-func GetNowLineContent(filePath string, searchContent string) string {
- scriptStr := "cat " + filePath + "| grep " + searchContent
- fmt.Println("scriptStr: ", scriptStr)
- return strings.Split(util.RunScript(scriptStr), "\n")[0]
-}
-
-//浣滀负鏁版嵁鑺傜偣鍔犲叆
-func AsVolume() bool {
- nowPeers := GetNowPeersList()
- if nowPeers == nil || len(nowPeers) == 0 {
- return false
- }
- ReplaceLineContentBySearch(Option+StartScriptAsVolume, Option, config.Server.ScriptPath, StartServerScript)
- ReplaceLineContentBySearch(GetNewPeers(), Peer, config.Server.ScriptPath, StartServerScript)
- StartServer(config.Server.ScriptPath)
- return true
-}
-
-//浣滀负涓昏妭鐐瑰姞鍏ワ紙榛樿鍖呭惈鏁版嵁鑺傜偣锛�
-func AsMaster() bool {
- AddNewMasterToPeers()
- nowPeers := GetNowPeersList()
- fmt.Println("nowPeers: ", nowPeers)
- RequestMasterNodesOperation(nowPeers)
- return true
-}
-
-//鑾峰彇褰撳墠闆嗙兢鍒楄〃
-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)
- peers := source[0]["peers"].([]interface{})
- return peers
-}
-
-//鑾峰彇褰撳墠闆嗙兢鍒楄〃鏍煎紡鍖栦俊鎭�
-func GetNewPeers() string {
- peers := GetNowPeersList()
- p := Peer + strings.Replace(strings.Trim(fmt.Sprint(peers), "[]"), " ", ",", -1)
- return p
-}
-
-//鍚戦泦缇ゅ姞鍏ユ柊鐨刴aster
-func AddNewMasterToPeers() (result bool) {
- peer := config.Server.EsServerIp + ":6333"
- addUrl := "http://" + config.Server.EsServerIp + ":" + config.Server.EsServerPort + "/" + config.BasicFS.IndexName + "/_update_by_query?refresh=true"
- 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
}
--
Gitblit v1.8.0