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
|
}
|