UNPKG

@cloud-carbon-footprint/aws

Version:

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

63 lines 2.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@cloud-carbon-footprint/core"); const CostMapper_1 = require("./CostMapper"); const domain_1 = require("../domain"); class S3 extends core_1.HDDStorageService { constructor(serviceWrapper) { super(domain_1.AWS_CLOUD_CONSTANTS.HDDCOEFFICIENT); this.serviceWrapper = serviceWrapper; this.serviceName = 'S3'; } async getUsage(startDate, endDate) { const params = { StartTime: startDate, EndTime: endDate, MetricDataQueries: [ { Id: 's3Size', Expression: 'SUM(SEARCH(\'{AWS/S3,BucketName,StorageType} MetricName="BucketSizeBytes" StorageType="StandardStorage"\', \'Average\', 86400))', }, ], ScanBy: 'TimestampAscending', }; const responses = await this.serviceWrapper.getMetricDataResponses(params); const s3ResponseData = responses[0].MetricDataResults[0]; return (s3ResponseData.Timestamps.map((timestampString, i) => { return { timestamp: new Date(timestampString), terabyteHours: (s3ResponseData.Values[i] / 1099511627776) * 24, }; }).filter((r) => r.terabyteHours && r.timestamp) || []); } async getCosts(start, end, region) { const params = { TimePeriod: { Start: start.toISOString().substr(0, 10), End: end.toISOString().substr(0, 10), }, Filter: { And: [ { Dimensions: { Key: 'REGION', Values: [region] } }, { Dimensions: { Key: 'SERVICE', Values: ['Amazon Simple Storage Service'], }, }, ], }, Granularity: 'DAILY', GroupBy: [ { Key: 'USAGE_TYPE', Type: 'DIMENSION', }, ], Metrics: ['AmortizedCost'], }; return (0, CostMapper_1.getCostFromCostExplorer)(params, this.serviceWrapper); } } exports.default = S3; //# sourceMappingURL=S3.js.map