UNPKG

cloud-report

Version:

Collects and analyzes cloud resources

66 lines (65 loc) 3.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const types_1 = require("../../../types"); const utils_1 = require("../../../utils"); const base_1 = require("../../base"); const moment = require("moment"); class InstanceVolumeSnapshotAnalyzer extends base_1.BaseAnalyzer { analyze(params, fullReport) { const allInstances = params.instances; if (!allInstances) { return undefined; } const instances_volume_snapshot = { type: types_1.CheckAnalysisType.Informational }; instances_volume_snapshot.what = "Are Snapshots being taken for EBS volumes?"; instances_volume_snapshot.why = `If we take regular snapshots of EBS volumes then it prevents data loss incase of volume failure or accidental deletes`; instances_volume_snapshot.recommendation = "Recommended to take regular snapshots for all in-use volumes"; instances_volume_snapshot.benchmark = ['all']; const allRegionsAnalysis = {}; for (const region in allInstances) { const regionInstances = allInstances[region]; allRegionsAnalysis[region] = []; for (const instance of regionInstances) { for (const blockDeviceMap of instance.BlockDeviceMappings) { const instanceAnalysis = {}; instanceAnalysis.resource = instance; instanceAnalysis.resourceSummary = { name: "Instance", value: `${utils_1.ResourceUtil.getNameByTags(instance)} | ${instance.InstanceId} | ${blockDeviceMap.Ebs.VolumeId}`, }; if (blockDeviceMap.Ebs.Snapshots.length === 0) { instanceAnalysis.severity = types_1.SeverityStatus.Failure; instanceAnalysis.message = "EC2 instance volume does not have any snapshot taken"; instanceAnalysis.action = "Take snapshot"; } if (blockDeviceMap.Ebs.Snapshots.length > 0) { const d = new Date(blockDeviceMap.Ebs.Snapshots[0].StartTime); const now = new Date(); const start = moment(this.getDate(d)); const end = moment(this.getDate(now)); const diff = end.diff(start, "days"); if (diff <= 1) { instanceAnalysis.severity = types_1.SeverityStatus.Good; instanceAnalysis.message = `Last snapshot taken on ${d.getUTCDate()}-${d.getUTCMonth() + 1}-${d.getUTCFullYear()} (UTC time)`; } if (diff > 1) { instanceAnalysis.severity = types_1.SeverityStatus.Warning; instanceAnalysis.message = `Last snapshot taken on ${d.getUTCDate()}-${d.getUTCMonth() + 1}-${d.getUTCFullYear()} (UTC time)`; } } allRegionsAnalysis[region].push(instanceAnalysis); } } } instances_volume_snapshot.regions = allRegionsAnalysis; return { instances_volume_snapshot }; } getDate(dateObj) { const d = dateObj.getUTCDate().toString().length === 1 ? '0' + dateObj.getUTCDate().toString() : dateObj.getUTCDate().toString(); const m = (dateObj.getUTCMonth() + 1).toString().length === 1 ? '0' + (dateObj.getUTCMonth() + 1).toString() : (dateObj.getUTCMonth() + 1).toString(); const y = dateObj.getUTCFullYear(); return `${y}-${m}-${d}`; } } exports.InstanceVolumeSnapshotAnalyzer = InstanceVolumeSnapshotAnalyzer;