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
pull/59024/head
ismail simsek 3 years ago committed by GitHub
parent 500cf16142
commit 1c5039085b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      packages/grafana-data/src/types/featureToggles.gen.ts
  2. 6
      pkg/services/featuremgmt/registry.go
  3. 6
      pkg/services/featuremgmt/toggles_gen.go
  4. 13
      pkg/tests/api/prometheus/prometheus_test.go
  5. 6
      pkg/tsdb/prometheus/prometheus.go
  6. 3
      pkg/tsdb/prometheus/querydata/request_test.go

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

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

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

@ -79,8 +79,8 @@ func TestIntegrationPrometheusBuffered(t *testing.T) {
})
buf1 := &bytes.Buffer{}
err = json.NewEncoder(buf1).Encode(dtos.MetricRequest{
From: "now-1h",
To: "now",
From: "1668078080000",
To: "1668081680000",
Queries: []*simplejson.Json{query},
})
require.NoError(t, err)
@ -88,7 +88,7 @@ func TestIntegrationPrometheusBuffered(t *testing.T) {
// nolint:gosec
resp, err := http.Post(u, "application/json", buf1)
require.NoError(t, err)
require.Equal(t, http.StatusBadRequest, resp.StatusCode)
require.Equal(t, http.StatusInternalServerError, resp.StatusCode)
t.Cleanup(func() {
err := resp.Body.Close()
require.NoError(t, err)
@ -97,7 +97,8 @@ func TestIntegrationPrometheusBuffered(t *testing.T) {
require.NoError(t, err)
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"))
username, pwd, ok := outgoingRequest.BasicAuth()
require.True(t, ok)
@ -110,9 +111,7 @@ func TestIntegrationPrometheusClient(t *testing.T) {
if testing.Short() {
t.Skip("skipping integration test")
}
dir, path := testinfra.CreateGrafDir(t, testinfra.GrafanaOpts{
EnableFeatureToggles: []string{"prometheusStreamingJSONParser"},
})
dir, path := testinfra.CreateGrafDir(t, testinfra.GrafanaOpts{})
grafanaListeningAddr, testEnv := testinfra.StartGrafanaEnv(t, dir, path)
ctx := context.Background()

@ -93,11 +93,11 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest)
return nil, err
}
if s.features.IsEnabled(featuremgmt.FlagPrometheusStreamingJSONParser) || s.features.IsEnabled(featuremgmt.FlagPrometheusWideSeries) {
return i.queryData.Execute(ctx, req)
if s.features.IsEnabled(featuremgmt.FlagPrometheusBufferedClient) {
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 {

@ -415,7 +415,8 @@ func setup(wideFrames bool) (*testContext, error) {
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{})
if err != nil {

Loading…
Cancel
Save