cloud-report
Version:
Collects and analyzes cloud resources
70 lines (69 loc) • 3.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("../../../types");
const cloudfront_1 = require("../../../utils/aws/cloudfront");
const base_1 = require("../../base");
class CloudFront5xxAlarmsAnalyzer extends base_1.BaseAnalyzer {
analyze(params, fullReport) {
const allDistributions = params.distributions;
if (!allDistributions || !fullReport["aws.cloudwatch"] || !fullReport["aws.cloudwatch"].alarms) {
return undefined;
}
const allAlarms = fullReport["aws.cloudwatch"].alarms;
const distribution_5xx_errors_alarms = { type: types_1.CheckAnalysisType.OperationalExcellence };
distribution_5xx_errors_alarms.what = "Are alarms are enabled for Distribution 5XX errors?";
distribution_5xx_errors_alarms.why = `It is important to set alarms for 5XX Errors as otherwise
you won't be aware when the application is failing.`;
distribution_5xx_errors_alarms.recommendation = `Recommended to set alarm
for 5XX Errors to take appropriative action.`;
distribution_5xx_errors_alarms.benchmark = ['all'];
const allDistributionsAnalysis = [];
for (const distribution of allDistributions) {
const alarms = allAlarms["us-east-1"];
const alarmsMapByDistribution = this.mapAlarmsByDistribution(alarms);
const alarmAnalysis = {};
const distributionAlarms = alarmsMapByDistribution[distribution.Id];
alarmAnalysis.resource = { distribution, alarms: distributionAlarms };
const distributionAlias = cloudfront_1.CloudFrontUtil.getAliasName(distribution);
alarmAnalysis.resourceSummary = {
name: "CloudFrontDistribution",
value: distributionAlias ? `${distributionAlias} | ${distribution.Id}` : distribution.Id,
};
if (this.is5xxAlarmsPresent(distributionAlarms)) {
alarmAnalysis.severity = types_1.SeverityStatus.Good;
alarmAnalysis.message = "5XX errors alarms are enabled.";
}
else {
alarmAnalysis.severity = types_1.SeverityStatus.Failure;
alarmAnalysis.message = "5XX errors alarms are not enabled.";
alarmAnalysis.action = "Set 5XX errors alarms.";
}
allDistributionsAnalysis.push(alarmAnalysis);
}
distribution_5xx_errors_alarms.regions = { global: allDistributionsAnalysis };
return { distribution_5xx_errors_alarms };
}
mapAlarmsByDistribution(alarms) {
return alarms.reduce((alarmsMap, alarm) => {
if (alarm.Namespace === "AWS/CloudFront" && alarm.Dimensions) {
const distributionDimension = alarm.Dimensions.find((dimension) => {
return dimension.Name === "DistributionId";
});
if (distributionDimension && distributionDimension.Value) {
alarmsMap[distributionDimension.Value] = alarmsMap[distributionDimension.Value] || [];
alarmsMap[distributionDimension.Value].push(alarm);
}
}
return alarmsMap;
}, {});
}
is5xxAlarmsPresent(alarms) {
return alarms && alarms.some((alarm) => {
return alarm.ActionsEnabled &&
alarm.AlarmActions &&
alarm.AlarmActions.length &&
alarm.MetricName.toLowerCase().includes("5xx");
});
}
}
exports.CloudFront5xxAlarmsAnalyzer = CloudFront5xxAlarmsAnalyzer;