grafana/public/app/plugins/datasource/cloud-monitoring/variables.ts
Andreas Christou 108acee08e
CloudMonitoring: Initial GCM Schema (#67739)
* Initial GCM schema work

- Split types for convenience
- Update conditionals where needed
- Update type references

* Add additional supporting types

* Add some more accessory and legacy types

* Add missing type

* Rename backend folder

* Add missing generated file

* Review
2023-05-22 17:19:54 +01:00

33 lines
1.2 KiB
TypeScript

import { from, Observable } from 'rxjs';
import { map, mergeMap } from 'rxjs/operators';
import { CustomVariableSupport, DataQueryRequest, DataQueryResponse } from '@grafana/data';
import CloudMonitoringMetricFindQuery from './CloudMonitoringMetricFindQuery';
import { CloudMonitoringVariableQueryEditor } from './components/VariableQueryEditor';
import CloudMonitoringDatasource from './datasource';
import { CloudMonitoringVariableQuery } from './types/types';
export class CloudMonitoringVariableSupport extends CustomVariableSupport<
CloudMonitoringDatasource,
CloudMonitoringVariableQuery
> {
private readonly metricFindQuery: CloudMonitoringMetricFindQuery;
constructor(private readonly datasource: CloudMonitoringDatasource) {
super();
this.metricFindQuery = new CloudMonitoringMetricFindQuery(datasource);
this.query = this.query.bind(this);
}
editor = CloudMonitoringVariableQueryEditor;
query(request: DataQueryRequest<CloudMonitoringVariableQuery>): Observable<DataQueryResponse> {
const executeObservable = from(this.metricFindQuery.execute(request.targets[0]));
return from(this.datasource.ensureGCEDefaultProject()).pipe(
mergeMap(() => executeObservable),
map((data) => ({ data }))
);
}
}