From 748bfff60158c19bbd71c3edf51da47cda78066d Mon Sep 17 00:00:00 2001 From: Brendan O'Handley Date: Wed, 9 Oct 2024 10:25:18 -0500 Subject: [PATCH] Prometheus: Add series endpoint configuration (#94443) * add series endpoint configuration * gf-form is unnecessary and deprecated --- .../src/configuration/PromSettings.test.tsx | 7 +++++++ .../src/configuration/PromSettings.tsx | 20 +++++++++++++++++++ packages/grafana-prometheus/src/datasource.ts | 8 ++++++++ packages/grafana-prometheus/src/types.ts | 1 + 4 files changed, 36 insertions(+) diff --git a/packages/grafana-prometheus/src/configuration/PromSettings.test.tsx b/packages/grafana-prometheus/src/configuration/PromSettings.test.tsx index 15af11210cc..45ac59a46d7 100644 --- a/packages/grafana-prometheus/src/configuration/PromSettings.test.tsx +++ b/packages/grafana-prometheus/src/configuration/PromSettings.test.tsx @@ -112,5 +112,12 @@ describe('PromSettings', () => { fireEvent.blur(input); expect(queryByText(countError)).toBeInTheDocument(); }); + + it('should have a series endpoint configuration element', () => { + const options = defaultProps; + + render( {}} options={options} />); + expect(screen.getByText('Use series endpoint')).toBeInTheDocument(); + }); }); }); diff --git a/packages/grafana-prometheus/src/configuration/PromSettings.tsx b/packages/grafana-prometheus/src/configuration/PromSettings.tsx index c08273b4ff7..9291ec95040 100644 --- a/packages/grafana-prometheus/src/configuration/PromSettings.tsx +++ b/packages/grafana-prometheus/src/configuration/PromSettings.tsx @@ -492,6 +492,26 @@ export const PromSettings = (props: Props) => { + + Checking this option will favor the series endpoint with match[] parameter over the label values + endpoint with match[] parameter. While the label values endpoint is considered more performant, some + users may prefer the series because it has a POST method while the label values endpoint only has a GET + method. {docsTip()} + + } + interactive={true} + disabled={options.readOnly} + className={styles.switchField} + > + + diff --git a/packages/grafana-prometheus/src/datasource.ts b/packages/grafana-prometheus/src/datasource.ts index 29b53f51902..00edfe60784 100644 --- a/packages/grafana-prometheus/src/datasource.ts +++ b/packages/grafana-prometheus/src/datasource.ts @@ -111,6 +111,7 @@ export class PrometheusDatasource cacheLevel: PrometheusCacheLevel; cache: QueryCache; metricNamesAutocompleteSuggestionLimit: number; + seriesEndpoint: boolean; constructor( instanceSettings: DataSourceInstanceSettings, @@ -136,6 +137,7 @@ export class PrometheusDatasource this.customQueryParameters = new URLSearchParams(instanceSettings.jsonData.customQueryParameters); this.datasourceConfigurationPrometheusFlavor = instanceSettings.jsonData.prometheusType; this.datasourceConfigurationPrometheusVersion = instanceSettings.jsonData.prometheusVersion; + this.seriesEndpoint = instanceSettings.jsonData.seriesEndpoint ?? false; this.defaultEditor = instanceSettings.jsonData.defaultEditor; this.disableRecordingRules = instanceSettings.jsonData.disableRecordingRules ?? false; this.variables = new PrometheusVariableSupport(this, this.templateSrv); @@ -183,6 +185,12 @@ export class PrometheusDatasource } hasLabelsMatchAPISupport(): boolean { + // users may choose the series endpoint as it has a POST method + // while the label values is only GET + if (this.seriesEndpoint) { + return false; + } + return ( // https://github.com/prometheus/prometheus/releases/tag/v2.24.0 this._isDatasourceVersionGreaterOrEqualTo('2.24.0', PromApplication.Prometheus) || diff --git a/packages/grafana-prometheus/src/types.ts b/packages/grafana-prometheus/src/types.ts index a8b20b64e87..57903231250 100644 --- a/packages/grafana-prometheus/src/types.ts +++ b/packages/grafana-prometheus/src/types.ts @@ -53,6 +53,7 @@ export interface PromOptions extends DataSourceJsonData { sigV4Auth?: boolean; oauthPassThru?: boolean; codeModeMetricNamesSuggestionLimit?: number; + seriesEndpoint?: boolean; } export type ExemplarTraceIdDestination = {