diff --git a/examples/v1/usage-metering/GetUsageSummary.java b/examples/v1/usage-metering/GetUsageSummary.java index 5460d2cad31..c44480ee397 100644 --- a/examples/v1/usage-metering/GetUsageSummary.java +++ b/examples/v1/usage-metering/GetUsageSummary.java @@ -3,18 +3,101 @@ import com.datadog.api.client.ApiClient; import com.datadog.api.client.ApiException; import com.datadog.api.client.v1.api.UsageMeteringApi; +import com.datadog.api.client.v1.model.UsageSummaryDate; +import com.datadog.api.client.v1.model.UsageSummaryDateOrg; import com.datadog.api.client.v1.model.UsageSummaryResponse; +import com.datadog.api.client.v2.model.UsageSummaryAvailableFieldsAttributes; +import com.datadog.api.client.v2.model.UsageSummaryAvailableFieldsResponse; import java.time.OffsetDateTime; +import java.util.List; public class Example { public static void main(String[] args) { ApiClient defaultClient = ApiClient.getDefaultApiClient(); - UsageMeteringApi apiInstance = new UsageMeteringApi(defaultClient); + + // Step 1: call v2 to discover every field name at each response level. + com.datadog.api.client.v2.api.UsageMeteringApi v2Api = + new com.datadog.api.client.v2.api.UsageMeteringApi(defaultClient); + + List responseFields = null; + List dateFields = null; + List dateOrgFields = null; + + try { + UsageSummaryAvailableFieldsResponse fieldsResponse = + v2Api.getUsageSummaryAvailableFields(); + if (fieldsResponse.getData() != null + && fieldsResponse.getData().getAttributes() != null) { + UsageSummaryAvailableFieldsAttributes attrs = + fieldsResponse.getData().getAttributes(); + responseFields = attrs.getResponseFields(); + dateFields = attrs.getDateFields(); + dateOrgFields = attrs.getDateOrgFields(); + } + } catch (ApiException e) { + System.err.println( + "Exception when calling UsageMeteringApi#getUsageSummaryAvailableFields"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + return; + } + + // Step 2: call v1 to get the actual usage summary, including per-org breakdowns. + UsageMeteringApi v1Api = new UsageMeteringApi(defaultClient); try { UsageSummaryResponse result = - apiInstance.getUsageSummary(OffsetDateTime.parse("2021-11-11T11:11:11.111+00:00")); - System.out.println(result); + v1Api.getUsageSummary( + OffsetDateTime.parse("2021-11-11T11:11:11.111+00:00"), + new UsageMeteringApi.GetUsageSummaryOptionalParameters() + .includeOrgDetails(true)); + + // Layer 1: read response-level additionalProperties using the discovered field names. + System.out.println("=== Response-level additionalProperties ==="); + if (responseFields != null) { + for (String field : responseFields) { + Object value = result.getAdditionalProperty(field); + if (value instanceof Number) { + System.out.println(field + ": " + value); + } + } + } + + // Layer 2: iterate over each usage date and read date-level additionalProperties. + if (result.getUsage() != null) { + for (UsageSummaryDate dateEntry : result.getUsage()) { + System.out.println( + "\n=== Date-level additionalProperties for " + dateEntry.getDate() + " ==="); + if (dateFields != null) { + for (String field : dateFields) { + Object value = dateEntry.getAdditionalProperty(field); + if (value != null) { + System.out.println(" " + field + ": " + value); + } + } + } + + // Layer 3: iterate over each org within the date and read org-level additionalProperties. + if (dateEntry.getOrgs() != null) { + for (UsageSummaryDateOrg orgEntry : dateEntry.getOrgs()) { + System.out.println( + "\n === Org-level additionalProperties for org " + + orgEntry.getId() + + " ==="); + if (dateOrgFields != null) { + for (String field : dateOrgFields) { + Object value = orgEntry.getAdditionalProperty(field); + if (value != null) { + System.out.println(" " + field + ": " + value); + } + } + } + } + } + } + } } catch (ApiException e) { System.err.println("Exception when calling UsageMeteringApi#getUsageSummary"); System.err.println("Status code: " + e.getCode()); diff --git a/examples/v2/usage-metering/GetUsageSummaryAvailableFields.java b/examples/v2/usage-metering/GetUsageSummaryAvailableFields.java index d999b726140..f10782052c9 100644 --- a/examples/v2/usage-metering/GetUsageSummaryAvailableFields.java +++ b/examples/v2/usage-metering/GetUsageSummaryAvailableFields.java @@ -1,8 +1,9 @@ -// Get available fields for usage summary returns "OK." response +// Get available fields for usage summary returns "OK" response import com.datadog.api.client.ApiClient; import com.datadog.api.client.ApiException; import com.datadog.api.client.v2.api.UsageMeteringApi; +import com.datadog.api.client.v2.model.UsageSummaryAvailableFieldsAttributes; import com.datadog.api.client.v2.model.UsageSummaryAvailableFieldsResponse; public class Example { @@ -12,7 +13,22 @@ public static void main(String[] args) { try { UsageSummaryAvailableFieldsResponse result = apiInstance.getUsageSummaryAvailableFields(); - System.out.println(result); + UsageSummaryAvailableFieldsAttributes attrs = result.getData().getAttributes(); + + System.out.printf("response_fields (%d):%n", attrs.getResponseFields().size()); + for (String f : attrs.getResponseFields()) { + System.out.println(" " + f); + } + + System.out.printf("date_fields (%d):%n", attrs.getDateFields().size()); + for (String f : attrs.getDateFields()) { + System.out.println(" " + f); + } + + System.out.printf("date_org_fields (%d):%n", attrs.getDateOrgFields().size()); + for (String f : attrs.getDateOrgFields()) { + System.out.println(" " + f); + } } catch (ApiException e) { System.err.println("Exception when calling UsageMeteringApi#getUsageSummaryAvailableFields"); System.err.println("Status code: " + e.getCode());