From 40dcbdbf67e794c5b16df347ce26ed655493b35c Mon Sep 17 00:00:00 2001 From: Lauri Nevala Date: Mon, 27 Apr 2020 21:56:45 +0300 Subject: [PATCH] Throw an error on invalid prometheus provider Signed-off-by: Lauri Nevala --- src/main/prometheus/provider.ts | 6 ++++-- src/main/routes/metrics.ts | 10 ++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/prometheus/provider.ts b/src/main/prometheus/provider.ts index 5086874742..9536643504 100644 --- a/src/main/prometheus/provider.ts +++ b/src/main/prometheus/provider.ts @@ -16,12 +16,14 @@ export interface PrometheusProvider { export class PrometheusProviderFactory { static createProvider(type: string): PrometheusProvider { - if (type == "helm") { + if (type == "lens") { + return new PrometheusLens() + } else if (type == "helm") { return new PrometheusHelm() } else if (type == "operator") { return new PrometheusOperator() } else { - return new PrometheusLens() + throw "Unknown Prometheus provider"; } } } \ No newline at end of file diff --git a/src/main/routes/metrics.ts b/src/main/routes/metrics.ts index 2f6d428866..6a931284c9 100644 --- a/src/main/routes/metrics.ts +++ b/src/main/routes/metrics.ts @@ -1,7 +1,7 @@ import { LensApiRequest } from "../router" import { LensApi } from "../lens-api" import * as requestPromise from "request-promise-native" -import { PrometheusProviderFactory} from "../prometheus/provider" +import { PrometheusProviderFactory, PrometheusProvider} from "../prometheus/provider" type MetricsQuery = string | string[] | { [metricName: string]: string; @@ -24,6 +24,12 @@ class MetricsRoute extends LensApi { }) const prometheusInstallationSource = cluster.preferences.prometheusSource || "lens" + let prometheusProvider: PrometheusProvider + try { + prometheusProvider = PrometheusProviderFactory.createProvider(prometheusInstallationSource) + } catch { + this.respondJson(response, {}) + } // prometheus metrics loader const attempts: { [query: string]: number } = {}; const maxAttempts = 5; @@ -66,7 +72,7 @@ class MetricsRoute extends LensApi { Object.entries(query).map((queryEntry: any) => { const queryName = queryEntry[0] const queryOpts = queryEntry[1] - const q = PrometheusProviderFactory.createProvider(prometheusInstallationSource).getQueries(queryOpts)[queryName] + const q = prometheusProvider.getQueries(queryOpts)[queryName] return loadMetrics(q) }) );