Prometheus: (Chore) Remove experimental unshipped prometheusWideSerie… (#73751)
This commit is contained in:
@@ -38,7 +38,7 @@ func BenchmarkExemplarJson(b *testing.B) {
|
||||
responseBytes, err := os.ReadFile(responseFileName)
|
||||
require.NoError(b, err)
|
||||
|
||||
tCtx, err := setup(true)
|
||||
tCtx, err := setup()
|
||||
require.NoError(b, err)
|
||||
b.ResetTimer()
|
||||
for n := 0; n < b.N; n++ {
|
||||
@@ -66,7 +66,7 @@ func BenchmarkRangeJson(b *testing.B) {
|
||||
err error
|
||||
)
|
||||
body, q := createJsonTestData(1642000000, 1, 300, 400)
|
||||
tCtx, err := setup(true)
|
||||
tCtx, err := setup()
|
||||
require.NoError(b, err)
|
||||
|
||||
b.ResetTimer()
|
||||
|
||||
@@ -35,14 +35,10 @@ func TestRangeResponses(t *testing.T) {
|
||||
}
|
||||
|
||||
for _, test := range tt {
|
||||
enableWideSeries := false
|
||||
queryFileName := filepath.Join("../testdata", test.filepath+".query.json")
|
||||
responseFileName := filepath.Join("../testdata", test.filepath+".result.json")
|
||||
goldenFileName := test.filepath + ".result.golden"
|
||||
t.Run(test.name, goldenScenario(test.name, queryFileName, responseFileName, goldenFileName, enableWideSeries))
|
||||
enableWideSeries = true
|
||||
goldenFileName = test.filepath + ".result.streaming-wide.golden"
|
||||
t.Run(test.name, goldenScenario(test.name, queryFileName, responseFileName, goldenFileName, enableWideSeries))
|
||||
t.Run(test.name, goldenScenario(test.name, queryFileName, responseFileName, goldenFileName))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,18 +51,14 @@ func TestExemplarResponses(t *testing.T) {
|
||||
}
|
||||
|
||||
for _, test := range tt {
|
||||
enableWideSeries := false
|
||||
queryFileName := filepath.Join("../testdata", test.filepath+".query.json")
|
||||
responseFileName := filepath.Join("../testdata", test.filepath+".result.json")
|
||||
goldenFileName := test.filepath + ".result.golden"
|
||||
t.Run(test.name, goldenScenario(test.name, queryFileName, responseFileName, goldenFileName, enableWideSeries))
|
||||
enableWideSeries = true
|
||||
goldenFileName = test.filepath + ".result.streaming-wide.golden"
|
||||
t.Run(test.name, goldenScenario(test.name, queryFileName, responseFileName, goldenFileName, enableWideSeries))
|
||||
t.Run(test.name, goldenScenario(test.name, queryFileName, responseFileName, goldenFileName))
|
||||
}
|
||||
}
|
||||
|
||||
func goldenScenario(name, queryFileName, responseFileName, goldenFileName string, wide bool) func(t *testing.T) {
|
||||
func goldenScenario(name, queryFileName, responseFileName, goldenFileName string) func(t *testing.T) {
|
||||
return func(t *testing.T) {
|
||||
query, err := loadStoredQuery(queryFileName)
|
||||
require.NoError(t, err)
|
||||
@@ -75,7 +67,7 @@ func goldenScenario(name, queryFileName, responseFileName, goldenFileName string
|
||||
responseBytes, err := os.ReadFile(responseFileName)
|
||||
require.NoError(t, err)
|
||||
|
||||
result, err := runQuery(responseBytes, query, wide)
|
||||
result, err := runQuery(responseBytes, query)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, result.Responses, 1)
|
||||
|
||||
@@ -146,8 +138,8 @@ func loadStoredQuery(fileName string) (*backend.QueryDataRequest, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func runQuery(response []byte, q *backend.QueryDataRequest, wide bool) (*backend.QueryDataResponse, error) {
|
||||
tCtx, err := setup(wide)
|
||||
func runQuery(response []byte, q *backend.QueryDataRequest) (*backend.QueryDataResponse, error) {
|
||||
tCtx, err := setup()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -42,7 +42,6 @@ type QueryData struct {
|
||||
ID int64
|
||||
URL string
|
||||
TimeInterval string
|
||||
enableWideSeries bool
|
||||
enableDataplane bool
|
||||
exemplarSampler func() exemplar.Sampler
|
||||
}
|
||||
@@ -82,7 +81,6 @@ func New(
|
||||
TimeInterval: timeInterval,
|
||||
ID: settings.ID,
|
||||
URL: settings.URL,
|
||||
enableWideSeries: features.IsEnabled(featuremgmt.FlagPrometheusWideSeries),
|
||||
enableDataplane: features.IsEnabled(featuremgmt.FlagPrometheusDataplane),
|
||||
exemplarSampler: exemplarSampler,
|
||||
}, nil
|
||||
|
||||
@@ -66,7 +66,7 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
tctx, err := setup(true)
|
||||
tctx, err := setup()
|
||||
require.NoError(t, err)
|
||||
|
||||
qm := models.QueryModel{
|
||||
@@ -132,7 +132,7 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
|
||||
},
|
||||
JSON: b,
|
||||
}
|
||||
tctx, err := setup(true)
|
||||
tctx, err := setup()
|
||||
require.NoError(t, err)
|
||||
res, err := execute(tctx, query, result)
|
||||
require.NoError(t, err)
|
||||
@@ -143,7 +143,7 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
|
||||
require.Equal(t, "Time", res[0].Fields[0].Name)
|
||||
require.Len(t, res[0].Fields[1].Labels, 2)
|
||||
require.Equal(t, "app=Application, tag2=tag2", res[0].Fields[1].Labels.String())
|
||||
require.Equal(t, "legend Application", res[0].Fields[1].Name)
|
||||
require.Equal(t, "legend Application", res[0].Name)
|
||||
|
||||
// Ensure the timestamps are UTC zoned
|
||||
testValue := res[0].Fields[0].At(0)
|
||||
@@ -181,7 +181,7 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
|
||||
},
|
||||
JSON: b,
|
||||
}
|
||||
tctx, err := setup(true)
|
||||
tctx, err := setup()
|
||||
require.NoError(t, err)
|
||||
res, err := execute(tctx, query, result)
|
||||
|
||||
@@ -191,8 +191,8 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
|
||||
require.Equal(t, time.Unix(1, 0).UTC(), res[0].Fields[0].At(0))
|
||||
require.Equal(t, time.Unix(4, 0).UTC(), res[0].Fields[0].At(1))
|
||||
require.Equal(t, res[0].Fields[1].Len(), 2)
|
||||
require.Equal(t, float64(1), *res[0].Fields[1].At(0).(*float64))
|
||||
require.Equal(t, float64(4), *res[0].Fields[1].At(1).(*float64))
|
||||
require.Equal(t, float64(1), res[0].Fields[1].At(0).(float64))
|
||||
require.Equal(t, float64(4), res[0].Fields[1].At(1).(float64))
|
||||
})
|
||||
|
||||
t.Run("matrix response with from alerting missed data points should be parsed correctly", func(t *testing.T) {
|
||||
@@ -226,7 +226,7 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
|
||||
},
|
||||
JSON: b,
|
||||
}
|
||||
tctx, err := setup(true)
|
||||
tctx, err := setup()
|
||||
require.NoError(t, err)
|
||||
res, err := execute(tctx, query, result)
|
||||
|
||||
@@ -237,7 +237,7 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
|
||||
require.Equal(t, res[0].Fields[0].Name, "Time")
|
||||
require.Len(t, res[0].Fields[1].Labels, 2)
|
||||
require.Equal(t, res[0].Fields[1].Labels.String(), "app=Application, tag2=tag2")
|
||||
require.Equal(t, "{app=\"Application\", tag2=\"tag2\"}", res[0].Fields[1].Name)
|
||||
require.Equal(t, "{app=\"Application\", tag2=\"tag2\"}", res[0].Name)
|
||||
})
|
||||
|
||||
t.Run("matrix response with NaN value should be changed to null", func(t *testing.T) {
|
||||
@@ -270,13 +270,13 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
|
||||
JSON: b,
|
||||
}
|
||||
|
||||
tctx, err := setup(true)
|
||||
tctx, err := setup()
|
||||
require.NoError(t, err)
|
||||
res, err := execute(tctx, query, result)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, "{app=\"Application\"}", res[0].Fields[1].Name)
|
||||
require.True(t, math.IsNaN(*res[0].Fields[1].At(0).(*float64)))
|
||||
require.Equal(t, "{app=\"Application\"}", res[0].Name)
|
||||
require.True(t, math.IsNaN(res[0].Fields[1].At(0).(float64)))
|
||||
})
|
||||
|
||||
t.Run("vector response should be parsed normally", func(t *testing.T) {
|
||||
@@ -302,7 +302,7 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
|
||||
query := backend.DataQuery{
|
||||
JSON: b,
|
||||
}
|
||||
tctx, err := setup(true)
|
||||
tctx, err := setup()
|
||||
require.NoError(t, err)
|
||||
res, err := execute(tctx, query, qr)
|
||||
require.NoError(t, err)
|
||||
@@ -314,7 +314,7 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
|
||||
require.Equal(t, res[0].Fields[0].Name, "Time")
|
||||
require.Len(t, res[0].Fields[1].Labels, 2)
|
||||
require.Equal(t, res[0].Fields[1].Labels.String(), "app=Application, tag2=tag2")
|
||||
require.Equal(t, "legend Application", res[0].Fields[1].Name)
|
||||
require.Equal(t, "legend Application", res[0].Name)
|
||||
|
||||
// Ensure the timestamps are UTC zoned
|
||||
testValue := res[0].Fields[0].At(0)
|
||||
@@ -343,7 +343,7 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
|
||||
query := backend.DataQuery{
|
||||
JSON: b,
|
||||
}
|
||||
tctx, err := setup(true)
|
||||
tctx, err := setup()
|
||||
require.NoError(t, err)
|
||||
res, err := execute(tctx, query, qr)
|
||||
require.NoError(t, err)
|
||||
@@ -427,7 +427,7 @@ type testContext struct {
|
||||
queryData *querydata.QueryData
|
||||
}
|
||||
|
||||
func setup(wideFrames bool) (*testContext, error) {
|
||||
func setup() (*testContext, error) {
|
||||
tracer := tracing.InitializeTracerForTest()
|
||||
httpProvider := &fakeHttpClientProvider{
|
||||
opts: sdkhttpclient.Options{
|
||||
@@ -443,8 +443,7 @@ func setup(wideFrames bool) (*testContext, error) {
|
||||
JSONData: json.RawMessage(`{"timeInterval": "15s"}`),
|
||||
}
|
||||
|
||||
features := &fakeFeatureToggles{flags: map[string]bool{"prometheusBufferedClient": false,
|
||||
"prometheusWideSeries": wideFrames}}
|
||||
features := &fakeFeatureToggles{flags: map[string]bool{"prometheusBufferedClient": false}}
|
||||
|
||||
opts, err := client.CreateTransportOptions(settings, &setting.Cfg{}, &logtest.Fake{})
|
||||
if err != nil {
|
||||
|
||||
@@ -30,9 +30,7 @@ func (s *QueryData) parseResponse(ctx context.Context, q *models.Query, res *htt
|
||||
|
||||
iter := jsoniter.Parse(jsoniter.ConfigDefault, res.Body, 1024)
|
||||
r := converter.ReadPrometheusStyleResult(iter, converter.Options{
|
||||
MatrixWideSeries: s.enableWideSeries,
|
||||
VectorWideSeries: s.enableWideSeries,
|
||||
Dataplane: s.enableDataplane,
|
||||
Dataplane: s.enableDataplane,
|
||||
})
|
||||
|
||||
// Add frame to attach metadata
|
||||
@@ -42,13 +40,9 @@ func (s *QueryData) parseResponse(ctx context.Context, q *models.Query, res *htt
|
||||
|
||||
// The ExecutedQueryString can be viewed in QueryInspector in UI
|
||||
for i, frame := range r.Frames {
|
||||
if s.enableWideSeries {
|
||||
addMetadataToWideFrame(q, frame)
|
||||
} else {
|
||||
addMetadataToMultiFrame(q, frame, s.enableDataplane)
|
||||
if i == 0 {
|
||||
frame.Meta.ExecutedQueryString = executedQueryString(q)
|
||||
}
|
||||
addMetadataToMultiFrame(q, frame, s.enableDataplane)
|
||||
if i == 0 {
|
||||
frame.Meta.ExecutedQueryString = executedQueryString(q)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,22 +129,6 @@ func addMetadataToMultiFrame(q *models.Query, frame *data.Frame, enableDataplane
|
||||
}
|
||||
}
|
||||
|
||||
func addMetadataToWideFrame(q *models.Query, frame *data.Frame) {
|
||||
if frame.Meta == nil {
|
||||
frame.Meta = &data.FrameMeta{}
|
||||
}
|
||||
frame.Meta.ExecutedQueryString = executedQueryString(q)
|
||||
if len(frame.Fields) < 2 {
|
||||
return
|
||||
}
|
||||
frame.Fields[0].Config = &data.FieldConfig{Interval: float64(q.Step.Milliseconds())}
|
||||
for _, f := range frame.Fields {
|
||||
if f.Type() == data.FieldTypeFloat64 || f.Type() == data.FieldTypeNullableFloat64 {
|
||||
f.Name = getName(q, f)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// this is based on the logic from the String() function in github.com/prometheus/common/model.go
|
||||
func metricNameFromLabels(f *data.Field) string {
|
||||
labels := f.Labels
|
||||
|
||||
Reference in New Issue
Block a user