From 8228eb4b7330cbec63ca45b18ded3abba8440ce5 Mon Sep 17 00:00:00 2001 From: Augustin Husson Date: Thu, 14 Jul 2022 15:22:44 +0200 Subject: [PATCH] codemirror-promql: fix the way to verify if it's a prometheusClient (#11019) Signed-off-by: Augustin Husson --- .../src/complete/index.test.ts | 27 +++++++++++++++++++ .../codemirror-promql/src/complete/index.ts | 18 ++++++------- 2 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 web/ui/module/codemirror-promql/src/complete/index.test.ts diff --git a/web/ui/module/codemirror-promql/src/complete/index.test.ts b/web/ui/module/codemirror-promql/src/complete/index.test.ts new file mode 100644 index 000000000..b2b9e32f9 --- /dev/null +++ b/web/ui/module/codemirror-promql/src/complete/index.test.ts @@ -0,0 +1,27 @@ +// Copyright 2022 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { isPrometheusClient } from './index'; +import { HTTPPrometheusClient } from '../client/prometheus'; + +describe('type of remoteConfig', () => { + it('should be a prometheusClient', () => { + const client = new HTTPPrometheusClient({}); + expect(isPrometheusClient(client)).toBe(true); + }); + + it('should be a remote config', () => { + const remote = { url: 'https://prometheus.io' }; + expect(isPrometheusClient(remote)).toBe(false); + }); +}); diff --git a/web/ui/module/codemirror-promql/src/complete/index.ts b/web/ui/module/codemirror-promql/src/complete/index.ts index a28b7583d..b3902c3b6 100644 --- a/web/ui/module/codemirror-promql/src/complete/index.ts +++ b/web/ui/module/codemirror-promql/src/complete/index.ts @@ -31,16 +31,14 @@ export interface CompleteConfiguration { completeStrategy?: CompleteStrategy; } -function isPrometheusConfig(remoteConfig: PrometheusConfig | PrometheusClient): remoteConfig is PrometheusConfig { - const cfg = remoteConfig as PrometheusConfig; +export function isPrometheusClient(remoteConfig: PrometheusConfig | PrometheusClient): remoteConfig is PrometheusClient { + const client = remoteConfig as PrometheusClient; return ( - cfg.url !== undefined || - cfg.lookbackInterval !== undefined || - cfg.httpErrorHandler !== undefined || - cfg.fetchFn !== undefined || - cfg.cache !== undefined || - cfg.httpMethod !== undefined || - cfg.apiPrefix !== undefined + typeof client.labelNames === 'function' && + typeof client.labelValues === 'function' && + typeof client.metricMetadata === 'function' && + typeof client.series === 'function' && + typeof client.metricNames === 'function' ); } @@ -49,7 +47,7 @@ export function newCompleteStrategy(conf?: CompleteConfiguration): CompleteStrat return conf.completeStrategy; } if (conf?.remote) { - if (!isPrometheusConfig(conf.remote)) { + if (isPrometheusClient(conf.remote)) { return new HybridComplete(conf.remote, conf.maxMetricsMetadata); } return new HybridComplete(new CachedPrometheusClient(new HTTPPrometheusClient(conf.remote), conf.remote.cache), conf.maxMetricsMetadata);