UNPKG

@csermet/multiprovider

Version:

cloud-graph provider plugin for AWS used to fetch AWS cloud data.

119 lines (118 loc) 4.33 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const sdk_1 = __importDefault(require("@cloudgraph/sdk")); const cloudfront_1 = __importDefault(require("aws-sdk/clients/cloudfront")); const groupBy_1 = __importDefault(require("lodash/groupBy")); const isEmpty_1 = __importDefault(require("lodash/isEmpty")); const logger_1 = __importDefault(require("../../properties/logger")); const format_1 = require("../../utils/format"); const utils_1 = require("../../utils"); const errorLog_1 = __importDefault(require("../../utils/errorLog")); const regions_1 = require("../../enums/regions"); const lt = { ...logger_1.default }; const { logger } = sdk_1.default; const serviceName = 'Cloudfront'; const errorLog = new errorLog_1.default(serviceName); const endpoint = utils_1.initTestEndpoint(serviceName); const listCloudfrontDistributions = async (cloudFront) => new Promise(resolve => { const distributions = []; const listDistOpts = {}; const listDistributions = (marker) => { if (marker) { listDistOpts.Marker = marker; } cloudFront.listDistributions(listDistOpts, (err, data) => { if (err) { errorLog.generateAwsErrorLog({ functionName: 'cloudfront:listDistributions', err, }); } const { DistributionList: { Items = [], NextMarker: nextToken = '', IsTruncated = false, } = {}, } = data || {}; /** * No Distributions Found */ if (isEmpty_1.default(Items)) { return resolve([]); } distributions.push(...Items); if (IsTruncated) { listDistributions(nextToken); } else { resolve(distributions); } }); }; listDistributions(); }); const getDistributionTags = async (cloudfront, arn) => new Promise(resolve => { cloudfront.listTagsForResource({ Resource: arn, }, (err, data) => { if (err) { errorLog.generateAwsErrorLog({ functionName: 'cloudfront:listTagsForResource', err, }); } const { Tags: { Items: tags = [] }, } = data || { Tags: {} }; if (!isEmpty_1.default(data)) { resolve(format_1.convertAwsTagsToTagMap(tags)); } resolve({}); }); }); const getDistributionConfig = async (cloudfront, id) => new Promise(resolve => { cloudfront.getDistributionConfig({ Id: id, }, (err, data) => { if (err) { errorLog.generateAwsErrorLog({ functionName: 'cloudfront:getDistributionConfig', err, }); } if (!isEmpty_1.default(data)) { resolve({ config: data.DistributionConfig, etag: data.ETag }); } resolve({}); }); }); /** * Cloudfront */ exports.default = async ({ config, }) => { const cloudfront = new cloudfront_1.default({ ...config, endpoint }); const distributionList = await listCloudfrontDistributions(cloudfront); let numOfDistributions = 0; let cloudfrontData = []; if (!isEmpty_1.default(distributionList)) { numOfDistributions += distributionList.length; cloudfrontData = distributionList.map(item => ({ summary: item, region: regions_1.globalRegionName, })); } logger.debug(lt.fetchedCloudFrontDistros(numOfDistributions)); await Promise.all(cloudfrontData.map(async (dist, distIndex) => new Promise(async (resolveDistributionTags) => { const promises = [ getDistributionTags(cloudfront, dist.summary.ARN), getDistributionConfig(cloudfront, dist.summary.Id), ]; const [Tags, distConfig] = await utils_1.settleAllPromises(promises); const { config, etag } = distConfig; cloudfrontData[distIndex] = { ...dist, Tags, config, etag, }; resolveDistributionTags(); }))); errorLog.reset(); return groupBy_1.default(cloudfrontData, 'region'); };