UNPKG

@cloud-carbon-footprint/aws

Version:

The core logic to get cloud usage data and estimate energy and carbon emissions from Amazon Web Services.

62 lines 3.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@cloud-carbon-footprint/core"); const domain_1 = require("../domain"); const AWSInstanceTypes_1 = require("./AWSInstanceTypes"); class AWSMemoryEstimatesBuilder extends core_1.FootprintEstimatesDataBuilder { constructor(rowData, memoryEstimator, emissionsFactors) { super(rowData); this.vCpuHours = rowData.vCpuHours; this.instanceType = rowData.instanceType; this.usageAmount = rowData.usageAmount; this.region = rowData.region; this.powerUsageEffectiveness = domain_1.AWS_CLOUD_CONSTANTS.getPUE(this.region); this.computeProcessors = rowData.getComputeProcessors(); this.memoryUsage = this.getMemoryUsage(); this.memoryConstants = this.getMemoryConstants(); this.memoryFootprint = this.getMemoryFootprint(memoryEstimator, this.memoryUsage, this.memoryConstants, this.region, emissionsFactors); } getGigabytesFromInstanceTypeAndProcessors() { if (!this.instanceType) return 0; const [instanceFamily, instanceSize] = this.instanceType.split('.'); const { isValidInstanceType, isBurstableInstance } = this.checkInstanceTypes(instanceFamily); if (!isValidInstanceType || isBurstableInstance) return 0; const processors = AWSInstanceTypes_1.INSTANCE_TYPE_COMPUTE_PROCESSOR_MAPPING[this.instanceType] || [core_1.COMPUTE_PROCESSOR_TYPES.UNKNOWN]; const processorMemoryGigabytesPerPhysicalChip = domain_1.AWS_CLOUD_CONSTANTS.getMemory(processors); const instanceTypeMemory = AWSInstanceTypes_1.EC2_INSTANCE_TYPES[instanceFamily]?.[instanceSize]?.[1] || AWSInstanceTypes_1.REDSHIFT_INSTANCE_TYPES[instanceFamily]?.[instanceSize]?.[1]; const familyInstanceTypes = Object.values(AWSInstanceTypes_1.EC2_INSTANCE_TYPES[instanceFamily] || AWSInstanceTypes_1.REDSHIFT_INSTANCE_TYPES[instanceFamily]); const [largestInstanceTypevCpus, largestInstanceTypeMemory] = familyInstanceTypes[familyInstanceTypes.length - 1]; const physicalChips = ['m5zn', 'z1d'].includes(instanceFamily) ? 2 : (0, core_1.getPhysicalChips)(largestInstanceTypevCpus); return (0, core_1.calculateGigabyteHours)(physicalChips, largestInstanceTypeMemory, processorMemoryGigabytesPerPhysicalChip, instanceTypeMemory, this.usageAmount); } checkInstanceTypes(instanceFamily) { const isValidInstanceType = Object.keys(AWSInstanceTypes_1.EC2_INSTANCE_TYPES).includes(instanceFamily) || Object.keys(AWSInstanceTypes_1.REDSHIFT_INSTANCE_TYPES).includes(instanceFamily); const isBurstableInstance = Object.keys(AWSInstanceTypes_1.BURSTABLE_INSTANCE_BASELINE_UTILIZATION).includes(this.instanceType); return { isValidInstanceType, isBurstableInstance }; } getMemoryUsage() { return { gigabyteHours: this.getGigabytesFromInstanceTypeAndProcessors(), }; } getMemoryConstants() { return { minWatts: domain_1.AWS_CLOUD_CONSTANTS.getMinWatts(this.computeProcessors), maxWatts: domain_1.AWS_CLOUD_CONSTANTS.getMaxWatts(this.computeProcessors), powerUsageEffectiveness: this.powerUsageEffectiveness, replicationFactor: this.replicationFactor, }; } getMemoryFootprint(memoryEstimator, memoryUsage, memoryConstants, region, emissionsFactors) { return memoryEstimator.estimate([memoryUsage], region, emissionsFactors, memoryConstants)[0]; } } exports.default = AWSMemoryEstimatesBuilder; //# sourceMappingURL=AWSMemoryEstimatesBuilder.js.map