Explorar el Código

fix(influxdb): add support for regex measurments

closes #6560
bergquist hace 9 años
padre
commit
4fdfee739a
Se han modificado 2 ficheros con 22 adiciones y 2 borrados
  1. 10 2
      pkg/tsdb/influxdb/query.go
  2. 12 0
      pkg/tsdb/influxdb/query_test.go

+ 10 - 2
pkg/tsdb/influxdb/query.go

@@ -11,7 +11,8 @@ import (
 )
 
 var (
-	regexpOperatorPattern *regexp.Regexp = regexp.MustCompile(`^\/.*\/$`)
+	regexpOperatorPattern    *regexp.Regexp = regexp.MustCompile(`^\/.*\/$`)
+	regexpMeasurementPattern *regexp.Regexp = regexp.MustCompile(`^\/.*\/$`)
 )
 
 func (query *Query) Build(queryContext *tsdb.QueryContext) (string, error) {
@@ -108,7 +109,14 @@ func (query *Query) renderMeasurement() string {
 	} else {
 		policy = `"` + query.Policy + `".`
 	}
-	return fmt.Sprintf(` FROM %s"%s"`, policy, query.Measurement)
+
+	measurement := query.Measurement
+
+	if !regexpMeasurementPattern.Match([]byte(measurement)) {
+		measurement = fmt.Sprintf(`"%s"`, measurement)
+	}
+
+	return fmt.Sprintf(` FROM %s%s`, policy, measurement)
 }
 
 func (query *Query) renderWhereClause() string {

+ 12 - 0
pkg/tsdb/influxdb/query_test.go

@@ -120,5 +120,17 @@ func TestInfluxdbQueryBuilder(t *testing.T) {
 
 			So(strings.Join(query.renderTags(), ""), ShouldEqual, `"key" = 'value'`)
 		})
+
+		Convey("can render regular measurement", func() {
+			query := &Query{Measurement: `apa`, Policy: "policy"}
+
+			So(query.renderMeasurement(), ShouldEqual, ` FROM "policy"."apa"`)
+		})
+
+		Convey("can render regexp measurement", func() {
+			query := &Query{Measurement: `/apa/`, Policy: "policy"}
+
+			So(query.renderMeasurement(), ShouldEqual, ` FROM "policy"./apa/`)
+		})
 	})
 }