From 1e8beb89831b66cb5d9e0b92e3ff173096cb75f7 Mon Sep 17 00:00:00 2001 From: utkarshcmu Date: Tue, 1 Nov 2016 17:55:45 -0700 Subject: [PATCH 1/5] Fixed intervalFormat for Graphite Alerting --- pkg/tsdb/graphite/graphite.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/pkg/tsdb/graphite/graphite.go b/pkg/tsdb/graphite/graphite.go index a2783a107fe..10eb044c5bd 100644 --- a/pkg/tsdb/graphite/graphite.go +++ b/pkg/tsdb/graphite/graphite.go @@ -11,6 +11,7 @@ import ( "path" "strings" "time" + "regexp" "golang.org/x/net/context/ctxhttp" @@ -58,9 +59,9 @@ func (e *GraphiteExecutor) Execute(ctx context.Context, queries tsdb.QuerySlice, for _, query := range queries { if fullTarget, err := query.Model.Get("targetFull").String(); err == nil { - formData["target"] = []string{fullTarget} + formData["target"] = []string{fixIntervalFormat(fullTarget)} } else { - formData["target"] = []string{query.Model.Get("target").MustString()} + formData["target"] = []string{fixIntervalFormat(query.Model.Get("target").MustString())} } } @@ -150,3 +151,17 @@ func formatTimeRange(input string) string { } return strings.Replace(strings.Replace(input, "m", "min", -1), "M", "mon", -1) } + +func fixIntervalFormat(target string) string { + rMinute := regexp.MustCompile("'(\\d+)m'") + rMin := regexp.MustCompile("m") + target = rMinute.ReplaceAllStringFunc(target, func(m string) string { + return rMin.ReplaceAllString(m, "min") + }) + rMonth := regexp.MustCompile("'(\\d+)M'") + rMon := regexp.MustCompile("M") + target = rMonth.ReplaceAllStringFunc(target, func(M string) string { + return rMon.ReplaceAllString(M, "mon") + }) + return target +} From 2088363bf9979ca55879d6ab99736182d6731ac6 Mon Sep 17 00:00:00 2001 From: utkarshcmu Date: Wed, 2 Nov 2016 00:00:18 -0700 Subject: [PATCH 2/5] Added tests for graphite alerting --- pkg/tsdb/graphite/graphite_test.go | 46 ++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/pkg/tsdb/graphite/graphite_test.go b/pkg/tsdb/graphite/graphite_test.go index 7a3bba9035b..f953badb17a 100644 --- a/pkg/tsdb/graphite/graphite_test.go +++ b/pkg/tsdb/graphite/graphite_test.go @@ -1 +1,47 @@ package graphite + +import ( + . "github.com/smartystreets/goconvey/convey" + "testing" +) + +func TestGraphiteFunctions(t *testing.T) { + Convey("Testing Graphite Executor", t, func() { + + Convey("formatting time range for now", func() { + + timeRange := formatTimeRange("now") + So(timeRange, ShouldEqual, "now") + + }) + + Convey("formatting time range for now-1m", func() { + + timeRange := formatTimeRange("now-1m") + So(timeRange, ShouldEqual, "now-1min") + + }) + + Convey("formatting time range for now-1M", func() { + + timeRange := formatTimeRange("now-1M") + So(timeRange, ShouldEqual, "now-1mon") + + }) + + Convey("fix interval format in query for 1m", func() { + + timeRange := formatTimeRange("aliasByNode(hitcount(averageSeries(app.grafana.*.dashboards.views.count), '1m'), 4)") + So(timeRange, ShouldEqual, "aliasByNode(hitcount(averageSeries(app.grafana.*.dashboards.views.count), '1min'), 4)") + + }) + + Convey("fix interval format in query for 1M", func() { + + timeRange := formatTimeRange("aliasByNode(hitcount(averageSeries(app.grafana.*.dashboards.views.count), '1M'), 4)") + So(timeRange, ShouldEqual, "aliasByNode(hitcount(averageSeries(app.grafana.*.dashboards.views.count), '1mon'), 4)") + + }) + + }) +} From a4a2e35bb247417f68b5c2901908ac55bc559147 Mon Sep 17 00:00:00 2001 From: utkarshcmu Date: Wed, 2 Nov 2016 02:07:08 -0700 Subject: [PATCH 3/5] Verified interval format function and gofmt check --- pkg/tsdb/graphite/graphite.go | 7 ++++--- pkg/tsdb/graphite/graphite_test.go | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pkg/tsdb/graphite/graphite.go b/pkg/tsdb/graphite/graphite.go index 10eb044c5bd..f372079f991 100644 --- a/pkg/tsdb/graphite/graphite.go +++ b/pkg/tsdb/graphite/graphite.go @@ -9,9 +9,9 @@ import ( "net/http" "net/url" "path" + "regexp" "strings" "time" - "regexp" "golang.org/x/net/context/ctxhttp" @@ -153,15 +153,16 @@ func formatTimeRange(input string) string { } func fixIntervalFormat(target string) string { - rMinute := regexp.MustCompile("'(\\d+)m'") + rMinute := regexp.MustCompile(`'(\d+)m'`) rMin := regexp.MustCompile("m") target = rMinute.ReplaceAllStringFunc(target, func(m string) string { return rMin.ReplaceAllString(m, "min") }) - rMonth := regexp.MustCompile("'(\\d+)M'") + rMonth := regexp.MustCompile(`'(\d+)M'`) rMon := regexp.MustCompile("M") target = rMonth.ReplaceAllStringFunc(target, func(M string) string { return rMon.ReplaceAllString(M, "mon") }) + glog.Debug("Graphite Query", "target", target) return target } diff --git a/pkg/tsdb/graphite/graphite_test.go b/pkg/tsdb/graphite/graphite_test.go index f953badb17a..24b81b62af5 100644 --- a/pkg/tsdb/graphite/graphite_test.go +++ b/pkg/tsdb/graphite/graphite_test.go @@ -6,7 +6,7 @@ import ( ) func TestGraphiteFunctions(t *testing.T) { - Convey("Testing Graphite Executor", t, func() { + Convey("Testing Graphite Functions", t, func() { Convey("formatting time range for now", func() { From 33ee85ede989aa695b40efa48d2e10b7553f0e5f Mon Sep 17 00:00:00 2001 From: utkarshcmu Date: Wed, 2 Nov 2016 11:11:06 -0700 Subject: [PATCH 4/5] Commented strange behavior of tests --- pkg/tsdb/graphite/graphite_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pkg/tsdb/graphite/graphite_test.go b/pkg/tsdb/graphite/graphite_test.go index 24b81b62af5..f3b03a8b205 100644 --- a/pkg/tsdb/graphite/graphite_test.go +++ b/pkg/tsdb/graphite/graphite_test.go @@ -43,5 +43,21 @@ func TestGraphiteFunctions(t *testing.T) { }) + /* + Convey("should not override query", func() { + + timeRange := formatTimeRange("app.grafana.*.dashboards.views.1M.count") + So(timeRange, ShouldEqual, "app.grafana.*.dashboards.views.1M.count") + + }) + + Convey("should not override query", func() { + + timeRange := formatTimeRange("app.grafana.*.dashboards.views.1m.count") + So(timeRange, ShouldEqual, "app.grafana.*.dashboards.views.1m.count") + + }) + + */ }) } From fc91231104d3e7171eccd271f3932833618090e1 Mon Sep 17 00:00:00 2001 From: utkarshcmu Date: Wed, 2 Nov 2016 22:31:59 -0700 Subject: [PATCH 5/5] Fixed failing tests --- pkg/tsdb/graphite/graphite.go | 1 - pkg/tsdb/graphite/graphite_test.go | 22 ++++++++++------------ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/pkg/tsdb/graphite/graphite.go b/pkg/tsdb/graphite/graphite.go index f372079f991..a4c3cd8d947 100644 --- a/pkg/tsdb/graphite/graphite.go +++ b/pkg/tsdb/graphite/graphite.go @@ -163,6 +163,5 @@ func fixIntervalFormat(target string) string { target = rMonth.ReplaceAllStringFunc(target, func(M string) string { return rMon.ReplaceAllString(M, "mon") }) - glog.Debug("Graphite Query", "target", target) return target } diff --git a/pkg/tsdb/graphite/graphite_test.go b/pkg/tsdb/graphite/graphite_test.go index f3b03a8b205..c1a2736293b 100644 --- a/pkg/tsdb/graphite/graphite_test.go +++ b/pkg/tsdb/graphite/graphite_test.go @@ -31,33 +31,31 @@ func TestGraphiteFunctions(t *testing.T) { Convey("fix interval format in query for 1m", func() { - timeRange := formatTimeRange("aliasByNode(hitcount(averageSeries(app.grafana.*.dashboards.views.count), '1m'), 4)") + timeRange := fixIntervalFormat("aliasByNode(hitcount(averageSeries(app.grafana.*.dashboards.views.count), '1m'), 4)") So(timeRange, ShouldEqual, "aliasByNode(hitcount(averageSeries(app.grafana.*.dashboards.views.count), '1min'), 4)") }) Convey("fix interval format in query for 1M", func() { - timeRange := formatTimeRange("aliasByNode(hitcount(averageSeries(app.grafana.*.dashboards.views.count), '1M'), 4)") + timeRange := fixIntervalFormat("aliasByNode(hitcount(averageSeries(app.grafana.*.dashboards.views.count), '1M'), 4)") So(timeRange, ShouldEqual, "aliasByNode(hitcount(averageSeries(app.grafana.*.dashboards.views.count), '1mon'), 4)") }) - /* - Convey("should not override query", func() { + Convey("should not override query for 1M", func() { - timeRange := formatTimeRange("app.grafana.*.dashboards.views.1M.count") - So(timeRange, ShouldEqual, "app.grafana.*.dashboards.views.1M.count") + timeRange := fixIntervalFormat("app.grafana.*.dashboards.views.1M.count") + So(timeRange, ShouldEqual, "app.grafana.*.dashboards.views.1M.count") - }) + }) - Convey("should not override query", func() { + Convey("should not override query for 1m", func() { - timeRange := formatTimeRange("app.grafana.*.dashboards.views.1m.count") - So(timeRange, ShouldEqual, "app.grafana.*.dashboards.views.1m.count") + timeRange := fixIntervalFormat("app.grafana.*.dashboards.views.1m.count") + So(timeRange, ShouldEqual, "app.grafana.*.dashboards.views.1m.count") - }) + }) - */ }) }