diff --git a/pkg/tsdb/mqe/types.go b/pkg/tsdb/mqe/types.go index 4365114c147..4fa2c1d4e7f 100644 --- a/pkg/tsdb/mqe/types.go +++ b/pkg/tsdb/mqe/types.go @@ -42,63 +42,54 @@ func (q *Query) Build(availableSeries []string) ([]QueryToSend, error) { where := q.buildWhereClause() functions := q.buildFunctionList() - for _, v := range q.Metrics { - if !containsWildcardPattern.Match([]byte(v.Metric)) { - alias := "" - if v.Alias != "" { - alias = fmt.Sprintf(" {%s}", v.Alias) - } + for _, metric := range q.Metrics { + alias := "" + if metric.Alias != "" { + alias = fmt.Sprintf(" {%s}", metric.Alias) + } - rawQuery := fmt.Sprintf( - "`%s`%s%s %s from %v to %v", - v.Metric, - functions, - alias, - where, - q.TimeRange.GetFromAsMsEpoch(), - q.TimeRange.GetToAsMsEpoch()) + if !containsWildcardPattern.Match([]byte(metric.Metric)) { + rawQuery := q.renderQuerystring(metric.Metric, functions, alias, where, q.TimeRange) queriesToSend = append(queriesToSend, QueryToSend{ RawQuery: rawQuery, QueryRef: q, }) - continue - } + } else { + m := strings.Replace(metric.Metric, "*", ".*", -1) + mp, err := regexp.Compile(m) - m := strings.Replace(v.Metric, "*", ".*", -1) - mp, err := regexp.Compile(m) + if err != nil { + log.Error2("failed to compile regex for ", "metric", m) + continue + } - if err != nil { - log.Error2("failed to compile regex for ", "metric", m) - continue - } - - //TODO: this lookup should be cached - for _, a := range availableSeries { - if mp.Match([]byte(a)) { - alias := "" - if v.Alias != "" { - alias = fmt.Sprintf(" {%s}", v.Alias) + //TODO: this lookup should be cached + for _, wildcardMatch := range availableSeries { + if mp.Match([]byte(wildcardMatch)) { + rawQuery := q.renderQuerystring(wildcardMatch, functions, alias, where, q.TimeRange) + queriesToSend = append(queriesToSend, QueryToSend{ + RawQuery: rawQuery, + QueryRef: q, + }) } - - rawQuery := fmt.Sprintf( - "`%s`%s%s %s from %v to %v", - a, - functions, - alias, - where, - q.TimeRange.GetFromAsMsEpoch(), - q.TimeRange.GetToAsMsEpoch()) - - queriesToSend = append(queriesToSend, QueryToSend{ - RawQuery: rawQuery, - QueryRef: q, - }) } } } + return queriesToSend, nil } +func (q *Query) renderQuerystring(path, functions, alias, where string, timerange *tsdb.TimeRange) string { + return fmt.Sprintf( + "`%s`%s%s %s from %v to %v", + path, + functions, + alias, + where, + q.TimeRange.GetFromAsMsEpoch(), + q.TimeRange.GetToAsMsEpoch()) +} + func (q *Query) buildFunctionList() string { functions := "" for _, v := range q.FunctionList {