in src/main/java/com/amazonaws/partners/saasfactory/metering/aggregation/StripeBillingPublish.java [173:204]
private void addUsageToSubscriptionItem(String subscriptionItemId, AggregationEntry aggregationEntry) {
UsageRecord usageRecord = null;
UsageRecordCreateOnSubscriptionItemParams params =
UsageRecordCreateOnSubscriptionItemParams.builder()
.setQuantity(aggregationEntry.getQuantity())
.setTimestamp(aggregationEntry.getPeriodStart().truncatedTo(ChronoUnit.SECONDS).getEpochSecond())
.build();
RequestOptions requestOptions = RequestOptions
.builder()
.setIdempotencyKey(aggregationEntry.getIdempotencyKey())
.build();
try {
usageRecord = UsageRecord.createOnSubscriptionItem(subscriptionItemId, params, requestOptions);
} catch(StripeException e) {
this.logger.error("Stripe exception:\n{}", e.getMessage());
this.logger.error("Timestamp: {}", aggregationEntry.getPeriodStart());
return;
}
Map<String, List<String>> responseHeaders = usageRecord.getLastResponse().headers().map();
// Check for idempotency key in use; if it is, then this is likely a situation where the
// item was already submitted, but not marked as published
if (responseHeaders.containsKey(STRIPE_IDEMPOTENCY_REPLAYED)) {
String aggregationEntryString = formatAggregationEntry(aggregationEntry.getPeriodStart().toEpochMilli());
this.logger.info("Aggregation entry {} for tenant {} already published; marking as published",
aggregationEntryString,
aggregationEntry.getTenantID());
}
markAggregationRecordAsSubmitted(aggregationEntry);
}