datasource.ts 1.3 KB

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