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