From 770a0978768194947b2bc951cb098cb238500b98 Mon Sep 17 00:00:00 2001 From: Charlie Zhang Date: Mon, 15 Jun 2026 14:21:20 -0400 Subject: [PATCH 1/3] Add example showing additionalProperties traversal for GetUsageSummary Demonstrates calling get_usage_summary_available_fields (v2) to enumerate response_fields / date_fields / date_org_fields, then iterating all three additionalProperties layers of the get_usage_summary (v1) response. Co-Authored-By: Claude Sonnet 4.6 --- .../GetUsageSummary_additional_properties.rb | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 examples/v1/usage-metering/GetUsageSummary_additional_properties.rb diff --git a/examples/v1/usage-metering/GetUsageSummary_additional_properties.rb b/examples/v1/usage-metering/GetUsageSummary_additional_properties.rb new file mode 100644 index 000000000000..8f5a84226fea --- /dev/null +++ b/examples/v1/usage-metering/GetUsageSummary_additional_properties.rb @@ -0,0 +1,43 @@ +# Get usage across your account and read all fields from additionalProperties returns "OK" response + +require "datadog_api_client" + +# Step 1: fetch every field name at each response level. +fields_api = DatadogAPIClient::V2::UsageMeteringAPI.new +fields_resp = fields_api.get_usage_summary_available_fields +attrs = fields_resp.data.attributes +response_fields = attrs.response_fields || [] +date_fields = attrs.date_fields || [] +date_org_fields = attrs.date_org_fields || [] + +# Step 2: call get_usage_summary with org details included. +usage_api = DatadogAPIClient::V1::UsageMeteringAPI.new +resp = usage_api.get_usage_summary( + "2021-11-11T11:11:11.111+00:00", + include_org_details: true +) + +# Layer 1 — top-level additionalProperties on the response object. +response_fields.each do |field| + key = field.to_sym + value = resp.additional_properties[key] + puts "response.#{field}: #{value}" unless value.nil? +end + +# Layer 2 — per-date additionalProperties. +(resp.usage || []).each do |date_entry| + date_fields.each do |field| + key = field.to_sym + value = date_entry.additional_properties[key] + puts "date(#{date_entry.date}).#{field}: #{value}" unless value.nil? + end + + # Layer 3 — per-org additionalProperties inside each date. + (date_entry.orgs || []).each do |org| + date_org_fields.each do |field| + key = field.to_sym + value = org.additional_properties[key] + puts "date(#{date_entry.date}).org(#{org.name}).#{field}: #{value}" unless value.nil? + end + end +end From 565af5ec6f28f6f6914569cf1cb059738e622696 Mon Sep 17 00:00:00 2001 From: Charlie Zhang Date: Mon, 15 Jun 2026 14:26:50 -0400 Subject: [PATCH 2/3] Update GetUsageSummary example to show AdditionalProperties access at all layers Co-Authored-By: Claude Sonnet 4.6 --- examples/v1/usage-metering/GetUsageSummary.rb | 42 +++++++++++++++++- .../GetUsageSummary_additional_properties.rb | 43 ------------------- 2 files changed, 40 insertions(+), 45 deletions(-) delete mode 100644 examples/v1/usage-metering/GetUsageSummary_additional_properties.rb diff --git a/examples/v1/usage-metering/GetUsageSummary.rb b/examples/v1/usage-metering/GetUsageSummary.rb index 0fd9049164f2..3bb7c8890877 100644 --- a/examples/v1/usage-metering/GetUsageSummary.rb +++ b/examples/v1/usage-metering/GetUsageSummary.rb @@ -1,5 +1,43 @@ # Get usage across your account returns "OK" response require "datadog_api_client" -api_instance = DatadogAPIClient::V1::UsageMeteringAPI.new -p api_instance.get_usage_summary("2021-11-11T11:11:11.111+00:00") + +# Step 1: fetch every field name at each response level. +fields_api = DatadogAPIClient::V2::UsageMeteringAPI.new +fields_resp = fields_api.get_usage_summary_available_fields +attrs = fields_resp.data.attributes +response_fields = attrs.response_fields || [] +date_fields = attrs.date_fields || [] +date_org_fields = attrs.date_org_fields || [] + +# Step 2: call get_usage_summary with org details included. +usage_api = DatadogAPIClient::V1::UsageMeteringAPI.new +resp = usage_api.get_usage_summary( + "2021-11-11T11:11:11.111+00:00", + include_org_details: true +) + +# Layer 1 — top-level additionalProperties on the response object. +response_fields.each do |field| + key = field.to_sym + value = resp.additional_properties[key] + puts "response.#{field}: #{value}" unless value.nil? +end + +# Layer 2 — per-date additionalProperties. +(resp.usage || []).each do |date_entry| + date_fields.each do |field| + key = field.to_sym + value = date_entry.additional_properties[key] + puts "date(#{date_entry.date}).#{field}: #{value}" unless value.nil? + end + + # Layer 3 — per-org additionalProperties inside each date. + (date_entry.orgs || []).each do |org| + date_org_fields.each do |field| + key = field.to_sym + value = org.additional_properties[key] + puts "date(#{date_entry.date}).org(#{org.name}).#{field}: #{value}" unless value.nil? + end + end +end diff --git a/examples/v1/usage-metering/GetUsageSummary_additional_properties.rb b/examples/v1/usage-metering/GetUsageSummary_additional_properties.rb deleted file mode 100644 index 8f5a84226fea..000000000000 --- a/examples/v1/usage-metering/GetUsageSummary_additional_properties.rb +++ /dev/null @@ -1,43 +0,0 @@ -# Get usage across your account and read all fields from additionalProperties returns "OK" response - -require "datadog_api_client" - -# Step 1: fetch every field name at each response level. -fields_api = DatadogAPIClient::V2::UsageMeteringAPI.new -fields_resp = fields_api.get_usage_summary_available_fields -attrs = fields_resp.data.attributes -response_fields = attrs.response_fields || [] -date_fields = attrs.date_fields || [] -date_org_fields = attrs.date_org_fields || [] - -# Step 2: call get_usage_summary with org details included. -usage_api = DatadogAPIClient::V1::UsageMeteringAPI.new -resp = usage_api.get_usage_summary( - "2021-11-11T11:11:11.111+00:00", - include_org_details: true -) - -# Layer 1 — top-level additionalProperties on the response object. -response_fields.each do |field| - key = field.to_sym - value = resp.additional_properties[key] - puts "response.#{field}: #{value}" unless value.nil? -end - -# Layer 2 — per-date additionalProperties. -(resp.usage || []).each do |date_entry| - date_fields.each do |field| - key = field.to_sym - value = date_entry.additional_properties[key] - puts "date(#{date_entry.date}).#{field}: #{value}" unless value.nil? - end - - # Layer 3 — per-org additionalProperties inside each date. - (date_entry.orgs || []).each do |org| - date_org_fields.each do |field| - key = field.to_sym - value = org.additional_properties[key] - puts "date(#{date_entry.date}).org(#{org.name}).#{field}: #{value}" unless value.nil? - end - end -end From 37b4b189a0207d3035677314f002d326c700dbce Mon Sep 17 00:00:00 2001 From: Charlie Zhang Date: Mon, 15 Jun 2026 14:50:40 -0400 Subject: [PATCH 3/3] Update GetUsageSummaryAvailableFields example to print field lists by category --- .../GetUsageSummaryAvailableFields.rb | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/examples/v2/usage-metering/GetUsageSummaryAvailableFields.rb b/examples/v2/usage-metering/GetUsageSummaryAvailableFields.rb index 7ce7873d98c4..8d99a89298ff 100644 --- a/examples/v2/usage-metering/GetUsageSummaryAvailableFields.rb +++ b/examples/v2/usage-metering/GetUsageSummaryAvailableFields.rb @@ -1,5 +1,16 @@ -# Get available fields for usage summary returns "OK." response +# Get available fields for usage summary returns "OK" response require "datadog_api_client" + api_instance = DatadogAPIClient::V2::UsageMeteringAPI.new -p api_instance.get_usage_summary_available_fields() +resp = api_instance.get_usage_summary_available_fields +attrs = resp.data.attributes + +puts "response_fields (#{attrs.response_fields.length}):" +attrs.response_fields.each { |f| puts " #{f}" } + +puts "date_fields (#{attrs.date_fields.length}):" +attrs.date_fields.each { |f| puts " #{f}" } + +puts "date_org_fields (#{attrs.date_org_fields.length}):" +attrs.date_org_fields.each { |f| puts " #{f}" }