UNPKG

cloud-report

Version:

Collects and analyzes cloud resources

65 lines (64 loc) 2.97 kB
"use strict"; 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;