|
|
|
@ -53,27 +53,11 @@ export default class Datasource extends DataSourceApi<AzureMonitorQuery, AzureDa |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
query(options: DataQueryRequest<AzureMonitorQuery>): Observable<DataQueryResponse> { |
|
|
|
query(options: DataQueryRequest<AzureMonitorQuery>): Observable<DataQueryResponse> { |
|
|
|
const byType: Record<AzureQueryType, DataQueryRequest<AzureMonitorQuery>> = ({} as unknown) as Record< |
|
|
|
const byType = new Map<AzureQueryType, DataQueryRequest<AzureMonitorQuery>>(); |
|
|
|
AzureQueryType, |
|
|
|
|
|
|
|
DataQueryRequest<AzureMonitorQuery> |
|
|
|
|
|
|
|
>; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (const target of options.targets) { |
|
|
|
for (const target of options.targets) { |
|
|
|
// Migrate old query structure
|
|
|
|
// Migrate old query structure
|
|
|
|
if (target.queryType === AzureQueryType.ApplicationInsights) { |
|
|
|
migrateQuery(target); |
|
|
|
if ((target.appInsights as any).rawQuery) { |
|
|
|
|
|
|
|
target.queryType = AzureQueryType.InsightsAnalytics; |
|
|
|
|
|
|
|
target.insightsAnalytics = (target.appInsights as unknown) as InsightsAnalyticsQuery; |
|
|
|
|
|
|
|
delete target.appInsights; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!target.queryType) { |
|
|
|
|
|
|
|
target.queryType = AzureQueryType.AzureMonitor; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (target.queryType === AzureQueryType.AzureMonitor) { |
|
|
|
|
|
|
|
migrateMetricsDimensionFilters(target.azureMonitor); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Check that we have options
|
|
|
|
// Check that we have options
|
|
|
|
const opts = (target as any)[this.optionsKey[target.queryType]]; |
|
|
|
const opts = (target as any)[this.optionsKey[target.queryType]]; |
|
|
|
@ -84,28 +68,28 @@ export default class Datasource extends DataSourceApi<AzureMonitorQuery, AzureDa |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Initialize the list of queries
|
|
|
|
// Initialize the list of queries
|
|
|
|
let q = byType[target.queryType]; |
|
|
|
if (!byType.has(target.queryType)) { |
|
|
|
if (!q) { |
|
|
|
const queryForType = _.cloneDeep(options); |
|
|
|
q = _.cloneDeep(options); |
|
|
|
queryForType.requestId = `${queryForType.requestId}-${target.refId}`; |
|
|
|
q.requestId = `${q.requestId}-${target.refId}`; |
|
|
|
queryForType.targets = []; |
|
|
|
q.targets = []; |
|
|
|
byType.set(target.queryType, queryForType); |
|
|
|
byType[target.queryType] = q; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
q.targets.push(target); |
|
|
|
|
|
|
|
|
|
|
|
const queryForType = byType.get(target.queryType); |
|
|
|
|
|
|
|
queryForType?.targets.push(target); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Distinct types are managed by distinct requests
|
|
|
|
const observables: Array<Observable<DataQueryResponse>> = Array.from(byType.entries()).map(([queryType, req]) => { |
|
|
|
const obs = Object.keys(byType).map((type: AzureQueryType) => { |
|
|
|
return this.pseudoDatasource[queryType].query(req); |
|
|
|
const req = byType[type]; |
|
|
|
|
|
|
|
return this.pseudoDatasource[type].query(req); |
|
|
|
|
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
// Single query can skip merge
|
|
|
|
// Single query can skip merge
|
|
|
|
if (obs.length === 1) { |
|
|
|
if (observables.length === 1) { |
|
|
|
return obs[0]; |
|
|
|
return observables[0]; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (obs.length > 1) { |
|
|
|
if (observables.length > 1) { |
|
|
|
return forkJoin(obs).pipe( |
|
|
|
return forkJoin(observables).pipe( |
|
|
|
map((results: DataQueryResponse[]) => { |
|
|
|
map((results: DataQueryResponse[]) => { |
|
|
|
const data: DataFrame[] = []; |
|
|
|
const data: DataFrame[] = []; |
|
|
|
for (const result of results) { |
|
|
|
for (const result of results) { |
|
|
|
@ -290,3 +274,20 @@ export default class Datasource extends DataSourceApi<AzureMonitorQuery, AzureDa |
|
|
|
return this.templateSrv.getVariables().map((v) => `$${v.name}`); |
|
|
|
return this.templateSrv.getVariables().map((v) => `$${v.name}`); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function migrateQuery(target: AzureMonitorQuery) { |
|
|
|
|
|
|
|
if (target.queryType === AzureQueryType.ApplicationInsights) { |
|
|
|
|
|
|
|
if ((target.appInsights as any).rawQuery) { |
|
|
|
|
|
|
|
target.queryType = AzureQueryType.InsightsAnalytics; |
|
|
|
|
|
|
|
target.insightsAnalytics = (target.appInsights as unknown) as InsightsAnalyticsQuery; |
|
|
|
|
|
|
|
delete target.appInsights; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!target.queryType) { |
|
|
|
|
|
|
|
target.queryType = AzureQueryType.AzureMonitor; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (target.queryType === AzureQueryType.AzureMonitor) { |
|
|
|
|
|
|
|
migrateMetricsDimensionFilters(target.azureMonitor); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|