From e56229c0db53dc11b9982ea250008dac9dc17c48 Mon Sep 17 00:00:00 2001 From: Charlie Zhang Date: Mon, 15 Jun 2026 14:21:48 -0400 Subject: [PATCH 1/3] Add example for reading UsageSummary additionalProperties fields Co-Authored-By: Claude Sonnet 4.6 --- ...GetUsageSummary_additional_properties.java | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 examples/v2/usage-metering/GetUsageSummary_additional_properties.java diff --git a/examples/v2/usage-metering/GetUsageSummary_additional_properties.java b/examples/v2/usage-metering/GetUsageSummary_additional_properties.java new file mode 100644 index 00000000000..2696a72749a --- /dev/null +++ b/examples/v2/usage-metering/GetUsageSummary_additional_properties.java @@ -0,0 +1,108 @@ +// Get usage across your account and read all fields from additionalProperties returns "OK" response + +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(); + + // 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 = + v1Api.getUsageSummary( + OffsetDateTime.parse("2021-11-11T11:11:11.111+00:00"), + new UsageMeteringApi.GetUsageSummaryOptionalParameters() + .includeOrgDetails(true)); + + // Step 3: 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 != null) { + System.out.println(field + ": " + value); + } + } + } + + // Step 4: 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); + } + } + } + + // Step 5: 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()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} From 4ab36ef8690d67c6068db29bd2335ecf99a50bc6 Mon Sep 17 00:00:00 2001 From: Charlie Zhang Date: Mon, 15 Jun 2026 14:26:54 -0400 Subject: [PATCH 2/3] Update GetUsageSummary example to show AdditionalProperties access at all layers Co-Authored-By: Claude Sonnet 4.6 --- .../v1/usage-metering/GetUsageSummary.java | 89 ++++++++++++++- ...GetUsageSummary_additional_properties.java | 108 ------------------ 2 files changed, 86 insertions(+), 111 deletions(-) delete mode 100644 examples/v2/usage-metering/GetUsageSummary_additional_properties.java 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/GetUsageSummary_additional_properties.java b/examples/v2/usage-metering/GetUsageSummary_additional_properties.java deleted file mode 100644 index 2696a72749a..00000000000 --- a/examples/v2/usage-metering/GetUsageSummary_additional_properties.java +++ /dev/null @@ -1,108 +0,0 @@ -// Get usage across your account and read all fields from additionalProperties returns "OK" response - -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(); - - // 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 = - v1Api.getUsageSummary( - OffsetDateTime.parse("2021-11-11T11:11:11.111+00:00"), - new UsageMeteringApi.GetUsageSummaryOptionalParameters() - .includeOrgDetails(true)); - - // Step 3: 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 != null) { - System.out.println(field + ": " + value); - } - } - } - - // Step 4: 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); - } - } - } - - // Step 5: 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()); - System.err.println("Reason: " + e.getResponseBody()); - System.err.println("Response headers: " + e.getResponseHeaders()); - e.printStackTrace(); - } - } -} From 0c214a96c3f42f36bbefe933ba80fed248fe2e5a Mon Sep 17 00:00:00 2001 From: Charlie Zhang Date: Mon, 15 Jun 2026 14:50:43 -0400 Subject: [PATCH 3/3] Update GetUsageSummaryAvailableFields example to print field lists by category --- .../GetUsageSummaryAvailableFields.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) 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());