|
@@ -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);
|
|
|
-
|
|
|
|
|
- if (!region || !namespace || !metricName || _.isEmpty(statistics)) { return $q.when([]); }
|
|
|
|
|
|
|
+ var actionPrefix = annotation.actionPrefix || '';
|
|
|
|
|
+ var alarmNamePrefix = annotation.alarmNamePrefix || '';
|
|
|
|
|
|
|
|
var d = $q.defer();
|
|
var d = $q.defer();
|
|
|
var self = this;
|
|
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) {
|
|
$q.all(allQueryPromise).then(function(alarms) {
|
|
|
var eventList = [];
|
|
var eventList = [];
|
|
|
|
|
|