Просмотр исходного кода

feat(influxdb): backend support for alias by segment

ref #6510
bergquist 9 лет назад
Родитель
Сommit
f0a0e647a0
2 измененных файлов с 23 добавлено и 1 удалено
  1. 8 0
      pkg/tsdb/influxdb/response_parser.go
  2. 15 1
      pkg/tsdb/influxdb/response_parser_test.go

+ 8 - 0
pkg/tsdb/influxdb/response_parser.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"regexp"
+	"strconv"
 	"strings"
 
 	"github.com/grafana/grafana/pkg/tsdb"
@@ -61,6 +62,8 @@ func (rp *ResponseParser) formatSerieName(row Row, column string, query *Query)
 		return rp.buildSerieNameFromQuery(row, column)
 	}
 
+	nameSegment := strings.Split(row.Name, ".")
+
 	result := legendFormat.ReplaceAllFunc([]byte(query.Alias), func(in []byte) []byte {
 		aliasFormat := string(in)
 		aliasFormat = strings.Replace(aliasFormat, "[[", "", 1)
@@ -74,6 +77,11 @@ func (rp *ResponseParser) formatSerieName(row Row, column string, query *Query)
 			return []byte(column)
 		}
 
+		pos, err := strconv.Atoi(aliasFormat)
+		if err == nil && len(nameSegment) >= pos {
+			return []byte(nameSegment[pos])
+		}
+
 		if !strings.HasPrefix(aliasFormat, "tag_") {
 			return in
 		}

+ 15 - 1
pkg/tsdb/influxdb/response_parser_test.go

@@ -72,7 +72,7 @@ func TestInfluxdbResponseParser(t *testing.T) {
 					Result{
 						Series: []Row{
 							{
-								Name:    "cpu",
+								Name:    "cpu.upc",
 								Columns: []string{"time", "mean", "sum"},
 								Tags:    map[string]string{"datacenter": "America"},
 								Values: [][]interface{}{
@@ -113,6 +113,20 @@ func TestInfluxdbResponseParser(t *testing.T) {
 
 					So(result.Series[0].Name, ShouldEqual, "alias America")
 				})
+
+				Convey("segment alias", func() {
+					query := &Query{Alias: "alias $1"}
+					result := parser.Parse(response, query)
+
+					So(result.Series[0].Name, ShouldEqual, "alias upc")
+				})
+
+				Convey("segment position out of bound", func() {
+					query := &Query{Alias: "alias $5"}
+					result := parser.Parse(response, query)
+
+					So(result.Series[0].Name, ShouldEqual, "alias $5")
+				})
 			})
 
 			Convey("[[]] alias", func() {