mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
use new option group in aggregation directive
This commit is contained in:
parent
eea91d2885
commit
caedbc67b8
@ -2,16 +2,21 @@
|
|||||||
<div class="gf-form">
|
<div class="gf-form">
|
||||||
<label class="gf-form-label query-keyword width-9">Aggregation</label>
|
<label class="gf-form-label query-keyword width-9">Aggregation</label>
|
||||||
<div class="gf-form-select-wrapper gf-form-select-wrapper--caret-indent">
|
<div class="gf-form-select-wrapper gf-form-select-wrapper--caret-indent">
|
||||||
<gf-form-dropdown model="ctrl.target.aggregation.crossSeriesReducer" get-options="ctrl.aggOptions" class="gf-form width-12"
|
<option-group-picker
|
||||||
disabled type="text" allow-custom="true" lookup-text="true" css-class="min-width-12" on-change="refresh()"></gf-form-dropdown>
|
onChange="ctrl.handleAggregationChange"
|
||||||
|
selected="ctrl.target.aggregation.crossSeriesReducer"
|
||||||
|
groups="ctrl.aggOptions"
|
||||||
|
searchable="true"
|
||||||
|
placeholder="'Select Aggregation'"
|
||||||
|
className="'width-15'"
|
||||||
|
></option-group-picker>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="gf-form gf-form--grow">
|
<div class="gf-form gf-form--grow">
|
||||||
<label class="gf-form-label gf-form-label--grow">
|
<label class="gf-form-label gf-form-label--grow">
|
||||||
<a ng-click="ctrl.target.showAggregationOptions = !ctrl.target.showAggregationOptions">
|
<a ng-click="ctrl.target.showAggregationOptions = !ctrl.target.showAggregationOptions">
|
||||||
<i class="fa fa-caret-down" ng-show="ctrl.target.showAggregationOptions"></i>
|
<i class="fa fa-caret-down" ng-show="ctrl.target.showAggregationOptions"></i>
|
||||||
<i class="fa fa-caret-right" ng-hide="ctrl.target.showAggregationOptions"></i>
|
<i class="fa fa-caret-right" ng-hide="ctrl.target.showAggregationOptions"></i> Advanced Options
|
||||||
Advanced Options
|
|
||||||
</a>
|
</a>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
@ -20,27 +25,35 @@
|
|||||||
<div class="gf-form offset-width-9">
|
<div class="gf-form offset-width-9">
|
||||||
<label class="gf-form-label query-keyword width-12">Aligner</label>
|
<label class="gf-form-label query-keyword width-12">Aligner</label>
|
||||||
<div class="gf-form-select-wrapper gf-form-select-wrapper--caret-indent">
|
<div class="gf-form-select-wrapper gf-form-select-wrapper--caret-indent">
|
||||||
<gf-form-dropdown model="ctrl.target.aggregation.perSeriesAligner" get-options="ctrl.alignOptions" class="gf-form width-12"
|
<option-group-picker
|
||||||
disabled type="text" allow-custom="true" lookup-text="true" css-class="min-width-12" on-change="refresh()"></gf-form-dropdown>
|
onChange="ctrl.handleAlignmentChange"
|
||||||
|
selected="ctrl.target.aggregation.perSeriesAligner"
|
||||||
|
groups="ctrl.alignOptions"
|
||||||
|
searchable="true"
|
||||||
|
placeholder="'Select Alignment'"
|
||||||
|
className="'width-15'"
|
||||||
|
></option-group-picker>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="gf-form gf-form--grow">
|
<div class="gf-form gf-form--grow"><div class="gf-form-label gf-form-label--grow"></div></div>
|
||||||
<div class="gf-form-label gf-form-label--grow"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="gf-form-inline">
|
<div class="gf-form-inline">
|
||||||
<div class="gf-form">
|
<div class="gf-form">
|
||||||
<label class="gf-form-label query-keyword width-9">Alignment Period</label>
|
<label class="gf-form-label query-keyword width-9">Alignment Period</label>
|
||||||
<div class="gf-form-select-wrapper gf-form-select-wrapper--caret-indent">
|
<div class="gf-form-select-wrapper gf-form-select-wrapper--caret-indent">
|
||||||
<gf-form-dropdown model="ctrl.target.aggregation.alignmentPeriod" get-options="ctrl.alignmentPeriods" class="gf-form width-12"
|
<option-group-picker
|
||||||
disabled type="text" allow-custom="true" lookup-text="true" css-class="min-width-12" on-change="refresh()"></gf-form-dropdown>
|
onChange="ctrl.handleAlignmentPeriodChange"
|
||||||
|
selected="ctrl.target.aggregation.alignmentPeriod"
|
||||||
|
groups="ctrl.alignmentPeriods"
|
||||||
|
searchable="true"
|
||||||
|
placeholder="'Select Alignment'"
|
||||||
|
className="'width-15'"
|
||||||
|
></option-group-picker>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="gf-form gf-form--grow">
|
<div class="gf-form gf-form--grow">
|
||||||
<label ng-if="alignmentPeriod" class="gf-form-label gf-form-label--grow">
|
<label ng-if="alignmentPeriod" class="gf-form-label gf-form-label--grow"> {{ ctrl.formatAlignmentText() }} </label>
|
||||||
{{ctrl.formatAlignmentText()}}
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<query-editor-row query-ctrl="ctrl" has-text-edit-mode="false">
|
<query-editor-row query-ctrl="ctrl" has-text-edit-mode="false">
|
||||||
<stackdriver-filter target="ctrl.target" refresh="ctrl.refresh()" datasource="ctrl.datasource"></stackdriver-filter>
|
<stackdriver-filter target="ctrl.target" refresh="ctrl.refresh()" datasource="ctrl.datasource"
|
||||||
|
></stackdriver-filter>
|
||||||
<stackdriver-aggregation target="ctrl.target" alignment-period="ctrl.lastQueryMeta.alignmentPeriod" refresh="ctrl.refresh()"></stackdriver-aggregation>
|
<stackdriver-aggregation target="ctrl.target" alignment-period="ctrl.lastQueryMeta.alignmentPeriod" refresh="ctrl.refresh()"></stackdriver-aggregation>
|
||||||
<div class="gf-form-inline">
|
<div class="gf-form-inline">
|
||||||
<div class="gf-form">
|
<div class="gf-form">
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import coreModule from 'app/core/core_module';
|
import coreModule from 'app/core/core_module';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import * as options from './constants';
|
import { alignmentPeriods } from './constants';
|
||||||
import { getAlignmentOptionsByMetric, getAggregationOptionsByMetric } from './functions';
|
import { getAlignmentOptionsByMetric, getAggregationOptionsByMetric } from './functions';
|
||||||
import kbn from 'app/core/utils/kbn';
|
import kbn from 'app/core/utils/kbn';
|
||||||
|
|
||||||
@ -29,9 +29,16 @@ export class StackdriverAggregationCtrl {
|
|||||||
constructor(private $scope, private templateSrv) {
|
constructor(private $scope, private templateSrv) {
|
||||||
this.$scope.ctrl = this;
|
this.$scope.ctrl = this;
|
||||||
this.target = $scope.target;
|
this.target = $scope.target;
|
||||||
this.alignmentPeriods = options.alignmentPeriods;
|
this.alignmentPeriods = [
|
||||||
this.aggOptions = options.aggOptions;
|
this.getTemplateVariablesGroup(),
|
||||||
this.alignOptions = options.alignOptions;
|
{
|
||||||
|
label: 'Alignment Periods',
|
||||||
|
options: alignmentPeriods.map(ap => ({
|
||||||
|
...ap,
|
||||||
|
label: ap.text,
|
||||||
|
})),
|
||||||
|
},
|
||||||
|
];
|
||||||
this.setAggOptions();
|
this.setAggOptions();
|
||||||
this.setAlignOptions();
|
this.setAlignOptions();
|
||||||
const self = this;
|
const self = this;
|
||||||
@ -39,30 +46,68 @@ export class StackdriverAggregationCtrl {
|
|||||||
self.setAggOptions();
|
self.setAggOptions();
|
||||||
self.setAlignOptions();
|
self.setAlignOptions();
|
||||||
});
|
});
|
||||||
|
this.handleAlignmentChange = this.handleAlignmentChange.bind(this);
|
||||||
|
this.handleAggregationChange = this.handleAggregationChange.bind(this);
|
||||||
|
this.handleAlignmentPeriodChange = this.handleAlignmentPeriodChange.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
setAlignOptions() {
|
setAlignOptions() {
|
||||||
this.alignOptions = getAlignmentOptionsByMetric(this.target.valueType, this.target.metricKind);
|
const alignments = getAlignmentOptionsByMetric(this.target.valueType, this.target.metricKind).map(a => ({
|
||||||
if (!this.alignOptions.find(o => o.value === this.templateSrv.replace(this.target.aggregation.perSeriesAligner))) {
|
...a,
|
||||||
this.target.aggregation.perSeriesAligner = this.alignOptions.length > 0 ? this.alignOptions[0].value : '';
|
label: a.text,
|
||||||
|
}));
|
||||||
|
this.alignOptions = [
|
||||||
|
this.getTemplateVariablesGroup(),
|
||||||
|
{
|
||||||
|
label: 'Alignment Options',
|
||||||
|
options: alignments,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
if (!alignments.find(o => o.value === this.templateSrv.replace(this.target.aggregation.perSeriesAligner))) {
|
||||||
|
this.target.aggregation.perSeriesAligner = alignments.length > 0 ? alignments[0].value : '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setAggOptions() {
|
setAggOptions() {
|
||||||
this.aggOptions = getAggregationOptionsByMetric(this.target.valueType, this.target.metricKind);
|
let aggregations = getAggregationOptionsByMetric(this.target.valueType, this.target.metricKind).map(a => ({
|
||||||
|
...a,
|
||||||
if (!this.aggOptions.find(o => o.value === this.templateSrv.replace(this.target.aggregation.crossSeriesReducer))) {
|
label: a.text,
|
||||||
|
}));
|
||||||
|
if (!aggregations.find(o => o.value === this.templateSrv.replace(this.target.aggregation.crossSeriesReducer))) {
|
||||||
this.deselectAggregationOption('REDUCE_NONE');
|
this.deselectAggregationOption('REDUCE_NONE');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.target.aggregation.groupBys.length > 0) {
|
if (this.target.aggregation.groupBys.length > 0) {
|
||||||
this.aggOptions = this.aggOptions.filter(o => o.value !== 'REDUCE_NONE');
|
aggregations = this.aggOptions.filter(o => o.value !== 'REDUCE_NONE');
|
||||||
this.deselectAggregationOption('REDUCE_NONE');
|
this.deselectAggregationOption('REDUCE_NONE');
|
||||||
}
|
}
|
||||||
|
this.aggOptions = [
|
||||||
|
this.getTemplateVariablesGroup(),
|
||||||
|
{
|
||||||
|
label: 'Aggregations',
|
||||||
|
options: aggregations,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
handleAlignmentChange(value) {
|
||||||
|
this.target.aggregation.perSeriesAligner = value;
|
||||||
|
this.$scope.refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
handleAggregationChange(value) {
|
||||||
|
this.target.aggregation.crossSeriesReducer = value;
|
||||||
|
this.$scope.refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
handleAlignmentPeriodChange(value) {
|
||||||
|
this.target.aggregation.alignmentPeriod = value;
|
||||||
|
this.$scope.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
formatAlignmentText() {
|
formatAlignmentText() {
|
||||||
const selectedAlignment = this.alignOptions.find(
|
const alignments = getAlignmentOptionsByMetric(this.target.valueType, this.target.metricKind);
|
||||||
|
const selectedAlignment = alignments.find(
|
||||||
ap => ap.value === this.templateSrv.replace(this.target.aggregation.perSeriesAligner)
|
ap => ap.value === this.templateSrv.replace(this.target.aggregation.perSeriesAligner)
|
||||||
);
|
);
|
||||||
return `${kbn.secondsToHms(this.$scope.alignmentPeriod)} interval (${
|
return `${kbn.secondsToHms(this.$scope.alignmentPeriod)} interval (${
|
||||||
@ -74,6 +119,16 @@ export class StackdriverAggregationCtrl {
|
|||||||
const newValue = this.aggOptions.find(o => o.value !== notValidOptionValue);
|
const newValue = this.aggOptions.find(o => o.value !== notValidOptionValue);
|
||||||
this.target.aggregation.crossSeriesReducer = newValue ? newValue.value : '';
|
this.target.aggregation.crossSeriesReducer = newValue ? newValue.value : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getTemplateVariablesGroup() {
|
||||||
|
return {
|
||||||
|
label: 'Template Variables',
|
||||||
|
options: this.templateSrv.variables.map(v => ({
|
||||||
|
label: `$${v.name}`,
|
||||||
|
value: `$${v.name}`,
|
||||||
|
})),
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
coreModule.directive('stackdriverAggregation', StackdriverAggregation);
|
coreModule.directive('stackdriverAggregation', StackdriverAggregation);
|
||||||
|
Loading…
Reference in New Issue
Block a user