cloud-report
Version:
Collects and analyzes cloud resources
77 lines (76 loc) • 3.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const flat = require("flat");
const Collectors = require("./collectors");
const utils_1 = require("./utils");
const cache_1 = require("./utils/cache");
const log_1 = require("./utils/log");
function getModules(moduleNames) {
if (!moduleNames || moduleNames === "all") {
return [];
}
if (Array.isArray(moduleNames)) {
return moduleNames;
}
else if (typeof moduleNames === "string") {
return moduleNames.split(",");
}
return [];
}
async function collect(moduleNames, credentials, session) {
session = session || utils_1.CommonUtil.uniqId();
try {
const currentSession = cache_1.CacheUtil.get(session, { session });
currentSession.session = currentSession.session || session;
currentSession.credentials = currentSession.credentials || credentials;
cache_1.CacheUtil.put(session, currentSession);
const promises = [];
const flatListOfCollectors = flat(Collectors);
const modules = getModules(moduleNames);
const filteredCollectorNames = Object.keys(flatListOfCollectors).filter((collectorName) => {
if (!collectorName.endsWith("Collector")) {
return false;
}
if (modules.length) {
return modules.some((moduleName) => {
return collectorName.split(".").indexOf(moduleName) !== -1;
});
}
return true;
});
for (const collectorName of filteredCollectorNames) {
log_1.LogUtil.info("Running", collectorName);
const collector = new flatListOfCollectors[collectorName]();
collector.setSession(session);
const collectorPromise = utils_1.CollectorUtil.cachedCollect(collector)
.then((data) => {
log_1.LogUtil.info(collectorName, "completed");
const collectNameSpace = collectorName.replace(/.[A-Za-z0-9]+$/, "");
return {
data,
namespace: collectNameSpace,
};
}).catch((err) => {
log_1.LogUtil.error(collectorName, "failed", err);
});
promises.push(collectorPromise);
}
try {
const collectorResults = await Promise.all(promises);
return collectorResults.reduce((result, collectResult) => {
if (collectResult) {
result[collectResult.namespace] = result[collectResult.namespace] || {};
result[collectResult.namespace] = Object.assign(result[collectResult.namespace], collectResult.data);
}
return result;
}, {});
}
catch (err) {
throw err;
}
}
finally {
cache_1.CacheUtil.delete(session);
}
}
exports.collect = collect;