mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
stackdriver: add aggregation query
This commit is contained in:
parent
b1db07789b
commit
ca77cdc37e
@ -2,6 +2,7 @@ import {
|
||||
extractServicesFromMetricDescriptors,
|
||||
getMetricTypesByService,
|
||||
getAlignmentOptionsByMetric,
|
||||
getAggregationOptionsByMetric,
|
||||
} from './functions';
|
||||
import { alignmentPeriods } from './constants';
|
||||
import has from 'lodash/has';
|
||||
@ -24,6 +25,8 @@ export default class StackdriverMetricFindQuery {
|
||||
return this.handleAlignersType(query);
|
||||
case 'alignmentPeriods':
|
||||
return this.handleAlignmentPeriodType();
|
||||
case 'aggregations':
|
||||
return this.handleAggregationType(query);
|
||||
default:
|
||||
return [];
|
||||
}
|
||||
@ -107,6 +110,18 @@ export default class StackdriverMetricFindQuery {
|
||||
}));
|
||||
}
|
||||
|
||||
async handleAggregationType({ metricType }) {
|
||||
if (!metricType) {
|
||||
return [];
|
||||
}
|
||||
const metricDescriptors = await this.datasource.getMetricTypes(this.datasource.projectName);
|
||||
const { valueType, metricKind } = metricDescriptors.find(m => m.type === metricType);
|
||||
return getAggregationOptionsByMetric(valueType, metricKind).map(o => ({
|
||||
...o,
|
||||
expandable: true,
|
||||
}));
|
||||
}
|
||||
|
||||
handleAlignmentPeriodType() {
|
||||
return alignmentPeriods.map(s => ({
|
||||
...s,
|
||||
|
@ -134,6 +134,7 @@ export class StackdriverTemplateQueryComponent extends PureComponent<TemplateQue
|
||||
</React.Fragment>
|
||||
);
|
||||
case 'alignerns':
|
||||
case 'aggregations':
|
||||
return (
|
||||
<React.Fragment>
|
||||
<ServiceSelector metricDescriptors={this.state.metricDescriptors} onServiceChange={this.onServiceChange} />
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { alignOptions } from './constants';
|
||||
import { alignOptions, aggOptions } from './constants';
|
||||
import uniqBy from 'lodash/uniqBy';
|
||||
|
||||
export const extractServicesFromMetricDescriptors = metricDescriptors => uniqBy(metricDescriptors, 'service');
|
||||
@ -13,3 +13,11 @@ export const getAlignmentOptionsByMetric = (metricValueType, metricKind) => {
|
||||
return i.valueTypes.indexOf(metricValueType) !== -1 && i.metricKinds.indexOf(metricKind) !== -1;
|
||||
});
|
||||
};
|
||||
|
||||
export const getAggregationOptionsByMetric = (valueType, metricKind) => {
|
||||
return !metricKind
|
||||
? []
|
||||
: aggOptions.filter(i => {
|
||||
return i.valueTypes.indexOf(valueType) !== -1 && i.metricKinds.indexOf(metricKind) !== -1;
|
||||
});
|
||||
};
|
||||
|
@ -1,7 +1,7 @@
|
||||
import coreModule from 'app/core/core_module';
|
||||
import _ from 'lodash';
|
||||
import * as options from './constants';
|
||||
import { getAlignmentOptionsByMetric } from './functions';
|
||||
import { getAlignmentOptionsByMetric, getAggregationOptionsByMetric } from './functions';
|
||||
import kbn from 'app/core/utils/kbn';
|
||||
|
||||
export class StackdriverAggregation {
|
||||
@ -49,13 +49,7 @@ export class StackdriverAggregationCtrl {
|
||||
}
|
||||
|
||||
setAggOptions() {
|
||||
this.aggOptions = !this.target.metricKind
|
||||
? []
|
||||
: options.aggOptions.filter(i => {
|
||||
return (
|
||||
i.valueTypes.indexOf(this.target.valueType) !== -1 && i.metricKinds.indexOf(this.target.metricKind) !== -1
|
||||
);
|
||||
});
|
||||
this.aggOptions = getAggregationOptionsByMetric(this.target.valueType, this.target.metricKind);
|
||||
|
||||
if (!this.aggOptions.find(o => o.value === this.target.aggregation.crossSeriesReducer)) {
|
||||
this.deselectAggregationOption('REDUCE_NONE');
|
||||
|
Loading…
Reference in New Issue
Block a user