Commit defb15be by Mitsuhiro Tanda

CloudWatch multiple alarm annotation support

parent 10016d9d
...@@ -230,21 +230,57 @@ function (angular, _, moment, dateMath) { ...@@ -230,21 +230,57 @@ function (angular, _, moment, dateMath) {
this.annotationQuery = function(options) { this.annotationQuery = function(options) {
var annotation = options.annotation; var annotation = options.annotation;
var usePrefixMatch = annotation.prefixMatching;
var region = templateSrv.replace(annotation.region); var region = templateSrv.replace(annotation.region);
var namespace = templateSrv.replace(annotation.namespace); var namespace = templateSrv.replace(annotation.namespace);
var metricName = templateSrv.replace(annotation.metricName); var metricName = templateSrv.replace(annotation.metricName);
var dimensions = convertDimensionFormat(annotation.dimensions); var dimensions = convertDimensionFormat(annotation.dimensions);
var statistics = _.map(annotation.statistics, function(s) { return templateSrv.replace(s); }); 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); period = parseInt(period, 10);
var actionPrefix = annotation.actionPrefix || '';
if (!region || !namespace || !metricName || _.isEmpty(statistics)) { return $q.when([]); } var alarmNamePrefix = annotation.alarmNamePrefix || '';
var d = $q.defer(); var d = $q.defer();
var self = this; var self = this;
var allQueryPromise = _.map(statistics, function(statistic) { 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); return self.performDescribeAlarmsForMetric(region, namespace, metricName, dimensions, statistic, period);
}); });
}
$q.all(allQueryPromise).then(function(alarms) { $q.all(allQueryPromise).then(function(alarms) {
var eventList = []; var eventList = [];
......
<cloudwatch-query-parameter target="ctrl.annotation" datasource="ctrl.datasource"></cloudwatch-query-parameter> <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>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment