mirror of https://github.com/grafana/grafana.git
CloudWatch multiple alarm annotation support
This commit is contained in:
parent
10016d9d38
commit
defb15bea1
|
|
@ -230,21 +230,57 @@ function (angular, _, moment, dateMath) {
|
|||
|
||||
this.annotationQuery = function(options) {
|
||||
var annotation = options.annotation;
|
||||
var usePrefixMatch = annotation.prefixMatching;
|
||||
var region = templateSrv.replace(annotation.region);
|
||||
var namespace = templateSrv.replace(annotation.namespace);
|
||||
var metricName = templateSrv.replace(annotation.metricName);
|
||||
var dimensions = convertDimensionFormat(annotation.dimensions);
|
||||
var statistics = _.map(annotation.statistics, function(s) { return templateSrv.replace(s); });
|
||||
var period = annotation.period || '300';
|
||||
var defaultPeriod = usePrefixMatch ? '' : '300';
|
||||
var period = annotation.period || defaultPeriod;
|
||||
period = parseInt(period, 10);
|
||||
|
||||
if (!region || !namespace || !metricName || _.isEmpty(statistics)) { return $q.when([]); }
|
||||
var actionPrefix = annotation.actionPrefix || '';
|
||||
var alarmNamePrefix = annotation.alarmNamePrefix || '';
|
||||
|
||||
var d = $q.defer();
|
||||
var self = this;
|
||||
var allQueryPromise = _.map(statistics, function(statistic) {
|
||||
return self.performDescribeAlarmsForMetric(region, namespace, metricName, dimensions, statistic, period);
|
||||
});
|
||||
var allQueryPromise;
|
||||
if (usePrefixMatch) {
|
||||
allQueryPromise = [
|
||||
this.performDescribeAlarms(region, actionPrefix, alarmNamePrefix, [], '').then(function(alarms) {
|
||||
alarms.MetricAlarms = _.filter(alarms.MetricAlarms, function(alarm) {
|
||||
if (!_.isEmpty(namespace) && alarm.Namespace !== namespace) {
|
||||
return false;
|
||||
}
|
||||
if (!_.isEmpty(metricName) && alarm.MetricName !== metricName) {
|
||||
return false;
|
||||
}
|
||||
var sd = function(d) {
|
||||
return d.Name;
|
||||
};
|
||||
var isSameDimensions = JSON.stringify(_.sortBy(alarm.Dimensions, sd)) === JSON.stringify(_.sortBy(dimensions, sd));
|
||||
if (!_.isEmpty(dimensions) && !isSameDimensions) {
|
||||
return false;
|
||||
}
|
||||
if (!_.isEmpty(statistics) && !_.contains(statistics, alarm.Statistic)) {
|
||||
return false;
|
||||
}
|
||||
if (!_.isNaN(period) && alarm.Period !== period) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
return alarms;
|
||||
})
|
||||
];
|
||||
} else {
|
||||
if (!region || !namespace || !metricName || _.isEmpty(statistics)) { return $q.when([]); }
|
||||
|
||||
allQueryPromise = _.map(statistics, function(statistic) {
|
||||
return self.performDescribeAlarmsForMetric(region, namespace, metricName, dimensions, statistic, period);
|
||||
});
|
||||
}
|
||||
$q.all(allQueryPromise).then(function(alarms) {
|
||||
var eventList = [];
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1,19 @@
|
|||
<cloudwatch-query-parameter target="ctrl.annotation" datasource="ctrl.datasource"></cloudwatch-query-parameter>
|
||||
<div class="editor-row">
|
||||
<div class="section">
|
||||
<h5>Prefix matching</h5>
|
||||
<div class="editor-option">
|
||||
<editor-checkbox text="Enable" model="ctrl.annotation.prefixMatching"></editor-checkbox>
|
||||
</div>
|
||||
|
||||
<div class="editor-option" ng-if="ctrl.annotation.prefixMatching">
|
||||
<label class="small">Action</label>
|
||||
<input type="text" class="input-small" ng-model='ctrl.annotation.actionPrefix'></input>
|
||||
</div>
|
||||
|
||||
<div class="editor-option" ng-if="ctrl.annotation.prefixMatching">
|
||||
<label class="small">Alarm Name</label>
|
||||
<input type="text" class="input-small" ng-model='ctrl.annotation.alarmNamePrefix'></input>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Reference in New Issue