@csermet/multiprovider
Version:
cloud-graph provider plugin for AWS used to fetch AWS cloud data.
93 lines (92 loc) • 3.56 kB
JavaScript
;
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'));
});