in src/main/java/com/amazonaws/partners/saasfactory/metering/aggregation/BillingEventAggregation.java [370:398]
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) {
if (this.tableConfig.getTableName().isEmpty() || this.tableConfig.getIndexName().isEmpty()) {
return;
}
this.logger.info("Resolving tenant IDs in table {}", this.tableConfig.getTableName());
List<TenantConfiguration> tenants = TenantConfiguration.getTenantConfigurations(this.tableConfig, this.ddb, this.logger);
this.logger.info("Resolved tenant IDs in table {}", this.tableConfig.getTableName());
if (tenants.isEmpty()) {
this.logger.info("No tenants found");
return;
}
for (TenantConfiguration tenant : tenants) {
List<BillingEvent> billingEvents = getBillingEventsForTenant(tenant.getTenantID());
if (billingEvents.isEmpty()) {
this.logger.info("No events for {}", tenant.getTenantID());
continue;
}
// Count the number of events - this step is necessary to make the transactions work; they need
// to be grouped together
Map<ZonedDateTime, List<BillingEvent>> categorizedEvents = categorizeEvents(tenant, billingEvents);
if (categorizedEvents.isEmpty()) {
this.logger.info("No aggregation entries for {}", tenant.getTenantID());
} else {
// Put those results back into the table
aggregateEntries(categorizedEvents, tenant);
}
}
}