UNPKG

cloud-report

Version:

Collects and analyzes cloud resources

75 lines (74 loc) 3.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const types_1 = require("../../../types"); const base_1 = require("../../base"); class AlbUnHealthyHostAlarmsAnalyzer extends base_1.BaseAnalyzer { analyze(params, fullReport) { const allAlarms = params.alarms; if (!allAlarms || !fullReport["aws.elb"] || !fullReport["aws.elb"].elbs) { return undefined; } const allELBs = fullReport["aws.elb"].elbs; const alb_unhealthy_hosts_alarms = { type: types_1.CheckAnalysisType.OperationalExcellence }; alb_unhealthy_hosts_alarms.what = "Are alarms are enabled for ALB Unhealthy hosts?"; alb_unhealthy_hosts_alarms.why = `It is important to set alarms for Unhealthy hosts as otherwise the performance of the application will be degraded`; alb_unhealthy_hosts_alarms.recommendation = `Recommended to set alarm for Unhealthy hosts to take appropriative action.`; alb_unhealthy_hosts_alarms.benchmark = ['all']; const allRegionsAnalysis = {}; for (const region in allELBs) { const regionELBs = allELBs[region]; const regionAlarms = allAlarms[region]; const alarmsMapByELB = this.mapAlarmsByELB(regionAlarms); allRegionsAnalysis[region] = []; for (const elb of regionELBs) { const alarmAnalysis = {}; const elbAlarms = alarmsMapByELB[this.getLoadBalancerDimensionId(elb.LoadBalancerArn)]; alarmAnalysis.resource = { elb, alarms: elbAlarms }; alarmAnalysis.resourceSummary = { name: "LoadBalancer", value: elb.LoadBalancerName, }; if (this.isUnHealthyHostCountAlarmsPresent(elbAlarms)) { alarmAnalysis.severity = types_1.SeverityStatus.Good; alarmAnalysis.message = "Unhealthy hosts alarms are enabled"; } else { alarmAnalysis.severity = types_1.SeverityStatus.Failure; alarmAnalysis.message = "Unhealthy hosts alarms are not enabled"; alarmAnalysis.action = "Set Unhealthy hosts alarms"; } allRegionsAnalysis[region].push(alarmAnalysis); } } alb_unhealthy_hosts_alarms.regions = allRegionsAnalysis; return { alb_unhealthy_hosts_alarms }; } mapAlarmsByELB(alarms) { return alarms.reduce((alarmsMap, alarm) => { if (alarm.Namespace === "AWS/ApplicationELB" && alarm.Dimensions) { const elbDimension = alarm.Dimensions.find((dimension) => { return dimension.Name === "LoadBalancer"; }); if (elbDimension && elbDimension.Value) { alarmsMap[elbDimension.Value] = alarmsMap[elbDimension.Value] || []; alarmsMap[elbDimension.Value].push(alarm); } } return alarmsMap; }, {}); } isUnHealthyHostCountAlarmsPresent(alarms) { return alarms && alarms.some((alarm) => { return alarm.ActionsEnabled && alarm.AlarmActions && alarm.AlarmActions.length && alarm.MetricName === "UnHealthyHostCount"; }); } getLoadBalancerDimensionId(loadBalancerArn) { return loadBalancerArn.split("/").splice(-3).join("/"); } } exports.AlbUnHealthyHostAlarmsAnalyzer = AlbUnHealthyHostAlarmsAnalyzer;