UNPKG

cloud-report

Version:

Collects and analyzes cloud resources

77 lines (76 loc) 3.04 kB
"use strict"; 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;