You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
4.2 KiB
142 lines
4.2 KiB
|
|
import coreModule from 'grafana/app/core/core_module'; |
|
|
|
export class ThresholdFormCtrl { |
|
panelCtrl: any; |
|
panel: any; |
|
disabled: boolean; |
|
|
|
/** @ngInject */ |
|
constructor($scope) { |
|
this.panel = this.panelCtrl.panel; |
|
|
|
if (this.panel.alert) { |
|
this.disabled = true; |
|
} |
|
|
|
var unbindDestroy = $scope.$on('$destroy', () => { |
|
this.panelCtrl.editingThresholds = false; |
|
this.panelCtrl.render(); |
|
unbindDestroy(); |
|
}); |
|
|
|
this.panelCtrl.editingThresholds = true; |
|
} |
|
|
|
addThreshold() { |
|
this.panel.thresholds.push({ |
|
value: undefined, |
|
colorMode: 'critical', |
|
op: 'gt', |
|
fill: true, |
|
line: true, |
|
}); |
|
this.panelCtrl.render(); |
|
} |
|
|
|
removeThreshold(index) { |
|
this.panel.thresholds.splice(index, 1); |
|
this.panelCtrl.render(); |
|
} |
|
|
|
render() { |
|
this.panelCtrl.render(); |
|
} |
|
|
|
onFillColorChange(index) { |
|
return newColor => { |
|
this.panel.thresholds[index].fillColor = newColor; |
|
this.render(); |
|
}; |
|
} |
|
|
|
onLineColorChange(index) { |
|
return newColor => { |
|
this.panel.thresholds[index].lineColor = newColor; |
|
this.render(); |
|
}; |
|
} |
|
} |
|
|
|
var template = ` |
|
<div class="gf-form-group"> |
|
<h5>Thresholds</h5> |
|
<p class="muted" ng-show="ctrl.disabled"> |
|
Visual thresholds options <strong>disabled.</strong> |
|
Visit the Alert tab update your thresholds. <br> |
|
To re-enable thresholds, the alert rule must be deleted from this panel. |
|
</p> |
|
<div ng-class="{'thresholds-form-disabled': ctrl.disabled}"> |
|
<div class="gf-form-inline" ng-repeat="threshold in ctrl.panel.thresholds"> |
|
<div class="gf-form"> |
|
<label class="gf-form-label">T{{$index+1}}</label> |
|
</div> |
|
|
|
<div class="gf-form"> |
|
<div class="gf-form-select-wrapper"> |
|
<select class="gf-form-input" ng-model="threshold.op" |
|
ng-options="f for f in ['gt', 'lt']" ng-change="ctrl.render()" ng-disabled="ctrl.disabled"></select> |
|
</div> |
|
<input type="number" ng-model="threshold.value" class="gf-form-input width-8" |
|
ng-change="ctrl.render()" placeholder="value" ng-disabled="ctrl.disabled"> |
|
</div> |
|
|
|
<div class="gf-form"> |
|
<label class="gf-form-label">Color</label> |
|
<div class="gf-form-select-wrapper"> |
|
<select class="gf-form-input" ng-model="threshold.colorMode" |
|
ng-options="f for f in ['custom', 'critical', 'warning', 'ok']" ng-change="ctrl.render()" ng-disabled="ctrl.disabled"> |
|
</select> |
|
</div> |
|
</div> |
|
|
|
<gf-form-switch class="gf-form" label="Fill" checked="threshold.fill" |
|
on-change="ctrl.render()" ng-disabled="ctrl.disabled"></gf-form-switch> |
|
|
|
<div class="gf-form" ng-if="threshold.fill && threshold.colorMode === 'custom'"> |
|
<label class="gf-form-label">Fill color</label> |
|
<span class="gf-form-label"> |
|
<color-picker color="threshold.fillColor" onChange="ctrl.onFillColorChange($index)"></color-picker> |
|
</span> |
|
</div> |
|
|
|
<gf-form-switch class="gf-form" label="Line" checked="threshold.line" |
|
on-change="ctrl.render()" ng-disabled="ctrl.disabled"></gf-form-switch> |
|
|
|
<div class="gf-form" ng-if="threshold.line && threshold.colorMode === 'custom'"> |
|
<label class="gf-form-label">Line color</label> |
|
<span class="gf-form-label"> |
|
<color-picker color="threshold.lineColor" onChange="ctrl.onLineColorChange($index)"></color-picker> |
|
</span> |
|
</div> |
|
|
|
<div class="gf-form"> |
|
<label class="gf-form-label"> |
|
<a class="pointer" ng-click="ctrl.removeThreshold($index)" ng-disabled="ctrl.disabled"> |
|
<i class="fa fa-trash"></i> |
|
</a> |
|
</label> |
|
</div> |
|
</div> |
|
|
|
<div class="gf-form-button-row"> |
|
<button class="btn btn-inverse" ng-click="ctrl.addThreshold()" ng-disabled="ctrl.disabled"> |
|
<i class="fa fa-plus"></i> Add Threshold |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
`; |
|
|
|
coreModule.directive('hasticGraphThresholdForm', function() { |
|
return { |
|
restrict: 'E', |
|
template: template, |
|
controller: ThresholdFormCtrl, |
|
bindToController: true, |
|
controllerAs: 'ctrl', |
|
scope: { |
|
panelCtrl: '=', |
|
}, |
|
}; |
|
});
|
|
|