From 39d06f26256fe77071c1e7acaa4c3bcb3d37c17a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=A4ggmark?= Date: Wed, 14 Oct 2020 06:48:39 +0200 Subject: [PATCH] Azure: Fixes merging of requests with different Azure sources (#28221) * Azure: Fixes merging of requests with different Azure sources * Refactor: Changes return type --- .../datasource.ts | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/datasource.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/datasource.ts index 8a3b9870479..6521303525d 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/datasource.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/datasource.ts @@ -4,17 +4,19 @@ import AppInsightsDatasource from './app_insights/app_insights_datasource'; import AzureLogAnalyticsDatasource from './azure_log_analytics/azure_log_analytics_datasource'; import { AzureDataSourceJsonData, AzureMonitorQuery, AzureQueryType, InsightsAnalyticsQuery } from './types'; import { + DataFrame, DataQueryRequest, - DataQueryResponseData, + DataQueryResponse, DataSourceApi, DataSourceInstanceSettings, LoadingState, ScopedVars, } from '@grafana/data'; -import { from, Observable, of } from 'rxjs'; +import { forkJoin, Observable, of } from 'rxjs'; import { DataSourceWithBackend } from '@grafana/runtime'; import InsightsAnalyticsDatasource from './insights_analytics/insights_analytics_datasource'; import { migrateMetricsDimensionFilters } from './query_ctrl'; +import { map } from 'rxjs/operators'; export default class Datasource extends DataSourceApi { azureMonitorDatasource: AzureMonitorDatasource; @@ -47,7 +49,7 @@ export default class Datasource extends DataSourceApi): Observable { + query(options: DataQueryRequest): Observable { const byType: Record> = ({} as unknown) as Record< AzureQueryType, DataQueryRequest @@ -98,17 +100,23 @@ export default class Datasource extends DataSourceApi 1) { - // Not accurate, but simple and works - // should likely be more like the mixed data source - const promises = obs.map(o => o.toPromise()); - return from( - Promise.all(promises).then(results => { - return { data: _.flatten(results) }; + return forkJoin(obs).pipe( + map((results: DataQueryResponse[]) => { + const data: DataFrame[] = []; + for (const result of results) { + for (const frame of result.data) { + data.push(frame); + } + } + + return { state: LoadingState.Done, data }; }) ); } - return of({ state: LoadingState.Done }); + + return of({ state: LoadingState.Done, data: [] }); } async annotationQuery(options: any) {