UNPKG

cloud-report

Version:

Collects and analyzes cloud resources

73 lines (72 loc) 3.53 kB
"use strict"; 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;