Prometheus: (Instrumentation) Add rawExpr (pre-interpolation) to traces (#86449)
This commit is contained in:
@@ -3,6 +3,7 @@ package models
|
||||
import (
|
||||
"embed"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -12,6 +13,8 @@ import (
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend/gtime"
|
||||
sdkapi "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1"
|
||||
"github.com/prometheus/prometheus/model/labels"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
|
||||
"github.com/grafana/grafana/pkg/promlib/intervalv2"
|
||||
)
|
||||
@@ -169,11 +172,12 @@ type Scope struct {
|
||||
Matchers []*labels.Matcher
|
||||
}
|
||||
|
||||
func Parse(query backend.DataQuery, dsScrapeInterval string, intervalCalculator intervalv2.Calculator, fromAlert bool, enableScope bool) (*Query, error) {
|
||||
func Parse(span trace.Span, query backend.DataQuery, dsScrapeInterval string, intervalCalculator intervalv2.Calculator, fromAlert bool, enableScope bool) (*Query, error) {
|
||||
model := &QueryModel{}
|
||||
if err := json.Unmarshal(query.JSON, model); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
span.SetAttributes(attribute.String("rawExpr", model.Expr))
|
||||
|
||||
// Final step value for prometheus
|
||||
calculatedStep, err := calculatePrometheusInterval(model.Interval, dsScrapeInterval, int64(model.IntervalMS), model.IntervalFactor, query, intervalCalculator)
|
||||
@@ -198,6 +202,26 @@ func Parse(query backend.DataQuery, dsScrapeInterval string, intervalCalculator
|
||||
scopeFilters = model.Scope.Filters
|
||||
}
|
||||
|
||||
if len(scopeFilters) > 0 {
|
||||
span.SetAttributes(attribute.StringSlice("scopeFilters", func() []string {
|
||||
var filters []string
|
||||
for _, f := range scopeFilters {
|
||||
filters = append(filters, fmt.Sprintf("%q %q %q", f.Key, f.Operator, f.Value))
|
||||
}
|
||||
return filters
|
||||
}()))
|
||||
}
|
||||
|
||||
if len(model.AdhocFilters) > 0 {
|
||||
span.SetAttributes(attribute.StringSlice("adhocFilters", func() []string {
|
||||
var filters []string
|
||||
for _, f := range model.AdhocFilters {
|
||||
filters = append(filters, fmt.Sprintf("%q %q %q", f.Key, f.Operator, f.Value))
|
||||
}
|
||||
return filters
|
||||
}()))
|
||||
}
|
||||
|
||||
expr, err = ApplyQueryFilters(expr, scopeFilters, model.AdhocFilters)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -214,6 +238,12 @@ func Parse(query backend.DataQuery, dsScrapeInterval string, intervalCalculator
|
||||
model.Exemplar = false
|
||||
}
|
||||
|
||||
span.SetAttributes(
|
||||
attribute.String("expr", expr),
|
||||
attribute.Int64("start_unixnano", query.TimeRange.From.UnixNano()),
|
||||
attribute.Int64("stop_unixnano", query.TimeRange.To.UnixNano()),
|
||||
)
|
||||
|
||||
return &Query{
|
||||
Expr: expr,
|
||||
Step: calculatedStep,
|
||||
|
||||
Reference in New Issue
Block a user