From 55533d12fd66811142d549a3d0fd24e58c22a135 Mon Sep 17 00:00:00 2001 From: Andrej Ocenas Date: Mon, 11 May 2020 18:09:14 +0200 Subject: [PATCH] CloudWatch/Logs: Fix fields not being refetched when log group changed (#24529) --- .../cloudwatch/language_provider.ts | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/public/app/plugins/datasource/cloudwatch/language_provider.ts b/public/app/plugins/datasource/cloudwatch/language_provider.ts index 7683d46efb6..ae62a9abef9 100644 --- a/public/app/plugins/datasource/cloudwatch/language_provider.ts +++ b/public/app/plugins/datasource/cloudwatch/language_provider.ts @@ -117,17 +117,41 @@ export class CloudWatchLanguageProvider extends LanguageProvider { }; } - private fetchFields = _.throttle(async (logGroups: string[]) => { + private fetchedFieldsCache: + | { + time: number; + logGroups: string[]; + fields: string[]; + } + | undefined; + + private fetchFields = async (logGroups: string[]): Promise => { + if ( + this.fetchedFieldsCache && + Date.now() - this.fetchedFieldsCache.time < 30 * 1000 && + _.sortedUniq(this.fetchedFieldsCache.logGroups).join('|') === _.sortedUniq(logGroups).join('|') + ) { + return this.fetchedFieldsCache.fields; + } + const results = await Promise.all( logGroups.map(logGroup => this.datasource.getLogGroupFields({ logGroupName: logGroup })) ); - return [ + const fields = [ ...new Set( results.reduce((acc: string[], cur) => acc.concat(cur.logGroupFields?.map(f => f.name) as string[]), []) ).values(), ]; - }, 30 * 1000); + + this.fetchedFieldsCache = { + time: Date.now(), + logGroups, + fields, + }; + + return fields; + }; private handleKeyword = async (context?: TypeaheadContext): Promise => { const suggs = await this.getFieldCompletionItems(context?.logGroupNames ?? []);