diff --git a/examples/v1/usage-metering/GetUsageSummary.ts b/examples/v1/usage-metering/GetUsageSummary.ts index fc60692a1fb9..3250fea22aa1 100644 --- a/examples/v1/usage-metering/GetUsageSummary.ts +++ b/examples/v1/usage-metering/GetUsageSummary.ts @@ -2,20 +2,76 @@ * Get usage across your account returns "OK" response */ -import { client, v1 } from "@datadog/datadog-api-client"; +import { client, v1, v2 } from "@datadog/datadog-api-client"; const configuration = client.createConfiguration(); -const apiInstance = new v1.UsageMeteringApi(configuration); - -const params: v1.UsageMeteringApiGetUsageSummaryRequest = { - startMonth: new Date(2021, 11, 11, 11, 11, 11, 111000), -}; - -apiInstance - .getUsageSummary(params) - .then((data: v1.UsageSummaryResponse) => { - console.log( - "API called successfully. Returned data: " + JSON.stringify(data) - ); + +// Step 1: call v2 getUsageSummaryAvailableFields to enumerate all field names +const v2ApiInstance = new v2.UsageMeteringApi(configuration); + +v2ApiInstance + .getUsageSummaryAvailableFields() + .then((fieldsData: v2.UsageSummaryAvailableFieldsResponse) => { + const attrs = fieldsData.data?.attributes; + const responseFields: string[] = attrs?.responseFields ?? []; + const dateFields: string[] = attrs?.dateFields ?? []; + const dateOrgFields: string[] = attrs?.dateOrgFields ?? []; + + console.log(`responseFields count: ${responseFields.length}`); + console.log(`dateFields count: ${dateFields.length}`); + console.log(`dateOrgFields count: ${dateOrgFields.length}`); + + // Step 2: call v1 getUsageSummary for approximately the last month + const v1ApiInstance = new v1.UsageMeteringApi(configuration); + + const params: v1.UsageMeteringApiGetUsageSummaryRequest = { + startMonth: new Date(2021, 11, 11, 11, 11, 11, 111000), + includeOrgDetails: true, + }; + + v1ApiInstance + .getUsageSummary(params) + .then((data: v1.UsageSummaryResponse) => { + // --- Layer 1: top-level response additionalProperties --- + console.log("\n=== Top-level response additionalProperties ==="); + const topProps = data.additionalProperties ?? {}; + for (const field of responseFields) { + const value = topProps[field]; + if (value !== undefined && value !== null) { + console.log(` ${field}: ${value}`); + } + } + + // --- Layer 2: per-date entries --- + const usageDates = data.usage ?? []; + for (const dateEntry of usageDates) { + const dateLabel = dateEntry.date?.toISOString() ?? "(unknown date)"; + console.log(`\n=== Date entry: ${dateLabel} ===`); + + const dateProps = dateEntry.additionalProperties ?? {}; + for (const field of dateFields) { + const value = dateProps[field]; + if (value !== undefined && value !== null) { + console.log(` ${field}: ${value}`); + } + } + + // --- Layer 3: per-date per-org entries --- + const orgs = dateEntry.orgs ?? []; + for (const orgEntry of orgs) { + const orgName = orgEntry.name ?? orgEntry.publicId ?? "(org)"; + console.log(`\n === Org: ${orgName} ===`); + + const orgProps = orgEntry.additionalProperties ?? {}; + for (const field of dateOrgFields) { + const value = orgProps[field]; + if (value !== undefined && value !== null) { + console.log(` ${field}: ${value}`); + } + } + } + } + }) + .catch((error: any) => console.error(error)); }) .catch((error: any) => console.error(error)); diff --git a/examples/v2/usage-metering/GetUsageSummaryAvailableFields.ts b/examples/v2/usage-metering/GetUsageSummaryAvailableFields.ts index 5bf4e62a527a..5cb78831f39e 100644 --- a/examples/v2/usage-metering/GetUsageSummaryAvailableFields.ts +++ b/examples/v2/usage-metering/GetUsageSummaryAvailableFields.ts @@ -1,5 +1,5 @@ /** - * Get available fields for usage summary returns "OK." response + * Get available fields for usage summary returns "OK" response */ import { client, v2 } from "@datadog/datadog-api-client"; @@ -10,8 +10,19 @@ const apiInstance = new v2.UsageMeteringApi(configuration); apiInstance .getUsageSummaryAvailableFields() .then((data: v2.UsageSummaryAvailableFieldsResponse) => { - console.log( - "API called successfully. Returned data: " + JSON.stringify(data) - ); + const attrs = data.data?.attributes; + if (!attrs) return; + + const responseFields = attrs.responseFields ?? []; + console.log(`response_fields (${responseFields.length}):`); + for (const f of responseFields) console.log(` ${f}`); + + const dateFields = attrs.dateFields ?? []; + console.log(`date_fields (${dateFields.length}):`); + for (const f of dateFields) console.log(` ${f}`); + + const dateOrgFields = attrs.dateOrgFields ?? []; + console.log(`date_org_fields (${dateOrgFields.length}):`); + for (const f of dateOrgFields) console.log(` ${f}`); }) .catch((error: any) => console.error(error));