From df6223024fb4f1de5d41f537d29e9eda3b5a0ce9 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Wed, 24 Nov 2021 07:04:44 -0500 Subject: [PATCH] Prometheus: Fix running of health check query based on access mode (#42189) (#42213) * Prometheus: Use this.query for health check * Update alertMessage in e2e tests (cherry picked from commit 1b4f6b19cbb17c5aa654faed4e57b4f6bad2a0fc) Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> --- e2e/suite1/specs/exemplars.spec.ts | 2 +- .../datasource/prometheus/datasource.ts | 33 ++++++++++++++++--- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/e2e/suite1/specs/exemplars.spec.ts b/e2e/suite1/specs/exemplars.spec.ts index 7a8c77921b7..2fb174b96e2 100644 --- a/e2e/suite1/specs/exemplars.spec.ts +++ b/e2e/suite1/specs/exemplars.spec.ts @@ -4,7 +4,7 @@ const dataSourceName = 'PromExemplar'; const addDataSource = () => { e2e.flows.addDataSource({ type: 'Prometheus', - expectedAlertMessage: 'Bad Gateway', + expectedAlertMessage: 'Error reading Prometheus', name: dataSourceName, form: () => { e2e.components.DataSource.Prometheus.configPage.exemplarsAddButton().click(); diff --git a/public/app/plugins/datasource/prometheus/datasource.ts b/public/app/plugins/datasource/prometheus/datasource.ts index 28b034dfb70..4bd90e1a357 100644 --- a/public/app/plugins/datasource/prometheus/datasource.ts +++ b/public/app/plugins/datasource/prometheus/datasource.ts @@ -16,6 +16,7 @@ import { ScopedVars, TimeRange, DataFrame, + dateTime, } from '@grafana/data'; import { BackendSrvRequest, @@ -789,11 +790,33 @@ export class PrometheusDatasource extends DataSourceWithBackend = { + targets: [{ refId: 'test', expr: '1+1', instant: true }], + requestId: `${this.id}-health`, + scopedVars: {}, + dashboardId: 0, + panelId: 0, + interval: '1m', + intervalMs: 60000, + maxDataPoints: 1, + range: { + from: dateTime(now - 1000), + to: dateTime(now), + }, + } as DataQueryRequest; + + return lastValueFrom(this.query(request)) + .then((res: DataQueryResponse) => { + if (!res || !res.data || res.state !== LoadingState.Done) { + return { status: 'error', message: `Error reading Prometheus: ${res?.error?.message}` }; + } else { + return { status: 'success', message: 'Data source is working' }; + } + }) + .catch((err: any) => { + console.error('Prometheus Error', err); + return { status: 'error', message: err.message }; + }); } interpolateVariablesInQueries(queries: PromQuery[], scopedVars: ScopedVars): PromQuery[] {