UNPKG

@csermet/multiprovider

Version:

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

93 lines (92 loc) 3.56 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMskClustersForRegion = void 0; const sdk_1 = __importDefault(require("@cloudgraph/sdk")); const kafka_1 = __importDefault(require("aws-sdk/clients/kafka")); const isEmpty_1 = __importDefault(require("lodash/isEmpty")); const groupBy_1 = __importDefault(require("lodash/groupBy")); const logger_1 = __importDefault(require("../../properties/logger")); const utils_1 = require("../../utils"); const errorLog_1 = __importDefault(require("../../utils/errorLog")); const constants_1 = require("../../config/constants"); const lt = { ...logger_1.default }; const { logger } = sdk_1.default; const MAX_DOMAIN_NAMES = 500; const serviceName = 'Msk'; const errorLog = new errorLog_1.default(serviceName); const endpoint = utils_1.initTestEndpoint(serviceName); const customRetrySettings = utils_1.setAwsRetryOptions({ baseDelay: constants_1.API_GATEWAY_CUSTOM_DELAY, }); const getMskClustersForRegion = async (kafka) => new Promise(async (resolve) => { const mskClusterList = []; const listClusterV2Opts = {}; const listAllMskClusters = (token) => { listClusterV2Opts.MaxResults = MAX_DOMAIN_NAMES; if (token) { listClusterV2Opts.NextToken = token; } try { kafka.listClustersV2(listClusterV2Opts, (err, data) => { if (err) { errorLog.generateAwsErrorLog({ functionName: 'kafka:listClustersV2', err, }); } if (isEmpty_1.default(data)) { return resolve([]); } const { NextToken: nextToken, ClusterInfoList: clusters = [] } = data || {}; if (isEmpty_1.default(clusters)) { return resolve([]); } logger.debug(lt.fetchedMskClusters(clusters.length)); mskClusterList.push(...clusters); if (nextToken) { listAllMskClusters(nextToken); } else { resolve(mskClusterList); } }); } catch (error) { resolve([]); } }; listAllMskClusters(); }); exports.getMskClustersForRegion = getMskClustersForRegion; exports.default = async ({ regions, config, account, }) => new Promise(async (resolve) => { const mskClustersResult = []; const regionPromises = regions.split(',').map(region => { const kafka = new kafka_1.default({ ...config, region, endpoint, ...customRetrySettings, }); return new Promise(async (resolveMskClusterData) => { // Get Msk Cluster Data const mskClusters = await exports.getMskClustersForRegion(kafka); if (!isEmpty_1.default(mskClusters)) { for (const cluster of mskClusters) { mskClustersResult.push({ ...cluster, region, Tags: cluster.Tags, account, }); } } resolveMskClusterData(); }); }); await Promise.all(regionPromises); errorLog.reset(); resolve(groupBy_1.default(mskClustersResult, 'region')); });