cloud-report
Version:
Collects and analyzes cloud resources
73 lines (72 loc) • 3.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("../../../types");
const base_1 = require("../../base");
class SQSQueueSizeAlarmAnalyzer extends base_1.BaseAnalyzer {
analyze(params, fullReport) {
const allAlarms = params.alarms;
if (!allAlarms || !fullReport["aws.sqs"] || !fullReport["aws.sqs"].queue_urls) {
return undefined;
}
const allQueueUrls = fullReport["aws.sqs"].queue_urls;
const sqs_queue_size_alarm = { type: types_1.CheckAnalysisType.OperationalExcellence };
sqs_queue_size_alarm.what = "Are alarms are enabled for SQS Queue size?";
sqs_queue_size_alarm.why = `It is important to set alarms for SQS Queue size as when
the consumers are failing to process the messages from queue then we will get notified`;
sqs_queue_size_alarm.recommendation = `Recommended to set alarms
for SQS Queue size to take appropriative action.`;
sqs_queue_size_alarm.benchmark = ['all'];
const allRegionsAnalysis = {};
for (const region in allQueueUrls) {
const regionQueues = allQueueUrls[region];
const regionAlarms = allAlarms[region];
const alarmsMapByQueue = this.mapAlarmsByQueue(regionAlarms);
allRegionsAnalysis[region] = [];
for (const queueUrl of regionQueues) {
const alarmAnalysis = {};
const queueName = queueUrl.split("/").pop();
const queueAlarms = alarmsMapByQueue[queueName];
alarmAnalysis.resource = { queueName, alarms: queueAlarms };
alarmAnalysis.resourceSummary = {
name: "Queue",
value: queueName,
};
if (this.isQueueSizeAlarmPresent(queueAlarms)) {
alarmAnalysis.severity = types_1.SeverityStatus.Good;
alarmAnalysis.message = "Queue Size alarm is enabled";
}
else {
alarmAnalysis.severity = types_1.SeverityStatus.Warning;
alarmAnalysis.message = "Queue Size alarm is not enabled";
alarmAnalysis.action = "Set Queue Size alarm";
}
allRegionsAnalysis[region].push(alarmAnalysis);
}
}
sqs_queue_size_alarm.regions = allRegionsAnalysis;
return { sqs_queue_size_alarm };
}
mapAlarmsByQueue(alarms) {
return alarms.reduce((alarmsMap, alarm) => {
if (alarm.Namespace === "AWS/SQS" && alarm.Dimensions) {
const queueDimension = alarm.Dimensions.find((dimension) => {
return dimension.Name === "QueueName";
});
if (queueDimension && queueDimension.Value) {
alarmsMap[queueDimension.Value] = alarmsMap[queueDimension.Value] || [];
alarmsMap[queueDimension.Value].push(alarm);
}
}
return alarmsMap;
}, {});
}
isQueueSizeAlarmPresent(alarms) {
return alarms && alarms.some((alarm) => {
return alarm.ActionsEnabled &&
alarm.AlarmActions &&
alarm.AlarmActions.length &&
alarm.MetricName.startsWith("ApproximateNumberOfMessages");
});
}
}
exports.SQSQueueSizeAlarmAnalyzer = SQSQueueSizeAlarmAnalyzer;