@cloud-carbon-footprint/aws
Version:
The core logic to get cloud usage data and estimate energy and carbon emissions from Amazon Web Services.
86 lines • 3.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const common_1 = require("@cloud-carbon-footprint/common");
const StorageUsageMapper_1 = require("./StorageUsageMapper");
const CostMapper_1 = require("./CostMapper");
class RDSStorage {
serviceWrapper;
serviceName = 'rds-storage';
rdsStorageLogger;
constructor(serviceWrapper) {
this.serviceWrapper = serviceWrapper;
this.rdsStorageLogger = new common_1.Logger('RDS Storage Logger');
}
async getEstimates(start, end, region, emissionsFactors, constants) {
const usage = await this.getUsage(start, end, region);
return (0, StorageUsageMapper_1.getEstimatesFromCostExplorer)(region, usage, emissionsFactors, constants);
}
async getUsage(startDate, endDate, region) {
const params = {
TimePeriod: {
Start: startDate.toISOString().substr(0, 10),
End: endDate.toISOString().substr(0, 10),
},
Filter: {
And: [
{ Dimensions: { Key: 'REGION', Values: [region] } },
{
Dimensions: {
Key: 'USAGE_TYPE_GROUP',
Values: ['RDS: Storage'],
},
},
],
},
Granularity: 'DAILY',
Metrics: ['UsageQuantity'],
GroupBy: [
{
Key: 'USAGE_TYPE',
Type: 'DIMENSION',
},
],
};
return await (0, StorageUsageMapper_1.getUsageFromCostExplorer)(params, this.getDiskType, this.serviceWrapper);
}
getDiskType = (awsGroupKey) => {
if (awsGroupKey.endsWith('GP2-Storage') ||
awsGroupKey.endsWith('PIOPS-Storage'))
return StorageUsageMapper_1.DiskType.SSD;
if (awsGroupKey.endsWith('StorageUsage') ||
awsGroupKey.endsWith('ChargedBackupUsage'))
return StorageUsageMapper_1.DiskType.HDD;
this.rdsStorageLogger.warn('Unexpected Cost explorer Dimension Name: ' + awsGroupKey);
return StorageUsageMapper_1.DiskType.UNKNOWN;
};
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: 'USAGE_TYPE_GROUP',
Values: ['RDS: Storage'],
},
},
],
},
Granularity: 'DAILY',
Metrics: ['AmortizedCost'],
GroupBy: [
{
Key: 'USAGE_TYPE',
Type: 'DIMENSION',
},
],
};
return (0, CostMapper_1.getCostFromCostExplorer)(params, this.serviceWrapper);
}
}
exports.default = RDSStorage;
//# sourceMappingURL=RDSStorage.js.map