mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
CloudWatch multiple alarm annotation support
This commit is contained in:
@@ -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 = [];
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1,19 @@
|
|||||||
<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>
|
||||||
|
|||||||
Reference in New Issue
Block a user