cloud-report
Version:
Collects and analyzes cloud resources
78 lines (77 loc) • 3.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("../../../types");
const utils_1 = require("../../../utils");
const base_1 = require("../../base");
class EC2InstanceCPUUtilizationAlarmsAnalyzer extends base_1.BaseAnalyzer {
analyze(params, fullReport) {
const allAlarms = params.alarms;
if (!allAlarms || !fullReport["aws.ec2"] || !fullReport["aws.ec2"].instances) {
return undefined;
}
const allInstances = fullReport["aws.ec2"].instances;
const ec2_instance_cpu_utilization_alarms = {
type: types_1.CheckAnalysisType.OperationalExcellence,
};
ec2_instance_cpu_utilization_alarms.what = "Are alarms are enabled for EC2 instance CPU utilization?";
ec2_instance_cpu_utilization_alarms.why = `It is important to set alarms for EC2 CPU utilization as
when utilization is high then the application performance will be degraded.`;
ec2_instance_cpu_utilization_alarms.recommendation = `Recommended to set alarm for EC2 CPU
utilization to take appropriative action.`;
ec2_instance_cpu_utilization_alarms.benchmark = ['all'];
const allRegionsAnalysis = {};
for (const region in allInstances) {
const regionInstances = allInstances[region];
const regionAlarms = allAlarms[region] || [];
const alarmsMapByInstance = this.mapAlarmsByInstance(regionAlarms);
allRegionsAnalysis[region] = [];
for (const instance of regionInstances) {
if (instance.State.Name !== "running") {
continue;
}
const alarmAnalysis = {};
const instanceAlarms = alarmsMapByInstance[instance.InstanceId];
alarmAnalysis.resource = { instance, alarms: instanceAlarms };
alarmAnalysis.resourceSummary = {
name: "Instance",
value: `${utils_1.ResourceUtil.getNameByTags(instance)} | ${instance.InstanceId}`,
};
if (this.isCPUUtilizationAlarmPresent(instanceAlarms)) {
alarmAnalysis.severity = types_1.SeverityStatus.Good;
alarmAnalysis.message = "CPUUtilization alarm is enabled";
}
else {
alarmAnalysis.severity = types_1.SeverityStatus.Warning;
alarmAnalysis.message = "CPUUtilization alarm is not enabled";
alarmAnalysis.action = "Set CPUUtilization alarm";
}
allRegionsAnalysis[region].push(alarmAnalysis);
}
}
ec2_instance_cpu_utilization_alarms.regions = allRegionsAnalysis;
return { ec2_instance_cpu_utilization_alarms };
}
mapAlarmsByInstance(alarms) {
return alarms.reduce((alarmsMap, alarm) => {
if (alarm.Namespace === "AWS/EC2" && alarm.Dimensions) {
const instanceDimension = alarm.Dimensions.find((dimension) => {
return dimension.Name === "InstanceId";
});
if (instanceDimension && instanceDimension.Value) {
alarmsMap[instanceDimension.Value] = alarmsMap[instanceDimension.Value] || [];
alarmsMap[instanceDimension.Value].push(alarm);
}
}
return alarmsMap;
}, {});
}
isCPUUtilizationAlarmPresent(alarms) {
return alarms && alarms.some((alarm) => {
return alarm.ActionsEnabled &&
alarm.AlarmActions &&
alarm.AlarmActions.length &&
alarm.MetricName === "CPUUtilization";
});
}
}
exports.EC2InstanceCPUUtilizationAlarmsAnalyzer = EC2InstanceCPUUtilizationAlarmsAnalyzer;