|
|
|
@ -1,23 +1,37 @@ |
|
|
|
|
import React, { PureComponent } from 'react'; |
|
|
|
|
// import StackdriverDatasource from '../datasource';
|
|
|
|
|
import ServiceSelector from './ServiceSelector'; |
|
|
|
|
import MetricTypeSelector from './MetricTypeSelector'; |
|
|
|
|
import MetricLabelKeySelector from './MetricLabelKeySelector'; |
|
|
|
|
import { TemplateQueryProps } from 'app/types/plugins'; |
|
|
|
|
import defaultsDeep from 'lodash/defaultsDeep'; |
|
|
|
|
import has from 'lodash/has'; |
|
|
|
|
|
|
|
|
|
export class StackdriverTemplateQueryComponent extends PureComponent<TemplateQueryProps, any> { |
|
|
|
|
queryTypes: Array<{ value: string; name: string }> = [ |
|
|
|
|
{ value: 'services', name: 'Services' }, |
|
|
|
|
{ value: 'metricTypes', name: 'Metric Types' }, |
|
|
|
|
{ value: 'metricLabels', name: 'Metric labels For Metric Type' }, |
|
|
|
|
{ value: 'metricLabels', name: 'Metric Labels' }, |
|
|
|
|
{ value: 'resourceLabels', name: 'Resource Labels' }, |
|
|
|
|
{ value: 'resourceTypes', name: 'Resource Types' }, |
|
|
|
|
{ value: 'aggregations', name: 'Aggregations' }, |
|
|
|
|
{ value: 'alignerns', name: 'Aligners' }, |
|
|
|
|
{ value: 'alignmentPeriods', name: 'Alignment Periods' }, |
|
|
|
|
]; |
|
|
|
|
defaults = { type: undefined, metricDescriptors: [], service: undefined, metricType: undefined }; |
|
|
|
|
defaults = { |
|
|
|
|
type: undefined, |
|
|
|
|
metricDescriptors: [], |
|
|
|
|
service: undefined, |
|
|
|
|
metricType: undefined, |
|
|
|
|
metricLabels: [], |
|
|
|
|
metricLabelKey: undefined, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
constructor(props: TemplateQueryProps) { |
|
|
|
|
super(props); |
|
|
|
|
this.handleQueryTypeChange = this.handleQueryTypeChange.bind(this); |
|
|
|
|
this.onServiceChange = this.onServiceChange.bind(this); |
|
|
|
|
this.onMetricTypeChange = this.onMetricTypeChange.bind(this); |
|
|
|
|
this.onMetricLabelKeyChange = this.onMetricLabelKeyChange.bind(this); |
|
|
|
|
this.state = defaultsDeep(this.props.query, this.defaults); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -26,6 +40,14 @@ export class StackdriverTemplateQueryComponent extends PureComponent<TemplateQue |
|
|
|
|
this.setState({ metricDescriptors }); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async loadTimeSeriesData() { |
|
|
|
|
const refId = 'StackdriverTemplateQueryComponent'; |
|
|
|
|
const response = await this.props.datasource.getLabels(this.state.metricType, refId); |
|
|
|
|
if (has(response, 'meta.metricLabels')) { |
|
|
|
|
this.setState({ metricLabels: Object.keys(response.meta.metricLabels) }); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
handleQueryTypeChange(event) { |
|
|
|
|
this.setState({ type: event.target.value }); |
|
|
|
|
} |
|
|
|
@ -36,10 +58,15 @@ export class StackdriverTemplateQueryComponent extends PureComponent<TemplateQue |
|
|
|
|
|
|
|
|
|
onMetricTypeChange(event) { |
|
|
|
|
this.setState({ metricType: event.target.value }); |
|
|
|
|
this.loadTimeSeriesData(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
onMetricLabelKeyChange(event) { |
|
|
|
|
this.setState({ metricLabelKey: event.target.value }); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
componentDidUpdate() { |
|
|
|
|
const { metricDescriptors, ...queryModel } = this.state; |
|
|
|
|
const { metricDescriptors, metricLabels, ...queryModel } = this.state; |
|
|
|
|
this.props.onChange(queryModel); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -58,6 +85,11 @@ export class StackdriverTemplateQueryComponent extends PureComponent<TemplateQue |
|
|
|
|
metricDescriptors={this.state.metricDescriptors} |
|
|
|
|
onMetricTypeChange={this.onMetricTypeChange} |
|
|
|
|
/> |
|
|
|
|
<MetricLabelKeySelector |
|
|
|
|
metricLabelKey={this.state.metricLabelKey} |
|
|
|
|
metricLabels={this.state.metricLabels} |
|
|
|
|
onMetricLabelKeyChange={this.onMetricLabelKeyChange} |
|
|
|
|
/> |
|
|
|
|
</React.Fragment> |
|
|
|
|
); |
|
|
|
|
default: |
|
|
|
|