From ee0f1a0f36826a3f1458feac9d630c3cdbcd357e Mon Sep 17 00:00:00 2001 From: bergquist Date: Wed, 21 Sep 2016 13:17:36 +0200 Subject: [PATCH] feat(prometheus): handle more errors --- pkg/tsdb/prometheus/prometheus.go | 28 ++++++++++++++++++---------- pkg/tsdb/prometheus/types.go | 2 ++ 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/pkg/tsdb/prometheus/prometheus.go b/pkg/tsdb/prometheus/prometheus.go index b32a99220b2..2ac21794ef9 100644 --- a/pkg/tsdb/prometheus/prometheus.go +++ b/pkg/tsdb/prometheus/prometheus.go @@ -52,18 +52,14 @@ func (e *PrometheusExecutor) Execute(queries tsdb.QuerySlice, queryContext *tsdb return resultWithError(result, err) } - from, _ := queryContext.TimeRange.FromTime() - to, _ := queryContext.TimeRange.ToTime() - - query, err := parseQuery(queries) - + query, err := parseQuery(queries, queryContext) if err != nil { return resultWithError(result, err) } timeRange := prometheus.Range{ - Start: from, - End: to, + Start: query.Start, + End: query.End, Step: query.Step, } @@ -78,9 +74,9 @@ func (e *PrometheusExecutor) Execute(queries tsdb.QuerySlice, queryContext *tsdb } func formatLegend(metric pmodel.Metric, query *PrometheusQuery) string { - r, _ := regexp.Compile(`\{\{\s*(.+?)\s*\}\}`) + reg, _ := regexp.Compile(`\{\{\s*(.+?)\s*\}\}`) - result := r.ReplaceAllFunc([]byte(query.LegendFormat), func(in []byte) []byte { + result := reg.ReplaceAllFunc([]byte(query.LegendFormat), func(in []byte) []byte { ind := strings.Replace(strings.Replace(string(in), "{{", "", 1), "}}", "", 1) if val, exists := metric[pmodel.LabelName(ind)]; exists { return []byte(val) @@ -92,7 +88,7 @@ func formatLegend(metric pmodel.Metric, query *PrometheusQuery) string { return string(result) } -func parseQuery(queries tsdb.QuerySlice) (*PrometheusQuery, error) { +func parseQuery(queries tsdb.QuerySlice, queryContext *tsdb.QueryContext) (*PrometheusQuery, error) { queryModel := queries[0] expr, err := queryModel.Model.Get("expr").String() @@ -110,10 +106,22 @@ func parseQuery(queries tsdb.QuerySlice) (*PrometheusQuery, error) { return nil, err } + start, err := queryContext.TimeRange.FromTime() + if err != nil { + return nil, err + } + + end, err := queryContext.TimeRange.ToTime() + if err != nil { + return nil, err + } + return &PrometheusQuery{ Expr: expr, Step: time.Second * time.Duration(step), LegendFormat: format, + Start: start, + End: end, }, nil } diff --git a/pkg/tsdb/prometheus/types.go b/pkg/tsdb/prometheus/types.go index 67d9ae40670..8ed665d0123 100644 --- a/pkg/tsdb/prometheus/types.go +++ b/pkg/tsdb/prometheus/types.go @@ -6,4 +6,6 @@ type PrometheusQuery struct { Expr string Step time.Duration LegendFormat string + Start time.Time + End time.Time }