@csermet/multiprovider
Version:
cloud-graph provider plugin for AWS used to fetch AWS cloud data.
96 lines (95 loc) • 4.43 kB
JavaScript
;
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 groupBy_1 = __importDefault(require("lodash/groupBy"));
const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
const configservice_1 = __importDefault(require("aws-sdk/clients/configservice"));
const logger_1 = __importDefault(require("../../properties/logger"));
const utils_1 = require("../../utils");
const errorLog_1 = __importDefault(require("../../utils/errorLog"));
const lt = { ...logger_1.default };
const { logger } = sdk_1.default;
const serviceName = 'Configuration Recorder';
const errorLog = new errorLog_1.default(serviceName);
const endpoint = utils_1.initTestEndpoint(serviceName);
const listConfigurationRecorderData = async ({ ec2, region, }) => new Promise(resolve => {
let configurationRecordersData = [];
ec2.describeConfigurationRecorders({}, (err, data) => {
if (err) {
errorLog.generateAwsErrorLog({
functionName: 'ec2:describeConfigurationRecorders',
err,
});
}
if (!isEmpty_1.default(data)) {
const { ConfigurationRecorders: configurationRecorders = [] } = data;
logger.debug(lt.fetchedConfigurationRecorders(configurationRecorders.length));
configurationRecordersData = configurationRecorders.map(config => ({
...config,
region,
}));
}
resolve(configurationRecordersData);
});
});
const getConfigurationRecorderStatus = async (ec2, configNames) => new Promise(resolve => {
ec2.describeConfigurationRecorderStatus({
ConfigurationRecorderNames: configNames,
}, (err, data) => {
if (err) {
errorLog.generateAwsErrorLog({
functionName: 'ec2:describeConfigurationRecorderStatus',
err,
});
}
if (!isEmpty_1.default(data)) {
const { ConfigurationRecordersStatus: configurationRecordersStatus = [], } = data;
logger.debug(lt.fetchedConfigurationRecorders(configurationRecordersStatus.length));
resolve(configurationRecordersStatus);
}
resolve([]);
});
});
exports.default = async ({ regions, config, }) => new Promise(async (resolve) => {
let configurationRecordersResult = [];
const regionPromises = regions.split(',').map(region => {
const ec2 = new configservice_1.default({ ...config, region, endpoint });
return new Promise(async (resolveConfigurationRecorderData) => {
// Get Configuration Recorder Data
const configurationRecorders = await listConfigurationRecorderData({
ec2,
region,
});
if (!isEmpty_1.default(configurationRecorders)) {
for (const configurationRecorder of configurationRecorders) {
configurationRecordersResult.push({
...configurationRecorder,
region,
});
}
const configNames = configurationRecorders.map(configRecorder => configRecorder.name);
if (!isEmpty_1.default(configNames)) {
// Get Configuration Recorder Status
const configStatus = await getConfigurationRecorderStatus(ec2, configNames);
// If exists configuration recorder status, populate configuration recorders
if (!isEmpty_1.default(configStatus)) {
configurationRecordersResult = configurationRecordersResult.map(configRecorder => {
const configRecorderStatus = configStatus.find((status) => status.name === configRecorder.name);
return {
...configRecorder,
Status: configRecorderStatus,
};
});
}
}
}
resolveConfigurationRecorderData();
});
});
await Promise.all(regionPromises);
errorLog.reset();
resolve(groupBy_1.default(configurationRecordersResult, 'region'));
});