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[] {