mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import _ from 'lodash';
|
|
|
|
import { DataSourceApi, DataQuery, DataQueryRequest, DataSourceInstanceSettings } from '@grafana/ui';
|
|
import DatasourceSrv from 'app/features/plugins/datasource_srv';
|
|
|
|
class MixedDatasource extends DataSourceApi<DataQuery> {
|
|
/** @ngInject */
|
|
constructor(instanceSettings: DataSourceInstanceSettings, private datasourceSrv: DatasourceSrv) {
|
|
super(instanceSettings);
|
|
}
|
|
|
|
query(options: DataQueryRequest<DataQuery>) {
|
|
const sets = _.groupBy(options.targets, 'datasource');
|
|
const promises: any = _.map(sets, (targets: DataQuery[]) => {
|
|
const dsName = targets[0].datasource;
|
|
if (dsName === '-- Mixed --') {
|
|
return Promise.resolve([]);
|
|
}
|
|
|
|
if (targets.length === 0) {
|
|
return { data: [] };
|
|
}
|
|
|
|
return this.datasourceSrv.get(dsName).then(ds => {
|
|
// Remove any unused hidden queries
|
|
if (!ds.meta.hiddenQueries) {
|
|
targets = _.filter(targets, (t: DataQuery) => {
|
|
return !t.hide;
|
|
});
|
|
if (targets.length === 0) {
|
|
return { data: [] };
|
|
}
|
|
}
|
|
|
|
const opt = _.cloneDeep(options);
|
|
opt.targets = targets;
|
|
return ds.query(opt);
|
|
});
|
|
});
|
|
|
|
return Promise.all(promises).then(results => {
|
|
return { data: _.flatten(_.map(results, 'data')) };
|
|
});
|
|
}
|
|
|
|
testDatasource() {
|
|
return Promise.resolve({});
|
|
}
|
|
}
|
|
|
|
export { MixedDatasource, MixedDatasource as Datasource };
|