From e12bca22ef82aa5a2df0448a4715b1a948604156 Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期二, 07 四月 2020 14:57:38 +0800
Subject: [PATCH] first commit

---
 controllers/swfsControllers.go |  179 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 179 insertions(+), 0 deletions(-)

diff --git a/controllers/swfsControllers.go b/controllers/swfsControllers.go
new file mode 100644
index 0000000..17d0b7b
--- /dev/null
+++ b/controllers/swfsControllers.go
@@ -0,0 +1,179 @@
+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
+}

--
Gitblit v1.8.0