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 |  308 ++-------------------------------------------------
 1 files changed, 12 insertions(+), 296 deletions(-)

diff --git a/controllers/swfsControllers.go b/controllers/swfsControllers.go
index fcb3dbb..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(role)
+		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(role)
+		middleware.AsMaVo(role)
 		util.ResponseFormat(c, code.AddSuccess, "鍔犲叆鑺傜偣鎴愬姛")
 	} else {
 		util.ResponseFormat(c, code.RequestParamError, "閫夋嫨鑺傜偣绫诲瀷閿欒")
@@ -79,283 +61,17 @@
 
 }
 
-func AsMaVo(role string) {
-	AsMaster(role)
-	ReplaceLineContentBySearch(Option+StartScriptAsMaVo, Option, config.Server.ScriptPath, StartServerScript)
-}
-
 func (sc *SeaweedfsController) RoleOfVolumeToMasterController(c *gin.Context) {
-	AsMaster("master")
-	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)
-	StartServer(config.Server.ScriptPath)
+	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(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) {
-	//fmt.Println("sh " + scriptPath + "/" + StartServerScript)
-	util.RunScript("sh " + scriptPath + "/" + StartServerScript)
-}
-
-//鍋滄鏈嶅姟
-func StopServer(scriptPath string) {
-	//fmt.Println("sh " + scriptPath + "/" + StopServerScript)
-	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) {
-	fmt.Println("寮�濮嬫洿鏂版湰鍦伴厤缃枃浠�")
-	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)
-		fmt.Println("鏇存柊杩斿洖鐘舵�侊細", resp.StatusCode)
-		if resp.StatusCode == 200 {
-			fmt.Println("璇锋眰瀹屾瘯", resp.StatusCode)
-		}
-	}
-}
-
-//璇锋眰浣滀负褰撳墠瑙掕壊鑺傜偣鎿嶄綔娴佺▼
-func RequestNodesOperation(nowPeers []interface{}, role string) {
-	peersIp := make([]string, 0)
-	for _, val := range nowPeers {
-		peersIp = append(peersIp, strings.Split(val.(string), ":")[0])
-	}
-	coreBaseUnit, _ := strconv.Atoi(config.Server.CoreBaseUnit)
-	UpdateAllNodesScriptArgument(peersIp)
-	replaceContent := ""
-	if role == "master" {
-		replaceContent = Option + StartScriptAsMaster
-	} else if role == "master+volume" {
-		replaceContent = Option + StartScriptAsMaVo
-	}
-	ReplaceLineContentBySearch(replaceContent, Option, config.Server.ScriptPath, StartServerScript)
-	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)
-	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{}")
-	}
-	fmt.Println("res: ", res)
-	startupItem := res["data"].(string)
-	if httpRes.StatusCode != 200 {
-		return
-	}
-	fmt.Println("Restart startupItem: ", startupItem)
-	tick := time.Tick(1 * time.Second)
-	fmt.Println("鍑嗗寮�濮嬮獙璇佽妭鐐规湇鍔�")
-	for countdown := timeOut; countdown > 0; countdown-- {
-		fmt.Println("绗�", countdown, "娆¢獙璇�")
-		result := Verification(startupItem, ip)
-		fmt.Println("绗竴娆¢獙璇乺esult缁撴灉锛�", result)
-		if result == true {
-			break
-		}
-		<-tick
-	}
-	fmt.Println("楠岃瘉瀹屾瘯")
-}
-
-//楠岃瘉鏈嶅姟鐘舵��
-func Verification(startupItem string, ip string) bool {
-	resStatu := false
-	fmt.Println("Verification startupItem: ", startupItem)
-	switch startupItem {
-	case StartScriptAsVolume:
-		verificationVolumeUrl := "http://" + ip + ":6700/ui/index.html"
-		_, 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/ui/index.html"
-		_, masterErr := http.Get(verificationMasterUrl)
-		fmt.Println("masterErr", masterErr)
-		_, volume1Err := http.Get(verificationVolumeUrl)
-		fmt.Println("volume1Err", volume1Err)
-		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
-	fmt.Println("褰撳墠骞惰搴oreThread锛�", coreThread)
-	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++ {
-				fmt.Println("len masterIp: ", len(masterIp))
-				fmt.Println("绗�" + strconv.Itoa(i) + "涓嚎绋�")
-				fmt.Println("褰撳墠goroutinebe")
-				waitGroup.Add(1) //姣忓垱寤轰竴涓猤oroutine锛屽氨鎶婁换鍔¢槦鍒椾腑浠诲姟鐨勬暟閲�+1
-				fmt.Println("褰撳墠goroutineaf")
-				go Restart(masterIp[i], timeOut)
-				waitGroup.Done()
-			}
-			fmt.Println("杩欓噷涓洪樆濉烇紒锛侊紒锛侊紒")
-			waitGroup.Wait() //.Wait()杩欓噷浼氬彂鐢熼樆濉烇紝鐩村埌闃熷垪涓墍鏈夌殑浠诲姟缁撴潫灏变細瑙i櫎闃诲
-			fmt.Println("褰撳墠缁勪换鍔″畬鎴�")
-			masterIp = make([]string, 0)
-			fmt.Println("娓呯┖褰撳墠缁勬垚鍛橈細", masterIp)
-		} else {
-			masterIp = append(masterIp, strings.Split(ip, ":")[0])
-			if len(peersIp) == i+1 {
-				var waitGroup sync.WaitGroup
-				for i := 0; i < len(masterIp); i++ {
-					waitGroup.Add(1) //姣忓垱寤轰竴涓猤oroutine锛屽氨鎶婁换鍔¢槦鍒椾腑浠诲姟鐨勬暟閲�+1
-					go Restart(masterIp[i], timeOut)
-					waitGroup.Done()
-				}
-				waitGroup.Wait() //.Wait()杩欓噷浼氬彂鐢熼樆濉烇紝鐩村埌闃熷垪涓墍鏈夌殑浠诲姟缁撴潫灏变細瑙i櫎闃诲
-				masterIp = make([]string, 0)
-				break
-			}
-		}
-
-	}
-	fmt.Println("鏈嶅姟娴佺▼鎵ц瀹屾瘯")
-
-}
-
-//鑾峰彇鏌ユ壘鍐呭褰撳墠琛屽唴瀹�
-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(role string) bool {
-	AddNewMasterToPeers()
-	nowPeers := GetNowPeersList()
-	fmt.Println("nowPeers: ", nowPeers)
-	RequestNodesOperation(nowPeers, role)
-	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