private void addUsageToSubscriptionItem()

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);
    }