diff --git a/.betterer.results b/.betterer.results index 3b87f1e2d77..cbca000cd3b 100644 --- a/.betterer.results +++ b/.betterer.results @@ -6706,7 +6706,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "10"], [0, 0, 0, "Unexpected any. Specify a different type.", "11"] ], - "public/app/plugins/datasource/prometheus/datasource.tsx:5381": [ + "public/app/plugins/datasource/prometheus/datasource.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], diff --git a/public/app/plugins/datasource/prometheus/configuration/PromSettings.tsx b/public/app/plugins/datasource/prometheus/configuration/PromSettings.tsx index 4d0ce1931c8..ad4d2ba2d34 100644 --- a/public/app/plugins/datasource/prometheus/configuration/PromSettings.tsx +++ b/public/app/plugins/datasource/prometheus/configuration/PromSettings.tsx @@ -13,10 +13,9 @@ import { getBackendSrv } from '@grafana/runtime/src'; import { InlineField, Input, Select, Switch, useTheme2 } from '@grafana/ui'; import { useUpdateDatasource } from '../../../../features/datasources/state'; -import { PromApplication, PromBuildInfoResponse } from '../../../../types/unified-alerting-dto'; import { QueryEditorMode } from '../querybuilder/shared/types'; import { defaultPrometheusQueryOverlapWindow } from '../querycache/QueryCache'; -import { PrometheusCacheLevel, PromOptions } from '../types'; +import { PromApplication, PromBuildInfoResponse, PrometheusCacheLevel, PromOptions } from '../types'; import { docsTip, overhaulStyles, PROM_CONFIG_LABEL_WIDTH, validateInput } from './ConfigEditor'; import { ExemplarsSettings } from './ExemplarsSettings'; diff --git a/public/app/plugins/datasource/prometheus/datasource.tsx b/public/app/plugins/datasource/prometheus/datasource.ts similarity index 92% rename from public/app/plugins/datasource/prometheus/datasource.tsx rename to public/app/plugins/datasource/prometheus/datasource.ts index e5ea02a88e9..5c684e2c310 100644 --- a/public/app/plugins/datasource/prometheus/datasource.tsx +++ b/public/app/plugins/datasource/prometheus/datasource.ts @@ -1,12 +1,11 @@ import { cloneDeep, defaults } from 'lodash'; -import { LRUCache } from 'lru-cache'; -import React from 'react'; import { forkJoin, lastValueFrom, merge, Observable, of, OperatorFunction, pipe, throwError } from 'rxjs'; import { catchError, filter, map, tap } from 'rxjs/operators'; import semver from 'semver/preload'; import { AbstractQuery, + AdHocVariableFilter, AnnotationEvent, AnnotationQueryRequest, CoreApp, @@ -14,20 +13,19 @@ import { DataQueryError, DataQueryRequest, DataQueryResponse, + DataSourceGetTagKeysOptions, + DataSourceGetTagValuesOptions, DataSourceInstanceSettings, DataSourceWithQueryExportSupport, DataSourceWithQueryImportSupport, dateTime, LoadingState, + MetricFindValue, QueryFixAction, rangeUtil, + renderLegendFormat, ScopedVars, TimeRange, - renderLegendFormat, - DataSourceGetTagKeysOptions, - DataSourceGetTagValuesOptions, - MetricFindValue, - AdHocVariableFilter, } from '@grafana/data'; import { BackendDataSourceResponse, @@ -39,12 +37,9 @@ import { isFetchError, toDataQueryResponse, } from '@grafana/runtime'; -import { Badge, BadgeColor, Tooltip } from '@grafana/ui'; import { safeStringifyValue } from 'app/core/utils/explore'; -import { discoverDataSourceFeatures } from 'app/features/alerting/unified/api/buildInfo'; import { getTimeSrv, TimeSrv } from 'app/features/dashboard/services/TimeSrv'; import { getTemplateSrv, TemplateSrv } from 'app/features/templating/template_srv'; -import { PromApiFeatures, PromApplication } from 'app/types/unified-alerting-dto'; import { addLabelToQuery } from './add_label_to_query'; import { AnnotationQueryEditor } from './components/AnnotationQueryEditor'; @@ -64,6 +59,7 @@ import { getOriginalMetricName, transform, transformV2 } from './result_transfor import { trackQuery } from './tracking'; import { ExemplarTraceIdDestination, + PromApplication, PromDataErrorResponse, PromDataSuccessResponse, PrometheusCacheLevel, @@ -95,7 +91,6 @@ export class PrometheusDatasource access: 'direct' | 'proxy'; basicAuth: any; withCredentials: any; - metricsNameCache = new LRUCache({ max: 10 }); interval: string; queryTimeout: string | undefined; httpMethod: string; @@ -108,8 +103,6 @@ export class PrometheusDatasource disableRecordingRules: boolean; defaultEditor?: QueryEditorMode; exemplarsAvailable: boolean; - subType: PromApplication; - rulerEnabled: boolean; cacheLevel: PrometheusCacheLevel; cache: QueryCache; @@ -122,8 +115,6 @@ export class PrometheusDatasource super(instanceSettings); this.type = 'prometheus'; - this.subType = PromApplication.Prometheus; - this.rulerEnabled = false; this.id = instanceSettings.id; this.url = instanceSettings.url!; this.access = instanceSettings.access; @@ -481,10 +472,6 @@ export class PrometheusDatasource return processedTargets; } - intepolateStringHelper = (query: PromQuery): string => { - return this.interpolateString(query.expr); - }; - query(request: DataQueryRequest): Observable { if (this.access === 'proxy') { let fullOrPartialRequest: DataQueryRequest; @@ -1023,94 +1010,6 @@ export class PrometheusDatasource return result?.data?.data?.map((value: any) => ({ text: value })) ?? []; } - async getBuildInfo() { - try { - const buildInfo = await discoverDataSourceFeatures({ url: this.url, name: this.name, type: 'prometheus' }); - return buildInfo; - } catch (error) { - // We don't want to break the rest of functionality if build info does not work correctly - return undefined; - } - } - - getBuildInfoMessage(buildInfo: PromApiFeatures) { - const enabled = ; - const disabled = ; - const unsupported = ( - -
- -
-
- ); - - const LOGOS = { - [PromApplication.Cortex]: '/public/app/plugins/datasource/prometheus/img/cortex_logo.svg', - [PromApplication.Mimir]: '/public/app/plugins/datasource/prometheus/img/mimir_logo.svg', - [PromApplication.Prometheus]: '/public/app/plugins/datasource/prometheus/img/prometheus_logo.svg', - [PromApplication.Thanos]: '/public/app/plugins/datasource/prometheus/img/thanos_logo.svg', - }; - - const COLORS: Record = { - [PromApplication.Cortex]: 'blue', - [PromApplication.Mimir]: 'orange', - [PromApplication.Prometheus]: 'red', - [PromApplication.Thanos]: 'purple', // Purple hex taken from thanos.io - }; - - const AppDisplayNames: Record = { - [PromApplication.Cortex]: 'Cortex', - [PromApplication.Mimir]: 'Mimir', - [PromApplication.Prometheus]: 'Prometheus', - [PromApplication.Thanos]: 'Thanos', - }; - - const application = this.datasourceConfigurationPrometheusFlavor ?? buildInfo.application; - - // this will inform the user about what "subtype" the datasource is; Mimir, Cortex or vanilla Prometheus - const applicationSubType = ( - - {' '} - {application ? AppDisplayNames[application] : 'Unknown'} - - } - color={COLORS[application ?? PromApplication.Prometheus]} - /> - ); - - return ( -
-
Type
-
{applicationSubType}
- <> -
Ruler API
- {/* Prometheus does not have a Ruler API – so show that it is not supported */} - {buildInfo.application === PromApplication.Prometheus &&
{unsupported}
} - {buildInfo.application !== PromApplication.Prometheus && ( -
{buildInfo.features.rulerApiEnabled ? enabled : disabled}
- )} - -
- ); - } - interpolateVariablesInQueries( queries: PromQuery[], scopedVars: ScopedVars, diff --git a/public/app/plugins/datasource/prometheus/metric_find_query.test.ts b/public/app/plugins/datasource/prometheus/metric_find_query.test.ts index 2acf59a6228..8e23307f1b3 100644 --- a/public/app/plugins/datasource/prometheus/metric_find_query.test.ts +++ b/public/app/plugins/datasource/prometheus/metric_find_query.test.ts @@ -6,11 +6,9 @@ import { FetchResponse } from '@grafana/runtime'; import { backendSrv } from 'app/core/services/backend_srv'; // will use the version in __mocks__ import { TemplateSrv } from 'app/features/templating/template_srv'; -import { PromApplication } from '../../../types/unified-alerting-dto'; - import { PrometheusDatasource } from './datasource'; import PrometheusMetricFindQuery from './metric_find_query'; -import { PromOptions } from './types'; +import { PromApplication, PromOptions } from './types'; jest.mock('@grafana/runtime', () => ({ ...jest.requireActual('@grafana/runtime'), diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilder.test.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilder.test.tsx index 7a04f3224dc..3e3b148cd32 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilder.test.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilder.test.tsx @@ -12,11 +12,10 @@ import { TimeRange, } from '@grafana/data'; -import { PromApplication } from '../../../../../types/unified-alerting-dto'; import { PrometheusDatasource } from '../../datasource'; import PromQlLanguageProvider from '../../language_provider'; import { EmptyLanguageProviderMock } from '../../language_provider.mock'; -import { PromOptions } from '../../types'; +import { PromApplication, PromOptions } from '../../types'; import { getLabelSelects } from '../testUtils'; import { PromVisualQuery } from '../types'; diff --git a/public/app/plugins/datasource/prometheus/types.ts b/public/app/plugins/datasource/prometheus/types.ts index 5c5c4a6ac40..2f0e26f9a97 100644 --- a/public/app/plugins/datasource/prometheus/types.ts +++ b/public/app/plugins/datasource/prometheus/types.ts @@ -1,8 +1,6 @@ import { DataSourceJsonData, QueryResultMeta, ScopedVars } from '@grafana/data'; import { DataQuery } from '@grafana/schema'; -import { PromApplication } from '../../../types/unified-alerting-dto'; - import { Prometheus as GenPromQuery } from './dataquery.gen'; import { QueryBuilderLabelFilter, QueryEditorMode } from './querybuilder/shared/types'; @@ -30,6 +28,13 @@ export enum PrometheusCacheLevel { None = 'None', } +export enum PromApplication { + Cortex = 'Cortex', + Mimir = 'Mimir', + Prometheus = 'Prometheus', + Thanos = 'Thanos', +} + export interface PromOptions extends DataSourceJsonData { timeInterval?: string; queryTimeout?: string; @@ -159,12 +164,20 @@ export interface TransformOptions { meta: QueryResultMeta; } -export interface PromLabelQueryResponse { +export interface PromBuildInfoResponse { data: { - status: string; - data: string[]; + application?: string; + version: string; + revision: string; + features?: { + ruler_config_api?: 'true' | 'false'; + alertmanager_config_api?: 'true' | 'false'; + query_sharding?: 'true' | 'false'; + federated_rules?: 'true' | 'false'; + }; + [key: string]: unknown; }; - cancelled?: boolean; + status: 'success'; } /**