| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- define([
- 'lodash',
- ],
- function (_) {
- 'use strict';
- function CloudWatchAnnotationQuery(datasource, annotation, $q, templateSrv) {
- this.datasource = datasource;
- this.annotation = annotation;
- this.$q = $q;
- this.templateSrv = templateSrv;
- }
- CloudWatchAnnotationQuery.prototype.process = function(from, to) {
- var self = this;
- var usePrefixMatch = this.annotation.prefixMatching;
- var region = this.templateSrv.replace(this.annotation.region);
- var namespace = this.templateSrv.replace(this.annotation.namespace);
- var metricName = this.templateSrv.replace(this.annotation.metricName);
- var dimensions = this.datasource.convertDimensionFormat(this.annotation.dimensions);
- var statistics = _.map(this.annotation.statistics, function(s) { return self.templateSrv.replace(s); });
- var defaultPeriod = usePrefixMatch ? '' : '300';
- var period = this.annotation.period || defaultPeriod;
- period = parseInt(period, 10);
- var actionPrefix = this.annotation.actionPrefix || '';
- var alarmNamePrefix = this.annotation.alarmNamePrefix || '';
- var d = this.$q.defer();
- var allQueryPromise;
- if (usePrefixMatch) {
- allQueryPromise = [
- this.datasource.performDescribeAlarms(region, actionPrefix, alarmNamePrefix, [], '').then(function(alarms) {
- alarms.MetricAlarms = self.filterAlarms(alarms, namespace, metricName, dimensions, statistics, period);
- return alarms;
- })
- ];
- } else {
- if (!region || !namespace || !metricName || _.isEmpty(statistics)) { return this.$q.when([]); }
- allQueryPromise = _.map(statistics, function(statistic) {
- return self.datasource.performDescribeAlarmsForMetric(region, namespace, metricName, dimensions, statistic, period);
- });
- }
- this.$q.all(allQueryPromise).then(function(alarms) {
- var eventList = [];
- var start = self.datasource.convertToCloudWatchTime(from, false);
- var end = self.datasource.convertToCloudWatchTime(to, true);
- _.chain(alarms)
- .map('MetricAlarms')
- .flatten()
- .each(function(alarm) {
- if (!alarm) {
- d.resolve(eventList);
- return;
- }
- self.datasource.performDescribeAlarmHistory(region, alarm.AlarmName, start, end).then(function(history) {
- _.each(history.AlarmHistoryItems, function(h) {
- var event = {
- annotation: self.annotation,
- time: Date.parse(h.Timestamp),
- title: h.AlarmName,
- tags: [h.HistoryItemType],
- text: h.HistorySummary
- };
- eventList.push(event);
- });
- d.resolve(eventList);
- });
- })
- .value();
- });
- return d.promise;
- };
- CloudWatchAnnotationQuery.prototype.filterAlarms = function(alarms, namespace, metricName, dimensions, statistics, period) {
- return _.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) && !_.includes(statistics, alarm.Statistic)) {
- return false;
- }
- if (!_.isNaN(period) && alarm.Period !== period) {
- return false;
- }
- return true;
- });
- };
- return CloudWatchAnnotationQuery;
- });
|