From 7c811247ecf143e08c576986a884bedadc57dd66 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期五, 05 六月 2020 18:29:41 +0800
Subject: [PATCH] add refresh token to resp

---
 controllers/es.go |  612 ++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 399 insertions(+), 213 deletions(-)

diff --git a/controllers/es.go b/controllers/es.go
index 0753d32..9a9f8fb 100644
--- a/controllers/es.go
+++ b/controllers/es.go
@@ -1,15 +1,16 @@
 package controllers
 
 import (
-	"basic.com/dbapi.git"
+	"basic.com/valib/logger.git"
+	"bytes"
 	"encoding/json"
 	"fmt"
 	"github.com/gin-gonic/gin"
 	"math/rand"
-	"strconv"
+	"os/exec"
 	"strings"
+	"webserver/cache"
 	"webserver/extend/code"
-	"webserver/extend/config"
 	"webserver/extend/esutil"
 	"webserver/extend/util"
 	"webserver/models"
@@ -18,218 +19,51 @@
 
 type EsController struct{}
 
+type EsManagementController struct{}
+
+type EsClusterInfo struct {
+	Ip string `json:"ip"`
+}
+
+// @Security ApiKeyAuth
 // @Summary 姣斿鏁版嵁鏌ヨ
 // @Description  姣斿鏁版嵁鏌ヨ
 // @Accept  json
 // @Produce json
 // @Tags es
 // @Param reqMap body models.EsSearch true "collection 涓虹┖"
-// @Success 200 {string} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
-// @Failure 500 {string} json "{"code":500,  msg:"杩斿洖閿欒淇℃伅", success:false}"
+// @Success 200 {string} json "{"code":200, msg:"", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"", success:false}"
 // @Router /data/api-v/es/queryEsCompareData [POST]
 func PostEsCompareData(c *gin.Context) {
 	searchBody := new(models.EsSearch)
-	c.BindJSON(&searchBody)
-	isEsSource := true
-	databases := searchBody.DataBases
-	page := searchBody.Page
-	if page <= 0 {
-		page = 1
+	err := c.BindJSON(&searchBody)
+	if err != nil || searchBody.PicUrl == "" || len(searchBody.DataBases) == 0 {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
+		return
 	}
-	size := searchBody.Size
-	if size <= 0 {
-		size = 8
-	}
-	from := (page - 1) * size
-	to := page * size
-	threshold := searchBody.Threshold
-	if threshold < 0 || threshold > 100 {
-		threshold = 60
-	}
-	picUrl := searchBody.PicUrl
-	/*feature := searchBody.Feature*/
-	var featByte []byte
-	if len(picUrl) > 3 { //   linux
-		/*fileName := picUrl   // picIp 瀹氫箟鍦� fileController weedfs 鏂囦欢鏈嶅姟鍣� 璁块棶 璺緞 鍓嶇紑
-		detect := gorun.GetSimpleFaceDetect(fileName)
-		if len(detect) != 1 {
-			util.ResponseFormat(c,code.TooManyFeatureFindError,"鍥剧墖鐗瑰緛鍊艰繃澶�")
+	if searchBody.CompareNum != "" {
+		//浜屾鎼滅储锛屼笉闇�瑕佸啀姣斿浜�
+		co := service.GetCompResultByNum(searchBody.CompareNum)
+		if co != nil {
+			//浜屾鎼滅储鍜屾帓搴�
+			twiceM := GetCompareDataTwice(co, searchBody)
+			util.ResponseFormat(c, code.Success, twiceM)
 			return
-		}else {
-			featByte = detect[0]["feature"].([]byte)
-		}*/ //   linux
-	}
-	data := make(map[string]interface{})
-	searchBody.Page = 1
-	searchBody.Size = 15000
-	//searchMap := Struct2Map(*searchBody)
-	if len(databases) == 1 && databases[0] == "esData" {
-		searchBody.IsAggs = false
-		data = searchEsData(*searchBody)
-	} else {
-		isEsSource = false
-		data = service.QueryDbPersonsForCompare(*searchBody)
-	}
-	sources := data["datalist"].([]interface{})
-
-	if len(sources) > 0 {
-		//杩涜姣斿
-		sources = sourceCompare(sources, isEsSource, featByte, threshold)
-	} else {
-		fmt.Println("鏌ヨ鏉′欢涓嬫棤鏁版嵁 source 鏁版嵁涓虹┖锛�" + string(len(sources)))
-	}
-	dataLen := len(sources)
-	if from > dataLen-1 {
-		from = 0
-		to = 0
-	}
-	if to > dataLen {
-		to = dataLen
-	}
-	sources = sources[from:to] // 鏁版嵁 閮ㄥ垎鑾峰彇
-	if !isEsSource {           //  浜哄憳鏁版嵁瑕佸姞搴曞簱鍚嶇О
-		for _, sou := range sources {
-			tableId := sou.(map[string]interface{})["tableId"]
-			if tableId != nil {
-				info := QueryDbTableInfo(tableId.(string))
-				if info["tableName"] != nil {
-					sou.(map[string]interface{})["tableName"] = info["tableName"]
-				} else {
-					sou.(map[string]interface{})["tableName"] = "鍏朵粬"
-				}
-				if info["bwType"] != nil {
-					sou.(map[string]interface{})["bwType"] = info["bwType"]
-				} else {
-					sou.(map[string]interface{})["bwType"] = "4"
-				}
-			}
+		} else {
+			m := make(map[string]interface{}, 0)
+			m["compareNum"] = searchBody.CompareNum
+			m["total"] = 0
+			m["totalList"] = []CompareResult{}
+			util.ResponseFormat(c, code.CompareResultGone, m)
+			return
 		}
 	}
-	dmap := make(map[string]interface{}, 2)
-	dmap["datalist"] = sources
-	dmap["total"] = dataLen
-	util.ResponseFormat(c, code.Success, dmap)
-}
-
-// @Summary 鏌ヨ鎽勫儚鏈轰互鍙婂惎绠楁硶
-// @Description 鍏宠仈鏌ヨ鎽勫儚鏈轰互鍙婂惎绠楁硶
-// @Produce json
-// @Tags camera
-// @Success 200 {string} json "{"code":200, success:true,  msg:"璇锋眰澶勭悊鎴愬姛", data:"鎽勫儚鏈轰俊鎭�"}"
-// @Failure 500 {string} json "{"code":500, success:false   msg:"",data:"閿欒淇℃伅鍐呭"}"
-// @Router /data/api-v/camera/queryCameraAndTaskInfo [get]
-//func (ac *CameraController) QueryCameraAndTaskInfo(c *gin.Context) {
-//	var cam models.Camera
-//	rows := cam.FindAllCamTask()
-//
-//	if len(rows) == 0 {
-//		util.ResponseFormat(c, code.ComError, "娌℃湁璁板綍")
-//		return
-//	}
-//	camList := make([]map[string]interface{}, 0, 5)
-//	for _, cam := range rows {
-//		newCam := make(map[string]interface{})
-//		newCam["cameraid"] = cam.Id
-//		newCam["rtspUrl"] = cam.Rtsp
-//		tasks := cam.CamTask
-//		taskList := make([]map[string]interface{}, 0)
-//		if tasks != nil {
-//			taskmap := make(map[string]interface{})
-//			for _, task := range tasks {
-//				taskId := taskmap[task.Taskid]
-//				if taskId != nil {
-//					cameraTasks := taskmap[task.Taskid].([]models.CameraTask)
-//					cameraTasks = append(cameraTasks, task)
-//					taskmap[task.Taskid] = cameraTasks
-//				} else {
-//					cameraTasks := make([]models.CameraTask, 0)
-//					taskmap[task.Taskid] = append(cameraTasks, task)
-//				}
-//			}
-//			for key, value := range taskmap {
-//				i := make(map[string]interface{})
-//				i["taskid"] = key
-//				i["sdklist"] = value
-//				taskList = append(taskList, i)
-//			}
-//		}
-//		newCam["tasklist"] = taskList
-//		camList = append(camList, newCam)
-//	}
-//	c.JSON(200, camList)
-//
-//}
-
-func searchEsData(searchBody models.EsSearch) map[string]interface{} {
-	//璇锋眰绱㈠紩
-	index := config.EsInfo.EsIndex.VideoPersons.IndexName //  wp鍙煡浜鸿劯鏁版嵁
-	queryStr := ""
-	queryBody := searchBody.InputValue
-	//妫�绱㈡
-	if queryBody != "" {
-		queryStr = "\"must\":[{\"multi_match\":{\"query\":\"" + queryBody + "\",\"fields\":[\"alarmRules.alarmLevel^1.5\",\"ageDescription^1.5\",\"taskName^1.5\",\"baseInfo.tableName^1.5\",\"sex^2.0\",\"race^2.0\",\"content^1.0\",\"baseInfo.idCard^1.8\",\"cameraAddr^1.0\"]," +
-			"\"type\":\"cross_fields\",\"operator\":\"OR\",\"slop\":0,\"prefix_length\":0,\"max_expansions\":50,\"zero_terms_query\":\"NONE\",\"auto_generate_synonyms_phrase_query\":true,\"fuzzy_transpositions\":true,\"boost\":1}}],"
-	}
-	gteDate := searchBody.SearchTime[0]
-	lteDate := searchBody.SearchTime[1]
-	//鍒ゆ柇浠诲姟ID
-	taskIdStr := ""
-	taskId := searchBody.Tasks
-	if taskId != nil && len(taskId) > 0 {
-		esTaskId := strings.Replace(strings.Trim(fmt.Sprint(taskId), "[]"), " ", "\",\"", -1)
-		taskIdStr = "{\"terms\":{\"taskId\":[\"" + esTaskId + "\"]}},"
-	}
-	//鍒ゆ柇鎽勫儚鏈篒D
-	cameraIdStr := ""
-	cameraId := searchBody.TreeNodes
-	if cameraId != nil && len(cameraId) > 0 {
-		esCameraId := strings.Replace(strings.Trim(fmt.Sprint(cameraId), "[]"), " ", "\",\"", -1)
-		cameraIdStr = "{\"terms\":{\"cameraId\":[\"" + esCameraId + "\"]}},"
-	}
-	//鍒ゆ柇搴撹〃ID
-	tableId := searchBody.Tabs
-	esTableId := ""
-	esTableIdStr := ""
-	if tableId != nil && len(tableId) > 0 {
-		esTableId = strings.Replace(strings.Trim(fmt.Sprint(tableId), "[]"), " ", "\",\"", -1)
-		esTableIdStr = "{\"terms\":{\"baseInfo.tableId\":[\"" + esTableId + "\"]}},"
-	}
-	isCollectionStr := ""
-	isCollection := searchBody.Collection
-	if isCollection != "" {
-		isCollectionStr = "{\"term\":{\"collection\":\"" + isCollection + "\"}},"
-	}
-	webPage := searchBody.Page
-	webSize := searchBody.Size
-	from := (webPage - 1) * webSize
-	esFrom := strconv.Itoa(from)
-	esSize := strconv.Itoa(webSize)
-	//浣跨敤es搴曞眰鏈哄埗澶勭悊鍒嗛〉
-	//璇锋眰澶�
-	url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
-		"/" + index + "/_search?search_type=dfs_query_then_fetch"
-
-	var setApi dbapi.SysSetApi
-	_, sysconf := setApi.GetServerInfo()
-	analyServerFilterStr := "{\"term\":{\"analyServerId\":\"" + sysconf.ServerId + "\"}},"
-
-	//璇锋眰浣�
-	prama := "{\"from\":\"" + esFrom + "\",\"size\":\"" + esSize + "\"," +
-		//	prama := "{\"size\":\"0\"," +
-		"\"query\":{\"bool\":{" + queryStr +
-		"\"filter\":[" +
-		cameraIdStr +
-		taskIdStr +
-		isCollectionStr +
-		esTableIdStr +
-		analyServerFilterStr +
-		"{\"range\":{\"picDate\":{\"from\":\"" + gteDate + "\",\"to\":\"" + lteDate + "\",\"include_lower\":true,\"include_upper\":true,\"boost\":1}}}]}}," +
-		"\"sort\":[{\"_score\":{\"order\":\"desc\"}},{\"picDate\":{\"order\":\"desc\"}}]," +
-		"\"_source\":[\"baseInfo\",\"alarmRules\",\"sex\",\"analyServerName\",\"sdkName\",\"ageDescription\",\"content\",\"id\",\"cameraAddr\",\"picMaxUrl\",\"picDate\",\"race\",\"videoUrl\",\"picSmUrl\",\"taskName\",\"personIsHub\",\"isAlarm\",\"analyServerIp\",\"cameraId\"]}"
-	fmt.Println(prama)
-	//鏁版嵁瑙f瀽
-	tokenRes := esutil.GetEsDataReq(url, prama, true)
-	return tokenRes
+	m := make(map[string]interface{}, 0)
+	m["compareNum"] = searchBody.CompareNum
+	m["total"] = 0
+	m["totalList"] = []CompareResult{}
+	util.ResponseFormat(c, code.CompareResultGone, m)
 }
 
 func sourceCompare(sources []interface{}, isEsSource bool, campareByte []byte, threshold float32) []interface{} {
@@ -253,15 +87,367 @@
 	return dataSource
 }
 
-// type  杞� map
-func Struct2Map(obj interface{}) map[string]interface{} {
-	var data = make(map[string]interface{})
-	bytes, _ := json.Marshal(obj)
-	json.Unmarshal(bytes, &data)
-	/*t := reflect.TypeOf(obj)
-	v := reflect.ValueOf(obj)
-	for i := 0; i < t.NumField(); i++ {
-		data[t.Field(i).Name] = v.Field(i).Interface()
-	}*/
-	return data
+// @Security ApiKeyAuth
+// @Summary 鏌ヨES闆嗙兢淇℃伅-鍏ュ彛
+// @Description  鏌ヨES闆嗙兢淇℃伅-鍏ュ彛
+// @Accept  json
+// @Produce json
+// @Tags es
+// @Param obj body controllers.EsClusterInfo true "鏌ヨ闆嗙兢鍙傛暟"
+// @Success 200 {string} json "{"code":200, msg:"", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"", success:false}"
+// @Router /data/api-v/es/getEsClusterInfo [POST]
+func (em *EsManagementController) GetEsClusterInfo(c *gin.Context) {
+	var body EsClusterInfo
+	c.BindJSON(&body)
+	ip := body.Ip
+	serverIp := ""
+	if ip != "" {
+		serverIp = ip
+	} else {
+		localConf, err2 := cache.GetServerInfo()
+		if err2 != nil || localConf.ServerIp == "" {
+			logger.Debug("localConfig is wrong!!!")
+			util.ResponseFormat(c, code.QueryClusterInfoErr, err2)
+			return
+		}
+		serverIp = localConf.ServerIp
+	}
+	nodeInfos, err := getEsClusterInfors(serverIp)
+	if err != nil {
+		util.ResponseFormat(c, code.QueryClusterInfoErr, err)
+		return
+	}
+	util.ResponseFormat(c, code.Success, nodeInfos)
+}
+
+//鏌ヨES闆嗙兢淇℃伅-涓氬姟閫昏緫
+func getEsClusterInfors(ip string) ([]map[string]interface{}, error) {
+	str := "curl " + ip + ":9200/_cat/nodes?v"
+	cmd := exec.Command("sh", "-c", str)
+	var out bytes.Buffer
+	cmd.Stdout = &out
+	err := cmd.Run()
+	if err != nil {
+		return nil, err
+	}
+	infos := strings.Split(string(out.String()), "\n")
+	totalNodes := len(infos) - 1
+	var nodeInfos []map[string]interface{}
+	for i := 1; i < totalNodes; i++ {
+		nodeInfo := make(map[string]interface{})
+		context := strings.Fields(infos[i])
+		nodeIp := context[0]
+		Type := context[7]
+		var nodeType string
+		if Type == "mdi" {
+			nodeType = "涓昏妭鐐�"
+		}
+		if Type == "di" {
+			nodeType = "浠庤妭鐐�"
+		}
+		nodeInfo["ip"] = nodeIp
+		nodeInfo["nodeType"] = nodeType
+		url := "http://" + nodeIp + ":9200"
+		buf := esutil.HttpGet(url)
+		var info interface{}
+		json.Unmarshal(buf, &info)
+		tmpInfo := info.(map[string]interface{})
+		tmpName := tmpInfo["name"].(string)
+		versinInfo := tmpInfo["version"].(map[string]interface{})
+		buildDate := versinInfo["build_date"].(string)
+		nodeInfo["name"] = tmpName
+		nodeInfo["buildDate"] = buildDate
+		nodeInfos = append(nodeInfos, nodeInfo)
+	}
+	return nodeInfos, err
+}
+
+// @Security ApiKeyAuth
+// @Summary 鍒涘缓鑺傜偣
+// @Description  鍒涘缓鑺傜偣
+// @Accept  json
+// @Produce json
+// @Tags es
+// @Success 200 {string} json "{"code":200, msg:"", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"", success:false}"
+// @Router /data/api-v/es/createNode [POST]
+func (em *EsManagementController) CreateNode(c *gin.Context) {
+	msg := "鍒涘缓鑺傜偣澶辫触锛岃鑱旂郴绠$悊鍛�"
+	str := "sh /opt/script/create_first_node.sh"
+	cmd := exec.Command("sh", "-c", str)
+	var out bytes.Buffer
+	cmd.Stdout = &out
+	err := cmd.Run()
+	if err != nil {
+
+	}
+	infos := strings.Split(string(out.String()), "\n")[0]
+	if infos == "鏈嶅姟鍚姩鎴愬姛" {
+		msg = "鍒涘缓鑺傜偣鎴愬姛"
+		util.ResponseFormat(c, code.Success, msg)
+		return
+	}
+	util.ResponseFormat(c, code.CreateFirstNodeErr, msg)
+}
+
+// @Security ApiKeyAuth
+// @Summary 鍔犲叆闆嗙兢
+// @Description  鍔犲叆闆嗙兢
+// @Accept  json
+// @Produce json
+// @Tags es
+// @Param obj body controllers.AddCluster true "鍔犲叆闆嗙兢鍙傛暟"
+// @Success 200 {string} json "{"code":200, msg:"", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"", success:false}"
+// @Router /data/api-v/es/addCluster [POST]
+func (em *EsManagementController) AddCluster(c *gin.Context) {
+	var ac AddCluster
+	err := c.BindJSON(&ac)
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
+		return
+	}
+	str := "sh /opt/script/add_cluster.sh " + ac.Option + ""
+	if ac.Option == "1" {
+		info, err := updateUnicastHosts(ac.Ip)
+		if err != nil || info == false {
+			util.ResponseFormat(c, code.QueryClusterInfoErr, err)
+			return
+		}
+		if info == true {
+			info := runScript(str)
+			if info == "杩愯澶辫触" {
+				util.ResponseFormat(c, code.AddClusterInfoErr, info)
+				return
+			}
+		}
+	}
+	if ac.Option == "2" {
+		info, err := updateUnicastHosts(ac.Ip)
+		if err != nil || info == false {
+			util.ResponseFormat(c, code.QueryClusterInfoErr, err)
+			return
+		}
+		if info == true {
+			info := runScript(str)
+			if info == "杩愯澶辫触" {
+				util.ResponseFormat(c, code.AddClusterInfoErr, info)
+				return
+			}
+		}
+	} else {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
+		return
+	}
+	util.ResponseFormat(c, code.Success, "鍔犲叆鎴愬姛")
+}
+
+//鑴氭湰灏佽
+func runScript(str string) string {
+
+	cmd := exec.Command("sh", "-c", str)
+	var out bytes.Buffer
+	cmd.Stdout = &out
+	err := cmd.Run()
+	if err != nil {
+		return "杩愯澶辫触"
+	}
+	return out.String()
+}
+
+type AddCluster struct {
+	Ip     string `json:"ip"`   //闆嗙兢IP
+	Option string `json:option` //鑺傜偣绫诲瀷
+}
+
+//鏇存柊缁勬挱鍒楄〃
+func updateUnicastHosts(host string) (bool, error) {
+	nodeInfos, err := getEsClusterInfors(host)
+	if err != nil {
+		return false, err
+	}
+	var hosts []string
+	for _, val := range nodeInfos {
+		nodeType := val["nodeType"].(string)
+		if nodeType == "涓昏妭鐐�" {
+			ip := val["ip"].(string)
+			hosts = append(hosts, ip)
+		}
+	}
+	msg := false
+	for i, val := range hosts {
+		val = val + ":9300"
+		hosts[i] = val
+	}
+	verificationHosts := "[\"" + strings.Replace(strings.Trim(fmt.Sprint(hosts), "[]"), " ", "\",\"", -1) + "\"]"
+	for i, val := range hosts {
+		val = "\\\"" + val + "\\\""
+		hosts[i] = val
+	}
+	oldUnicastHost := "\\[\\\"0.0.0.0:9300\\\"\\]"
+	newUnicastHost := strings.Replace(strings.Trim(fmt.Sprint(hosts), ""), " ", ",", -1)
+	str := "sed -ie 's/discovery.zen.ping.unicast.hosts: " + oldUnicastHost + "/discovery.zen.ping.unicast.hosts: " + newUnicastHost + "/g' /opt/elasticsearch/config/elasticsearch.yml"
+	fmt.Println(str)
+	cmd := exec.Command("sh", "-c", str)
+	var out bytes.Buffer
+	cmd.Stdout = &out
+	err1 := cmd.Run()
+	if err1 != nil {
+		return false, err
+	}
+	res := getUnicastHosts()
+	fmt.Println("res:          ", res)
+	res1 := "discovery.zen.ping.unicast.hosts: " + verificationHosts + ""
+	fmt.Println("res1:         ", res1)
+	if res == res1 {
+		msg = true
+	}
+	return msg, err
+}
+
+//淇敼elasticsearch.yml鏄犲皠鏂囦欢
+// @Security ApiKeyAuth
+// @Summary 淇敼es闆嗙兢Ip
+// @Description  淇敼es闆嗙兢Ip
+// @Accept  json
+// @Produce json
+// @Tags es
+// @Param obj body controllers.Hosts true "淇敼es闆嗙兢Ip鍙傛暟"
+// @Success 200 {string} json "{"code":200, msg:"", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"", success:false}"
+// @Router /data/api-v/es/updateEsHosts [POST]
+func (em *EsManagementController) UpdateEsHosts(c *gin.Context) {
+	flag := "淇敼鎴愬姛"
+	var hosts Hosts
+	c.BindJSON(&hosts)
+	nodeInfos, err := getEsClusterInfors(hosts.OldIp)
+	var nodeType string
+	if err != nil {
+		logger.Fatal(err)
+		util.ResponseFormat(c, code.QueryClusterInfoErr, err)
+	}
+	newMasterHosts := make([]string, 0)
+	allHosts := make([]string, 0)
+	for _, val := range nodeInfos {
+		ip := val["ip"].(string)
+		tmpType := val["nodeType"].(string)
+		if ip == hosts.OldIp {
+			nodeType = tmpType
+		}
+		if tmpType == "涓昏妭鐐�" {
+			newMasterHosts = append(newMasterHosts, ip)
+		}
+		if ip != hosts.OldIp {
+			allHosts = append(allHosts, ip)
+		}
+	}
+
+	if nodeType == "涓昏妭鐐�" {
+		str1 := "sed -ie 's/network.host: " + hosts.OldIp + "/network.host: " + hosts.NewIp + "/g' /opt/elasticsearch/config/elasticsearch.yml"
+		msg1 := runScript(str1)
+		if msg1 == "杩愯澶辫触" {
+			flag = "淇敼閰嶇疆鏂囦欢澶辫触"
+		}
+		for i, host := range newMasterHosts {
+			if host == hosts.OldIp {
+				newMasterHosts[i] = hosts.NewIp
+			}
+		}
+		for i, val := range newMasterHosts {
+			val = "\\\"" + val + ":9300\\\""
+			newMasterHosts[i] = val
+		}
+		newUnicastHost := strings.Replace(strings.Trim(fmt.Sprint(newMasterHosts), ""), " ", ",", -1)
+
+		tmpStr := "cat /opt/elasticsearch/config/elasticsearch.yml | grep discovery.zen.ping.unicast.hosts:"
+		rs := runScript(tmpStr)
+		ts := strings.Split(rs, "\n")[0]
+		ots := strings.Split(ts, " ")[1]
+		outs := strings.Replace(ots, "\"", "\\\"", -1)
+		oldUnicastHost := "\\" + strings.Replace(outs, "]", "\\]", -1)
+		str2 := "sed -ie 's/discovery.zen.ping.unicast.hosts: " + oldUnicastHost + "/discovery.zen.ping.unicast.hosts: " + newUnicastHost + "/g' /opt/elasticsearch/config/elasticsearch.yml"
+		msg2 := runScript(str2)
+		if msg2 == "杩愯澶辫触" {
+			flag = "淇敼閰嶇疆鏂囦欢澶辫触"
+		}
+		for _, host := range allHosts {
+			str3 := "sshpass -p \"123\" ssh basic@" + host + " \"cd /opt/elasticsearch/config  ; " + str2 + " ; cat elasticsearch.yml\""
+			msg := runScript(str3)
+			if msg == "杩愯澶辫触" {
+				flag = "淇敼閰嶇疆鏂囦欢澶辫触"
+			}
+		}
+	} else {
+		str1 := "sed -ie 's/network.host: " + hosts.OldIp + "/network.host: " + hosts.NewIp + "/g' /opt/elasticsearch/config/elasticsearch.yml"
+		msg1 := runScript(str1)
+		if msg1 == "杩愯澶辫触" {
+			flag = "淇敼閰嶇疆鏂囦欢澶辫触"
+		}
+	}
+	if flag == "淇敼閰嶇疆鏂囦欢澶辫触" {
+		util.ResponseFormat(c, code.UpdateFail, flag)
+	}
+	util.ResponseFormat(c, code.Success, flag)
+
+}
+
+type Hosts struct {
+	NewIp string `json:newIp`
+	OldIp string `json:oldIp`
+}
+
+//func AddEsCluster(hosts []string) (string){
+//	msg := "鍔犲叆澶辫触"
+//	for i,val := range hosts{
+//		val =val+":9300"
+//		hosts[i] = val
+//	}
+//	verificationHosts := "[\""+strings.Replace(strings.Trim(fmt.Sprint(hosts), "[]"), " ", "\",\"", -1)+"\"]"
+//	for i,val := range hosts{
+//		val ="\\\""+val+"\\\""
+//		hosts[i] = val
+//	}
+//	oldUnicastHost := "\\[\\\"0.0.0.0:9300\\\"\\]"
+//	newUnicastHost := strings.Replace(strings.Trim(fmt.Sprint(hosts), ""), " ", ",", -1)
+//	str := "sed -ie 's/discovery.zen.ping.unicast.hosts: "+oldUnicastHost+"/discovery.zen.ping.unicast.hosts: "+newUnicastHost+"/g' /opt/elasticsearch/config/elasticsearch.yml"
+//	fmt.Println(str)
+//	cmd := exec.Command("sh","-c",str)
+//	var out bytes.Buffer
+//	cmd.Stdout = &out
+//	err := cmd.Run()
+//	if err != nil {
+//
+//	}
+//	res := getUnicastHosts()
+//	fmt.Println("res:          ",res)
+//	res1 := "discovery.zen.ping.unicast.hosts: "+verificationHosts+""
+//	fmt.Println("res1:         ",res1)
+//	if res == res1{
+//		msg = "鍔犲叆鎴愬姛"
+//	}
+//	str2 := "echo \"node.master: true\" >> /opt/elasticsearch/config/elasticsearch.yml"
+//	cmd2 := exec.Command("sh","-c",str2)
+//	var out2 bytes.Buffer
+//	cmd2.Stdout = &out2
+//	err2 := cmd2.Run()
+//	if err2 != nil {
+//		msg = "鍔犲叆澶辫触"
+//	}
+//	return msg
+//
+//}
+
+func getUnicastHosts() string {
+	str := "cat /opt/elasticsearch/config/elasticsearch.yml | grep discovery.zen.ping.unicast.hosts:"
+	cmd := exec.Command("sh", "-c", str)
+	var out bytes.Buffer
+	cmd.Stdout = &out
+	err := cmd.Run()
+	if err != nil {
+
+	}
+	infos := strings.Split(string(out.String()), "\n")[0]
+	return infos
+
 }

--
Gitblit v1.8.0