UNPKG

@csermet/multiprovider

Version:

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

115 lines (114 loc) 5.36 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.enrichInstanceWithBillingData = exports.connectAWSServicesToAccount = void 0; const get_1 = __importDefault(require("lodash/get")); const isEmpty_1 = __importDefault(require("lodash/isEmpty")); const regions_1 = require("../../enums/regions"); const services_1 = __importDefault(require("../../enums/services")); const utils_1 = require("../../utils"); const connections_1 = __importDefault(require("../account/connections")); /** * Generates AWS services connections to Scanned accounts * @param {EnhancerConfig} accounts Scanned accounts * @param {EnhancerConfig} data AWS Services fetched data * @returns {ProviderData} */ const connectAWSServicesToAccount = ({ accounts, data, }) => { let accountsConnections = {}; for (const account of accounts) { const connections = connections_1.default({ service: account, data: data.entities, }); accountsConnections = { ...accountsConnections, ...connections, }; } return { entities: data.entities, connections: utils_1.checkAndMergeConnections(data.connections, accountsConnections), }; }; exports.connectAWSServicesToAccount = connectAWSServicesToAccount; /** * Adds Billing data to EC2 instances * @param {EnhancerConfig} * @returns {ProviderData} */ const enrichInstanceWithBillingData = ({ rawData, configuredRegions, data: { entities, connections }, }) => { const billingRegion = regions_1.regionMap.usEast1; let result = entities; if (configuredRegions.includes(billingRegion)) { const billingArray = rawData.find(({ name }) => name === services_1.default.billing)?.data?.[billingRegion] ?? []; for (const billing of billingArray) { const individualData = get_1.default(billing, ['individualData'], undefined); if (individualData) { for (const [key, value] of Object.entries(individualData)) { if (key.includes('natgateway') && !isEmpty_1.default()) { // this billing data is for natgateway, search for the instance const { name, mutation, data: nats, } = result.find(({ name: instanceName }) => instanceName === services_1.default.nat) ?? {}; if (!isEmpty_1.default(nats)) { const natsWithBilling = nats.map(val => { if (key.includes(val.id)) { return { ...val, dailyCost: { cost: value?.cost, currency: value?.currency, formattedCost: value?.formattedCost, }, }; } return val; }); result = result.filter(({ name: serviceName }) => serviceName !== services_1.default.nat); result.push({ name, mutation, data: natsWithBilling, }); } } if (key.includes('i-')) { // this billing data is for ec2, search for the instance const { name, mutation, data: ec2s, } = result.find(({ name: instanceName }) => instanceName === services_1.default.ec2Instance) ?? {}; if (!isEmpty_1.default(ec2s)) { const ec2WithBilling = ec2s.map(val => { if (key === val.id) { return { ...val, dailyCost: { cost: value?.cost, currency: value?.currency, formattedCost: value?.formattedCost, }, }; } return val; }); result = result.filter(({ name: serviceName }) => serviceName !== services_1.default.ec2Instance); result.push({ name, mutation, data: ec2WithBilling, }); } } } } } } return { entities: result, connections, }; }; exports.enrichInstanceWithBillingData = enrichInstanceWithBillingData; exports.default = [ { name: 'billing', enhancer: exports.enrichInstanceWithBillingData }, { name: 'account', enhancer: exports.connectAWSServicesToAccount }, ];