datasource.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import _ from 'lodash';
  2. import { DataSourceApi, DataQuery, DataQueryRequest } from '@grafana/ui';
  3. import DatasourceSrv from 'app/features/plugins/datasource_srv';
  4. class MixedDatasource implements DataSourceApi<DataQuery> {
  5. /** @ngInject */
  6. constructor(private datasourceSrv: DatasourceSrv) {}
  7. query(options: DataQueryRequest<DataQuery>) {
  8. const sets = _.groupBy(options.targets, 'datasource');
  9. const promises: any = _.map(sets, (targets: DataQuery[]) => {
  10. const dsName = targets[0].datasource;
  11. if (dsName === '-- Mixed --') {
  12. return Promise.resolve([]);
  13. }
  14. const filtered = _.filter(targets, (t: DataQuery) => {
  15. return !t.hide;
  16. });
  17. if (filtered.length === 0) {
  18. return { data: [] };
  19. }
  20. return this.datasourceSrv.get(dsName).then(ds => {
  21. const opt = _.cloneDeep(options);
  22. opt.targets = filtered;
  23. return ds.query(opt);
  24. });
  25. });
  26. return Promise.all(promises).then(results => {
  27. return { data: _.flatten(_.map(results, 'data')) };
  28. });
  29. }
  30. testDatasource() {
  31. return Promise.resolve({});
  32. }
  33. }
  34. export { MixedDatasource, MixedDatasource as Datasource };