From 65fe35ec218864de5b8649ad6a29033639339b17 Mon Sep 17 00:00:00 2001 From: Damien de Lemeny Date: Mon, 11 Mar 2024 11:00:19 -0500 Subject: [PATCH] Add requestId to variable terms requests --- src/datasource/base.ts | 15 +++++++++------ src/utils/uid.ts | 12 ++++++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 src/utils/uid.ts diff --git a/src/datasource/base.ts b/src/datasource/base.ts index d1a3de5..823ae93 100644 --- a/src/datasource/base.ts +++ b/src/datasource/base.ts @@ -36,9 +36,12 @@ import { getQueryResponseProcessor } from 'datasource/processResponse'; import { SECOND } from 'utils/time'; import { GConstructor } from 'utils/mixins'; import { LuceneQuery } from '@/utils/lucene'; +import { uidMaker } from "@/utils/uid" export type BaseQuickwitDataSourceConstructor = GConstructor +const getQueryUid = uidMaker("query") + type FieldCapsSpec = { aggregatable?: boolean, searchable?: boolean, @@ -129,11 +132,11 @@ export class BaseQuickwitDataSource return { ...query, query: lquery.toString() }; } - getDataQueryRequest(queryDef: TermsQuery, range: TimeRange) { + getDataQueryRequest(queryDef: TermsQuery, range: TimeRange, requestId?: string) { let dataQuery = getDataQuery(queryDef, 'getTerms'); const request: DataQueryRequest = { app: CoreApp.Unknown, - requestId: 'GetTerms', + requestId: requestId || getQueryUid.next(), interval: '', intervalMs: 0, range, @@ -145,8 +148,8 @@ export class BaseQuickwitDataSource return request } - getTerms(queryDef: TermsQuery, range = getDefaultTimeRange()): Observable { - const dataquery = this.getDataQueryRequest(queryDef, range) + getTerms(queryDef: TermsQuery, range = getDefaultTimeRange(), requestId?: string): Observable { + const dataquery = this.getDataQueryRequest(queryDef, range, requestId) return super.query(dataquery).pipe( mergeMap(res=> { return res.data.map((df: DataFrame)=>{ @@ -282,7 +285,7 @@ export class BaseQuickwitDataSource return true; } - metricFindQuery(query: string, options?: { range: TimeRange }): Promise { + metricFindQuery(query: string, options?: { range: TimeRange, variable?: {name: string} }): Promise { const range = options?.range; const parsedQuery = JSON.parse(query); if (query) { @@ -293,7 +296,7 @@ export class BaseQuickwitDataSource if (parsedQuery.find === 'terms') { parsedQuery.field = this.interpolateLuceneQuery(parsedQuery.field); parsedQuery.query = this.interpolateLuceneQuery(parsedQuery.query); - return lastValueFrom(this.getTerms(parsedQuery, range), {defaultValue:[]}); + return lastValueFrom(this.getTerms(parsedQuery, range, options?.variable?.name ? `getVariableTerms-${options?.variable?.name}` : undefined), {defaultValue:[]}); } } return Promise.resolve([]); diff --git a/src/utils/uid.ts b/src/utils/uid.ts new file mode 100644 index 0000000..bf51aac --- /dev/null +++ b/src/utils/uid.ts @@ -0,0 +1,12 @@ +export function uidMaker(prefix: string){ + let i = 1; + return { + next() { + + return `${prefix}-${i++}`; + }, + reset() { + i=1; + } + } +}