From 69de6114e99403830f06adcf765e4fb3c563eac5 Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期二, 29 九月 2020 18:20:21 +0800
Subject: [PATCH] get shards by index

---
 EsApi.go |   71 +++++++++++++++++++++++++++++++++--
 1 files changed, 67 insertions(+), 4 deletions(-)

diff --git a/EsApi.go b/EsApi.go
index 5d2ce5f..0c26de1 100644
--- a/EsApi.go
+++ b/EsApi.go
@@ -257,8 +257,8 @@
 	if err != nil {
 		return nil, err
 	}
-	if len(source) == 0{
-		return source,nil
+	if len(source) == 0 {
+		return source, nil
 	}
 	faceSource := make([]map[string]interface{}, 0)
 	for index, info := range source {
@@ -358,8 +358,8 @@
 	if err != nil {
 		return nil, err
 	}
-	if len(source) == 0{
-		return source,nil
+	if len(source) == 0 {
+		return source, nil
 	}
 	faceSource := make([]map[string]interface{}, 0)
 	for index, info := range source {
@@ -1735,3 +1735,66 @@
 	}
 	return result, nil
 }
+
+type ShardInfo struct {
+	ShardIndex string `json:"shardIndex"`
+	ShardNum   int    `json:"shardNum"`
+	ShardRole  string `json:"shardRole"`
+	ShardState string `json:"shardState"`
+	ShardDocs  int    `json:"shardDocs"`
+	ShardStore string `json:"shardStore"`
+	ShardIp    string `json:"shardIp"`
+	ShardNode  string `json:"shardNode"`
+}
+
+//鑾峰彇绱㈠紩鍒嗙墖淇℃伅
+func GetShardsByIndex(serverIp string, serverPort string, indexName string) ([]ShardInfo, error) {
+	url := "http://" + serverIp + ":" + serverPort + "/_cat/shards?v"
+	buf, err := EsReq("GET", url, []byte(""))
+	if err != nil {
+		return nil, err
+	}
+	var inf = []ShardInfo{}
+	res := strings.Split(string(buf), "\n")[1:]
+	for _, r := range res {
+		if r != "" {
+
+			inx := strings.Fields(r)
+			index := inx[0]
+			shard, _ := strconv.Atoi(inx[1])
+			prired := inx[2]
+			if prired == "r" {
+				prired = "replica"
+			}
+			if prired == "p" {
+				prired = "primary"
+			}
+			state := ""
+			docs := 0
+			store := ""
+			ip := ""
+			node := ""
+			if state == "STARTED" {
+				docs, _ = strconv.Atoi(inx[4])
+				store = inx[5]
+				ip = inx[6]
+				node = inx[7]
+			}
+			if index == indexName {
+				inf = append(inf, ShardInfo{
+					ShardIndex: index,
+					ShardNum:   shard,
+					ShardRole:  prired,
+					ShardState: state,
+					ShardDocs:  docs,
+					ShardStore: store,
+					ShardIp:    ip,
+					ShardNode:  node,
+				})
+
+			}
+		}
+
+	}
+	return inf, nil
+}

--
Gitblit v1.8.0