UNPKG

cloud-report

Version:

Collects and analyzes cloud resources

78 lines (77 loc) 3.93 kB
"use strict"; 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;