UNPKG

@cloud-carbon-footprint/aws

Version:

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

58 lines (51 loc) 1.61 kB
/* * © 2021 Thoughtworks, Inc. */ import { CloudConstants, FootprintEstimate, FootprintEstimatesDataBuilder, StorageEstimator, StorageUsage, } from '@cloud-carbon-footprint/core' import { AWS_CLOUD_CONSTANTS, AWS_EMISSIONS_FACTORS_METRIC_TON_PER_KWH, } from '../domain' import { convertGigaBytesToTerabyteHours } from '@cloud-carbon-footprint/common' import { EBSCurrentComputeOptimizerRecommendation } from './Recommendations/ComputeOptimizer' export default class AWSStorageEstimatesBuilder extends FootprintEstimatesDataBuilder { constructor( rowData: EBSCurrentComputeOptimizerRecommendation, storageEstimator: StorageEstimator, ) { super(rowData) this.region = rowData.region this.powerUsageEffectiveness = AWS_CLOUD_CONSTANTS.getPUE(this.region) this.storageUsage = this.getStorageUsage() this.storageConstants = this.getStorageConstants() this.storageFootprint = this.getStorageFootprint(storageEstimator) this.volumeSize = rowData.volumeSize } private getStorageUsage(): StorageUsage { return { terabyteHours: convertGigaBytesToTerabyteHours(this.volumeSize), } } private getStorageConstants(): CloudConstants { return { powerUsageEffectiveness: this.powerUsageEffectiveness, replicationFactor: 2, //EBS replication factor } } private getStorageFootprint( storageEstimator: StorageEstimator, ): FootprintEstimate { return storageEstimator.estimate( [this.storageUsage], this.region, AWS_EMISSIONS_FACTORS_METRIC_TON_PER_KWH, this.storageConstants, )[0] } }