From 41ae376aa4abbb0576c00cacdd0e93275a20d090 Mon Sep 17 00:00:00 2001 From: Andrew Hackmann <5140848+bossinc@users.noreply.github.com> Date: Wed, 17 Jul 2024 15:16:07 -0700 Subject: [PATCH] Influxdb: Fix `toMetricFindValue` function (#90514) Improved toMetricFindValue to be quicker --- .../plugins/datasource/influxdb/datasource.ts | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/public/app/plugins/datasource/influxdb/datasource.ts b/public/app/plugins/datasource/influxdb/datasource.ts index b94cb115592..ea1c4e266f7 100644 --- a/public/app/plugins/datasource/influxdb/datasource.ts +++ b/public/app/plugins/datasource/influxdb/datasource.ts @@ -30,7 +30,6 @@ import { BackendDataSourceResponse, DataSourceWithBackend, FetchResponse, - frameToMetricFindValue, getBackendSrv, getTemplateSrv, TemplateSrv, @@ -414,13 +413,23 @@ export default class InfluxDatasource extends DataSourceWithBackend(); // Create MetricFindValue object for all frames - const values = data.map((d) => frameToMetricFindValue(d)).flat(); - // Filter out duplicate elements - return values.filter((elm, idx, self) => idx === self.findIndex((t) => t.text === elm.text)); + rsp?.data?.forEach((frame: DataFrame) => { + if (frame && frame.length > 0) { + let field = frame.fields.find((f) => f.type === FieldType.string); + if (!field) { + field = frame.fields.find((f) => f.type !== FieldType.time); + } + if (field) { + field.values.forEach((v) => { + valueMap.set(v.toString(), { text: v.toString() }); + }); + } + } + }); + return Array.from(valueMap.values()); } - // By implementing getTagKeys and getTagValues we add ad-hoc filters functionality // Used in public/app/features/variables/adhoc/picker/AdHocFilterKey.tsx::fetchFilterKeys getTagKeys(options?: DataSourceGetTagKeysOptions) {