@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
JavaScript
;
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