cloud-report
Version:
Collects and analyzes cloud resources
65 lines (64 loc) • 2.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const Moment = require("moment");
const utils_1 = require("../../../utils");
const aws_1 = require("../../../utils/aws");
const base_1 = require("../../base");
const volumes_1 = require("./volumes");
class VolumeSnapshotsCollector extends base_1.BaseCollector {
collect() {
return this.getAllVolumeSnapshots();
}
async getAllVolumeSnapshots() {
const serviceName = "EC2";
const ec2Regions = this.getRegions(serviceName);
const volumesCollector = new volumes_1.VolumesCollector();
volumesCollector.setSession(this.getSession());
const snapshots = {};
try {
const volumesData = await utils_1.CollectorUtil.cachedCollect(volumesCollector);
const dataStringsToSearch = utils_1.CommonUtil.removeDuplicates([this.getDateStringForSearch(30),
this.getDateStringForSearch(0)]);
for (const region of ec2Regions) {
try {
const ec2 = this.getClient(serviceName, region);
snapshots[region] = {};
for (const volume of volumesData.volumes[region]) {
snapshots[region][volume.VolumeId] = [];
let fetchPending = true;
let marker;
while (fetchPending) {
const snapshotsResponse = await ec2.describeSnapshots({
Filters: [
{ Name: "start-time", Values: dataStringsToSearch },
{ Name: "volume-id", Values: [volume.VolumeId] },
{ Name: "status", Values: ["completed"] },
],
NextToken: marker,
}).promise();
if (snapshotsResponse.Snapshots) {
snapshots[region][volume.VolumeId] =
snapshots[region][volume.VolumeId].concat(snapshotsResponse.Snapshots);
}
marker = snapshotsResponse.NextToken;
fetchPending = marker !== undefined;
await utils_1.CommonUtil.wait(200);
}
}
}
catch (error) {
aws_1.AWSErrorHandler.handle(error);
continue;
}
}
}
catch (error) {
aws_1.AWSErrorHandler.handle(error);
}
return { snapshots };
}
getDateStringForSearch(beforeDays) {
return Moment().subtract(beforeDays, "days").format("YYYY-MM-*");
}
}
exports.VolumeSnapshotsCollector = VolumeSnapshotsCollector;