mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
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:
parent
500cf16142
commit
1c5039085b
@ -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;
|
||||||
|
@ -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",
|
||||||
|
@ -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
|
||||||
|
@ -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()
|
||||||
|
@ -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 {
|
||||||
|
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user