cloud-report
Version:
Collects and analyzes cloud resources
75 lines (74 loc) • 3.66 kB
JavaScript
;
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;