Prometheus: Make Prometheus streaming parser as default client (#58365)

* Introduce a new feature flag for prometheus buffered client

* Use querydata client as default and put buffered client behind the feature flag

* Remove prometheusStreamingJSONParser feature flag as it is not needed anymore

* Update tests

* Fix unit tests

* Update feature flag description
This commit is contained in:
ismail simsek 2022-11-11 19:53:12 +03:00 committed by GitHub
parent 500cf16142
commit 1c5039085b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 18 additions and 18 deletions

View File

@ -52,7 +52,7 @@ export interface FeatureToggles {
cloudWatchDynamicLabels?: boolean; cloudWatchDynamicLabels?: boolean;
datasourceQueryMultiStatus?: boolean; datasourceQueryMultiStatus?: boolean;
traceToMetrics?: boolean; traceToMetrics?: boolean;
prometheusStreamingJSONParser?: boolean; prometheusBufferedClient?: boolean;
newDBLibrary?: boolean; newDBLibrary?: boolean;
validateDashboardsOnSave?: boolean; validateDashboardsOnSave?: boolean;
autoMigrateGraphPanels?: boolean; autoMigrateGraphPanels?: boolean;

View File

@ -210,9 +210,9 @@ var (
FrontendOnly: true, FrontendOnly: true,
}, },
{ {
Name: "prometheusStreamingJSONParser", Name: "prometheusBufferedClient",
Description: "Enable streaming JSON parser for Prometheus datasource", Description: "Enable buffered (old) client for Prometheus datasource as default instead of streaming JSON parser client (new)",
State: FeatureStateBeta, State: FeatureStateStable,
}, },
{ {
Name: "newDBLibrary", Name: "newDBLibrary",

View File

@ -151,9 +151,9 @@ const (
// Enable trace to metrics links // Enable trace to metrics links
FlagTraceToMetrics = "traceToMetrics" FlagTraceToMetrics = "traceToMetrics"
// FlagPrometheusStreamingJSONParser // FlagPrometheusBufferedClient
// Enable streaming JSON parser for Prometheus datasource // Enable buffered (old) client for Prometheus datasource as default instead of streaming JSON parser client (new)
FlagPrometheusStreamingJSONParser = "prometheusStreamingJSONParser" FlagPrometheusBufferedClient = "prometheusBufferedClient"
// FlagNewDBLibrary // FlagNewDBLibrary
// Use jmoiron/sqlx rather than xorm for a few backend services // Use jmoiron/sqlx rather than xorm for a few backend services

View File

@ -79,8 +79,8 @@ func TestIntegrationPrometheusBuffered(t *testing.T) {
}) })
buf1 := &bytes.Buffer{} buf1 := &bytes.Buffer{}
err = json.NewEncoder(buf1).Encode(dtos.MetricRequest{ err = json.NewEncoder(buf1).Encode(dtos.MetricRequest{
From: "now-1h", From: "1668078080000",
To: "now", To: "1668081680000",
Queries: []*simplejson.Json{query}, Queries: []*simplejson.Json{query},
}) })
require.NoError(t, err) require.NoError(t, err)
@ -88,7 +88,7 @@ func TestIntegrationPrometheusBuffered(t *testing.T) {
// nolint:gosec // nolint:gosec
resp, err := http.Post(u, "application/json", buf1) resp, err := http.Post(u, "application/json", buf1)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, http.StatusBadRequest, resp.StatusCode) require.Equal(t, http.StatusInternalServerError, resp.StatusCode)
t.Cleanup(func() { t.Cleanup(func() {
err := resp.Body.Close() err := resp.Body.Close()
require.NoError(t, err) require.NoError(t, err)
@ -97,7 +97,8 @@ func TestIntegrationPrometheusBuffered(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.NotNil(t, outgoingRequest) require.NotNil(t, outgoingRequest)
require.Equal(t, "/api/v1/query_range?q1=1&q2=2", outgoingRequest.URL.String()) require.Equal(t, "/api/v1/query_range?end=1668081660&q1=1&q2=2&query=up&start=1668078060&step=30",
outgoingRequest.URL.String())
require.Equal(t, "custom-header-value", outgoingRequest.Header.Get("X-CUSTOM-HEADER")) require.Equal(t, "custom-header-value", outgoingRequest.Header.Get("X-CUSTOM-HEADER"))
username, pwd, ok := outgoingRequest.BasicAuth() username, pwd, ok := outgoingRequest.BasicAuth()
require.True(t, ok) require.True(t, ok)
@ -110,9 +111,7 @@ func TestIntegrationPrometheusClient(t *testing.T) {
if testing.Short() { if testing.Short() {
t.Skip("skipping integration test") t.Skip("skipping integration test")
} }
dir, path := testinfra.CreateGrafDir(t, testinfra.GrafanaOpts{ dir, path := testinfra.CreateGrafDir(t, testinfra.GrafanaOpts{})
EnableFeatureToggles: []string{"prometheusStreamingJSONParser"},
})
grafanaListeningAddr, testEnv := testinfra.StartGrafanaEnv(t, dir, path) grafanaListeningAddr, testEnv := testinfra.StartGrafanaEnv(t, dir, path)
ctx := context.Background() ctx := context.Background()

View File

@ -93,11 +93,11 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest)
return nil, err return nil, err
} }
if s.features.IsEnabled(featuremgmt.FlagPrometheusStreamingJSONParser) || s.features.IsEnabled(featuremgmt.FlagPrometheusWideSeries) { if s.features.IsEnabled(featuremgmt.FlagPrometheusBufferedClient) {
return i.queryData.Execute(ctx, req) return i.buffered.ExecuteTimeSeriesQuery(ctx, req)
} }
return i.buffered.ExecuteTimeSeriesQuery(ctx, req) return i.queryData.Execute(ctx, req)
} }
func (s *Service) CallResource(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error { func (s *Service) CallResource(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error {

View File

@ -415,7 +415,8 @@ func setup(wideFrames bool) (*testContext, error) {
JSONData: json.RawMessage(`{"timeInterval": "15s"}`), JSONData: json.RawMessage(`{"timeInterval": "15s"}`),
} }
features := &fakeFeatureToggles{flags: map[string]bool{"prometheusStreamingJSONParser": true, "prometheusWideSeries": wideFrames}} features := &fakeFeatureToggles{flags: map[string]bool{"prometheusBufferedClient": false,
"prometheusWideSeries": wideFrames}}
opts, err := client.CreateTransportOptions(settings, &setting.Cfg{}, &logtest.Fake{}) opts, err := client.CreateTransportOptions(settings, &setting.Cfg{}, &logtest.Fake{})
if err != nil { if err != nil {