From 66fdc6603085683f53a6d1b34e7f380b91e410ba Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Mon, 10 Aug 2026 14:00:52 +0200 Subject: [PATCH 1/3] feat(attributes): Add React Native TurboModule call attributes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Registers the attributes sentry-react-native emits for native module call instrumentation, consolidated under a single `turbo_module.*` namespace. These shipped before being registered here, which is backwards — they have been live since 8.14.0 (`turbo_module.name`/`.method`), 8.19.0 (call aggregate) and 8.21.0 (span attribution). Hence 10 of the 21 files arrive already deprecated: they are the shipped names, registered so they can be aliased and backfilled rather than silently broken. Two problems are being corrected. The SDK emitted the same four totals under both `turbo_module.*` (root spans) and `turbo_modules.*` (aggregate span), so half the deprecations exist only to collapse a singular/plural split. The rest drop `total_` prefixes and `_ms` suffixes in favour of dot-separated grouping, putting the unit in the `brief` as `app.vitals.*` does. The per-method breakdown keys are removed rather than deprecated. They place the dynamic segment mid-key (`turbo_module...call_count`), and `has_dynamic_suffix` only models a trailing segment, so they cannot be expressed in the schema at all. The SDK will carry that breakdown as one child span per (module, method) instead, which is why the identity attributes are registered alongside the counters: on a per-method span they are dimensions, not a prefix. Measurements are deliberately excluded. The SDK also emits four transaction measurements under `turbo_modules.*`, but every existing entry in model/measurements is flat and unnamespaced, and they now duplicate span attributes, so the SDK will drop them instead. `changelog.prs` is unset pending this PR's number. Refs getsentry/sentry-react-native#6168 --- .../sentry-conventions/src/attributes.ts | 930 ++++++++++++++++++ javascript/sentry-conventions/src/op.ts | 5 + .../turbo_module/turbo_module__arch.json | 18 + .../turbo_module__call__count.json | 18 + .../turbo_module__call__distinct_count.json | 18 + .../turbo_module__duration__max.json | 17 + .../turbo_module__duration__total.json | 18 + .../turbo_module__error__count.json | 18 + .../turbo_module/turbo_module__kind.json | 18 + .../turbo_module/turbo_module__method.json | 18 + .../turbo_module/turbo_module__name.json | 18 + .../turbo_module__top__duration.json | 18 + .../turbo_module/turbo_module__top__name.json | 19 + .../turbo_module__top_module.json | 23 + .../turbo_module__top_module_duration_ms.json | 23 + .../turbo_module__total_call_count.json | 23 + .../turbo_module__total_duration_ms.json | 23 + .../turbo_module__total_error_count.json | 23 + .../turbo_module__unique_methods.json | 23 + .../turbo_modules__total_call_count.json | 23 + .../turbo_modules__total_duration_ms.json | 23 + .../turbo_modules__total_error_count.json | 23 + .../turbo_modules__unique_methods.json | 23 + model/op/mobile.json | 4 + python/src/sentry_conventions/attributes.py | 686 +++++++++++++ rust/src/op.rs | 3 + 26 files changed, 2056 insertions(+) create mode 100644 model/attributes/turbo_module/turbo_module__arch.json create mode 100644 model/attributes/turbo_module/turbo_module__call__count.json create mode 100644 model/attributes/turbo_module/turbo_module__call__distinct_count.json create mode 100644 model/attributes/turbo_module/turbo_module__duration__max.json create mode 100644 model/attributes/turbo_module/turbo_module__duration__total.json create mode 100644 model/attributes/turbo_module/turbo_module__error__count.json create mode 100644 model/attributes/turbo_module/turbo_module__kind.json create mode 100644 model/attributes/turbo_module/turbo_module__method.json create mode 100644 model/attributes/turbo_module/turbo_module__name.json create mode 100644 model/attributes/turbo_module/turbo_module__top__duration.json create mode 100644 model/attributes/turbo_module/turbo_module__top__name.json create mode 100644 model/attributes/turbo_module/turbo_module__top_module.json create mode 100644 model/attributes/turbo_module/turbo_module__top_module_duration_ms.json create mode 100644 model/attributes/turbo_module/turbo_module__total_call_count.json create mode 100644 model/attributes/turbo_module/turbo_module__total_duration_ms.json create mode 100644 model/attributes/turbo_module/turbo_module__total_error_count.json create mode 100644 model/attributes/turbo_module/turbo_module__unique_methods.json create mode 100644 model/attributes/turbo_modules/turbo_modules__total_call_count.json create mode 100644 model/attributes/turbo_modules/turbo_modules__total_duration_ms.json create mode 100644 model/attributes/turbo_modules/turbo_modules__total_error_count.json create mode 100644 model/attributes/turbo_modules/turbo_modules__unique_methods.json diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 6941fcb73..f06585cb2 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -15998,6 +15998,489 @@ export const TTFB_REQUESTTIME = 'ttfb.requestTime'; */ export type TTFB_REQUESTTIME_TYPE = number; +// Path: model/attributes/turbo_modules/turbo_modules__total_call_count.json + +/** + * The number of native module calls in the flushed call aggregate. Only applies to React Native. `turbo_modules.total_call_count` + * + * Attribute Value Type: `number` {@link TURBO_MODULES_TOTAL_CALL_COUNT_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_CALL_COUNT} `turbo_module.call.count`, {@link TURBO_MODULE_TOTAL_CALL_COUNT} `turbo_module.total_call_count` + * + * @deprecated Use {@link TURBO_MODULE_CALL_COUNT} (turbo_module.call.count) instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + * @example 42 + */ +export const TURBO_MODULES_TOTAL_CALL_COUNT = 'turbo_modules.total_call_count'; + +/** + * Type for {@link TURBO_MODULES_TOTAL_CALL_COUNT} turbo_modules.total_call_count + */ +export type TURBO_MODULES_TOTAL_CALL_COUNT_TYPE = number; + +// Path: model/attributes/turbo_modules/turbo_modules__total_duration_ms.json + +/** + * The combined duration of all native module calls in the flushed call aggregate, in milliseconds. Only applies to React Native. `turbo_modules.total_duration_ms` + * + * Attribute Value Type: `number` {@link TURBO_MODULES_TOTAL_DURATION_MS_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_DURATION_TOTAL} `turbo_module.duration.total`, {@link TURBO_MODULE_TOTAL_DURATION_MS} `turbo_module.total_duration_ms` + * + * @deprecated Use {@link TURBO_MODULE_DURATION_TOTAL} (turbo_module.duration.total) instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + * @example 128.45 + */ +export const TURBO_MODULES_TOTAL_DURATION_MS = 'turbo_modules.total_duration_ms'; + +/** + * Type for {@link TURBO_MODULES_TOTAL_DURATION_MS} turbo_modules.total_duration_ms + */ +export type TURBO_MODULES_TOTAL_DURATION_MS_TYPE = number; + +// Path: model/attributes/turbo_modules/turbo_modules__total_error_count.json + +/** + * The number of failed native module calls in the flushed call aggregate. Only applies to React Native. `turbo_modules.total_error_count` + * + * Attribute Value Type: `number` {@link TURBO_MODULES_TOTAL_ERROR_COUNT_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_ERROR_COUNT} `turbo_module.error.count`, {@link TURBO_MODULE_TOTAL_ERROR_COUNT} `turbo_module.total_error_count` + * + * @deprecated Use {@link TURBO_MODULE_ERROR_COUNT} (turbo_module.error.count) instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + * @example 2 + */ +export const TURBO_MODULES_TOTAL_ERROR_COUNT = 'turbo_modules.total_error_count'; + +/** + * Type for {@link TURBO_MODULES_TOTAL_ERROR_COUNT} turbo_modules.total_error_count + */ +export type TURBO_MODULES_TOTAL_ERROR_COUNT_TYPE = number; + +// Path: model/attributes/turbo_modules/turbo_modules__unique_methods.json + +/** + * The number of distinct native module and method pairs in the flushed call aggregate. Only applies to React Native. `turbo_modules.unique_methods` + * + * Attribute Value Type: `number` {@link TURBO_MODULES_UNIQUE_METHODS_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_CALL_DISTINCT_COUNT} `turbo_module.call.distinct_count`, {@link TURBO_MODULE_UNIQUE_METHODS} `turbo_module.unique_methods` + * + * @deprecated Use {@link TURBO_MODULE_CALL_DISTINCT_COUNT} (turbo_module.call.distinct_count) instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + * @example 7 + */ +export const TURBO_MODULES_UNIQUE_METHODS = 'turbo_modules.unique_methods'; + +/** + * Type for {@link TURBO_MODULES_UNIQUE_METHODS} turbo_modules.unique_methods + */ +export type TURBO_MODULES_UNIQUE_METHODS_TYPE = number; + +// Path: model/attributes/turbo_module/turbo_module__arch.json + +/** + * The React Native architecture the call was observed on. `new` for a TurboModule resolved through `TurboModuleRegistry`, `legacy` for a module reached over the Old Architecture bridge. Only applies to React Native. `turbo_module.arch` + * + * Attribute Value Type: `string` {@link TURBO_MODULE_ARCH_TYPE} + * + * Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + * + * Attribute defined in OTEL: No + * Visibility: public + * + * @example "new" + */ +export const TURBO_MODULE_ARCH = 'turbo_module.arch'; + +/** + * Type for {@link TURBO_MODULE_ARCH} turbo_module.arch + */ +export type TURBO_MODULE_ARCH_TYPE = string; + +// Path: model/attributes/turbo_module/turbo_module__call__count.json + +/** + * The number of native module calls observed during the lifetime of the span. Only applies to React Native. `turbo_module.call.count` + * + * Attribute Value Type: `number` {@link TURBO_MODULE_CALL_COUNT_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_TOTAL_CALL_COUNT} `turbo_module.total_call_count`, {@link TURBO_MODULES_TOTAL_CALL_COUNT} `turbo_modules.total_call_count` + * + * @example 42 + */ +export const TURBO_MODULE_CALL_COUNT = 'turbo_module.call.count'; + +/** + * Type for {@link TURBO_MODULE_CALL_COUNT} turbo_module.call.count + */ +export type TURBO_MODULE_CALL_COUNT_TYPE = number; + +// Path: model/attributes/turbo_module/turbo_module__call__distinct_count.json + +/** + * The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated. Only applies to React Native. `turbo_module.call.distinct_count` + * + * Attribute Value Type: `number` {@link TURBO_MODULE_CALL_DISTINCT_COUNT_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_UNIQUE_METHODS} `turbo_module.unique_methods`, {@link TURBO_MODULES_UNIQUE_METHODS} `turbo_modules.unique_methods` + * + * @example 7 + */ +export const TURBO_MODULE_CALL_DISTINCT_COUNT = 'turbo_module.call.distinct_count'; + +/** + * Type for {@link TURBO_MODULE_CALL_DISTINCT_COUNT} turbo_module.call.distinct_count + */ +export type TURBO_MODULE_CALL_DISTINCT_COUNT_TYPE = number; + +// Path: model/attributes/turbo_module/turbo_module__duration__max.json + +/** + * The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds. Only applies to React Native. `turbo_module.duration.max` + * + * Attribute Value Type: `number` {@link TURBO_MODULE_DURATION_MAX_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * @example 512.5 + */ +export const TURBO_MODULE_DURATION_MAX = 'turbo_module.duration.max'; + +/** + * Type for {@link TURBO_MODULE_DURATION_MAX} turbo_module.duration.max + */ +export type TURBO_MODULE_DURATION_MAX_TYPE = number; + +// Path: model/attributes/turbo_module/turbo_module__duration__total.json + +/** + * The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration. Only applies to React Native. `turbo_module.duration.total` + * + * Attribute Value Type: `number` {@link TURBO_MODULE_DURATION_TOTAL_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_TOTAL_DURATION_MS} `turbo_module.total_duration_ms`, {@link TURBO_MODULES_TOTAL_DURATION_MS} `turbo_modules.total_duration_ms` + * + * @example 128.45 + */ +export const TURBO_MODULE_DURATION_TOTAL = 'turbo_module.duration.total'; + +/** + * Type for {@link TURBO_MODULE_DURATION_TOTAL} turbo_module.duration.total + */ +export type TURBO_MODULE_DURATION_TOTAL_TYPE = number; + +// Path: model/attributes/turbo_module/turbo_module__error__count.json + +/** + * The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback. Only applies to React Native. `turbo_module.error.count` + * + * Attribute Value Type: `number` {@link TURBO_MODULE_ERROR_COUNT_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_TOTAL_ERROR_COUNT} `turbo_module.total_error_count`, {@link TURBO_MODULES_TOTAL_ERROR_COUNT} `turbo_modules.total_error_count` + * + * @example 2 + */ +export const TURBO_MODULE_ERROR_COUNT = 'turbo_module.error.count'; + +/** + * Type for {@link TURBO_MODULE_ERROR_COUNT} turbo_module.error.count + */ +export type TURBO_MODULE_ERROR_COUNT_TYPE = number; + +// Path: model/attributes/turbo_module/turbo_module__kind.json + +/** + * Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. Only applies to React Native. `turbo_module.kind` + * + * Attribute Value Type: `string` {@link TURBO_MODULE_KIND_TYPE} + * + * Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + * + * Attribute defined in OTEL: No + * Visibility: public + * + * @example "async" + */ +export const TURBO_MODULE_KIND = 'turbo_module.kind'; + +/** + * Type for {@link TURBO_MODULE_KIND} turbo_module.kind + */ +export type TURBO_MODULE_KIND_TYPE = string; + +// Path: model/attributes/turbo_module/turbo_module__method.json + +/** + * The name of the native module method that was called. Only applies to React Native. `turbo_module.method` + * + * Attribute Value Type: `string` {@link TURBO_MODULE_METHOD_TYPE} + * + * Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + * + * Attribute defined in OTEL: No + * Visibility: public + * + * @example "getUniqueId" + */ +export const TURBO_MODULE_METHOD = 'turbo_module.method'; + +/** + * Type for {@link TURBO_MODULE_METHOD} turbo_module.method + */ +export type TURBO_MODULE_METHOD_TYPE = string; + +// Path: model/attributes/turbo_module/turbo_module__name.json + +/** + * The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key. Only applies to React Native. `turbo_module.name` + * + * Attribute Value Type: `string` {@link TURBO_MODULE_NAME_TYPE} + * + * Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + * + * Attribute defined in OTEL: No + * Visibility: public + * + * @example "RNDeviceInfo" + */ +export const TURBO_MODULE_NAME = 'turbo_module.name'; + +/** + * Type for {@link TURBO_MODULE_NAME} turbo_module.name + */ +export type TURBO_MODULE_NAME_TYPE = string; + +// Path: model/attributes/turbo_module/turbo_module__top__duration.json + +/** + * The total duration attributed to `turbo_module.top.name`, in milliseconds. Only applies to React Native. `turbo_module.top.duration` + * + * Attribute Value Type: `number` {@link TURBO_MODULE_TOP_DURATION_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_TOP_MODULE_DURATION_MS} `turbo_module.top_module_duration_ms` + * + * @example 87.25 + */ +export const TURBO_MODULE_TOP_DURATION = 'turbo_module.top.duration'; + +/** + * Type for {@link TURBO_MODULE_TOP_DURATION} turbo_module.top.duration + */ +export type TURBO_MODULE_TOP_DURATION_TYPE = number; + +// Path: model/attributes/turbo_module/turbo_module__top_module.json + +/** + * The native module and method that accounted for the most total duration during the lifetime of the span. Only applies to React Native. `turbo_module.top_module` + * + * Attribute Value Type: `string` {@link TURBO_MODULE_TOP_MODULE_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_TOP_NAME} `turbo_module.top.name` + * + * @deprecated Use {@link TURBO_MODULE_TOP_NAME} (turbo_module.top.name) instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + * @example "RNDeviceInfo.getUniqueId" + */ +export const TURBO_MODULE_TOP_MODULE = 'turbo_module.top_module'; + +/** + * Type for {@link TURBO_MODULE_TOP_MODULE} turbo_module.top_module + */ +export type TURBO_MODULE_TOP_MODULE_TYPE = string; + +// Path: model/attributes/turbo_module/turbo_module__top_module_duration_ms.json + +/** + * The total duration attributed to the top native module method, in milliseconds. Only applies to React Native. `turbo_module.top_module_duration_ms` + * + * Attribute Value Type: `number` {@link TURBO_MODULE_TOP_MODULE_DURATION_MS_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_TOP_DURATION} `turbo_module.top.duration` + * + * @deprecated Use {@link TURBO_MODULE_TOP_DURATION} (turbo_module.top.duration) instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + * @example 87.25 + */ +export const TURBO_MODULE_TOP_MODULE_DURATION_MS = 'turbo_module.top_module_duration_ms'; + +/** + * Type for {@link TURBO_MODULE_TOP_MODULE_DURATION_MS} turbo_module.top_module_duration_ms + */ +export type TURBO_MODULE_TOP_MODULE_DURATION_MS_TYPE = number; + +// Path: model/attributes/turbo_module/turbo_module__top__name.json + +/** + * The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`. Only applies to React Native. `turbo_module.top.name` + * + * Attribute Value Type: `string` {@link TURBO_MODULE_TOP_NAME_TYPE} + * + * Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_TOP_MODULE} `turbo_module.top_module` + * + * @example "RNDeviceInfo.getUniqueId" + */ +export const TURBO_MODULE_TOP_NAME = 'turbo_module.top.name'; + +/** + * Type for {@link TURBO_MODULE_TOP_NAME} turbo_module.top.name + */ +export type TURBO_MODULE_TOP_NAME_TYPE = string; + +// Path: model/attributes/turbo_module/turbo_module__total_call_count.json + +/** + * The number of native module calls observed during the lifetime of the span. Only applies to React Native. `turbo_module.total_call_count` + * + * Attribute Value Type: `number` {@link TURBO_MODULE_TOTAL_CALL_COUNT_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_CALL_COUNT} `turbo_module.call.count`, {@link TURBO_MODULES_TOTAL_CALL_COUNT} `turbo_modules.total_call_count` + * + * @deprecated Use {@link TURBO_MODULE_CALL_COUNT} (turbo_module.call.count) instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + * @example 42 + */ +export const TURBO_MODULE_TOTAL_CALL_COUNT = 'turbo_module.total_call_count'; + +/** + * Type for {@link TURBO_MODULE_TOTAL_CALL_COUNT} turbo_module.total_call_count + */ +export type TURBO_MODULE_TOTAL_CALL_COUNT_TYPE = number; + +// Path: model/attributes/turbo_module/turbo_module__total_duration_ms.json + +/** + * The combined duration of all native module calls observed during the lifetime of the span, in milliseconds. Only applies to React Native. `turbo_module.total_duration_ms` + * + * Attribute Value Type: `number` {@link TURBO_MODULE_TOTAL_DURATION_MS_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_DURATION_TOTAL} `turbo_module.duration.total`, {@link TURBO_MODULES_TOTAL_DURATION_MS} `turbo_modules.total_duration_ms` + * + * @deprecated Use {@link TURBO_MODULE_DURATION_TOTAL} (turbo_module.duration.total) instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + * @example 128.45 + */ +export const TURBO_MODULE_TOTAL_DURATION_MS = 'turbo_module.total_duration_ms'; + +/** + * Type for {@link TURBO_MODULE_TOTAL_DURATION_MS} turbo_module.total_duration_ms + */ +export type TURBO_MODULE_TOTAL_DURATION_MS_TYPE = number; + +// Path: model/attributes/turbo_module/turbo_module__total_error_count.json + +/** + * The number of native module calls that failed during the lifetime of the span. Only applies to React Native. `turbo_module.total_error_count` + * + * Attribute Value Type: `number` {@link TURBO_MODULE_TOTAL_ERROR_COUNT_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_ERROR_COUNT} `turbo_module.error.count`, {@link TURBO_MODULES_TOTAL_ERROR_COUNT} `turbo_modules.total_error_count` + * + * @deprecated Use {@link TURBO_MODULE_ERROR_COUNT} (turbo_module.error.count) instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + * @example 2 + */ +export const TURBO_MODULE_TOTAL_ERROR_COUNT = 'turbo_module.total_error_count'; + +/** + * Type for {@link TURBO_MODULE_TOTAL_ERROR_COUNT} turbo_module.total_error_count + */ +export type TURBO_MODULE_TOTAL_ERROR_COUNT_TYPE = number; + +// Path: model/attributes/turbo_module/turbo_module__unique_methods.json + +/** + * The number of distinct native module and method pairs called during the lifetime of the span. Only applies to React Native. `turbo_module.unique_methods` + * + * Attribute Value Type: `number` {@link TURBO_MODULE_UNIQUE_METHODS_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_CALL_DISTINCT_COUNT} `turbo_module.call.distinct_count`, {@link TURBO_MODULES_UNIQUE_METHODS} `turbo_modules.unique_methods` + * + * @deprecated Use {@link TURBO_MODULE_CALL_DISTINCT_COUNT} (turbo_module.call.distinct_count) instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + * @example 7 + */ +export const TURBO_MODULE_UNIQUE_METHODS = 'turbo_module.unique_methods'; + +/** + * Type for {@link TURBO_MODULE_UNIQUE_METHODS} turbo_module.unique_methods + */ +export type TURBO_MODULE_UNIQUE_METHODS_TYPE = number; + // Path: model/attributes/type.json /** @@ -18339,6 +18822,27 @@ export const ATTRIBUTE_TYPE: Record = { 'trpc.procedure_type': 'string', ttfb: 'double', 'ttfb.requestTime': 'double', + 'turbo_modules.total_call_count': 'integer', + 'turbo_modules.total_duration_ms': 'double', + 'turbo_modules.total_error_count': 'integer', + 'turbo_modules.unique_methods': 'integer', + 'turbo_module.arch': 'string', + 'turbo_module.call.count': 'integer', + 'turbo_module.call.distinct_count': 'integer', + 'turbo_module.duration.max': 'double', + 'turbo_module.duration.total': 'double', + 'turbo_module.error.count': 'integer', + 'turbo_module.kind': 'string', + 'turbo_module.method': 'string', + 'turbo_module.name': 'string', + 'turbo_module.top.duration': 'double', + 'turbo_module.top_module': 'string', + 'turbo_module.top_module_duration_ms': 'double', + 'turbo_module.top.name': 'string', + 'turbo_module.total_call_count': 'integer', + 'turbo_module.total_duration_ms': 'double', + 'turbo_module.total_error_count': 'integer', + 'turbo_module.unique_methods': 'integer', type: 'string', 'ui.component_name': 'string', 'ui.contributes_to_ttfd': 'boolean', @@ -19132,6 +19636,27 @@ export type AttributeName = | typeof TRPC_PROCEDURE_TYPE | typeof TTFB | typeof TTFB_REQUESTTIME + | typeof TURBO_MODULES_TOTAL_CALL_COUNT + | typeof TURBO_MODULES_TOTAL_DURATION_MS + | typeof TURBO_MODULES_TOTAL_ERROR_COUNT + | typeof TURBO_MODULES_UNIQUE_METHODS + | typeof TURBO_MODULE_ARCH + | typeof TURBO_MODULE_CALL_COUNT + | typeof TURBO_MODULE_CALL_DISTINCT_COUNT + | typeof TURBO_MODULE_DURATION_MAX + | typeof TURBO_MODULE_DURATION_TOTAL + | typeof TURBO_MODULE_ERROR_COUNT + | typeof TURBO_MODULE_KIND + | typeof TURBO_MODULE_METHOD + | typeof TURBO_MODULE_NAME + | typeof TURBO_MODULE_TOP_DURATION + | typeof TURBO_MODULE_TOP_MODULE + | typeof TURBO_MODULE_TOP_MODULE_DURATION_MS + | typeof TURBO_MODULE_TOP_NAME + | typeof TURBO_MODULE_TOTAL_CALL_COUNT + | typeof TURBO_MODULE_TOTAL_DURATION_MS + | typeof TURBO_MODULE_TOTAL_ERROR_COUNT + | typeof TURBO_MODULE_UNIQUE_METHODS | typeof TYPE | typeof UI_COMPONENT_NAME | typeof UI_CONTRIBUTES_TO_TTFD @@ -29357,6 +29882,390 @@ export const ATTRIBUTE_METADATA: Record = { aliases: ['browser.web_vital.ttfb.request_time'], changelog: [{ version: '0.5.0', prs: [235] }], }, + 'turbo_modules.total_call_count': { + brief: 'The number of native module calls in the flushed call aggregate. Only applies to React Native.', + type: 'integer', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 42, + deprecation: { + replacement: 'turbo_module.call.count', + reason: + 'Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix', + status: 'backfill', + }, + aliases: ['turbo_module.call.count', 'turbo_module.total_call_count'], + changelog: [ + { + version: 'next', + description: 'Added turbo_modules.total_call_count and deprecated it in favor of turbo_module.call.count', + }, + ], + }, + 'turbo_modules.total_duration_ms': { + brief: + 'The combined duration of all native module calls in the flushed call aggregate, in milliseconds. Only applies to React Native.', + type: 'double', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 128.45, + deprecation: { + replacement: 'turbo_module.duration.total', + reason: + 'Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix', + status: 'backfill', + }, + aliases: ['turbo_module.duration.total', 'turbo_module.total_duration_ms'], + changelog: [ + { + version: 'next', + description: 'Added turbo_modules.total_duration_ms and deprecated it in favor of turbo_module.duration.total', + }, + ], + }, + 'turbo_modules.total_error_count': { + brief: 'The number of failed native module calls in the flushed call aggregate. Only applies to React Native.', + type: 'integer', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 2, + deprecation: { + replacement: 'turbo_module.error.count', + reason: + 'Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix', + status: 'backfill', + }, + aliases: ['turbo_module.error.count', 'turbo_module.total_error_count'], + changelog: [ + { + version: 'next', + description: 'Added turbo_modules.total_error_count and deprecated it in favor of turbo_module.error.count', + }, + ], + }, + 'turbo_modules.unique_methods': { + brief: + 'The number of distinct native module and method pairs in the flushed call aggregate. Only applies to React Native.', + type: 'integer', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 7, + deprecation: { + replacement: 'turbo_module.call.distinct_count', + reason: + 'Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix', + status: 'backfill', + }, + aliases: ['turbo_module.call.distinct_count', 'turbo_module.unique_methods'], + changelog: [ + { + version: 'next', + description: + 'Added turbo_modules.unique_methods and deprecated it in favor of turbo_module.call.distinct_count', + }, + ], + }, + 'turbo_module.arch': { + brief: + 'The React Native architecture the call was observed on. `new` for a TurboModule resolved through `TurboModuleRegistry`, `legacy` for a module reached over the Old Architecture bridge. Only applies to React Native.', + type: 'string', + applyScrubbing: { + key: 'manual', + reason: + 'Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable', + }, + isInOtel: false, + visibility: 'public', + example: 'new', + changelog: [{ version: 'next', description: 'Added turbo_module.arch attribute' }], + }, + 'turbo_module.call.count': { + brief: 'The number of native module calls observed during the lifetime of the span. Only applies to React Native.', + type: 'integer', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 42, + aliases: ['turbo_module.total_call_count', 'turbo_modules.total_call_count'], + changelog: [{ version: 'next', description: 'Added turbo_module.call.count attribute' }], + }, + 'turbo_module.call.distinct_count': { + brief: + 'The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated. Only applies to React Native.', + type: 'integer', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 7, + aliases: ['turbo_module.unique_methods', 'turbo_modules.unique_methods'], + changelog: [{ version: 'next', description: 'Added turbo_module.call.distinct_count attribute' }], + }, + 'turbo_module.duration.max': { + brief: + 'The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds. Only applies to React Native.', + type: 'double', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 512.5, + changelog: [{ version: 'next', description: 'Added turbo_module.duration.max attribute' }], + }, + 'turbo_module.duration.total': { + brief: + 'The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration. Only applies to React Native.', + type: 'double', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 128.45, + aliases: ['turbo_module.total_duration_ms', 'turbo_modules.total_duration_ms'], + changelog: [{ version: 'next', description: 'Added turbo_module.duration.total attribute' }], + }, + 'turbo_module.error.count': { + brief: + 'The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback. Only applies to React Native.', + type: 'integer', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 2, + aliases: ['turbo_module.total_error_count', 'turbo_modules.total_error_count'], + changelog: [{ version: 'next', description: 'Added turbo_module.error.count attribute' }], + }, + 'turbo_module.kind': { + brief: + 'Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. Only applies to React Native.', + type: 'string', + applyScrubbing: { + key: 'manual', + reason: + 'Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable', + }, + isInOtel: false, + visibility: 'public', + example: 'async', + changelog: [{ version: 'next', description: 'Added turbo_module.kind attribute' }], + }, + 'turbo_module.method': { + brief: 'The name of the native module method that was called. Only applies to React Native.', + type: 'string', + applyScrubbing: { + key: 'manual', + reason: + 'Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable', + }, + isInOtel: false, + visibility: 'public', + example: 'getUniqueId', + changelog: [{ version: 'next', description: 'Added turbo_module.method attribute' }], + }, + 'turbo_module.name': { + brief: + 'The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key. Only applies to React Native.', + type: 'string', + applyScrubbing: { + key: 'manual', + reason: + 'Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable', + }, + isInOtel: false, + visibility: 'public', + example: 'RNDeviceInfo', + changelog: [{ version: 'next', description: 'Added turbo_module.name attribute' }], + }, + 'turbo_module.top.duration': { + brief: 'The total duration attributed to `turbo_module.top.name`, in milliseconds. Only applies to React Native.', + type: 'double', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 87.25, + aliases: ['turbo_module.top_module_duration_ms'], + changelog: [{ version: 'next', description: 'Added turbo_module.top.duration attribute' }], + }, + 'turbo_module.top_module': { + brief: + 'The native module and method that accounted for the most total duration during the lifetime of the span. Only applies to React Native.', + type: 'string', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 'RNDeviceInfo.getUniqueId', + deprecation: { + replacement: 'turbo_module.top.name', + reason: + 'Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping', + status: 'backfill', + }, + aliases: ['turbo_module.top.name'], + changelog: [ + { + version: 'next', + description: 'Added turbo_module.top_module and deprecated it in favor of turbo_module.top.name', + }, + ], + }, + 'turbo_module.top_module_duration_ms': { + brief: + 'The total duration attributed to the top native module method, in milliseconds. Only applies to React Native.', + type: 'double', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 87.25, + deprecation: { + replacement: 'turbo_module.top.duration', + reason: + 'Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping', + status: 'backfill', + }, + aliases: ['turbo_module.top.duration'], + changelog: [ + { + version: 'next', + description: + 'Added turbo_module.top_module_duration_ms and deprecated it in favor of turbo_module.top.duration', + }, + ], + }, + 'turbo_module.top.name': { + brief: + 'The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`. Only applies to React Native.', + type: 'string', + applyScrubbing: { + key: 'manual', + reason: + 'Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable', + }, + isInOtel: false, + visibility: 'public', + example: 'RNDeviceInfo.getUniqueId', + aliases: ['turbo_module.top_module'], + changelog: [{ version: 'next', description: 'Added turbo_module.top.name attribute' }], + }, + 'turbo_module.total_call_count': { + brief: 'The number of native module calls observed during the lifetime of the span. Only applies to React Native.', + type: 'integer', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 42, + deprecation: { + replacement: 'turbo_module.call.count', + reason: + 'Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping', + status: 'backfill', + }, + aliases: ['turbo_module.call.count', 'turbo_modules.total_call_count'], + changelog: [ + { + version: 'next', + description: 'Added turbo_module.total_call_count and deprecated it in favor of turbo_module.call.count', + }, + ], + }, + 'turbo_module.total_duration_ms': { + brief: + 'The combined duration of all native module calls observed during the lifetime of the span, in milliseconds. Only applies to React Native.', + type: 'double', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 128.45, + deprecation: { + replacement: 'turbo_module.duration.total', + reason: + 'Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping', + status: 'backfill', + }, + aliases: ['turbo_module.duration.total', 'turbo_modules.total_duration_ms'], + changelog: [ + { + version: 'next', + description: 'Added turbo_module.total_duration_ms and deprecated it in favor of turbo_module.duration.total', + }, + ], + }, + 'turbo_module.total_error_count': { + brief: + 'The number of native module calls that failed during the lifetime of the span. Only applies to React Native.', + type: 'integer', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 2, + deprecation: { + replacement: 'turbo_module.error.count', + reason: + 'Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping', + status: 'backfill', + }, + aliases: ['turbo_module.error.count', 'turbo_modules.total_error_count'], + changelog: [ + { + version: 'next', + description: 'Added turbo_module.total_error_count and deprecated it in favor of turbo_module.error.count', + }, + ], + }, + 'turbo_module.unique_methods': { + brief: + 'The number of distinct native module and method pairs called during the lifetime of the span. Only applies to React Native.', + type: 'integer', + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 7, + deprecation: { + replacement: 'turbo_module.call.distinct_count', + reason: + 'Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping', + status: 'backfill', + }, + aliases: ['turbo_module.call.distinct_count', 'turbo_modules.unique_methods'], + changelog: [ + { + version: 'next', + description: 'Added turbo_module.unique_methods and deprecated it in favor of turbo_module.call.distinct_count', + }, + ], + }, type: { brief: 'More granular type of the operation happening.', type: 'string', @@ -30937,6 +31846,27 @@ export type Attributes = { [TRPC_PROCEDURE_TYPE]?: TRPC_PROCEDURE_TYPE_TYPE; [TTFB]?: TTFB_TYPE; [TTFB_REQUESTTIME]?: TTFB_REQUESTTIME_TYPE; + [TURBO_MODULES_TOTAL_CALL_COUNT]?: TURBO_MODULES_TOTAL_CALL_COUNT_TYPE; + [TURBO_MODULES_TOTAL_DURATION_MS]?: TURBO_MODULES_TOTAL_DURATION_MS_TYPE; + [TURBO_MODULES_TOTAL_ERROR_COUNT]?: TURBO_MODULES_TOTAL_ERROR_COUNT_TYPE; + [TURBO_MODULES_UNIQUE_METHODS]?: TURBO_MODULES_UNIQUE_METHODS_TYPE; + [TURBO_MODULE_ARCH]?: TURBO_MODULE_ARCH_TYPE; + [TURBO_MODULE_CALL_COUNT]?: TURBO_MODULE_CALL_COUNT_TYPE; + [TURBO_MODULE_CALL_DISTINCT_COUNT]?: TURBO_MODULE_CALL_DISTINCT_COUNT_TYPE; + [TURBO_MODULE_DURATION_MAX]?: TURBO_MODULE_DURATION_MAX_TYPE; + [TURBO_MODULE_DURATION_TOTAL]?: TURBO_MODULE_DURATION_TOTAL_TYPE; + [TURBO_MODULE_ERROR_COUNT]?: TURBO_MODULE_ERROR_COUNT_TYPE; + [TURBO_MODULE_KIND]?: TURBO_MODULE_KIND_TYPE; + [TURBO_MODULE_METHOD]?: TURBO_MODULE_METHOD_TYPE; + [TURBO_MODULE_NAME]?: TURBO_MODULE_NAME_TYPE; + [TURBO_MODULE_TOP_DURATION]?: TURBO_MODULE_TOP_DURATION_TYPE; + [TURBO_MODULE_TOP_MODULE]?: TURBO_MODULE_TOP_MODULE_TYPE; + [TURBO_MODULE_TOP_MODULE_DURATION_MS]?: TURBO_MODULE_TOP_MODULE_DURATION_MS_TYPE; + [TURBO_MODULE_TOP_NAME]?: TURBO_MODULE_TOP_NAME_TYPE; + [TURBO_MODULE_TOTAL_CALL_COUNT]?: TURBO_MODULE_TOTAL_CALL_COUNT_TYPE; + [TURBO_MODULE_TOTAL_DURATION_MS]?: TURBO_MODULE_TOTAL_DURATION_MS_TYPE; + [TURBO_MODULE_TOTAL_ERROR_COUNT]?: TURBO_MODULE_TOTAL_ERROR_COUNT_TYPE; + [TURBO_MODULE_UNIQUE_METHODS]?: TURBO_MODULE_UNIQUE_METHODS_TYPE; [TYPE]?: TYPE_TYPE; [UI_COMPONENT_NAME]?: UI_COMPONENT_NAME_TYPE; [UI_CONTRIBUTES_TO_TTFD]?: UI_CONTRIBUTES_TO_TTFD_TYPE; diff --git a/javascript/sentry-conventions/src/op.ts b/javascript/sentry-conventions/src/op.ts index 9faa21aa7..6ba858fbe 100644 --- a/javascript/sentry-conventions/src/op.ts +++ b/javascript/sentry-conventions/src/op.ts @@ -395,6 +395,11 @@ export const MOBILE_SERIALIZE_SPAN_OP = 'serialize'; export const MOBILE_HTTP_SPAN_OP = 'http'; +/** + * A call from JavaScript into a React Native native module, or an aggregate of such calls. + */ +export const MOBILE_TURBO_MODULE_SPAN_OP = 'turbo_module'; + // Path: model/op/object.json // Name: object diff --git a/model/attributes/turbo_module/turbo_module__arch.json b/model/attributes/turbo_module/turbo_module__arch.json new file mode 100644 index 000000000..802fac8d3 --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__arch.json @@ -0,0 +1,18 @@ +{ + "key": "turbo_module.arch", + "brief": "The React Native architecture the call was observed on. `new` for a TurboModule resolved through `TurboModuleRegistry`, `legacy` for a module reached over the Old Architecture bridge. Only applies to React Native.", + "type": "string", + "apply_scrubbing": { + "key": "manual", + "reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable" + }, + "is_in_otel": false, + "example": "new", + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.arch attribute" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__call__count.json b/model/attributes/turbo_module/turbo_module__call__count.json new file mode 100644 index 000000000..456c95184 --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__call__count.json @@ -0,0 +1,18 @@ +{ + "key": "turbo_module.call.count", + "brief": "The number of native module calls observed during the lifetime of the span. Only applies to React Native.", + "type": "integer", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 42, + "alias": ["turbo_module.total_call_count", "turbo_modules.total_call_count"], + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.call.count attribute" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__call__distinct_count.json b/model/attributes/turbo_module/turbo_module__call__distinct_count.json new file mode 100644 index 000000000..5054508bf --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__call__distinct_count.json @@ -0,0 +1,18 @@ +{ + "key": "turbo_module.call.distinct_count", + "brief": "The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated. Only applies to React Native.", + "type": "integer", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 7, + "alias": ["turbo_module.unique_methods", "turbo_modules.unique_methods"], + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.call.distinct_count attribute" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__duration__max.json b/model/attributes/turbo_module/turbo_module__duration__max.json new file mode 100644 index 000000000..3a89b8daf --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__duration__max.json @@ -0,0 +1,17 @@ +{ + "key": "turbo_module.duration.max", + "brief": "The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds. Only applies to React Native.", + "type": "double", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 512.5, + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.duration.max attribute" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__duration__total.json b/model/attributes/turbo_module/turbo_module__duration__total.json new file mode 100644 index 000000000..ff1ee6a68 --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__duration__total.json @@ -0,0 +1,18 @@ +{ + "key": "turbo_module.duration.total", + "brief": "The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration. Only applies to React Native.", + "type": "double", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 128.45, + "alias": ["turbo_module.total_duration_ms", "turbo_modules.total_duration_ms"], + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.duration.total attribute" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__error__count.json b/model/attributes/turbo_module/turbo_module__error__count.json new file mode 100644 index 000000000..079a86eab --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__error__count.json @@ -0,0 +1,18 @@ +{ + "key": "turbo_module.error.count", + "brief": "The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback. Only applies to React Native.", + "type": "integer", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 2, + "alias": ["turbo_module.total_error_count", "turbo_modules.total_error_count"], + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.error.count attribute" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__kind.json b/model/attributes/turbo_module/turbo_module__kind.json new file mode 100644 index 000000000..52715b145 --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__kind.json @@ -0,0 +1,18 @@ +{ + "key": "turbo_module.kind", + "brief": "Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. Only applies to React Native.", + "type": "string", + "apply_scrubbing": { + "key": "manual", + "reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable" + }, + "is_in_otel": false, + "example": "async", + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.kind attribute" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__method.json b/model/attributes/turbo_module/turbo_module__method.json new file mode 100644 index 000000000..2de7c5391 --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__method.json @@ -0,0 +1,18 @@ +{ + "key": "turbo_module.method", + "brief": "The name of the native module method that was called. Only applies to React Native.", + "type": "string", + "apply_scrubbing": { + "key": "manual", + "reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable" + }, + "is_in_otel": false, + "example": "getUniqueId", + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.method attribute" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__name.json b/model/attributes/turbo_module/turbo_module__name.json new file mode 100644 index 000000000..407988ed8 --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__name.json @@ -0,0 +1,18 @@ +{ + "key": "turbo_module.name", + "brief": "The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key. Only applies to React Native.", + "type": "string", + "apply_scrubbing": { + "key": "manual", + "reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable" + }, + "is_in_otel": false, + "example": "RNDeviceInfo", + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.name attribute" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__top__duration.json b/model/attributes/turbo_module/turbo_module__top__duration.json new file mode 100644 index 000000000..8029824cb --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__top__duration.json @@ -0,0 +1,18 @@ +{ + "key": "turbo_module.top.duration", + "brief": "The total duration attributed to `turbo_module.top.name`, in milliseconds. Only applies to React Native.", + "type": "double", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 87.25, + "alias": ["turbo_module.top_module_duration_ms"], + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.top.duration attribute" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__top__name.json b/model/attributes/turbo_module/turbo_module__top__name.json new file mode 100644 index 000000000..a131904e8 --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__top__name.json @@ -0,0 +1,19 @@ +{ + "key": "turbo_module.top.name", + "brief": "The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`. Only applies to React Native.", + "type": "string", + "apply_scrubbing": { + "key": "manual", + "reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable" + }, + "is_in_otel": false, + "example": "RNDeviceInfo.getUniqueId", + "alias": ["turbo_module.top_module"], + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.top.name attribute" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__top_module.json b/model/attributes/turbo_module/turbo_module__top_module.json new file mode 100644 index 000000000..2fd12328f --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__top_module.json @@ -0,0 +1,23 @@ +{ + "key": "turbo_module.top_module", + "brief": "The native module and method that accounted for the most total duration during the lifetime of the span. Only applies to React Native.", + "type": "string", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": "RNDeviceInfo.getUniqueId", + "alias": ["turbo_module.top.name"], + "deprecation": { + "replacement": "turbo_module.top.name", + "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + "_status": "backfill" + }, + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.top_module and deprecated it in favor of turbo_module.top.name" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__top_module_duration_ms.json b/model/attributes/turbo_module/turbo_module__top_module_duration_ms.json new file mode 100644 index 000000000..49f185333 --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__top_module_duration_ms.json @@ -0,0 +1,23 @@ +{ + "key": "turbo_module.top_module_duration_ms", + "brief": "The total duration attributed to the top native module method, in milliseconds. Only applies to React Native.", + "type": "double", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 87.25, + "alias": ["turbo_module.top.duration"], + "deprecation": { + "replacement": "turbo_module.top.duration", + "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + "_status": "backfill" + }, + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.top_module_duration_ms and deprecated it in favor of turbo_module.top.duration" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__total_call_count.json b/model/attributes/turbo_module/turbo_module__total_call_count.json new file mode 100644 index 000000000..5446e9b44 --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__total_call_count.json @@ -0,0 +1,23 @@ +{ + "key": "turbo_module.total_call_count", + "brief": "The number of native module calls observed during the lifetime of the span. Only applies to React Native.", + "type": "integer", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 42, + "alias": ["turbo_module.call.count", "turbo_modules.total_call_count"], + "deprecation": { + "replacement": "turbo_module.call.count", + "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + "_status": "backfill" + }, + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.total_call_count and deprecated it in favor of turbo_module.call.count" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__total_duration_ms.json b/model/attributes/turbo_module/turbo_module__total_duration_ms.json new file mode 100644 index 000000000..f8818f187 --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__total_duration_ms.json @@ -0,0 +1,23 @@ +{ + "key": "turbo_module.total_duration_ms", + "brief": "The combined duration of all native module calls observed during the lifetime of the span, in milliseconds. Only applies to React Native.", + "type": "double", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 128.45, + "alias": ["turbo_module.duration.total", "turbo_modules.total_duration_ms"], + "deprecation": { + "replacement": "turbo_module.duration.total", + "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + "_status": "backfill" + }, + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.total_duration_ms and deprecated it in favor of turbo_module.duration.total" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__total_error_count.json b/model/attributes/turbo_module/turbo_module__total_error_count.json new file mode 100644 index 000000000..1b3dfe4e5 --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__total_error_count.json @@ -0,0 +1,23 @@ +{ + "key": "turbo_module.total_error_count", + "brief": "The number of native module calls that failed during the lifetime of the span. Only applies to React Native.", + "type": "integer", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 2, + "alias": ["turbo_module.error.count", "turbo_modules.total_error_count"], + "deprecation": { + "replacement": "turbo_module.error.count", + "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + "_status": "backfill" + }, + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.total_error_count and deprecated it in favor of turbo_module.error.count" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__unique_methods.json b/model/attributes/turbo_module/turbo_module__unique_methods.json new file mode 100644 index 000000000..7a50115c9 --- /dev/null +++ b/model/attributes/turbo_module/turbo_module__unique_methods.json @@ -0,0 +1,23 @@ +{ + "key": "turbo_module.unique_methods", + "brief": "The number of distinct native module and method pairs called during the lifetime of the span. Only applies to React Native.", + "type": "integer", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 7, + "alias": ["turbo_module.call.distinct_count", "turbo_modules.unique_methods"], + "deprecation": { + "replacement": "turbo_module.call.distinct_count", + "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + "_status": "backfill" + }, + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_module.unique_methods and deprecated it in favor of turbo_module.call.distinct_count" + } + ] +} diff --git a/model/attributes/turbo_modules/turbo_modules__total_call_count.json b/model/attributes/turbo_modules/turbo_modules__total_call_count.json new file mode 100644 index 000000000..0f30fd882 --- /dev/null +++ b/model/attributes/turbo_modules/turbo_modules__total_call_count.json @@ -0,0 +1,23 @@ +{ + "key": "turbo_modules.total_call_count", + "brief": "The number of native module calls in the flushed call aggregate. Only applies to React Native.", + "type": "integer", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 42, + "alias": ["turbo_module.call.count", "turbo_module.total_call_count"], + "deprecation": { + "replacement": "turbo_module.call.count", + "reason": "Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + "_status": "backfill" + }, + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_modules.total_call_count and deprecated it in favor of turbo_module.call.count" + } + ] +} diff --git a/model/attributes/turbo_modules/turbo_modules__total_duration_ms.json b/model/attributes/turbo_modules/turbo_modules__total_duration_ms.json new file mode 100644 index 000000000..9198d9896 --- /dev/null +++ b/model/attributes/turbo_modules/turbo_modules__total_duration_ms.json @@ -0,0 +1,23 @@ +{ + "key": "turbo_modules.total_duration_ms", + "brief": "The combined duration of all native module calls in the flushed call aggregate, in milliseconds. Only applies to React Native.", + "type": "double", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 128.45, + "alias": ["turbo_module.duration.total", "turbo_module.total_duration_ms"], + "deprecation": { + "replacement": "turbo_module.duration.total", + "reason": "Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + "_status": "backfill" + }, + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_modules.total_duration_ms and deprecated it in favor of turbo_module.duration.total" + } + ] +} diff --git a/model/attributes/turbo_modules/turbo_modules__total_error_count.json b/model/attributes/turbo_modules/turbo_modules__total_error_count.json new file mode 100644 index 000000000..f32c3ab26 --- /dev/null +++ b/model/attributes/turbo_modules/turbo_modules__total_error_count.json @@ -0,0 +1,23 @@ +{ + "key": "turbo_modules.total_error_count", + "brief": "The number of failed native module calls in the flushed call aggregate. Only applies to React Native.", + "type": "integer", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 2, + "alias": ["turbo_module.error.count", "turbo_module.total_error_count"], + "deprecation": { + "replacement": "turbo_module.error.count", + "reason": "Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + "_status": "backfill" + }, + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_modules.total_error_count and deprecated it in favor of turbo_module.error.count" + } + ] +} diff --git a/model/attributes/turbo_modules/turbo_modules__unique_methods.json b/model/attributes/turbo_modules/turbo_modules__unique_methods.json new file mode 100644 index 000000000..3e130f8a5 --- /dev/null +++ b/model/attributes/turbo_modules/turbo_modules__unique_methods.json @@ -0,0 +1,23 @@ +{ + "key": "turbo_modules.unique_methods", + "brief": "The number of distinct native module and method pairs in the flushed call aggregate. Only applies to React Native.", + "type": "integer", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "example": 7, + "alias": ["turbo_module.call.distinct_count", "turbo_module.unique_methods"], + "deprecation": { + "replacement": "turbo_module.call.distinct_count", + "reason": "Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + "_status": "backfill" + }, + "visibility": "public", + "changelog": [ + { + "version": "next", + "description": "Added turbo_modules.unique_methods and deprecated it in favor of turbo_module.call.distinct_count" + } + ] +} diff --git a/model/op/mobile.json b/model/op/mobile.json index 89f575580..e1d7c68cc 100644 --- a/model/op/mobile.json +++ b/model/op/mobile.json @@ -19,6 +19,10 @@ }, { "name": "http" + }, + { + "name": "turbo_module", + "description": "A call from JavaScript into a React Native native module, or an aggregate of such calls." } ] } diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 5f254e789..23aa8aa97 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -329,6 +329,16 @@ class _AttributeNamesMeta(type): "TRANSACTION", "TTFB_REQUESTTIME", "TTFB", + "TURBO_MODULE_TOP_MODULE", + "TURBO_MODULE_TOP_MODULE_DURATION_MS", + "TURBO_MODULE_TOTAL_CALL_COUNT", + "TURBO_MODULE_TOTAL_DURATION_MS", + "TURBO_MODULE_TOTAL_ERROR_COUNT", + "TURBO_MODULE_UNIQUE_METHODS", + "TURBO_MODULES_TOTAL_CALL_COUNT", + "TURBO_MODULES_TOTAL_DURATION_MS", + "TURBO_MODULES_TOTAL_ERROR_COUNT", + "TURBO_MODULES_UNIQUE_METHODS", "URL_SAME_ORIGIN", "URL", } @@ -9297,6 +9307,295 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: 194 """ + # Path: model/attributes/turbo_module/turbo_module__arch.json + TURBO_MODULE_ARCH: Literal["turbo_module.arch"] = "turbo_module.arch" + """The React Native architecture the call was observed on. `new` for a TurboModule resolved through `TurboModuleRegistry`, `legacy` for a module reached over the Old Architecture bridge. Only applies to React Native. + + Type: str + Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + Defined in OTEL: No + Visibility: public + Example: "new" + """ + + # Path: model/attributes/turbo_module/turbo_module__call__count.json + TURBO_MODULE_CALL_COUNT: Literal["turbo_module.call.count"] = ( + "turbo_module.call.count" + ) + """The number of native module calls observed during the lifetime of the span. Only applies to React Native. + + Type: int + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.total_call_count, turbo_modules.total_call_count + Example: 42 + """ + + # Path: model/attributes/turbo_module/turbo_module__call__distinct_count.json + TURBO_MODULE_CALL_DISTINCT_COUNT: Literal["turbo_module.call.distinct_count"] = ( + "turbo_module.call.distinct_count" + ) + """The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated. Only applies to React Native. + + Type: int + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.unique_methods, turbo_modules.unique_methods + Example: 7 + """ + + # Path: model/attributes/turbo_module/turbo_module__duration__max.json + TURBO_MODULE_DURATION_MAX: Literal["turbo_module.duration.max"] = ( + "turbo_module.duration.max" + ) + """The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds. Only applies to React Native. + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Example: 512.5 + """ + + # Path: model/attributes/turbo_module/turbo_module__duration__total.json + TURBO_MODULE_DURATION_TOTAL: Literal["turbo_module.duration.total"] = ( + "turbo_module.duration.total" + ) + """The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration. Only applies to React Native. + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.total_duration_ms, turbo_modules.total_duration_ms + Example: 128.45 + """ + + # Path: model/attributes/turbo_module/turbo_module__error__count.json + TURBO_MODULE_ERROR_COUNT: Literal["turbo_module.error.count"] = ( + "turbo_module.error.count" + ) + """The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback. Only applies to React Native. + + Type: int + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.total_error_count, turbo_modules.total_error_count + Example: 2 + """ + + # Path: model/attributes/turbo_module/turbo_module__kind.json + TURBO_MODULE_KIND: Literal["turbo_module.kind"] = "turbo_module.kind" + """Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. Only applies to React Native. + + Type: str + Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + Defined in OTEL: No + Visibility: public + Example: "async" + """ + + # Path: model/attributes/turbo_module/turbo_module__method.json + TURBO_MODULE_METHOD: Literal["turbo_module.method"] = "turbo_module.method" + """The name of the native module method that was called. Only applies to React Native. + + Type: str + Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + Defined in OTEL: No + Visibility: public + Example: "getUniqueId" + """ + + # Path: model/attributes/turbo_module/turbo_module__name.json + TURBO_MODULE_NAME: Literal["turbo_module.name"] = "turbo_module.name" + """The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key. Only applies to React Native. + + Type: str + Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + Defined in OTEL: No + Visibility: public + Example: "RNDeviceInfo" + """ + + # Path: model/attributes/turbo_module/turbo_module__top__duration.json + TURBO_MODULE_TOP_DURATION: Literal["turbo_module.top.duration"] = ( + "turbo_module.top.duration" + ) + """The total duration attributed to `turbo_module.top.name`, in milliseconds. Only applies to React Native. + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.top_module_duration_ms + Example: 87.25 + """ + + # Path: model/attributes/turbo_module/turbo_module__top__name.json + TURBO_MODULE_TOP_NAME: Literal["turbo_module.top.name"] = "turbo_module.top.name" + """The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`. Only applies to React Native. + + Type: str + Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.top_module + Example: "RNDeviceInfo.getUniqueId" + """ + + # Path: model/attributes/turbo_module/turbo_module__top_module.json + TURBO_MODULE_TOP_MODULE: Literal["turbo_module.top_module"] = ( + "turbo_module.top_module" + ) + """The native module and method that accounted for the most total duration during the lifetime of the span. Only applies to React Native. + + Type: str + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.top.name + DEPRECATED: Use turbo_module.top.name instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + Example: "RNDeviceInfo.getUniqueId" + """ + + # Path: model/attributes/turbo_module/turbo_module__top_module_duration_ms.json + TURBO_MODULE_TOP_MODULE_DURATION_MS: Literal[ + "turbo_module.top_module_duration_ms" + ] = "turbo_module.top_module_duration_ms" + """The total duration attributed to the top native module method, in milliseconds. Only applies to React Native. + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.top.duration + DEPRECATED: Use turbo_module.top.duration instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + Example: 87.25 + """ + + # Path: model/attributes/turbo_module/turbo_module__total_call_count.json + TURBO_MODULE_TOTAL_CALL_COUNT: Literal["turbo_module.total_call_count"] = ( + "turbo_module.total_call_count" + ) + """The number of native module calls observed during the lifetime of the span. Only applies to React Native. + + Type: int + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.call.count, turbo_modules.total_call_count + DEPRECATED: Use turbo_module.call.count instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + Example: 42 + """ + + # Path: model/attributes/turbo_module/turbo_module__total_duration_ms.json + TURBO_MODULE_TOTAL_DURATION_MS: Literal["turbo_module.total_duration_ms"] = ( + "turbo_module.total_duration_ms" + ) + """The combined duration of all native module calls observed during the lifetime of the span, in milliseconds. Only applies to React Native. + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.duration.total, turbo_modules.total_duration_ms + DEPRECATED: Use turbo_module.duration.total instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + Example: 128.45 + """ + + # Path: model/attributes/turbo_module/turbo_module__total_error_count.json + TURBO_MODULE_TOTAL_ERROR_COUNT: Literal["turbo_module.total_error_count"] = ( + "turbo_module.total_error_count" + ) + """The number of native module calls that failed during the lifetime of the span. Only applies to React Native. + + Type: int + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.error.count, turbo_modules.total_error_count + DEPRECATED: Use turbo_module.error.count instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + Example: 2 + """ + + # Path: model/attributes/turbo_module/turbo_module__unique_methods.json + TURBO_MODULE_UNIQUE_METHODS: Literal["turbo_module.unique_methods"] = ( + "turbo_module.unique_methods" + ) + """The number of distinct native module and method pairs called during the lifetime of the span. Only applies to React Native. + + Type: int + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.call.distinct_count, turbo_modules.unique_methods + DEPRECATED: Use turbo_module.call.distinct_count instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + Example: 7 + """ + + # Path: model/attributes/turbo_modules/turbo_modules__total_call_count.json + TURBO_MODULES_TOTAL_CALL_COUNT: Literal["turbo_modules.total_call_count"] = ( + "turbo_modules.total_call_count" + ) + """The number of native module calls in the flushed call aggregate. Only applies to React Native. + + Type: int + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.call.count, turbo_module.total_call_count + DEPRECATED: Use turbo_module.call.count instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + Example: 42 + """ + + # Path: model/attributes/turbo_modules/turbo_modules__total_duration_ms.json + TURBO_MODULES_TOTAL_DURATION_MS: Literal["turbo_modules.total_duration_ms"] = ( + "turbo_modules.total_duration_ms" + ) + """The combined duration of all native module calls in the flushed call aggregate, in milliseconds. Only applies to React Native. + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.duration.total, turbo_module.total_duration_ms + DEPRECATED: Use turbo_module.duration.total instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + Example: 128.45 + """ + + # Path: model/attributes/turbo_modules/turbo_modules__total_error_count.json + TURBO_MODULES_TOTAL_ERROR_COUNT: Literal["turbo_modules.total_error_count"] = ( + "turbo_modules.total_error_count" + ) + """The number of failed native module calls in the flushed call aggregate. Only applies to React Native. + + Type: int + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.error.count, turbo_module.total_error_count + DEPRECATED: Use turbo_module.error.count instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + Example: 2 + """ + + # Path: model/attributes/turbo_modules/turbo_modules__unique_methods.json + TURBO_MODULES_UNIQUE_METHODS: Literal["turbo_modules.unique_methods"] = ( + "turbo_modules.unique_methods" + ) + """The number of distinct native module and method pairs in the flushed call aggregate. Only applies to React Native. + + Type: int + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.call.distinct_count, turbo_module.unique_methods + DEPRECATED: Use turbo_module.call.distinct_count instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + Example: 7 + """ + # Path: model/attributes/type.json TYPE: Literal["type"] = "type" """More granular type of the operation happening. @@ -21085,6 +21384,372 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ChangelogEntry(version="0.5.0", prs=[235]), ], ), + "turbo_module.arch": AttributeMetadata( + brief="The React Native architecture the call was observed on. `new` for a TurboModule resolved through `TurboModuleRegistry`, `legacy` for a module reached over the Old Architecture bridge. Only applies to React Native.", + type=AttributeType.STRING, + apply_scrubbing=ApplyScrubbingInfo( + key=ApplyScrubbing.MANUAL, + reason="Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable", + ), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example="new", + changelog=[ + ChangelogEntry( + version="next", description="Added turbo_module.arch attribute" + ), + ], + ), + "turbo_module.call.count": AttributeMetadata( + brief="The number of native module calls observed during the lifetime of the span. Only applies to React Native.", + type=AttributeType.INTEGER, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=42, + aliases=["turbo_module.total_call_count", "turbo_modules.total_call_count"], + changelog=[ + ChangelogEntry( + version="next", description="Added turbo_module.call.count attribute" + ), + ], + ), + "turbo_module.call.distinct_count": AttributeMetadata( + brief="The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated. Only applies to React Native.", + type=AttributeType.INTEGER, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=7, + aliases=["turbo_module.unique_methods", "turbo_modules.unique_methods"], + changelog=[ + ChangelogEntry( + version="next", + description="Added turbo_module.call.distinct_count attribute", + ), + ], + ), + "turbo_module.duration.max": AttributeMetadata( + brief="The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds. Only applies to React Native.", + type=AttributeType.DOUBLE, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=512.5, + changelog=[ + ChangelogEntry( + version="next", description="Added turbo_module.duration.max attribute" + ), + ], + ), + "turbo_module.duration.total": AttributeMetadata( + brief="The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration. Only applies to React Native.", + type=AttributeType.DOUBLE, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=128.45, + aliases=["turbo_module.total_duration_ms", "turbo_modules.total_duration_ms"], + changelog=[ + ChangelogEntry( + version="next", + description="Added turbo_module.duration.total attribute", + ), + ], + ), + "turbo_module.error.count": AttributeMetadata( + brief="The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback. Only applies to React Native.", + type=AttributeType.INTEGER, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=2, + aliases=["turbo_module.total_error_count", "turbo_modules.total_error_count"], + changelog=[ + ChangelogEntry( + version="next", description="Added turbo_module.error.count attribute" + ), + ], + ), + "turbo_module.kind": AttributeMetadata( + brief="Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. Only applies to React Native.", + type=AttributeType.STRING, + apply_scrubbing=ApplyScrubbingInfo( + key=ApplyScrubbing.MANUAL, + reason="Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable", + ), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example="async", + changelog=[ + ChangelogEntry( + version="next", description="Added turbo_module.kind attribute" + ), + ], + ), + "turbo_module.method": AttributeMetadata( + brief="The name of the native module method that was called. Only applies to React Native.", + type=AttributeType.STRING, + apply_scrubbing=ApplyScrubbingInfo( + key=ApplyScrubbing.MANUAL, + reason="Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable", + ), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example="getUniqueId", + changelog=[ + ChangelogEntry( + version="next", description="Added turbo_module.method attribute" + ), + ], + ), + "turbo_module.name": AttributeMetadata( + brief="The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key. Only applies to React Native.", + type=AttributeType.STRING, + apply_scrubbing=ApplyScrubbingInfo( + key=ApplyScrubbing.MANUAL, + reason="Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable", + ), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example="RNDeviceInfo", + changelog=[ + ChangelogEntry( + version="next", description="Added turbo_module.name attribute" + ), + ], + ), + "turbo_module.top.duration": AttributeMetadata( + brief="The total duration attributed to `turbo_module.top.name`, in milliseconds. Only applies to React Native.", + type=AttributeType.DOUBLE, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=87.25, + aliases=["turbo_module.top_module_duration_ms"], + changelog=[ + ChangelogEntry( + version="next", description="Added turbo_module.top.duration attribute" + ), + ], + ), + "turbo_module.top.name": AttributeMetadata( + brief="The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`. Only applies to React Native.", + type=AttributeType.STRING, + apply_scrubbing=ApplyScrubbingInfo( + key=ApplyScrubbing.MANUAL, + reason="Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable", + ), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example="RNDeviceInfo.getUniqueId", + aliases=["turbo_module.top_module"], + changelog=[ + ChangelogEntry( + version="next", description="Added turbo_module.top.name attribute" + ), + ], + ), + "turbo_module.top_module": AttributeMetadata( + brief="The native module and method that accounted for the most total duration during the lifetime of the span. Only applies to React Native.", + type=AttributeType.STRING, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example="RNDeviceInfo.getUniqueId", + deprecation=DeprecationInfo( + replacement="turbo_module.top.name", + reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + status=DeprecationStatus.BACKFILL, + ), + aliases=["turbo_module.top.name"], + changelog=[ + ChangelogEntry( + version="next", + description="Added turbo_module.top_module and deprecated it in favor of turbo_module.top.name", + ), + ], + ), + "turbo_module.top_module_duration_ms": AttributeMetadata( + brief="The total duration attributed to the top native module method, in milliseconds. Only applies to React Native.", + type=AttributeType.DOUBLE, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=87.25, + deprecation=DeprecationInfo( + replacement="turbo_module.top.duration", + reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + status=DeprecationStatus.BACKFILL, + ), + aliases=["turbo_module.top.duration"], + changelog=[ + ChangelogEntry( + version="next", + description="Added turbo_module.top_module_duration_ms and deprecated it in favor of turbo_module.top.duration", + ), + ], + ), + "turbo_module.total_call_count": AttributeMetadata( + brief="The number of native module calls observed during the lifetime of the span. Only applies to React Native.", + type=AttributeType.INTEGER, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=42, + deprecation=DeprecationInfo( + replacement="turbo_module.call.count", + reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + status=DeprecationStatus.BACKFILL, + ), + aliases=["turbo_module.call.count", "turbo_modules.total_call_count"], + changelog=[ + ChangelogEntry( + version="next", + description="Added turbo_module.total_call_count and deprecated it in favor of turbo_module.call.count", + ), + ], + ), + "turbo_module.total_duration_ms": AttributeMetadata( + brief="The combined duration of all native module calls observed during the lifetime of the span, in milliseconds. Only applies to React Native.", + type=AttributeType.DOUBLE, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=128.45, + deprecation=DeprecationInfo( + replacement="turbo_module.duration.total", + reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + status=DeprecationStatus.BACKFILL, + ), + aliases=["turbo_module.duration.total", "turbo_modules.total_duration_ms"], + changelog=[ + ChangelogEntry( + version="next", + description="Added turbo_module.total_duration_ms and deprecated it in favor of turbo_module.duration.total", + ), + ], + ), + "turbo_module.total_error_count": AttributeMetadata( + brief="The number of native module calls that failed during the lifetime of the span. Only applies to React Native.", + type=AttributeType.INTEGER, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=2, + deprecation=DeprecationInfo( + replacement="turbo_module.error.count", + reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + status=DeprecationStatus.BACKFILL, + ), + aliases=["turbo_module.error.count", "turbo_modules.total_error_count"], + changelog=[ + ChangelogEntry( + version="next", + description="Added turbo_module.total_error_count and deprecated it in favor of turbo_module.error.count", + ), + ], + ), + "turbo_module.unique_methods": AttributeMetadata( + brief="The number of distinct native module and method pairs called during the lifetime of the span. Only applies to React Native.", + type=AttributeType.INTEGER, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=7, + deprecation=DeprecationInfo( + replacement="turbo_module.call.distinct_count", + reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + status=DeprecationStatus.BACKFILL, + ), + aliases=["turbo_module.call.distinct_count", "turbo_modules.unique_methods"], + changelog=[ + ChangelogEntry( + version="next", + description="Added turbo_module.unique_methods and deprecated it in favor of turbo_module.call.distinct_count", + ), + ], + ), + "turbo_modules.total_call_count": AttributeMetadata( + brief="The number of native module calls in the flushed call aggregate. Only applies to React Native.", + type=AttributeType.INTEGER, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=42, + deprecation=DeprecationInfo( + replacement="turbo_module.call.count", + reason="Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + status=DeprecationStatus.BACKFILL, + ), + aliases=["turbo_module.call.count", "turbo_module.total_call_count"], + changelog=[ + ChangelogEntry( + version="next", + description="Added turbo_modules.total_call_count and deprecated it in favor of turbo_module.call.count", + ), + ], + ), + "turbo_modules.total_duration_ms": AttributeMetadata( + brief="The combined duration of all native module calls in the flushed call aggregate, in milliseconds. Only applies to React Native.", + type=AttributeType.DOUBLE, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=128.45, + deprecation=DeprecationInfo( + replacement="turbo_module.duration.total", + reason="Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + status=DeprecationStatus.BACKFILL, + ), + aliases=["turbo_module.duration.total", "turbo_module.total_duration_ms"], + changelog=[ + ChangelogEntry( + version="next", + description="Added turbo_modules.total_duration_ms and deprecated it in favor of turbo_module.duration.total", + ), + ], + ), + "turbo_modules.total_error_count": AttributeMetadata( + brief="The number of failed native module calls in the flushed call aggregate. Only applies to React Native.", + type=AttributeType.INTEGER, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=2, + deprecation=DeprecationInfo( + replacement="turbo_module.error.count", + reason="Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + status=DeprecationStatus.BACKFILL, + ), + aliases=["turbo_module.error.count", "turbo_module.total_error_count"], + changelog=[ + ChangelogEntry( + version="next", + description="Added turbo_modules.total_error_count and deprecated it in favor of turbo_module.error.count", + ), + ], + ), + "turbo_modules.unique_methods": AttributeMetadata( + brief="The number of distinct native module and method pairs in the flushed call aggregate. Only applies to React Native.", + type=AttributeType.INTEGER, + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=7, + deprecation=DeprecationInfo( + replacement="turbo_module.call.distinct_count", + reason="Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + status=DeprecationStatus.BACKFILL, + ), + aliases=["turbo_module.call.distinct_count", "turbo_module.unique_methods"], + changelog=[ + ChangelogEntry( + version="next", + description="Added turbo_modules.unique_methods and deprecated it in favor of turbo_module.call.distinct_count", + ), + ], + ), "type": AttributeMetadata( brief="More granular type of the operation happening.", type=AttributeType.STRING, @@ -22694,6 +23359,27 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "trpc.procedure_type": str, "ttfb.requestTime": float, "ttfb": float, + "turbo_module.arch": str, + "turbo_module.call.count": int, + "turbo_module.call.distinct_count": int, + "turbo_module.duration.max": float, + "turbo_module.duration.total": float, + "turbo_module.error.count": int, + "turbo_module.kind": str, + "turbo_module.method": str, + "turbo_module.name": str, + "turbo_module.top.duration": float, + "turbo_module.top.name": str, + "turbo_module.top_module": str, + "turbo_module.top_module_duration_ms": float, + "turbo_module.total_call_count": int, + "turbo_module.total_duration_ms": float, + "turbo_module.total_error_count": int, + "turbo_module.unique_methods": int, + "turbo_modules.total_call_count": int, + "turbo_modules.total_duration_ms": float, + "turbo_modules.total_error_count": int, + "turbo_modules.unique_methods": int, "type": str, "ui.component_name": str, "ui.contributes_to_ttfd": bool, diff --git a/rust/src/op.rs b/rust/src/op.rs index df7201e4e..df0446021 100644 --- a/rust/src/op.rs +++ b/rust/src/op.rs @@ -275,6 +275,9 @@ pub const MOBILE_SERIALIZE_SPAN_OP: &str = "serialize"; pub const MOBILE_HTTP_SPAN_OP: &str = "http"; +/// A call from JavaScript into a React Native native module, or an aggregate of such calls. +pub const MOBILE_TURBO_MODULE_SPAN_OP: &str = "turbo_module"; + // Path: model/op/object.json // Name: object From b5bee63c70b48bd4be8247f526876014a41525b0 Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Tue, 22 Sep 2026 11:18:32 +0200 Subject: [PATCH 2/3] feat(attributes): Address review feedback on TurboModule attributes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Record `prs: [564]` on every changelog entry now that the PR number is known. * Switch from the legacy `example` field to `examples`, which CONTRIBUTING now prefers for new attributes, and normalise field order to match `create:attribute` output. `turbo_module.arch` and `turbo_module.kind` list both of their enumerated values. * Drop the "native module and method names" scrubbing reason from `turbo_module.arch` and `turbo_module.kind` — both are closed enums that carry no app-defined names — and add it to `turbo_module.top_module`, which holds the same value as `turbo_module.top.name`. --- .../sentry-conventions/src/attributes.ts | 69 ++++++++++---- .../turbo_module/turbo_module__arch.json | 6 +- .../turbo_module__call__count.json | 5 +- .../turbo_module__call__distinct_count.json | 5 +- .../turbo_module__duration__max.json | 3 +- .../turbo_module__duration__total.json | 5 +- .../turbo_module__error__count.json | 5 +- .../turbo_module/turbo_module__kind.json | 6 +- .../turbo_module/turbo_module__method.json | 3 +- .../turbo_module/turbo_module__name.json | 3 +- .../turbo_module__top__duration.json | 5 +- .../turbo_module/turbo_module__top__name.json | 5 +- .../turbo_module__top_module.json | 8 +- .../turbo_module__top_module_duration_ms.json | 5 +- .../turbo_module__total_call_count.json | 5 +- .../turbo_module__total_duration_ms.json | 5 +- .../turbo_module__total_error_count.json | 5 +- .../turbo_module__unique_methods.json | 5 +- .../turbo_modules__total_call_count.json | 5 +- .../turbo_modules__total_duration_ms.json | 5 +- .../turbo_modules__total_error_count.json | 5 +- .../turbo_modules__unique_methods.json | 5 +- python/src/sentry_conventions/attributes.py | 94 ++++++++++++++----- 23 files changed, 184 insertions(+), 83 deletions(-) diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 64cafa007..70e5a7685 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -17228,12 +17228,13 @@ export type TURBO_MODULES_UNIQUE_METHODS_TYPE = number; * * Attribute Value Type: `string` {@link TURBO_MODULE_ARCH_TYPE} * - * Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + * Apply Scrubbing: manual * * Attribute defined in OTEL: No * Visibility: public * * @example "new" + * @example "legacy" */ export const TURBO_MODULE_ARCH = 'turbo_module.arch'; @@ -17362,11 +17363,12 @@ export type TURBO_MODULE_ERROR_COUNT_TYPE = number; * * Attribute Value Type: `string` {@link TURBO_MODULE_KIND_TYPE} * - * Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + * Apply Scrubbing: manual * * Attribute defined in OTEL: No * Visibility: public * + * @example "sync" * @example "async" */ export const TURBO_MODULE_KIND = 'turbo_module.kind'; @@ -17448,7 +17450,7 @@ export type TURBO_MODULE_TOP_DURATION_TYPE = number; * * Attribute Value Type: `string` {@link TURBO_MODULE_TOP_MODULE_TYPE} * - * Apply Scrubbing: manual + * Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable * * Attribute defined in OTEL: No * Visibility: public @@ -33330,6 +33332,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 42, + examples: [42], deprecation: { replacement: 'turbo_module.call.count', reason: @@ -33340,6 +33343,7 @@ export const ATTRIBUTE_METADATA: Record = { changelog: [ { version: 'next', + prs: [564], description: 'Added turbo_modules.total_call_count and deprecated it in favor of turbo_module.call.count', }, ], @@ -33355,6 +33359,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 128.45, + examples: [128.45], deprecation: { replacement: 'turbo_module.duration.total', reason: @@ -33365,6 +33370,7 @@ export const ATTRIBUTE_METADATA: Record = { changelog: [ { version: 'next', + prs: [564], description: 'Added turbo_modules.total_duration_ms and deprecated it in favor of turbo_module.duration.total', }, ], @@ -33379,6 +33385,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 2, + examples: [2], deprecation: { replacement: 'turbo_module.error.count', reason: @@ -33389,6 +33396,7 @@ export const ATTRIBUTE_METADATA: Record = { changelog: [ { version: 'next', + prs: [564], description: 'Added turbo_modules.total_error_count and deprecated it in favor of turbo_module.error.count', }, ], @@ -33404,6 +33412,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 7, + examples: [7], deprecation: { replacement: 'turbo_module.call.distinct_count', reason: @@ -33414,6 +33423,7 @@ export const ATTRIBUTE_METADATA: Record = { changelog: [ { version: 'next', + prs: [564], description: 'Added turbo_modules.unique_methods and deprecated it in favor of turbo_module.call.distinct_count', }, @@ -33426,13 +33436,12 @@ export const ATTRIBUTE_METADATA: Record = { keys: ['turbo_module.arch'], applyScrubbing: { key: 'manual', - reason: - 'Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable', }, isInOtel: false, visibility: 'public', example: 'new', - changelog: [{ version: 'next', description: 'Added turbo_module.arch attribute' }], + examples: ['new', 'legacy'], + changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.arch attribute' }], }, 'turbo_module.call.count': { brief: 'The number of native module calls observed during the lifetime of the span. Only applies to React Native.', @@ -33444,8 +33453,9 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 42, + examples: [42], aliases: ['turbo_module.total_call_count', 'turbo_modules.total_call_count'], - changelog: [{ version: 'next', description: 'Added turbo_module.call.count attribute' }], + changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.call.count attribute' }], }, 'turbo_module.call.distinct_count': { brief: @@ -33458,8 +33468,9 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 7, + examples: [7], aliases: ['turbo_module.unique_methods', 'turbo_modules.unique_methods'], - changelog: [{ version: 'next', description: 'Added turbo_module.call.distinct_count attribute' }], + changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.call.distinct_count attribute' }], }, 'turbo_module.duration.max': { brief: @@ -33472,7 +33483,8 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 512.5, - changelog: [{ version: 'next', description: 'Added turbo_module.duration.max attribute' }], + examples: [512.5], + changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.duration.max attribute' }], }, 'turbo_module.duration.total': { brief: @@ -33485,8 +33497,9 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 128.45, + examples: [128.45], aliases: ['turbo_module.total_duration_ms', 'turbo_modules.total_duration_ms'], - changelog: [{ version: 'next', description: 'Added turbo_module.duration.total attribute' }], + changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.duration.total attribute' }], }, 'turbo_module.error.count': { brief: @@ -33499,8 +33512,9 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 2, + examples: [2], aliases: ['turbo_module.total_error_count', 'turbo_modules.total_error_count'], - changelog: [{ version: 'next', description: 'Added turbo_module.error.count attribute' }], + changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.error.count attribute' }], }, 'turbo_module.kind': { brief: @@ -33509,13 +33523,12 @@ export const ATTRIBUTE_METADATA: Record = { keys: ['turbo_module.kind'], applyScrubbing: { key: 'manual', - reason: - 'Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable', }, isInOtel: false, visibility: 'public', - example: 'async', - changelog: [{ version: 'next', description: 'Added turbo_module.kind attribute' }], + example: 'sync', + examples: ['sync', 'async'], + changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.kind attribute' }], }, 'turbo_module.method': { brief: 'The name of the native module method that was called. Only applies to React Native.', @@ -33529,7 +33542,8 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 'getUniqueId', - changelog: [{ version: 'next', description: 'Added turbo_module.method attribute' }], + examples: ['getUniqueId'], + changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.method attribute' }], }, 'turbo_module.name': { brief: @@ -33544,7 +33558,8 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 'RNDeviceInfo', - changelog: [{ version: 'next', description: 'Added turbo_module.name attribute' }], + examples: ['RNDeviceInfo'], + changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.name attribute' }], }, 'turbo_module.top.duration': { brief: 'The total duration attributed to `turbo_module.top.name`, in milliseconds. Only applies to React Native.', @@ -33556,8 +33571,9 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 87.25, + examples: [87.25], aliases: ['turbo_module.top_module_duration_ms'], - changelog: [{ version: 'next', description: 'Added turbo_module.top.duration attribute' }], + changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.top.duration attribute' }], }, 'turbo_module.top_module': { brief: @@ -33566,10 +33582,13 @@ export const ATTRIBUTE_METADATA: Record = { keys: ['turbo_module.top.name', 'turbo_module.top_module'], applyScrubbing: { key: 'manual', + reason: + 'Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable', }, isInOtel: false, visibility: 'public', example: 'RNDeviceInfo.getUniqueId', + examples: ['RNDeviceInfo.getUniqueId'], deprecation: { replacement: 'turbo_module.top.name', reason: @@ -33580,6 +33599,7 @@ export const ATTRIBUTE_METADATA: Record = { changelog: [ { version: 'next', + prs: [564], description: 'Added turbo_module.top_module and deprecated it in favor of turbo_module.top.name', }, ], @@ -33595,6 +33615,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 87.25, + examples: [87.25], deprecation: { replacement: 'turbo_module.top.duration', reason: @@ -33605,6 +33626,7 @@ export const ATTRIBUTE_METADATA: Record = { changelog: [ { version: 'next', + prs: [564], description: 'Added turbo_module.top_module_duration_ms and deprecated it in favor of turbo_module.top.duration', }, @@ -33623,8 +33645,9 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 'RNDeviceInfo.getUniqueId', + examples: ['RNDeviceInfo.getUniqueId'], aliases: ['turbo_module.top_module'], - changelog: [{ version: 'next', description: 'Added turbo_module.top.name attribute' }], + changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.top.name attribute' }], }, 'turbo_module.total_call_count': { brief: 'The number of native module calls observed during the lifetime of the span. Only applies to React Native.', @@ -33636,6 +33659,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 42, + examples: [42], deprecation: { replacement: 'turbo_module.call.count', reason: @@ -33646,6 +33670,7 @@ export const ATTRIBUTE_METADATA: Record = { changelog: [ { version: 'next', + prs: [564], description: 'Added turbo_module.total_call_count and deprecated it in favor of turbo_module.call.count', }, ], @@ -33661,6 +33686,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 128.45, + examples: [128.45], deprecation: { replacement: 'turbo_module.duration.total', reason: @@ -33671,6 +33697,7 @@ export const ATTRIBUTE_METADATA: Record = { changelog: [ { version: 'next', + prs: [564], description: 'Added turbo_module.total_duration_ms and deprecated it in favor of turbo_module.duration.total', }, ], @@ -33686,6 +33713,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 2, + examples: [2], deprecation: { replacement: 'turbo_module.error.count', reason: @@ -33696,6 +33724,7 @@ export const ATTRIBUTE_METADATA: Record = { changelog: [ { version: 'next', + prs: [564], description: 'Added turbo_module.total_error_count and deprecated it in favor of turbo_module.error.count', }, ], @@ -33711,6 +33740,7 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, visibility: 'public', example: 7, + examples: [7], deprecation: { replacement: 'turbo_module.call.distinct_count', reason: @@ -33721,6 +33751,7 @@ export const ATTRIBUTE_METADATA: Record = { changelog: [ { version: 'next', + prs: [564], description: 'Added turbo_module.unique_methods and deprecated it in favor of turbo_module.call.distinct_count', }, ], diff --git a/model/attributes/turbo_module/turbo_module__arch.json b/model/attributes/turbo_module/turbo_module__arch.json index 802fac8d3..2cec25f6f 100644 --- a/model/attributes/turbo_module/turbo_module__arch.json +++ b/model/attributes/turbo_module/turbo_module__arch.json @@ -3,15 +3,15 @@ "brief": "The React Native architecture the call was observed on. `new` for a TurboModule resolved through `TurboModuleRegistry`, `legacy` for a module reached over the Old Architecture bridge. Only applies to React Native.", "type": "string", "apply_scrubbing": { - "key": "manual", - "reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable" + "key": "manual" }, "is_in_otel": false, - "example": "new", "visibility": "public", + "examples": ["new", "legacy"], "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.arch attribute" } ] diff --git a/model/attributes/turbo_module/turbo_module__call__count.json b/model/attributes/turbo_module/turbo_module__call__count.json index 456c95184..bad7ec50a 100644 --- a/model/attributes/turbo_module/turbo_module__call__count.json +++ b/model/attributes/turbo_module/turbo_module__call__count.json @@ -6,12 +6,13 @@ "key": "manual" }, "is_in_otel": false, - "example": 42, - "alias": ["turbo_module.total_call_count", "turbo_modules.total_call_count"], "visibility": "public", + "examples": [42], + "alias": ["turbo_module.total_call_count", "turbo_modules.total_call_count"], "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.call.count attribute" } ] diff --git a/model/attributes/turbo_module/turbo_module__call__distinct_count.json b/model/attributes/turbo_module/turbo_module__call__distinct_count.json index 5054508bf..5a7ce5cf9 100644 --- a/model/attributes/turbo_module/turbo_module__call__distinct_count.json +++ b/model/attributes/turbo_module/turbo_module__call__distinct_count.json @@ -6,12 +6,13 @@ "key": "manual" }, "is_in_otel": false, - "example": 7, - "alias": ["turbo_module.unique_methods", "turbo_modules.unique_methods"], "visibility": "public", + "examples": [7], + "alias": ["turbo_module.unique_methods", "turbo_modules.unique_methods"], "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.call.distinct_count attribute" } ] diff --git a/model/attributes/turbo_module/turbo_module__duration__max.json b/model/attributes/turbo_module/turbo_module__duration__max.json index 3a89b8daf..4d3b5ee8d 100644 --- a/model/attributes/turbo_module/turbo_module__duration__max.json +++ b/model/attributes/turbo_module/turbo_module__duration__max.json @@ -6,11 +6,12 @@ "key": "manual" }, "is_in_otel": false, - "example": 512.5, "visibility": "public", + "examples": [512.5], "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.duration.max attribute" } ] diff --git a/model/attributes/turbo_module/turbo_module__duration__total.json b/model/attributes/turbo_module/turbo_module__duration__total.json index ff1ee6a68..e4e07e0db 100644 --- a/model/attributes/turbo_module/turbo_module__duration__total.json +++ b/model/attributes/turbo_module/turbo_module__duration__total.json @@ -6,12 +6,13 @@ "key": "manual" }, "is_in_otel": false, - "example": 128.45, - "alias": ["turbo_module.total_duration_ms", "turbo_modules.total_duration_ms"], "visibility": "public", + "examples": [128.45], + "alias": ["turbo_module.total_duration_ms", "turbo_modules.total_duration_ms"], "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.duration.total attribute" } ] diff --git a/model/attributes/turbo_module/turbo_module__error__count.json b/model/attributes/turbo_module/turbo_module__error__count.json index 079a86eab..ce8317bea 100644 --- a/model/attributes/turbo_module/turbo_module__error__count.json +++ b/model/attributes/turbo_module/turbo_module__error__count.json @@ -6,12 +6,13 @@ "key": "manual" }, "is_in_otel": false, - "example": 2, - "alias": ["turbo_module.total_error_count", "turbo_modules.total_error_count"], "visibility": "public", + "examples": [2], + "alias": ["turbo_module.total_error_count", "turbo_modules.total_error_count"], "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.error.count attribute" } ] diff --git a/model/attributes/turbo_module/turbo_module__kind.json b/model/attributes/turbo_module/turbo_module__kind.json index 52715b145..8db0635e9 100644 --- a/model/attributes/turbo_module/turbo_module__kind.json +++ b/model/attributes/turbo_module/turbo_module__kind.json @@ -3,15 +3,15 @@ "brief": "Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. Only applies to React Native.", "type": "string", "apply_scrubbing": { - "key": "manual", - "reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable" + "key": "manual" }, "is_in_otel": false, - "example": "async", "visibility": "public", + "examples": ["sync", "async"], "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.kind attribute" } ] diff --git a/model/attributes/turbo_module/turbo_module__method.json b/model/attributes/turbo_module/turbo_module__method.json index 2de7c5391..a8d2e3e17 100644 --- a/model/attributes/turbo_module/turbo_module__method.json +++ b/model/attributes/turbo_module/turbo_module__method.json @@ -7,11 +7,12 @@ "reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable" }, "is_in_otel": false, - "example": "getUniqueId", "visibility": "public", + "examples": ["getUniqueId"], "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.method attribute" } ] diff --git a/model/attributes/turbo_module/turbo_module__name.json b/model/attributes/turbo_module/turbo_module__name.json index 407988ed8..713ee53d2 100644 --- a/model/attributes/turbo_module/turbo_module__name.json +++ b/model/attributes/turbo_module/turbo_module__name.json @@ -7,11 +7,12 @@ "reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable" }, "is_in_otel": false, - "example": "RNDeviceInfo", "visibility": "public", + "examples": ["RNDeviceInfo"], "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.name attribute" } ] diff --git a/model/attributes/turbo_module/turbo_module__top__duration.json b/model/attributes/turbo_module/turbo_module__top__duration.json index 8029824cb..fba11602e 100644 --- a/model/attributes/turbo_module/turbo_module__top__duration.json +++ b/model/attributes/turbo_module/turbo_module__top__duration.json @@ -6,12 +6,13 @@ "key": "manual" }, "is_in_otel": false, - "example": 87.25, - "alias": ["turbo_module.top_module_duration_ms"], "visibility": "public", + "examples": [87.25], + "alias": ["turbo_module.top_module_duration_ms"], "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.top.duration attribute" } ] diff --git a/model/attributes/turbo_module/turbo_module__top__name.json b/model/attributes/turbo_module/turbo_module__top__name.json index a131904e8..dd2282dc6 100644 --- a/model/attributes/turbo_module/turbo_module__top__name.json +++ b/model/attributes/turbo_module/turbo_module__top__name.json @@ -7,12 +7,13 @@ "reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable" }, "is_in_otel": false, - "example": "RNDeviceInfo.getUniqueId", - "alias": ["turbo_module.top_module"], "visibility": "public", + "examples": ["RNDeviceInfo.getUniqueId"], + "alias": ["turbo_module.top_module"], "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.top.name attribute" } ] diff --git a/model/attributes/turbo_module/turbo_module__top_module.json b/model/attributes/turbo_module/turbo_module__top_module.json index 2fd12328f..0582c8705 100644 --- a/model/attributes/turbo_module/turbo_module__top_module.json +++ b/model/attributes/turbo_module/turbo_module__top_module.json @@ -3,20 +3,22 @@ "brief": "The native module and method that accounted for the most total duration during the lifetime of the span. Only applies to React Native.", "type": "string", "apply_scrubbing": { - "key": "manual" + "key": "manual", + "reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable" }, "is_in_otel": false, - "example": "RNDeviceInfo.getUniqueId", + "visibility": "public", + "examples": ["RNDeviceInfo.getUniqueId"], "alias": ["turbo_module.top.name"], "deprecation": { "replacement": "turbo_module.top.name", "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", "_status": "backfill" }, - "visibility": "public", "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.top_module and deprecated it in favor of turbo_module.top.name" } ] diff --git a/model/attributes/turbo_module/turbo_module__top_module_duration_ms.json b/model/attributes/turbo_module/turbo_module__top_module_duration_ms.json index 49f185333..cd3b1e080 100644 --- a/model/attributes/turbo_module/turbo_module__top_module_duration_ms.json +++ b/model/attributes/turbo_module/turbo_module__top_module_duration_ms.json @@ -6,17 +6,18 @@ "key": "manual" }, "is_in_otel": false, - "example": 87.25, + "visibility": "public", + "examples": [87.25], "alias": ["turbo_module.top.duration"], "deprecation": { "replacement": "turbo_module.top.duration", "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", "_status": "backfill" }, - "visibility": "public", "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.top_module_duration_ms and deprecated it in favor of turbo_module.top.duration" } ] diff --git a/model/attributes/turbo_module/turbo_module__total_call_count.json b/model/attributes/turbo_module/turbo_module__total_call_count.json index 5446e9b44..bbd816920 100644 --- a/model/attributes/turbo_module/turbo_module__total_call_count.json +++ b/model/attributes/turbo_module/turbo_module__total_call_count.json @@ -6,17 +6,18 @@ "key": "manual" }, "is_in_otel": false, - "example": 42, + "visibility": "public", + "examples": [42], "alias": ["turbo_module.call.count", "turbo_modules.total_call_count"], "deprecation": { "replacement": "turbo_module.call.count", "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", "_status": "backfill" }, - "visibility": "public", "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.total_call_count and deprecated it in favor of turbo_module.call.count" } ] diff --git a/model/attributes/turbo_module/turbo_module__total_duration_ms.json b/model/attributes/turbo_module/turbo_module__total_duration_ms.json index f8818f187..73f0a168f 100644 --- a/model/attributes/turbo_module/turbo_module__total_duration_ms.json +++ b/model/attributes/turbo_module/turbo_module__total_duration_ms.json @@ -6,17 +6,18 @@ "key": "manual" }, "is_in_otel": false, - "example": 128.45, + "visibility": "public", + "examples": [128.45], "alias": ["turbo_module.duration.total", "turbo_modules.total_duration_ms"], "deprecation": { "replacement": "turbo_module.duration.total", "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", "_status": "backfill" }, - "visibility": "public", "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.total_duration_ms and deprecated it in favor of turbo_module.duration.total" } ] diff --git a/model/attributes/turbo_module/turbo_module__total_error_count.json b/model/attributes/turbo_module/turbo_module__total_error_count.json index 1b3dfe4e5..a73f52b12 100644 --- a/model/attributes/turbo_module/turbo_module__total_error_count.json +++ b/model/attributes/turbo_module/turbo_module__total_error_count.json @@ -6,17 +6,18 @@ "key": "manual" }, "is_in_otel": false, - "example": 2, + "visibility": "public", + "examples": [2], "alias": ["turbo_module.error.count", "turbo_modules.total_error_count"], "deprecation": { "replacement": "turbo_module.error.count", "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", "_status": "backfill" }, - "visibility": "public", "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.total_error_count and deprecated it in favor of turbo_module.error.count" } ] diff --git a/model/attributes/turbo_module/turbo_module__unique_methods.json b/model/attributes/turbo_module/turbo_module__unique_methods.json index 7a50115c9..b6af589a9 100644 --- a/model/attributes/turbo_module/turbo_module__unique_methods.json +++ b/model/attributes/turbo_module/turbo_module__unique_methods.json @@ -6,17 +6,18 @@ "key": "manual" }, "is_in_otel": false, - "example": 7, + "visibility": "public", + "examples": [7], "alias": ["turbo_module.call.distinct_count", "turbo_modules.unique_methods"], "deprecation": { "replacement": "turbo_module.call.distinct_count", "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", "_status": "backfill" }, - "visibility": "public", "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_module.unique_methods and deprecated it in favor of turbo_module.call.distinct_count" } ] diff --git a/model/attributes/turbo_modules/turbo_modules__total_call_count.json b/model/attributes/turbo_modules/turbo_modules__total_call_count.json index 0f30fd882..22b30fab5 100644 --- a/model/attributes/turbo_modules/turbo_modules__total_call_count.json +++ b/model/attributes/turbo_modules/turbo_modules__total_call_count.json @@ -6,17 +6,18 @@ "key": "manual" }, "is_in_otel": false, - "example": 42, + "visibility": "public", + "examples": [42], "alias": ["turbo_module.call.count", "turbo_module.total_call_count"], "deprecation": { "replacement": "turbo_module.call.count", "reason": "Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", "_status": "backfill" }, - "visibility": "public", "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_modules.total_call_count and deprecated it in favor of turbo_module.call.count" } ] diff --git a/model/attributes/turbo_modules/turbo_modules__total_duration_ms.json b/model/attributes/turbo_modules/turbo_modules__total_duration_ms.json index 9198d9896..d47db763f 100644 --- a/model/attributes/turbo_modules/turbo_modules__total_duration_ms.json +++ b/model/attributes/turbo_modules/turbo_modules__total_duration_ms.json @@ -6,17 +6,18 @@ "key": "manual" }, "is_in_otel": false, - "example": 128.45, + "visibility": "public", + "examples": [128.45], "alias": ["turbo_module.duration.total", "turbo_module.total_duration_ms"], "deprecation": { "replacement": "turbo_module.duration.total", "reason": "Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", "_status": "backfill" }, - "visibility": "public", "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_modules.total_duration_ms and deprecated it in favor of turbo_module.duration.total" } ] diff --git a/model/attributes/turbo_modules/turbo_modules__total_error_count.json b/model/attributes/turbo_modules/turbo_modules__total_error_count.json index f32c3ab26..b118751d1 100644 --- a/model/attributes/turbo_modules/turbo_modules__total_error_count.json +++ b/model/attributes/turbo_modules/turbo_modules__total_error_count.json @@ -6,17 +6,18 @@ "key": "manual" }, "is_in_otel": false, - "example": 2, + "visibility": "public", + "examples": [2], "alias": ["turbo_module.error.count", "turbo_module.total_error_count"], "deprecation": { "replacement": "turbo_module.error.count", "reason": "Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", "_status": "backfill" }, - "visibility": "public", "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_modules.total_error_count and deprecated it in favor of turbo_module.error.count" } ] diff --git a/model/attributes/turbo_modules/turbo_modules__unique_methods.json b/model/attributes/turbo_modules/turbo_modules__unique_methods.json index 3e130f8a5..46d9dc610 100644 --- a/model/attributes/turbo_modules/turbo_modules__unique_methods.json +++ b/model/attributes/turbo_modules/turbo_modules__unique_methods.json @@ -6,17 +6,18 @@ "key": "manual" }, "is_in_otel": false, - "example": 7, + "visibility": "public", + "examples": [7], "alias": ["turbo_module.call.distinct_count", "turbo_module.unique_methods"], "deprecation": { "replacement": "turbo_module.call.distinct_count", "reason": "Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", "_status": "backfill" }, - "visibility": "public", "changelog": [ { "version": "next", + "prs": [564], "description": "Added turbo_modules.unique_methods and deprecated it in favor of turbo_module.call.distinct_count" } ] diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 1edf86853..33f348868 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -10036,10 +10036,11 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """The React Native architecture the call was observed on. `new` for a TurboModule resolved through `TurboModuleRegistry`, `legacy` for a module reached over the Old Architecture bridge. Only applies to React Native. Type: str - Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + Apply Scrubbing: manual Defined in OTEL: No Visibility: public Example: "new" + Example: "legacy" """ # Path: model/attributes/turbo_module/turbo_module__call__count.json @@ -10116,9 +10117,10 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. Only applies to React Native. Type: str - Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + Apply Scrubbing: manual Defined in OTEL: No Visibility: public + Example: "sync" Example: "async" """ @@ -10177,7 +10179,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """The native module and method that accounted for the most total duration during the lifetime of the span. Only applies to React Native. Type: str - Apply Scrubbing: manual + Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable Defined in OTEL: No Visibility: public Aliases: turbo_module.top.name @@ -25640,16 +25642,16 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): brief="The React Native architecture the call was observed on. `new` for a TurboModule resolved through `TurboModuleRegistry`, `legacy` for a module reached over the Old Architecture bridge. Only applies to React Native.", type=AttributeType.STRING, keys=("turbo_module.arch",), - apply_scrubbing=ApplyScrubbingInfo( - key=ApplyScrubbing.MANUAL, - reason="Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable", - ), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), is_in_otel=False, visibility=Visibility.PUBLIC, example="new", + examples=["new", "legacy"], changelog=[ ChangelogEntry( - version="next", description="Added turbo_module.arch attribute" + version="next", + prs=[564], + description="Added turbo_module.arch attribute", ), ], ), @@ -25665,10 +25667,13 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=42, + examples=[42], aliases=["turbo_module.total_call_count", "turbo_modules.total_call_count"], changelog=[ ChangelogEntry( - version="next", description="Added turbo_module.call.count attribute" + version="next", + prs=[564], + description="Added turbo_module.call.count attribute", ), ], ), @@ -25684,10 +25689,12 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=7, + examples=[7], aliases=["turbo_module.unique_methods", "turbo_modules.unique_methods"], changelog=[ ChangelogEntry( version="next", + prs=[564], description="Added turbo_module.call.distinct_count attribute", ), ], @@ -25700,9 +25707,12 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=512.5, + examples=[512.5], changelog=[ ChangelogEntry( - version="next", description="Added turbo_module.duration.max attribute" + version="next", + prs=[564], + description="Added turbo_module.duration.max attribute", ), ], ), @@ -25718,10 +25728,12 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=128.45, + examples=[128.45], aliases=["turbo_module.total_duration_ms", "turbo_modules.total_duration_ms"], changelog=[ ChangelogEntry( version="next", + prs=[564], description="Added turbo_module.duration.total attribute", ), ], @@ -25738,10 +25750,13 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=2, + examples=[2], aliases=["turbo_module.total_error_count", "turbo_modules.total_error_count"], changelog=[ ChangelogEntry( - version="next", description="Added turbo_module.error.count attribute" + version="next", + prs=[564], + description="Added turbo_module.error.count attribute", ), ], ), @@ -25749,16 +25764,16 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): brief="Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. Only applies to React Native.", type=AttributeType.STRING, keys=("turbo_module.kind",), - apply_scrubbing=ApplyScrubbingInfo( - key=ApplyScrubbing.MANUAL, - reason="Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable", - ), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), is_in_otel=False, visibility=Visibility.PUBLIC, - example="async", + example="sync", + examples=["sync", "async"], changelog=[ ChangelogEntry( - version="next", description="Added turbo_module.kind attribute" + version="next", + prs=[564], + description="Added turbo_module.kind attribute", ), ], ), @@ -25773,9 +25788,12 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example="getUniqueId", + examples=["getUniqueId"], changelog=[ ChangelogEntry( - version="next", description="Added turbo_module.method attribute" + version="next", + prs=[564], + description="Added turbo_module.method attribute", ), ], ), @@ -25790,9 +25808,12 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example="RNDeviceInfo", + examples=["RNDeviceInfo"], changelog=[ ChangelogEntry( - version="next", description="Added turbo_module.name attribute" + version="next", + prs=[564], + description="Added turbo_module.name attribute", ), ], ), @@ -25807,10 +25828,13 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=87.25, + examples=[87.25], aliases=["turbo_module.top_module_duration_ms"], changelog=[ ChangelogEntry( - version="next", description="Added turbo_module.top.duration attribute" + version="next", + prs=[564], + description="Added turbo_module.top.duration attribute", ), ], ), @@ -25828,10 +25852,13 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example="RNDeviceInfo.getUniqueId", + examples=["RNDeviceInfo.getUniqueId"], aliases=["turbo_module.top_module"], changelog=[ ChangelogEntry( - version="next", description="Added turbo_module.top.name attribute" + version="next", + prs=[564], + description="Added turbo_module.top.name attribute", ), ], ), @@ -25842,10 +25869,14 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "turbo_module.top.name", "turbo_module.top_module", ), - apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + apply_scrubbing=ApplyScrubbingInfo( + key=ApplyScrubbing.MANUAL, + reason="Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable", + ), is_in_otel=False, visibility=Visibility.PUBLIC, example="RNDeviceInfo.getUniqueId", + examples=["RNDeviceInfo.getUniqueId"], deprecation=DeprecationInfo( replacement="turbo_module.top.name", reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", @@ -25855,6 +25886,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): changelog=[ ChangelogEntry( version="next", + prs=[564], description="Added turbo_module.top_module and deprecated it in favor of turbo_module.top.name", ), ], @@ -25870,6 +25902,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=87.25, + examples=[87.25], deprecation=DeprecationInfo( replacement="turbo_module.top.duration", reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", @@ -25879,6 +25912,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): changelog=[ ChangelogEntry( version="next", + prs=[564], description="Added turbo_module.top_module_duration_ms and deprecated it in favor of turbo_module.top.duration", ), ], @@ -25895,6 +25929,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=42, + examples=[42], deprecation=DeprecationInfo( replacement="turbo_module.call.count", reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", @@ -25904,6 +25939,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): changelog=[ ChangelogEntry( version="next", + prs=[564], description="Added turbo_module.total_call_count and deprecated it in favor of turbo_module.call.count", ), ], @@ -25920,6 +25956,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=128.45, + examples=[128.45], deprecation=DeprecationInfo( replacement="turbo_module.duration.total", reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", @@ -25929,6 +25966,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): changelog=[ ChangelogEntry( version="next", + prs=[564], description="Added turbo_module.total_duration_ms and deprecated it in favor of turbo_module.duration.total", ), ], @@ -25945,6 +25983,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=2, + examples=[2], deprecation=DeprecationInfo( replacement="turbo_module.error.count", reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", @@ -25954,6 +25993,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): changelog=[ ChangelogEntry( version="next", + prs=[564], description="Added turbo_module.total_error_count and deprecated it in favor of turbo_module.error.count", ), ], @@ -25970,6 +26010,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=7, + examples=[7], deprecation=DeprecationInfo( replacement="turbo_module.call.distinct_count", reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", @@ -25979,6 +26020,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): changelog=[ ChangelogEntry( version="next", + prs=[564], description="Added turbo_module.unique_methods and deprecated it in favor of turbo_module.call.distinct_count", ), ], @@ -25995,6 +26037,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=42, + examples=[42], deprecation=DeprecationInfo( replacement="turbo_module.call.count", reason="Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", @@ -26004,6 +26047,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): changelog=[ ChangelogEntry( version="next", + prs=[564], description="Added turbo_modules.total_call_count and deprecated it in favor of turbo_module.call.count", ), ], @@ -26020,6 +26064,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=128.45, + examples=[128.45], deprecation=DeprecationInfo( replacement="turbo_module.duration.total", reason="Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", @@ -26029,6 +26074,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): changelog=[ ChangelogEntry( version="next", + prs=[564], description="Added turbo_modules.total_duration_ms and deprecated it in favor of turbo_module.duration.total", ), ], @@ -26045,6 +26091,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=2, + examples=[2], deprecation=DeprecationInfo( replacement="turbo_module.error.count", reason="Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", @@ -26054,6 +26101,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): changelog=[ ChangelogEntry( version="next", + prs=[564], description="Added turbo_modules.total_error_count and deprecated it in favor of turbo_module.error.count", ), ], @@ -26070,6 +26118,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, visibility=Visibility.PUBLIC, example=7, + examples=[7], deprecation=DeprecationInfo( replacement="turbo_module.call.distinct_count", reason="Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", @@ -26079,6 +26128,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): changelog=[ ChangelogEntry( version="next", + prs=[564], description="Added turbo_modules.unique_methods and deprecated it in favor of turbo_module.call.distinct_count", ), ], From 142c9afea2250b1debb6291b0f65ca26a136f620 Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Tue, 22 Sep 2026 13:50:00 +0200 Subject: [PATCH 3/3] feat(attributes): Move TurboModule attributes to the react_native namespace `turbo_module` named a React Native implementation detail, and it was already inaccurate within this PR: `turbo_module.arch: legacy` describes calls reached over the Old Architecture bridge, which are not TurboModules. Move the canonical attributes to `react_native.module.*`, with the architecture as `react_native.architecture` since it describes the runtime rather than an individual call. `turbo_module.name`, `.method` and `.arch` are shipped, so they now become deprecations too, with `_status: "backfill"` and symmetric aliases. Deprecations go from 10 to 13. Doing this in the next major instead would mean deprecating all 11 canonical keys, so this is the cheapest point to rename: nothing is merged and the SDK-side rename is already gated on this PR. The `turbo_module` span operation is left as-is; span operations have no alias or deprecation mechanism. Co-Authored-By: Claude Opus 5 (1M context) --- .../sentry-conventions/src/attributes.ts | 999 +++++++++++------- javascript/sentry-conventions/src/search.ts | 360 ++++--- .../react_native__architecture.json | 19 + .../react_native__module__call__count.json} | 6 +- ...native__module__call__distinct_count.json} | 6 +- .../react_native__module__duration__max.json} | 6 +- ...eact_native__module__duration__total.json} | 6 +- .../react_native__module__error__count.json} | 6 +- .../react_native__module__kind.json} | 6 +- .../react_native__module__method.json | 20 + .../react_native__module__name.json | 20 + .../react_native__module__top__duration.json} | 6 +- .../react_native__module__top__name.json} | 6 +- .../turbo_module/turbo_module__arch.json | 8 +- .../turbo_module/turbo_module__method.json | 8 +- .../turbo_module/turbo_module__name.json | 8 +- .../turbo_module__top_module.json | 8 +- .../turbo_module__top_module_duration_ms.json | 8 +- .../turbo_module__total_call_count.json | 8 +- .../turbo_module__total_duration_ms.json | 8 +- .../turbo_module__total_error_count.json | 8 +- .../turbo_module__unique_methods.json | 8 +- .../turbo_modules__total_call_count.json | 8 +- .../turbo_modules__total_duration_ms.json | 8 +- .../turbo_modules__total_error_count.json | 8 +- .../turbo_modules__unique_methods.json | 8 +- python/src/sentry_conventions/attributes.py | 979 ++++++++++------- 27 files changed, 1522 insertions(+), 1027 deletions(-) create mode 100644 model/attributes/react_native/react_native__architecture.json rename model/attributes/{turbo_module/turbo_module__call__count.json => react_native/react_native__module__call__count.json} (70%) rename model/attributes/{turbo_module/turbo_module__call__distinct_count.json => react_native/react_native__module__call__distinct_count.json} (67%) rename model/attributes/{turbo_module/turbo_module__duration__max.json => react_native/react_native__module__duration__max.json} (59%) rename model/attributes/{turbo_module/turbo_module__duration__total.json => react_native/react_native__module__duration__total.json} (68%) rename model/attributes/{turbo_module/turbo_module__error__count.json => react_native/react_native__module__error__count.json} (65%) rename model/attributes/{turbo_module/turbo_module__kind.json => react_native/react_native__module__kind.json} (71%) create mode 100644 model/attributes/react_native/react_native__module__method.json create mode 100644 model/attributes/react_native/react_native__module__name.json rename model/attributes/{turbo_module/turbo_module__top__duration.json => react_native/react_native__module__top__duration.json} (55%) rename model/attributes/{turbo_module/turbo_module__top__name.json => react_native/react_native__module__top__name.json} (78%) diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 70e5a7685..ffc1fa92d 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -14000,6 +14000,257 @@ export const QUERY_KEY_BASE = 'query'; */ export type QUERY_KEY_TYPE = string; +// Path: model/attributes/react_native/react_native__architecture.json + +/** + * The React Native architecture the app is running on. `new` for the New Architecture, where native modules are resolved as TurboModules through `TurboModuleRegistry`, `legacy` for the Old Architecture bridge. `react_native.architecture` + * + * Attribute Value Type: `string` {@link REACT_NATIVE_ARCHITECTURE_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_ARCH} `turbo_module.arch` + * + * @example "new" + * @example "legacy" + */ +export const REACT_NATIVE_ARCHITECTURE = 'react_native.architecture'; + +/** + * Type for {@link REACT_NATIVE_ARCHITECTURE} react_native.architecture + */ +export type REACT_NATIVE_ARCHITECTURE_TYPE = string; + +// Path: model/attributes/react_native/react_native__module__call__count.json + +/** + * The number of native module calls observed during the lifetime of the span. `react_native.module.call.count` + * + * Attribute Value Type: `number` {@link REACT_NATIVE_MODULE_CALL_COUNT_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_TOTAL_CALL_COUNT} `turbo_module.total_call_count`, {@link TURBO_MODULES_TOTAL_CALL_COUNT} `turbo_modules.total_call_count` + * + * @example 42 + */ +export const REACT_NATIVE_MODULE_CALL_COUNT = 'react_native.module.call.count'; + +/** + * Type for {@link REACT_NATIVE_MODULE_CALL_COUNT} react_native.module.call.count + */ +export type REACT_NATIVE_MODULE_CALL_COUNT_TYPE = number; + +// Path: model/attributes/react_native/react_native__module__call__distinct_count.json + +/** + * The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated. `react_native.module.call.distinct_count` + * + * Attribute Value Type: `number` {@link REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_UNIQUE_METHODS} `turbo_module.unique_methods`, {@link TURBO_MODULES_UNIQUE_METHODS} `turbo_modules.unique_methods` + * + * @example 7 + */ +export const REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT = 'react_native.module.call.distinct_count'; + +/** + * Type for {@link REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT} react_native.module.call.distinct_count + */ +export type REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT_TYPE = number; + +// Path: model/attributes/react_native/react_native__module__duration__max.json + +/** + * The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds. `react_native.module.duration.max` + * + * Attribute Value Type: `number` {@link REACT_NATIVE_MODULE_DURATION_MAX_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * @example 512.5 + */ +export const REACT_NATIVE_MODULE_DURATION_MAX = 'react_native.module.duration.max'; + +/** + * Type for {@link REACT_NATIVE_MODULE_DURATION_MAX} react_native.module.duration.max + */ +export type REACT_NATIVE_MODULE_DURATION_MAX_TYPE = number; + +// Path: model/attributes/react_native/react_native__module__duration__total.json + +/** + * The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration. `react_native.module.duration.total` + * + * Attribute Value Type: `number` {@link REACT_NATIVE_MODULE_DURATION_TOTAL_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_TOTAL_DURATION_MS} `turbo_module.total_duration_ms`, {@link TURBO_MODULES_TOTAL_DURATION_MS} `turbo_modules.total_duration_ms` + * + * @example 128.45 + */ +export const REACT_NATIVE_MODULE_DURATION_TOTAL = 'react_native.module.duration.total'; + +/** + * Type for {@link REACT_NATIVE_MODULE_DURATION_TOTAL} react_native.module.duration.total + */ +export type REACT_NATIVE_MODULE_DURATION_TOTAL_TYPE = number; + +// Path: model/attributes/react_native/react_native__module__error__count.json + +/** + * The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback. `react_native.module.error.count` + * + * Attribute Value Type: `number` {@link REACT_NATIVE_MODULE_ERROR_COUNT_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_TOTAL_ERROR_COUNT} `turbo_module.total_error_count`, {@link TURBO_MODULES_TOTAL_ERROR_COUNT} `turbo_modules.total_error_count` + * + * @example 2 + */ +export const REACT_NATIVE_MODULE_ERROR_COUNT = 'react_native.module.error.count'; + +/** + * Type for {@link REACT_NATIVE_MODULE_ERROR_COUNT} react_native.module.error.count + */ +export type REACT_NATIVE_MODULE_ERROR_COUNT_TYPE = number; + +// Path: model/attributes/react_native/react_native__module__kind.json + +/** + * Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. `react_native.module.kind` + * + * Attribute Value Type: `string` {@link REACT_NATIVE_MODULE_KIND_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * @example "sync" + * @example "async" + */ +export const REACT_NATIVE_MODULE_KIND = 'react_native.module.kind'; + +/** + * Type for {@link REACT_NATIVE_MODULE_KIND} react_native.module.kind + */ +export type REACT_NATIVE_MODULE_KIND_TYPE = string; + +// Path: model/attributes/react_native/react_native__module__method.json + +/** + * The name of the native module method that was called. `react_native.module.method` + * + * Attribute Value Type: `string` {@link REACT_NATIVE_MODULE_METHOD_TYPE} + * + * Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_METHOD} `turbo_module.method` + * + * @example "getUniqueId" + */ +export const REACT_NATIVE_MODULE_METHOD = 'react_native.module.method'; + +/** + * Type for {@link REACT_NATIVE_MODULE_METHOD} react_native.module.method + */ +export type REACT_NATIVE_MODULE_METHOD_TYPE = string; + +// Path: model/attributes/react_native/react_native__module__name.json + +/** + * The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key. `react_native.module.name` + * + * Attribute Value Type: `string` {@link REACT_NATIVE_MODULE_NAME_TYPE} + * + * Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_NAME} `turbo_module.name` + * + * @example "RNDeviceInfo" + */ +export const REACT_NATIVE_MODULE_NAME = 'react_native.module.name'; + +/** + * Type for {@link REACT_NATIVE_MODULE_NAME} react_native.module.name + */ +export type REACT_NATIVE_MODULE_NAME_TYPE = string; + +// Path: model/attributes/react_native/react_native__module__top__duration.json + +/** + * The total duration attributed to `react_native.module.top.name`, in milliseconds. `react_native.module.top.duration` + * + * Attribute Value Type: `number` {@link REACT_NATIVE_MODULE_TOP_DURATION_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_TOP_MODULE_DURATION_MS} `turbo_module.top_module_duration_ms` + * + * @example 87.25 + */ +export const REACT_NATIVE_MODULE_TOP_DURATION = 'react_native.module.top.duration'; + +/** + * Type for {@link REACT_NATIVE_MODULE_TOP_DURATION} react_native.module.top.duration + */ +export type REACT_NATIVE_MODULE_TOP_DURATION_TYPE = number; + +// Path: model/attributes/react_native/react_native__module__top__name.json + +/** + * The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`. `react_native.module.top.name` + * + * Attribute Value Type: `string` {@link REACT_NATIVE_MODULE_TOP_NAME_TYPE} + * + * Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + * + * Attribute defined in OTEL: No + * Visibility: public + * + * Aliases: {@link TURBO_MODULE_TOP_MODULE} `turbo_module.top_module` + * + * @example "RNDeviceInfo.getUniqueId" + */ +export const REACT_NATIVE_MODULE_TOP_NAME = 'react_native.module.top.name'; + +/** + * Type for {@link REACT_NATIVE_MODULE_TOP_NAME} react_native.module.top.name + */ +export type REACT_NATIVE_MODULE_TOP_NAME_TYPE = string; + // Path: model/attributes/react/react__version.json /** @@ -17137,9 +17388,9 @@ export type TTFB_REQUESTTIME_TYPE = number; * Attribute defined in OTEL: No * Visibility: public * - * Aliases: {@link TURBO_MODULE_CALL_COUNT} `turbo_module.call.count`, {@link TURBO_MODULE_TOTAL_CALL_COUNT} `turbo_module.total_call_count` + * Aliases: {@link REACT_NATIVE_MODULE_CALL_COUNT} `react_native.module.call.count`, {@link TURBO_MODULE_TOTAL_CALL_COUNT} `turbo_module.total_call_count` * - * @deprecated Use {@link TURBO_MODULE_CALL_COUNT} (turbo_module.call.count) instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + * @deprecated Use {@link REACT_NATIVE_MODULE_CALL_COUNT} (react_native.module.call.count) instead - Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix * @example 42 */ export const TURBO_MODULES_TOTAL_CALL_COUNT = 'turbo_modules.total_call_count'; @@ -17161,9 +17412,9 @@ export type TURBO_MODULES_TOTAL_CALL_COUNT_TYPE = number; * Attribute defined in OTEL: No * Visibility: public * - * Aliases: {@link TURBO_MODULE_DURATION_TOTAL} `turbo_module.duration.total`, {@link TURBO_MODULE_TOTAL_DURATION_MS} `turbo_module.total_duration_ms` + * Aliases: {@link REACT_NATIVE_MODULE_DURATION_TOTAL} `react_native.module.duration.total`, {@link TURBO_MODULE_TOTAL_DURATION_MS} `turbo_module.total_duration_ms` * - * @deprecated Use {@link TURBO_MODULE_DURATION_TOTAL} (turbo_module.duration.total) instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + * @deprecated Use {@link REACT_NATIVE_MODULE_DURATION_TOTAL} (react_native.module.duration.total) instead - Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix * @example 128.45 */ export const TURBO_MODULES_TOTAL_DURATION_MS = 'turbo_modules.total_duration_ms'; @@ -17185,9 +17436,9 @@ export type TURBO_MODULES_TOTAL_DURATION_MS_TYPE = number; * Attribute defined in OTEL: No * Visibility: public * - * Aliases: {@link TURBO_MODULE_ERROR_COUNT} `turbo_module.error.count`, {@link TURBO_MODULE_TOTAL_ERROR_COUNT} `turbo_module.total_error_count` + * Aliases: {@link REACT_NATIVE_MODULE_ERROR_COUNT} `react_native.module.error.count`, {@link TURBO_MODULE_TOTAL_ERROR_COUNT} `turbo_module.total_error_count` * - * @deprecated Use {@link TURBO_MODULE_ERROR_COUNT} (turbo_module.error.count) instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + * @deprecated Use {@link REACT_NATIVE_MODULE_ERROR_COUNT} (react_native.module.error.count) instead - Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix * @example 2 */ export const TURBO_MODULES_TOTAL_ERROR_COUNT = 'turbo_modules.total_error_count'; @@ -17209,9 +17460,9 @@ export type TURBO_MODULES_TOTAL_ERROR_COUNT_TYPE = number; * Attribute defined in OTEL: No * Visibility: public * - * Aliases: {@link TURBO_MODULE_CALL_DISTINCT_COUNT} `turbo_module.call.distinct_count`, {@link TURBO_MODULE_UNIQUE_METHODS} `turbo_module.unique_methods` + * Aliases: {@link REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT} `react_native.module.call.distinct_count`, {@link TURBO_MODULE_UNIQUE_METHODS} `turbo_module.unique_methods` * - * @deprecated Use {@link TURBO_MODULE_CALL_DISTINCT_COUNT} (turbo_module.call.distinct_count) instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + * @deprecated Use {@link REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT} (react_native.module.call.distinct_count) instead - Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix * @example 7 */ export const TURBO_MODULES_UNIQUE_METHODS = 'turbo_modules.unique_methods'; @@ -17233,6 +17484,9 @@ export type TURBO_MODULES_UNIQUE_METHODS_TYPE = number; * Attribute defined in OTEL: No * Visibility: public * + * Aliases: {@link REACT_NATIVE_ARCHITECTURE} `react_native.architecture` + * + * @deprecated Use {@link REACT_NATIVE_ARCHITECTURE} (react_native.architecture) instead - Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules * @example "new" * @example "legacy" */ @@ -17243,141 +17497,6 @@ export const TURBO_MODULE_ARCH = 'turbo_module.arch'; */ export type TURBO_MODULE_ARCH_TYPE = string; -// Path: model/attributes/turbo_module/turbo_module__call__count.json - -/** - * The number of native module calls observed during the lifetime of the span. Only applies to React Native. `turbo_module.call.count` - * - * Attribute Value Type: `number` {@link TURBO_MODULE_CALL_COUNT_TYPE} - * - * Apply Scrubbing: manual - * - * Attribute defined in OTEL: No - * Visibility: public - * - * Aliases: {@link TURBO_MODULE_TOTAL_CALL_COUNT} `turbo_module.total_call_count`, {@link TURBO_MODULES_TOTAL_CALL_COUNT} `turbo_modules.total_call_count` - * - * @example 42 - */ -export const TURBO_MODULE_CALL_COUNT = 'turbo_module.call.count'; - -/** - * Type for {@link TURBO_MODULE_CALL_COUNT} turbo_module.call.count - */ -export type TURBO_MODULE_CALL_COUNT_TYPE = number; - -// Path: model/attributes/turbo_module/turbo_module__call__distinct_count.json - -/** - * The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated. Only applies to React Native. `turbo_module.call.distinct_count` - * - * Attribute Value Type: `number` {@link TURBO_MODULE_CALL_DISTINCT_COUNT_TYPE} - * - * Apply Scrubbing: manual - * - * Attribute defined in OTEL: No - * Visibility: public - * - * Aliases: {@link TURBO_MODULE_UNIQUE_METHODS} `turbo_module.unique_methods`, {@link TURBO_MODULES_UNIQUE_METHODS} `turbo_modules.unique_methods` - * - * @example 7 - */ -export const TURBO_MODULE_CALL_DISTINCT_COUNT = 'turbo_module.call.distinct_count'; - -/** - * Type for {@link TURBO_MODULE_CALL_DISTINCT_COUNT} turbo_module.call.distinct_count - */ -export type TURBO_MODULE_CALL_DISTINCT_COUNT_TYPE = number; - -// Path: model/attributes/turbo_module/turbo_module__duration__max.json - -/** - * The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds. Only applies to React Native. `turbo_module.duration.max` - * - * Attribute Value Type: `number` {@link TURBO_MODULE_DURATION_MAX_TYPE} - * - * Apply Scrubbing: manual - * - * Attribute defined in OTEL: No - * Visibility: public - * - * @example 512.5 - */ -export const TURBO_MODULE_DURATION_MAX = 'turbo_module.duration.max'; - -/** - * Type for {@link TURBO_MODULE_DURATION_MAX} turbo_module.duration.max - */ -export type TURBO_MODULE_DURATION_MAX_TYPE = number; - -// Path: model/attributes/turbo_module/turbo_module__duration__total.json - -/** - * The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration. Only applies to React Native. `turbo_module.duration.total` - * - * Attribute Value Type: `number` {@link TURBO_MODULE_DURATION_TOTAL_TYPE} - * - * Apply Scrubbing: manual - * - * Attribute defined in OTEL: No - * Visibility: public - * - * Aliases: {@link TURBO_MODULE_TOTAL_DURATION_MS} `turbo_module.total_duration_ms`, {@link TURBO_MODULES_TOTAL_DURATION_MS} `turbo_modules.total_duration_ms` - * - * @example 128.45 - */ -export const TURBO_MODULE_DURATION_TOTAL = 'turbo_module.duration.total'; - -/** - * Type for {@link TURBO_MODULE_DURATION_TOTAL} turbo_module.duration.total - */ -export type TURBO_MODULE_DURATION_TOTAL_TYPE = number; - -// Path: model/attributes/turbo_module/turbo_module__error__count.json - -/** - * The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback. Only applies to React Native. `turbo_module.error.count` - * - * Attribute Value Type: `number` {@link TURBO_MODULE_ERROR_COUNT_TYPE} - * - * Apply Scrubbing: manual - * - * Attribute defined in OTEL: No - * Visibility: public - * - * Aliases: {@link TURBO_MODULE_TOTAL_ERROR_COUNT} `turbo_module.total_error_count`, {@link TURBO_MODULES_TOTAL_ERROR_COUNT} `turbo_modules.total_error_count` - * - * @example 2 - */ -export const TURBO_MODULE_ERROR_COUNT = 'turbo_module.error.count'; - -/** - * Type for {@link TURBO_MODULE_ERROR_COUNT} turbo_module.error.count - */ -export type TURBO_MODULE_ERROR_COUNT_TYPE = number; - -// Path: model/attributes/turbo_module/turbo_module__kind.json - -/** - * Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. Only applies to React Native. `turbo_module.kind` - * - * Attribute Value Type: `string` {@link TURBO_MODULE_KIND_TYPE} - * - * Apply Scrubbing: manual - * - * Attribute defined in OTEL: No - * Visibility: public - * - * @example "sync" - * @example "async" - */ -export const TURBO_MODULE_KIND = 'turbo_module.kind'; - -/** - * Type for {@link TURBO_MODULE_KIND} turbo_module.kind - */ -export type TURBO_MODULE_KIND_TYPE = string; - // Path: model/attributes/turbo_module/turbo_module__method.json /** @@ -17390,6 +17509,9 @@ export type TURBO_MODULE_KIND_TYPE = string; * Attribute defined in OTEL: No * Visibility: public * + * Aliases: {@link REACT_NATIVE_MODULE_METHOD} `react_native.module.method` + * + * @deprecated Use {@link REACT_NATIVE_MODULE_METHOD} (react_native.module.method) instead - Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules * @example "getUniqueId" */ export const TURBO_MODULE_METHOD = 'turbo_module.method'; @@ -17411,6 +17533,9 @@ export type TURBO_MODULE_METHOD_TYPE = string; * Attribute defined in OTEL: No * Visibility: public * + * Aliases: {@link REACT_NATIVE_MODULE_NAME} `react_native.module.name` + * + * @deprecated Use {@link REACT_NATIVE_MODULE_NAME} (react_native.module.name) instead - Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules * @example "RNDeviceInfo" */ export const TURBO_MODULE_NAME = 'turbo_module.name'; @@ -17420,29 +17545,6 @@ export const TURBO_MODULE_NAME = 'turbo_module.name'; */ export type TURBO_MODULE_NAME_TYPE = string; -// Path: model/attributes/turbo_module/turbo_module__top__duration.json - -/** - * The total duration attributed to `turbo_module.top.name`, in milliseconds. Only applies to React Native. `turbo_module.top.duration` - * - * Attribute Value Type: `number` {@link TURBO_MODULE_TOP_DURATION_TYPE} - * - * Apply Scrubbing: manual - * - * Attribute defined in OTEL: No - * Visibility: public - * - * Aliases: {@link TURBO_MODULE_TOP_MODULE_DURATION_MS} `turbo_module.top_module_duration_ms` - * - * @example 87.25 - */ -export const TURBO_MODULE_TOP_DURATION = 'turbo_module.top.duration'; - -/** - * Type for {@link TURBO_MODULE_TOP_DURATION} turbo_module.top.duration - */ -export type TURBO_MODULE_TOP_DURATION_TYPE = number; - // Path: model/attributes/turbo_module/turbo_module__top_module.json /** @@ -17455,64 +17557,41 @@ export type TURBO_MODULE_TOP_DURATION_TYPE = number; * Attribute defined in OTEL: No * Visibility: public * - * Aliases: {@link TURBO_MODULE_TOP_NAME} `turbo_module.top.name` + * Aliases: {@link REACT_NATIVE_MODULE_TOP_NAME} `react_native.module.top.name` * - * @deprecated Use {@link TURBO_MODULE_TOP_NAME} (turbo_module.top.name) instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + * @deprecated Use {@link REACT_NATIVE_MODULE_TOP_NAME} (react_native.module.top.name) instead - Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping * @example "RNDeviceInfo.getUniqueId" */ -export const TURBO_MODULE_TOP_MODULE = 'turbo_module.top_module'; - -/** - * Type for {@link TURBO_MODULE_TOP_MODULE} turbo_module.top_module - */ -export type TURBO_MODULE_TOP_MODULE_TYPE = string; - -// Path: model/attributes/turbo_module/turbo_module__top_module_duration_ms.json - -/** - * The total duration attributed to the top native module method, in milliseconds. Only applies to React Native. `turbo_module.top_module_duration_ms` - * - * Attribute Value Type: `number` {@link TURBO_MODULE_TOP_MODULE_DURATION_MS_TYPE} - * - * Apply Scrubbing: manual - * - * Attribute defined in OTEL: No - * Visibility: public - * - * Aliases: {@link TURBO_MODULE_TOP_DURATION} `turbo_module.top.duration` - * - * @deprecated Use {@link TURBO_MODULE_TOP_DURATION} (turbo_module.top.duration) instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping - * @example 87.25 - */ -export const TURBO_MODULE_TOP_MODULE_DURATION_MS = 'turbo_module.top_module_duration_ms'; +export const TURBO_MODULE_TOP_MODULE = 'turbo_module.top_module'; /** - * Type for {@link TURBO_MODULE_TOP_MODULE_DURATION_MS} turbo_module.top_module_duration_ms + * Type for {@link TURBO_MODULE_TOP_MODULE} turbo_module.top_module */ -export type TURBO_MODULE_TOP_MODULE_DURATION_MS_TYPE = number; +export type TURBO_MODULE_TOP_MODULE_TYPE = string; -// Path: model/attributes/turbo_module/turbo_module__top__name.json +// Path: model/attributes/turbo_module/turbo_module__top_module_duration_ms.json /** - * The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`. Only applies to React Native. `turbo_module.top.name` + * The total duration attributed to the top native module method, in milliseconds. Only applies to React Native. `turbo_module.top_module_duration_ms` * - * Attribute Value Type: `string` {@link TURBO_MODULE_TOP_NAME_TYPE} + * Attribute Value Type: `number` {@link TURBO_MODULE_TOP_MODULE_DURATION_MS_TYPE} * - * Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + * Apply Scrubbing: manual * * Attribute defined in OTEL: No * Visibility: public * - * Aliases: {@link TURBO_MODULE_TOP_MODULE} `turbo_module.top_module` + * Aliases: {@link REACT_NATIVE_MODULE_TOP_DURATION} `react_native.module.top.duration` * - * @example "RNDeviceInfo.getUniqueId" + * @deprecated Use {@link REACT_NATIVE_MODULE_TOP_DURATION} (react_native.module.top.duration) instead - Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping + * @example 87.25 */ -export const TURBO_MODULE_TOP_NAME = 'turbo_module.top.name'; +export const TURBO_MODULE_TOP_MODULE_DURATION_MS = 'turbo_module.top_module_duration_ms'; /** - * Type for {@link TURBO_MODULE_TOP_NAME} turbo_module.top.name + * Type for {@link TURBO_MODULE_TOP_MODULE_DURATION_MS} turbo_module.top_module_duration_ms */ -export type TURBO_MODULE_TOP_NAME_TYPE = string; +export type TURBO_MODULE_TOP_MODULE_DURATION_MS_TYPE = number; // Path: model/attributes/turbo_module/turbo_module__total_call_count.json @@ -17526,9 +17605,9 @@ export type TURBO_MODULE_TOP_NAME_TYPE = string; * Attribute defined in OTEL: No * Visibility: public * - * Aliases: {@link TURBO_MODULE_CALL_COUNT} `turbo_module.call.count`, {@link TURBO_MODULES_TOTAL_CALL_COUNT} `turbo_modules.total_call_count` + * Aliases: {@link REACT_NATIVE_MODULE_CALL_COUNT} `react_native.module.call.count`, {@link TURBO_MODULES_TOTAL_CALL_COUNT} `turbo_modules.total_call_count` * - * @deprecated Use {@link TURBO_MODULE_CALL_COUNT} (turbo_module.call.count) instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + * @deprecated Use {@link REACT_NATIVE_MODULE_CALL_COUNT} (react_native.module.call.count) instead - Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping * @example 42 */ export const TURBO_MODULE_TOTAL_CALL_COUNT = 'turbo_module.total_call_count'; @@ -17550,9 +17629,9 @@ export type TURBO_MODULE_TOTAL_CALL_COUNT_TYPE = number; * Attribute defined in OTEL: No * Visibility: public * - * Aliases: {@link TURBO_MODULE_DURATION_TOTAL} `turbo_module.duration.total`, {@link TURBO_MODULES_TOTAL_DURATION_MS} `turbo_modules.total_duration_ms` + * Aliases: {@link REACT_NATIVE_MODULE_DURATION_TOTAL} `react_native.module.duration.total`, {@link TURBO_MODULES_TOTAL_DURATION_MS} `turbo_modules.total_duration_ms` * - * @deprecated Use {@link TURBO_MODULE_DURATION_TOTAL} (turbo_module.duration.total) instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + * @deprecated Use {@link REACT_NATIVE_MODULE_DURATION_TOTAL} (react_native.module.duration.total) instead - Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping * @example 128.45 */ export const TURBO_MODULE_TOTAL_DURATION_MS = 'turbo_module.total_duration_ms'; @@ -17574,9 +17653,9 @@ export type TURBO_MODULE_TOTAL_DURATION_MS_TYPE = number; * Attribute defined in OTEL: No * Visibility: public * - * Aliases: {@link TURBO_MODULE_ERROR_COUNT} `turbo_module.error.count`, {@link TURBO_MODULES_TOTAL_ERROR_COUNT} `turbo_modules.total_error_count` + * Aliases: {@link REACT_NATIVE_MODULE_ERROR_COUNT} `react_native.module.error.count`, {@link TURBO_MODULES_TOTAL_ERROR_COUNT} `turbo_modules.total_error_count` * - * @deprecated Use {@link TURBO_MODULE_ERROR_COUNT} (turbo_module.error.count) instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + * @deprecated Use {@link REACT_NATIVE_MODULE_ERROR_COUNT} (react_native.module.error.count) instead - Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping * @example 2 */ export const TURBO_MODULE_TOTAL_ERROR_COUNT = 'turbo_module.total_error_count'; @@ -17598,9 +17677,9 @@ export type TURBO_MODULE_TOTAL_ERROR_COUNT_TYPE = number; * Attribute defined in OTEL: No * Visibility: public * - * Aliases: {@link TURBO_MODULE_CALL_DISTINCT_COUNT} `turbo_module.call.distinct_count`, {@link TURBO_MODULES_UNIQUE_METHODS} `turbo_modules.unique_methods` + * Aliases: {@link REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT} `react_native.module.call.distinct_count`, {@link TURBO_MODULES_UNIQUE_METHODS} `turbo_modules.unique_methods` * - * @deprecated Use {@link TURBO_MODULE_CALL_DISTINCT_COUNT} (turbo_module.call.distinct_count) instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + * @deprecated Use {@link REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT} (react_native.module.call.distinct_count) instead - Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping * @example 7 */ export const TURBO_MODULE_UNIQUE_METHODS = 'turbo_module.unique_methods'; @@ -19915,6 +19994,17 @@ export const ATTRIBUTE_TYPE: Record = { profile_id: 'string', query: 'string', 'query.': 'string', + 'react_native.architecture': 'string', + 'react_native.module.call.count': 'integer', + 'react_native.module.call.distinct_count': 'integer', + 'react_native.module.duration.max': 'double', + 'react_native.module.duration.total': 'double', + 'react_native.module.error.count': 'integer', + 'react_native.module.kind': 'string', + 'react_native.module.method': 'string', + 'react_native.module.name': 'string', + 'react_native.module.top.duration': 'double', + 'react_native.module.top.name': 'string', 'react.version': 'string', 'redis.command': 'string', 'redis.key': 'string', @@ -20060,18 +20150,10 @@ export const ATTRIBUTE_TYPE: Record = { 'turbo_modules.total_error_count': 'integer', 'turbo_modules.unique_methods': 'integer', 'turbo_module.arch': 'string', - 'turbo_module.call.count': 'integer', - 'turbo_module.call.distinct_count': 'integer', - 'turbo_module.duration.max': 'double', - 'turbo_module.duration.total': 'double', - 'turbo_module.error.count': 'integer', - 'turbo_module.kind': 'string', 'turbo_module.method': 'string', 'turbo_module.name': 'string', - 'turbo_module.top.duration': 'double', 'turbo_module.top_module': 'string', 'turbo_module.top_module_duration_ms': 'double', - 'turbo_module.top.name': 'string', 'turbo_module.total_call_count': 'integer', 'turbo_module.total_duration_ms': 'double', 'turbo_module.total_error_count': 'integer', @@ -20777,6 +20859,17 @@ export type AttributeName = | typeof PROFILE_ID | typeof QUERY | typeof QUERY_KEY + | typeof REACT_NATIVE_ARCHITECTURE + | typeof REACT_NATIVE_MODULE_CALL_COUNT + | typeof REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT + | typeof REACT_NATIVE_MODULE_DURATION_MAX + | typeof REACT_NATIVE_MODULE_DURATION_TOTAL + | typeof REACT_NATIVE_MODULE_ERROR_COUNT + | typeof REACT_NATIVE_MODULE_KIND + | typeof REACT_NATIVE_MODULE_METHOD + | typeof REACT_NATIVE_MODULE_NAME + | typeof REACT_NATIVE_MODULE_TOP_DURATION + | typeof REACT_NATIVE_MODULE_TOP_NAME | typeof REACT_VERSION | typeof REDIS_COMMAND | typeof REDIS_KEY @@ -20922,18 +21015,10 @@ export type AttributeName = | typeof TURBO_MODULES_TOTAL_ERROR_COUNT | typeof TURBO_MODULES_UNIQUE_METHODS | typeof TURBO_MODULE_ARCH - | typeof TURBO_MODULE_CALL_COUNT - | typeof TURBO_MODULE_CALL_DISTINCT_COUNT - | typeof TURBO_MODULE_DURATION_MAX - | typeof TURBO_MODULE_DURATION_TOTAL - | typeof TURBO_MODULE_ERROR_COUNT - | typeof TURBO_MODULE_KIND | typeof TURBO_MODULE_METHOD | typeof TURBO_MODULE_NAME - | typeof TURBO_MODULE_TOP_DURATION | typeof TURBO_MODULE_TOP_MODULE | typeof TURBO_MODULE_TOP_MODULE_DURATION_MS - | typeof TURBO_MODULE_TOP_NAME | typeof TURBO_MODULE_TOTAL_CALL_COUNT | typeof TURBO_MODULE_TOTAL_DURATION_MS | typeof TURBO_MODULE_TOTAL_ERROR_COUNT @@ -31031,6 +31116,174 @@ export const ATTRIBUTE_METADATA: Record = { }, changelog: [{ version: '0.1.0', prs: [103] }], }, + 'react_native.architecture': { + brief: + 'The React Native architecture the app is running on. `new` for the New Architecture, where native modules are resolved as TurboModules through `TurboModuleRegistry`, `legacy` for the Old Architecture bridge.', + type: 'string', + keys: ['react_native.architecture', 'turbo_module.arch'], + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 'new', + examples: ['new', 'legacy'], + aliases: ['turbo_module.arch'], + changelog: [{ version: 'next', prs: [564], description: 'Added react_native.architecture attribute' }], + }, + 'react_native.module.call.count': { + brief: 'The number of native module calls observed during the lifetime of the span.', + type: 'integer', + keys: ['react_native.module.call.count', 'turbo_module.total_call_count', 'turbo_modules.total_call_count'], + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 42, + examples: [42], + aliases: ['turbo_module.total_call_count', 'turbo_modules.total_call_count'], + changelog: [{ version: 'next', prs: [564], description: 'Added react_native.module.call.count attribute' }], + }, + 'react_native.module.call.distinct_count': { + brief: + 'The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated.', + type: 'integer', + keys: ['react_native.module.call.distinct_count', 'turbo_module.unique_methods', 'turbo_modules.unique_methods'], + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 7, + examples: [7], + aliases: ['turbo_module.unique_methods', 'turbo_modules.unique_methods'], + changelog: [ + { version: 'next', prs: [564], description: 'Added react_native.module.call.distinct_count attribute' }, + ], + }, + 'react_native.module.duration.max': { + brief: + 'The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds.', + type: 'double', + keys: ['react_native.module.duration.max'], + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 512.5, + examples: [512.5], + changelog: [{ version: 'next', prs: [564], description: 'Added react_native.module.duration.max attribute' }], + }, + 'react_native.module.duration.total': { + brief: + 'The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration.', + type: 'double', + keys: ['react_native.module.duration.total', 'turbo_module.total_duration_ms', 'turbo_modules.total_duration_ms'], + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 128.45, + examples: [128.45], + aliases: ['turbo_module.total_duration_ms', 'turbo_modules.total_duration_ms'], + changelog: [{ version: 'next', prs: [564], description: 'Added react_native.module.duration.total attribute' }], + }, + 'react_native.module.error.count': { + brief: + 'The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback.', + type: 'integer', + keys: ['react_native.module.error.count', 'turbo_module.total_error_count', 'turbo_modules.total_error_count'], + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 2, + examples: [2], + aliases: ['turbo_module.total_error_count', 'turbo_modules.total_error_count'], + changelog: [{ version: 'next', prs: [564], description: 'Added react_native.module.error.count attribute' }], + }, + 'react_native.module.kind': { + brief: + 'Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`.', + type: 'string', + keys: ['react_native.module.kind'], + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 'sync', + examples: ['sync', 'async'], + changelog: [{ version: 'next', prs: [564], description: 'Added react_native.module.kind attribute' }], + }, + 'react_native.module.method': { + brief: 'The name of the native module method that was called.', + type: 'string', + keys: ['react_native.module.method', 'turbo_module.method'], + applyScrubbing: { + key: 'manual', + reason: + 'Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable', + }, + isInOtel: false, + visibility: 'public', + example: 'getUniqueId', + examples: ['getUniqueId'], + aliases: ['turbo_module.method'], + changelog: [{ version: 'next', prs: [564], description: 'Added react_native.module.method attribute' }], + }, + 'react_native.module.name': { + brief: + 'The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key.', + type: 'string', + keys: ['react_native.module.name', 'turbo_module.name'], + applyScrubbing: { + key: 'manual', + reason: + 'Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable', + }, + isInOtel: false, + visibility: 'public', + example: 'RNDeviceInfo', + examples: ['RNDeviceInfo'], + aliases: ['turbo_module.name'], + changelog: [{ version: 'next', prs: [564], description: 'Added react_native.module.name attribute' }], + }, + 'react_native.module.top.duration': { + brief: 'The total duration attributed to `react_native.module.top.name`, in milliseconds.', + type: 'double', + keys: ['react_native.module.top.duration', 'turbo_module.top_module_duration_ms'], + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 87.25, + examples: [87.25], + aliases: ['turbo_module.top_module_duration_ms'], + changelog: [{ version: 'next', prs: [564], description: 'Added react_native.module.top.duration attribute' }], + }, + 'react_native.module.top.name': { + brief: + 'The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`.', + type: 'string', + keys: ['react_native.module.top.name', 'turbo_module.top_module'], + applyScrubbing: { + key: 'manual', + reason: + 'Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable', + }, + isInOtel: false, + visibility: 'public', + example: 'RNDeviceInfo.getUniqueId', + examples: ['RNDeviceInfo.getUniqueId'], + aliases: ['turbo_module.top_module'], + changelog: [{ version: 'next', prs: [564], description: 'Added react_native.module.top.name attribute' }], + }, 'react.version': { brief: 'The version of the React framework', type: 'string', @@ -33325,7 +33578,7 @@ export const ATTRIBUTE_METADATA: Record = { 'turbo_modules.total_call_count': { brief: 'The number of native module calls in the flushed call aggregate. Only applies to React Native.', type: 'integer', - keys: ['turbo_module.call.count', 'turbo_module.total_call_count', 'turbo_modules.total_call_count'], + keys: ['react_native.module.call.count', 'turbo_module.total_call_count', 'turbo_modules.total_call_count'], applyScrubbing: { key: 'manual', }, @@ -33334,17 +33587,18 @@ export const ATTRIBUTE_METADATA: Record = { example: 42, examples: [42], deprecation: { - replacement: 'turbo_module.call.count', + replacement: 'react_native.module.call.count', reason: - 'Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix', + 'Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix', status: 'backfill', }, - aliases: ['turbo_module.call.count', 'turbo_module.total_call_count'], + aliases: ['react_native.module.call.count', 'turbo_module.total_call_count'], changelog: [ { version: 'next', prs: [564], - description: 'Added turbo_modules.total_call_count and deprecated it in favor of turbo_module.call.count', + description: + 'Added turbo_modules.total_call_count and deprecated it in favor of react_native.module.call.count', }, ], }, @@ -33352,7 +33606,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The combined duration of all native module calls in the flushed call aggregate, in milliseconds. Only applies to React Native.', type: 'double', - keys: ['turbo_module.duration.total', 'turbo_module.total_duration_ms', 'turbo_modules.total_duration_ms'], + keys: ['react_native.module.duration.total', 'turbo_module.total_duration_ms', 'turbo_modules.total_duration_ms'], applyScrubbing: { key: 'manual', }, @@ -33361,24 +33615,25 @@ export const ATTRIBUTE_METADATA: Record = { example: 128.45, examples: [128.45], deprecation: { - replacement: 'turbo_module.duration.total', + replacement: 'react_native.module.duration.total', reason: - 'Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix', + 'Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix', status: 'backfill', }, - aliases: ['turbo_module.duration.total', 'turbo_module.total_duration_ms'], + aliases: ['react_native.module.duration.total', 'turbo_module.total_duration_ms'], changelog: [ { version: 'next', prs: [564], - description: 'Added turbo_modules.total_duration_ms and deprecated it in favor of turbo_module.duration.total', + description: + 'Added turbo_modules.total_duration_ms and deprecated it in favor of react_native.module.duration.total', }, ], }, 'turbo_modules.total_error_count': { brief: 'The number of failed native module calls in the flushed call aggregate. Only applies to React Native.', type: 'integer', - keys: ['turbo_module.error.count', 'turbo_module.total_error_count', 'turbo_modules.total_error_count'], + keys: ['react_native.module.error.count', 'turbo_module.total_error_count', 'turbo_modules.total_error_count'], applyScrubbing: { key: 'manual', }, @@ -33387,17 +33642,18 @@ export const ATTRIBUTE_METADATA: Record = { example: 2, examples: [2], deprecation: { - replacement: 'turbo_module.error.count', + replacement: 'react_native.module.error.count', reason: - 'Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix', + 'Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix', status: 'backfill', }, - aliases: ['turbo_module.error.count', 'turbo_module.total_error_count'], + aliases: ['react_native.module.error.count', 'turbo_module.total_error_count'], changelog: [ { version: 'next', prs: [564], - description: 'Added turbo_modules.total_error_count and deprecated it in favor of turbo_module.error.count', + description: + 'Added turbo_modules.total_error_count and deprecated it in favor of react_native.module.error.count', }, ], }, @@ -33405,7 +33661,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The number of distinct native module and method pairs in the flushed call aggregate. Only applies to React Native.', type: 'integer', - keys: ['turbo_module.call.distinct_count', 'turbo_module.unique_methods', 'turbo_modules.unique_methods'], + keys: ['react_native.module.call.distinct_count', 'turbo_module.unique_methods', 'turbo_modules.unique_methods'], applyScrubbing: { key: 'manual', }, @@ -33414,18 +33670,18 @@ export const ATTRIBUTE_METADATA: Record = { example: 7, examples: [7], deprecation: { - replacement: 'turbo_module.call.distinct_count', + replacement: 'react_native.module.call.distinct_count', reason: - 'Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix', + 'Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix', status: 'backfill', }, - aliases: ['turbo_module.call.distinct_count', 'turbo_module.unique_methods'], + aliases: ['react_native.module.call.distinct_count', 'turbo_module.unique_methods'], changelog: [ { version: 'next', prs: [564], description: - 'Added turbo_modules.unique_methods and deprecated it in favor of turbo_module.call.distinct_count', + 'Added turbo_modules.unique_methods and deprecated it in favor of react_native.module.call.distinct_count', }, ], }, @@ -33433,7 +33689,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The React Native architecture the call was observed on. `new` for a TurboModule resolved through `TurboModuleRegistry`, `legacy` for a module reached over the Old Architecture bridge. Only applies to React Native.', type: 'string', - keys: ['turbo_module.arch'], + keys: ['react_native.architecture', 'turbo_module.arch'], applyScrubbing: { key: 'manual', }, @@ -33441,99 +33697,25 @@ export const ATTRIBUTE_METADATA: Record = { visibility: 'public', example: 'new', examples: ['new', 'legacy'], - changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.arch attribute' }], - }, - 'turbo_module.call.count': { - brief: 'The number of native module calls observed during the lifetime of the span. Only applies to React Native.', - type: 'integer', - keys: ['turbo_module.call.count', 'turbo_module.total_call_count', 'turbo_modules.total_call_count'], - applyScrubbing: { - key: 'manual', - }, - isInOtel: false, - visibility: 'public', - example: 42, - examples: [42], - aliases: ['turbo_module.total_call_count', 'turbo_modules.total_call_count'], - changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.call.count attribute' }], - }, - 'turbo_module.call.distinct_count': { - brief: - 'The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated. Only applies to React Native.', - type: 'integer', - keys: ['turbo_module.call.distinct_count', 'turbo_module.unique_methods', 'turbo_modules.unique_methods'], - applyScrubbing: { - key: 'manual', - }, - isInOtel: false, - visibility: 'public', - example: 7, - examples: [7], - aliases: ['turbo_module.unique_methods', 'turbo_modules.unique_methods'], - changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.call.distinct_count attribute' }], - }, - 'turbo_module.duration.max': { - brief: - 'The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds. Only applies to React Native.', - type: 'double', - keys: ['turbo_module.duration.max'], - applyScrubbing: { - key: 'manual', - }, - isInOtel: false, - visibility: 'public', - example: 512.5, - examples: [512.5], - changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.duration.max attribute' }], - }, - 'turbo_module.duration.total': { - brief: - 'The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration. Only applies to React Native.', - type: 'double', - keys: ['turbo_module.duration.total', 'turbo_module.total_duration_ms', 'turbo_modules.total_duration_ms'], - applyScrubbing: { - key: 'manual', - }, - isInOtel: false, - visibility: 'public', - example: 128.45, - examples: [128.45], - aliases: ['turbo_module.total_duration_ms', 'turbo_modules.total_duration_ms'], - changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.duration.total attribute' }], - }, - 'turbo_module.error.count': { - brief: - 'The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback. Only applies to React Native.', - type: 'integer', - keys: ['turbo_module.error.count', 'turbo_module.total_error_count', 'turbo_modules.total_error_count'], - applyScrubbing: { - key: 'manual', - }, - isInOtel: false, - visibility: 'public', - example: 2, - examples: [2], - aliases: ['turbo_module.total_error_count', 'turbo_modules.total_error_count'], - changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.error.count attribute' }], - }, - 'turbo_module.kind': { - brief: - 'Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. Only applies to React Native.', - type: 'string', - keys: ['turbo_module.kind'], - applyScrubbing: { - key: 'manual', + deprecation: { + replacement: 'react_native.architecture', + reason: + 'Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules', + status: 'backfill', }, - isInOtel: false, - visibility: 'public', - example: 'sync', - examples: ['sync', 'async'], - changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.kind attribute' }], + aliases: ['react_native.architecture'], + changelog: [ + { + version: 'next', + prs: [564], + description: 'Added turbo_module.arch and deprecated it in favor of react_native.architecture', + }, + ], }, 'turbo_module.method': { brief: 'The name of the native module method that was called. Only applies to React Native.', type: 'string', - keys: ['turbo_module.method'], + keys: ['react_native.module.method', 'turbo_module.method'], applyScrubbing: { key: 'manual', reason: @@ -33543,13 +33725,26 @@ export const ATTRIBUTE_METADATA: Record = { visibility: 'public', example: 'getUniqueId', examples: ['getUniqueId'], - changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.method attribute' }], + deprecation: { + replacement: 'react_native.module.method', + reason: + 'Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules', + status: 'backfill', + }, + aliases: ['react_native.module.method'], + changelog: [ + { + version: 'next', + prs: [564], + description: 'Added turbo_module.method and deprecated it in favor of react_native.module.method', + }, + ], }, 'turbo_module.name': { brief: 'The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key. Only applies to React Native.', type: 'string', - keys: ['turbo_module.name'], + keys: ['react_native.module.name', 'turbo_module.name'], applyScrubbing: { key: 'manual', reason: @@ -33559,27 +33754,26 @@ export const ATTRIBUTE_METADATA: Record = { visibility: 'public', example: 'RNDeviceInfo', examples: ['RNDeviceInfo'], - changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.name attribute' }], - }, - 'turbo_module.top.duration': { - brief: 'The total duration attributed to `turbo_module.top.name`, in milliseconds. Only applies to React Native.', - type: 'double', - keys: ['turbo_module.top.duration', 'turbo_module.top_module_duration_ms'], - applyScrubbing: { - key: 'manual', + deprecation: { + replacement: 'react_native.module.name', + reason: + 'Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules', + status: 'backfill', }, - isInOtel: false, - visibility: 'public', - example: 87.25, - examples: [87.25], - aliases: ['turbo_module.top_module_duration_ms'], - changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.top.duration attribute' }], + aliases: ['react_native.module.name'], + changelog: [ + { + version: 'next', + prs: [564], + description: 'Added turbo_module.name and deprecated it in favor of react_native.module.name', + }, + ], }, 'turbo_module.top_module': { brief: 'The native module and method that accounted for the most total duration during the lifetime of the span. Only applies to React Native.', type: 'string', - keys: ['turbo_module.top.name', 'turbo_module.top_module'], + keys: ['react_native.module.top.name', 'turbo_module.top_module'], applyScrubbing: { key: 'manual', reason: @@ -33590,17 +33784,17 @@ export const ATTRIBUTE_METADATA: Record = { example: 'RNDeviceInfo.getUniqueId', examples: ['RNDeviceInfo.getUniqueId'], deprecation: { - replacement: 'turbo_module.top.name', + replacement: 'react_native.module.top.name', reason: - 'Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping', + 'Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping', status: 'backfill', }, - aliases: ['turbo_module.top.name'], + aliases: ['react_native.module.top.name'], changelog: [ { version: 'next', prs: [564], - description: 'Added turbo_module.top_module and deprecated it in favor of turbo_module.top.name', + description: 'Added turbo_module.top_module and deprecated it in favor of react_native.module.top.name', }, ], }, @@ -33608,7 +33802,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The total duration attributed to the top native module method, in milliseconds. Only applies to React Native.', type: 'double', - keys: ['turbo_module.top.duration', 'turbo_module.top_module_duration_ms'], + keys: ['react_native.module.top.duration', 'turbo_module.top_module_duration_ms'], applyScrubbing: { key: 'manual', }, @@ -33617,42 +33811,25 @@ export const ATTRIBUTE_METADATA: Record = { example: 87.25, examples: [87.25], deprecation: { - replacement: 'turbo_module.top.duration', + replacement: 'react_native.module.top.duration', reason: - 'Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping', + 'Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping', status: 'backfill', }, - aliases: ['turbo_module.top.duration'], + aliases: ['react_native.module.top.duration'], changelog: [ { version: 'next', prs: [564], description: - 'Added turbo_module.top_module_duration_ms and deprecated it in favor of turbo_module.top.duration', + 'Added turbo_module.top_module_duration_ms and deprecated it in favor of react_native.module.top.duration', }, ], }, - 'turbo_module.top.name': { - brief: - 'The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`. Only applies to React Native.', - type: 'string', - keys: ['turbo_module.top.name', 'turbo_module.top_module'], - applyScrubbing: { - key: 'manual', - reason: - 'Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable', - }, - isInOtel: false, - visibility: 'public', - example: 'RNDeviceInfo.getUniqueId', - examples: ['RNDeviceInfo.getUniqueId'], - aliases: ['turbo_module.top_module'], - changelog: [{ version: 'next', prs: [564], description: 'Added turbo_module.top.name attribute' }], - }, 'turbo_module.total_call_count': { brief: 'The number of native module calls observed during the lifetime of the span. Only applies to React Native.', type: 'integer', - keys: ['turbo_module.call.count', 'turbo_module.total_call_count', 'turbo_modules.total_call_count'], + keys: ['react_native.module.call.count', 'turbo_module.total_call_count', 'turbo_modules.total_call_count'], applyScrubbing: { key: 'manual', }, @@ -33661,17 +33838,17 @@ export const ATTRIBUTE_METADATA: Record = { example: 42, examples: [42], deprecation: { - replacement: 'turbo_module.call.count', + replacement: 'react_native.module.call.count', reason: - 'Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping', + 'Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping', status: 'backfill', }, - aliases: ['turbo_module.call.count', 'turbo_modules.total_call_count'], + aliases: ['react_native.module.call.count', 'turbo_modules.total_call_count'], changelog: [ { version: 'next', prs: [564], - description: 'Added turbo_module.total_call_count and deprecated it in favor of turbo_module.call.count', + description: 'Added turbo_module.total_call_count and deprecated it in favor of react_native.module.call.count', }, ], }, @@ -33679,7 +33856,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The combined duration of all native module calls observed during the lifetime of the span, in milliseconds. Only applies to React Native.', type: 'double', - keys: ['turbo_module.duration.total', 'turbo_module.total_duration_ms', 'turbo_modules.total_duration_ms'], + keys: ['react_native.module.duration.total', 'turbo_module.total_duration_ms', 'turbo_modules.total_duration_ms'], applyScrubbing: { key: 'manual', }, @@ -33688,17 +33865,18 @@ export const ATTRIBUTE_METADATA: Record = { example: 128.45, examples: [128.45], deprecation: { - replacement: 'turbo_module.duration.total', + replacement: 'react_native.module.duration.total', reason: - 'Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping', + 'Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping', status: 'backfill', }, - aliases: ['turbo_module.duration.total', 'turbo_modules.total_duration_ms'], + aliases: ['react_native.module.duration.total', 'turbo_modules.total_duration_ms'], changelog: [ { version: 'next', prs: [564], - description: 'Added turbo_module.total_duration_ms and deprecated it in favor of turbo_module.duration.total', + description: + 'Added turbo_module.total_duration_ms and deprecated it in favor of react_native.module.duration.total', }, ], }, @@ -33706,7 +33884,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The number of native module calls that failed during the lifetime of the span. Only applies to React Native.', type: 'integer', - keys: ['turbo_module.error.count', 'turbo_module.total_error_count', 'turbo_modules.total_error_count'], + keys: ['react_native.module.error.count', 'turbo_module.total_error_count', 'turbo_modules.total_error_count'], applyScrubbing: { key: 'manual', }, @@ -33715,17 +33893,18 @@ export const ATTRIBUTE_METADATA: Record = { example: 2, examples: [2], deprecation: { - replacement: 'turbo_module.error.count', + replacement: 'react_native.module.error.count', reason: - 'Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping', + 'Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping', status: 'backfill', }, - aliases: ['turbo_module.error.count', 'turbo_modules.total_error_count'], + aliases: ['react_native.module.error.count', 'turbo_modules.total_error_count'], changelog: [ { version: 'next', prs: [564], - description: 'Added turbo_module.total_error_count and deprecated it in favor of turbo_module.error.count', + description: + 'Added turbo_module.total_error_count and deprecated it in favor of react_native.module.error.count', }, ], }, @@ -33733,7 +33912,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The number of distinct native module and method pairs called during the lifetime of the span. Only applies to React Native.', type: 'integer', - keys: ['turbo_module.call.distinct_count', 'turbo_module.unique_methods', 'turbo_modules.unique_methods'], + keys: ['react_native.module.call.distinct_count', 'turbo_module.unique_methods', 'turbo_modules.unique_methods'], applyScrubbing: { key: 'manual', }, @@ -33742,17 +33921,18 @@ export const ATTRIBUTE_METADATA: Record = { example: 7, examples: [7], deprecation: { - replacement: 'turbo_module.call.distinct_count', + replacement: 'react_native.module.call.distinct_count', reason: - 'Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping', + 'Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping', status: 'backfill', }, - aliases: ['turbo_module.call.distinct_count', 'turbo_modules.unique_methods'], + aliases: ['react_native.module.call.distinct_count', 'turbo_modules.unique_methods'], changelog: [ { version: 'next', prs: [564], - description: 'Added turbo_module.unique_methods and deprecated it in favor of turbo_module.call.distinct_count', + description: + 'Added turbo_module.unique_methods and deprecated it in favor of react_native.module.call.distinct_count', }, ], }, @@ -35345,6 +35525,17 @@ export type Attributes = { [PROFILE_ID]?: PROFILE_ID_TYPE; [QUERY]?: QUERY_TYPE; [QUERY_KEY]?: QUERY_KEY_TYPE; + [REACT_NATIVE_ARCHITECTURE]?: REACT_NATIVE_ARCHITECTURE_TYPE; + [REACT_NATIVE_MODULE_CALL_COUNT]?: REACT_NATIVE_MODULE_CALL_COUNT_TYPE; + [REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT]?: REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT_TYPE; + [REACT_NATIVE_MODULE_DURATION_MAX]?: REACT_NATIVE_MODULE_DURATION_MAX_TYPE; + [REACT_NATIVE_MODULE_DURATION_TOTAL]?: REACT_NATIVE_MODULE_DURATION_TOTAL_TYPE; + [REACT_NATIVE_MODULE_ERROR_COUNT]?: REACT_NATIVE_MODULE_ERROR_COUNT_TYPE; + [REACT_NATIVE_MODULE_KIND]?: REACT_NATIVE_MODULE_KIND_TYPE; + [REACT_NATIVE_MODULE_METHOD]?: REACT_NATIVE_MODULE_METHOD_TYPE; + [REACT_NATIVE_MODULE_NAME]?: REACT_NATIVE_MODULE_NAME_TYPE; + [REACT_NATIVE_MODULE_TOP_DURATION]?: REACT_NATIVE_MODULE_TOP_DURATION_TYPE; + [REACT_NATIVE_MODULE_TOP_NAME]?: REACT_NATIVE_MODULE_TOP_NAME_TYPE; [REACT_VERSION]?: REACT_VERSION_TYPE; [REDIS_COMMAND]?: REDIS_COMMAND_TYPE; [REDIS_KEY]?: REDIS_KEY_TYPE; @@ -35490,18 +35681,10 @@ export type Attributes = { [TURBO_MODULES_TOTAL_ERROR_COUNT]?: TURBO_MODULES_TOTAL_ERROR_COUNT_TYPE; [TURBO_MODULES_UNIQUE_METHODS]?: TURBO_MODULES_UNIQUE_METHODS_TYPE; [TURBO_MODULE_ARCH]?: TURBO_MODULE_ARCH_TYPE; - [TURBO_MODULE_CALL_COUNT]?: TURBO_MODULE_CALL_COUNT_TYPE; - [TURBO_MODULE_CALL_DISTINCT_COUNT]?: TURBO_MODULE_CALL_DISTINCT_COUNT_TYPE; - [TURBO_MODULE_DURATION_MAX]?: TURBO_MODULE_DURATION_MAX_TYPE; - [TURBO_MODULE_DURATION_TOTAL]?: TURBO_MODULE_DURATION_TOTAL_TYPE; - [TURBO_MODULE_ERROR_COUNT]?: TURBO_MODULE_ERROR_COUNT_TYPE; - [TURBO_MODULE_KIND]?: TURBO_MODULE_KIND_TYPE; [TURBO_MODULE_METHOD]?: TURBO_MODULE_METHOD_TYPE; [TURBO_MODULE_NAME]?: TURBO_MODULE_NAME_TYPE; - [TURBO_MODULE_TOP_DURATION]?: TURBO_MODULE_TOP_DURATION_TYPE; [TURBO_MODULE_TOP_MODULE]?: TURBO_MODULE_TOP_MODULE_TYPE; [TURBO_MODULE_TOP_MODULE_DURATION_MS]?: TURBO_MODULE_TOP_MODULE_DURATION_MS_TYPE; - [TURBO_MODULE_TOP_NAME]?: TURBO_MODULE_TOP_NAME_TYPE; [TURBO_MODULE_TOTAL_CALL_COUNT]?: TURBO_MODULE_TOTAL_CALL_COUNT_TYPE; [TURBO_MODULE_TOTAL_DURATION_MS]?: TURBO_MODULE_TOTAL_DURATION_MS_TYPE; [TURBO_MODULE_TOTAL_ERROR_COUNT]?: TURBO_MODULE_TOTAL_ERROR_COUNT_TYPE; diff --git a/javascript/sentry-conventions/src/search.ts b/javascript/sentry-conventions/src/search.ts index 7f8238337..d39ab76d5 100644 --- a/javascript/sentry-conventions/src/search.ts +++ b/javascript/sentry-conventions/src/search.ts @@ -3587,6 +3587,61 @@ export const SEARCH_QUERY__KEY = 'query.'; */ export const SEARCH_REACT__VERSION = 'react.version'; +/** + * Search name for {@link attributes.REACT_NATIVE_ARCHITECTURE}. `react_native.architecture` + */ +export const SEARCH_REACT_NATIVE__ARCHITECTURE = 'react_native.architecture'; + +/** + * Search name for {@link attributes.REACT_NATIVE_MODULE_CALL_COUNT}. `react_native.module.call.count` + */ +export const SEARCH_REACT_NATIVE__MODULE__CALL__COUNT = 'react_native.module.call.count'; + +/** + * Search name for {@link attributes.REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT}. `react_native.module.call.distinct_count` + */ +export const SEARCH_REACT_NATIVE__MODULE__CALL__DISTINCT_COUNT = 'react_native.module.call.distinct_count'; + +/** + * Search name for {@link attributes.REACT_NATIVE_MODULE_DURATION_MAX}. `react_native.module.duration.max` + */ +export const SEARCH_REACT_NATIVE__MODULE__DURATION__MAX = 'react_native.module.duration.max'; + +/** + * Search name for {@link attributes.REACT_NATIVE_MODULE_DURATION_TOTAL}. `react_native.module.duration.total` + */ +export const SEARCH_REACT_NATIVE__MODULE__DURATION__TOTAL = 'react_native.module.duration.total'; + +/** + * Search name for {@link attributes.REACT_NATIVE_MODULE_ERROR_COUNT}. `react_native.module.error.count` + */ +export const SEARCH_REACT_NATIVE__MODULE__ERROR__COUNT = 'react_native.module.error.count'; + +/** + * Search name for {@link attributes.REACT_NATIVE_MODULE_KIND}. `react_native.module.kind` + */ +export const SEARCH_REACT_NATIVE__MODULE__KIND = 'react_native.module.kind'; + +/** + * Search name for {@link attributes.REACT_NATIVE_MODULE_METHOD}. `react_native.module.method` + */ +export const SEARCH_REACT_NATIVE__MODULE__METHOD = 'react_native.module.method'; + +/** + * Search name for {@link attributes.REACT_NATIVE_MODULE_NAME}. `react_native.module.name` + */ +export const SEARCH_REACT_NATIVE__MODULE__NAME = 'react_native.module.name'; + +/** + * Search name for {@link attributes.REACT_NATIVE_MODULE_TOP_DURATION}. `react_native.module.top.duration` + */ +export const SEARCH_REACT_NATIVE__MODULE__TOP__DURATION = 'react_native.module.top.duration'; + +/** + * Search name for {@link attributes.REACT_NATIVE_MODULE_TOP_NAME}. `react_native.module.top.name` + */ +export const SEARCH_REACT_NATIVE__MODULE__TOP__NAME = 'react_native.module.top.name'; + /** * Search name for {@link attributes.REDIS_COMMAND}. `redis.command` * @@ -4455,126 +4510,92 @@ export const SEARCH_TTFB__REQUESTTIME = 'ttfb.requestTime'; /** * Search name for {@link attributes.TURBO_MODULE_ARCH}. `turbo_module.arch` + * + * @deprecated Use {@link SEARCH_REACT_NATIVE__ARCHITECTURE} (`react_native.architecture`) instead */ export const SEARCH_TURBO_MODULE__ARCH = 'turbo_module.arch'; -/** - * Search name for {@link attributes.TURBO_MODULE_CALL_COUNT}. `turbo_module.call.count` - */ -export const SEARCH_TURBO_MODULE__CALL__COUNT = 'turbo_module.call.count'; - -/** - * Search name for {@link attributes.TURBO_MODULE_CALL_DISTINCT_COUNT}. `turbo_module.call.distinct_count` - */ -export const SEARCH_TURBO_MODULE__CALL__DISTINCT_COUNT = 'turbo_module.call.distinct_count'; - -/** - * Search name for {@link attributes.TURBO_MODULE_DURATION_MAX}. `turbo_module.duration.max` - */ -export const SEARCH_TURBO_MODULE__DURATION__MAX = 'turbo_module.duration.max'; - -/** - * Search name for {@link attributes.TURBO_MODULE_DURATION_TOTAL}. `turbo_module.duration.total` - */ -export const SEARCH_TURBO_MODULE__DURATION__TOTAL = 'turbo_module.duration.total'; - -/** - * Search name for {@link attributes.TURBO_MODULE_ERROR_COUNT}. `turbo_module.error.count` - */ -export const SEARCH_TURBO_MODULE__ERROR__COUNT = 'turbo_module.error.count'; - -/** - * Search name for {@link attributes.TURBO_MODULE_KIND}. `turbo_module.kind` - */ -export const SEARCH_TURBO_MODULE__KIND = 'turbo_module.kind'; - /** * Search name for {@link attributes.TURBO_MODULE_METHOD}. `turbo_module.method` + * + * @deprecated Use {@link SEARCH_REACT_NATIVE__MODULE__METHOD} (`react_native.module.method`) instead */ export const SEARCH_TURBO_MODULE__METHOD = 'turbo_module.method'; /** * Search name for {@link attributes.TURBO_MODULE_NAME}. `turbo_module.name` + * + * @deprecated Use {@link SEARCH_REACT_NATIVE__MODULE__NAME} (`react_native.module.name`) instead */ export const SEARCH_TURBO_MODULE__NAME = 'turbo_module.name'; -/** - * Search name for {@link attributes.TURBO_MODULE_TOP_DURATION}. `turbo_module.top.duration` - */ -export const SEARCH_TURBO_MODULE__TOP__DURATION = 'turbo_module.top.duration'; - -/** - * Search name for {@link attributes.TURBO_MODULE_TOP_NAME}. `turbo_module.top.name` - */ -export const SEARCH_TURBO_MODULE__TOP__NAME = 'turbo_module.top.name'; - /** * Search name for {@link attributes.TURBO_MODULE_TOP_MODULE}. `turbo_module.top_module` * - * @deprecated Use {@link SEARCH_TURBO_MODULE__TOP__NAME} (`turbo_module.top.name`) instead + * @deprecated Use {@link SEARCH_REACT_NATIVE__MODULE__TOP__NAME} (`react_native.module.top.name`) instead */ export const SEARCH_TURBO_MODULE__TOP_MODULE = 'turbo_module.top_module'; /** * Search name for {@link attributes.TURBO_MODULE_TOP_MODULE_DURATION_MS}. `turbo_module.top_module_duration_ms` * - * @deprecated Use {@link SEARCH_TURBO_MODULE__TOP__DURATION} (`turbo_module.top.duration`) instead + * @deprecated Use {@link SEARCH_REACT_NATIVE__MODULE__TOP__DURATION} (`react_native.module.top.duration`) instead */ export const SEARCH_TURBO_MODULE__TOP_MODULE_DURATION_MS = 'turbo_module.top_module_duration_ms'; /** * Search name for {@link attributes.TURBO_MODULE_TOTAL_CALL_COUNT}. `turbo_module.total_call_count` * - * @deprecated Use {@link SEARCH_TURBO_MODULE__CALL__COUNT} (`turbo_module.call.count`) instead + * @deprecated Use {@link SEARCH_REACT_NATIVE__MODULE__CALL__COUNT} (`react_native.module.call.count`) instead */ export const SEARCH_TURBO_MODULE__TOTAL_CALL_COUNT = 'turbo_module.total_call_count'; /** * Search name for {@link attributes.TURBO_MODULE_TOTAL_DURATION_MS}. `turbo_module.total_duration_ms` * - * @deprecated Use {@link SEARCH_TURBO_MODULE__DURATION__TOTAL} (`turbo_module.duration.total`) instead + * @deprecated Use {@link SEARCH_REACT_NATIVE__MODULE__DURATION__TOTAL} (`react_native.module.duration.total`) instead */ export const SEARCH_TURBO_MODULE__TOTAL_DURATION_MS = 'turbo_module.total_duration_ms'; /** * Search name for {@link attributes.TURBO_MODULE_TOTAL_ERROR_COUNT}. `turbo_module.total_error_count` * - * @deprecated Use {@link SEARCH_TURBO_MODULE__ERROR__COUNT} (`turbo_module.error.count`) instead + * @deprecated Use {@link SEARCH_REACT_NATIVE__MODULE__ERROR__COUNT} (`react_native.module.error.count`) instead */ export const SEARCH_TURBO_MODULE__TOTAL_ERROR_COUNT = 'turbo_module.total_error_count'; /** * Search name for {@link attributes.TURBO_MODULE_UNIQUE_METHODS}. `turbo_module.unique_methods` * - * @deprecated Use {@link SEARCH_TURBO_MODULE__CALL__DISTINCT_COUNT} (`turbo_module.call.distinct_count`) instead + * @deprecated Use {@link SEARCH_REACT_NATIVE__MODULE__CALL__DISTINCT_COUNT} (`react_native.module.call.distinct_count`) instead */ export const SEARCH_TURBO_MODULE__UNIQUE_METHODS = 'turbo_module.unique_methods'; /** * Search name for {@link attributes.TURBO_MODULES_TOTAL_CALL_COUNT}. `turbo_modules.total_call_count` * - * @deprecated Use {@link SEARCH_TURBO_MODULE__CALL__COUNT} (`turbo_module.call.count`) instead + * @deprecated Use {@link SEARCH_REACT_NATIVE__MODULE__CALL__COUNT} (`react_native.module.call.count`) instead */ export const SEARCH_TURBO_MODULES__TOTAL_CALL_COUNT = 'turbo_modules.total_call_count'; /** * Search name for {@link attributes.TURBO_MODULES_TOTAL_DURATION_MS}. `turbo_modules.total_duration_ms` * - * @deprecated Use {@link SEARCH_TURBO_MODULE__DURATION__TOTAL} (`turbo_module.duration.total`) instead + * @deprecated Use {@link SEARCH_REACT_NATIVE__MODULE__DURATION__TOTAL} (`react_native.module.duration.total`) instead */ export const SEARCH_TURBO_MODULES__TOTAL_DURATION_MS = 'turbo_modules.total_duration_ms'; /** * Search name for {@link attributes.TURBO_MODULES_TOTAL_ERROR_COUNT}. `turbo_modules.total_error_count` * - * @deprecated Use {@link SEARCH_TURBO_MODULE__ERROR__COUNT} (`turbo_module.error.count`) instead + * @deprecated Use {@link SEARCH_REACT_NATIVE__MODULE__ERROR__COUNT} (`react_native.module.error.count`) instead */ export const SEARCH_TURBO_MODULES__TOTAL_ERROR_COUNT = 'turbo_modules.total_error_count'; /** * Search name for {@link attributes.TURBO_MODULES_UNIQUE_METHODS}. `turbo_modules.unique_methods` * - * @deprecated Use {@link SEARCH_TURBO_MODULE__CALL__DISTINCT_COUNT} (`turbo_module.call.distinct_count`) instead + * @deprecated Use {@link SEARCH_REACT_NATIVE__MODULE__CALL__DISTINCT_COUNT} (`react_native.module.call.distinct_count`) instead */ export const SEARCH_TURBO_MODULES__UNIQUE_METHODS = 'turbo_modules.unique_methods'; @@ -5596,6 +5617,17 @@ export type AttributeSearchName = | typeof SEARCH_QUERY | typeof SEARCH_QUERY__KEY | typeof SEARCH_REACT__VERSION + | typeof SEARCH_REACT_NATIVE__ARCHITECTURE + | typeof SEARCH_REACT_NATIVE__MODULE__CALL__COUNT + | typeof SEARCH_REACT_NATIVE__MODULE__CALL__DISTINCT_COUNT + | typeof SEARCH_REACT_NATIVE__MODULE__DURATION__MAX + | typeof SEARCH_REACT_NATIVE__MODULE__DURATION__TOTAL + | typeof SEARCH_REACT_NATIVE__MODULE__ERROR__COUNT + | typeof SEARCH_REACT_NATIVE__MODULE__KIND + | typeof SEARCH_REACT_NATIVE__MODULE__METHOD + | typeof SEARCH_REACT_NATIVE__MODULE__NAME + | typeof SEARCH_REACT_NATIVE__MODULE__TOP__DURATION + | typeof SEARCH_REACT_NATIVE__MODULE__TOP__NAME | typeof SEARCH_REDIS__COMMAND | typeof SEARCH_REDIS__KEY | typeof SEARCH_RELEASE @@ -5745,16 +5777,8 @@ export type AttributeSearchName = | typeof SEARCH_TTFB | typeof SEARCH_TTFB__REQUESTTIME | typeof SEARCH_TURBO_MODULE__ARCH - | typeof SEARCH_TURBO_MODULE__CALL__COUNT - | typeof SEARCH_TURBO_MODULE__CALL__DISTINCT_COUNT - | typeof SEARCH_TURBO_MODULE__DURATION__MAX - | typeof SEARCH_TURBO_MODULE__DURATION__TOTAL - | typeof SEARCH_TURBO_MODULE__ERROR__COUNT - | typeof SEARCH_TURBO_MODULE__KIND | typeof SEARCH_TURBO_MODULE__METHOD | typeof SEARCH_TURBO_MODULE__NAME - | typeof SEARCH_TURBO_MODULE__TOP__DURATION - | typeof SEARCH_TURBO_MODULE__TOP__NAME | typeof SEARCH_TURBO_MODULE__TOP_MODULE | typeof SEARCH_TURBO_MODULE__TOP_MODULE_DURATION_MS | typeof SEARCH_TURBO_MODULE__TOTAL_CALL_COUNT @@ -9918,6 +9942,96 @@ export const ATTRIBUTE_SEARCH_METADATA: Record brief: 'The version of the React framework', deprecationChain: ['react.version'], }, + 'react_native.architecture': { + canonicalName: 'react_native.architecture', + type: 'string', + brief: + 'The React Native architecture the app is running on. `new` for the New Architecture, where native modules are resolved as TurboModules through `TurboModuleRegistry`, `legacy` for the Old Architecture bridge.', + deprecationChain: ['react_native.architecture', 'turbo_module.arch'], + }, + 'react_native.module.call.count': { + canonicalName: 'react_native.module.call.count', + type: 'integer', + brief: 'The number of native module calls observed during the lifetime of the span.', + deprecationChain: [ + 'react_native.module.call.count', + 'turbo_module.total_call_count', + 'turbo_modules.total_call_count', + ], + }, + 'react_native.module.call.distinct_count': { + canonicalName: 'react_native.module.call.distinct_count', + type: 'integer', + brief: + 'The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated.', + deprecationChain: [ + 'react_native.module.call.distinct_count', + 'turbo_module.unique_methods', + 'turbo_modules.unique_methods', + ], + }, + 'react_native.module.duration.max': { + canonicalName: 'react_native.module.duration.max', + type: 'double', + brief: + 'The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds.', + deprecationChain: ['react_native.module.duration.max'], + }, + 'react_native.module.duration.total': { + canonicalName: 'react_native.module.duration.total', + type: 'double', + brief: + 'The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration.', + deprecationChain: [ + 'react_native.module.duration.total', + 'turbo_module.total_duration_ms', + 'turbo_modules.total_duration_ms', + ], + }, + 'react_native.module.error.count': { + canonicalName: 'react_native.module.error.count', + type: 'integer', + brief: + 'The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback.', + deprecationChain: [ + 'react_native.module.error.count', + 'turbo_module.total_error_count', + 'turbo_modules.total_error_count', + ], + }, + 'react_native.module.kind': { + canonicalName: 'react_native.module.kind', + type: 'string', + brief: + 'Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`.', + deprecationChain: ['react_native.module.kind'], + }, + 'react_native.module.method': { + canonicalName: 'react_native.module.method', + type: 'string', + brief: 'The name of the native module method that was called.', + deprecationChain: ['react_native.module.method', 'turbo_module.method'], + }, + 'react_native.module.name': { + canonicalName: 'react_native.module.name', + type: 'string', + brief: + 'The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key.', + deprecationChain: ['react_native.module.name', 'turbo_module.name'], + }, + 'react_native.module.top.duration': { + canonicalName: 'react_native.module.top.duration', + type: 'double', + brief: 'The total duration attributed to `react_native.module.top.name`, in milliseconds.', + deprecationChain: ['react_native.module.top.duration', 'turbo_module.top_module_duration_ms'], + }, + 'react_native.module.top.name': { + canonicalName: 'react_native.module.top.name', + type: 'string', + brief: + 'The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`.', + deprecationChain: ['react_native.module.top.name', 'turbo_module.top_module'], + }, 'redis.command': { canonicalName: 'db.operation.name', type: 'string', @@ -10719,166 +10833,120 @@ export const ATTRIBUTE_SEARCH_METADATA: Record deprecationChain: ['browser.web_vital.ttfb.request_time', 'ttfb.requestTime'], }, 'turbo_module.arch': { - canonicalName: 'turbo_module.arch', + canonicalName: 'react_native.architecture', type: 'string', brief: 'The React Native architecture the call was observed on. `new` for a TurboModule resolved through `TurboModuleRegistry`, `legacy` for a module reached over the Old Architecture bridge. Only applies to React Native.', - deprecationChain: ['turbo_module.arch'], - }, - 'turbo_module.call.count': { - canonicalName: 'turbo_module.call.count', - type: 'integer', - brief: 'The number of native module calls observed during the lifetime of the span. Only applies to React Native.', - deprecationChain: ['turbo_module.call.count', 'turbo_module.total_call_count', 'turbo_modules.total_call_count'], - }, - 'turbo_module.call.distinct_count': { - canonicalName: 'turbo_module.call.distinct_count', - type: 'integer', - brief: - 'The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated. Only applies to React Native.', - deprecationChain: [ - 'turbo_module.call.distinct_count', - 'turbo_module.unique_methods', - 'turbo_modules.unique_methods', - ], - }, - 'turbo_module.duration.max': { - canonicalName: 'turbo_module.duration.max', - type: 'double', - brief: - 'The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds. Only applies to React Native.', - deprecationChain: ['turbo_module.duration.max'], - }, - 'turbo_module.duration.total': { - canonicalName: 'turbo_module.duration.total', - type: 'double', - brief: - 'The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration. Only applies to React Native.', - deprecationChain: [ - 'turbo_module.duration.total', - 'turbo_module.total_duration_ms', - 'turbo_modules.total_duration_ms', - ], - }, - 'turbo_module.error.count': { - canonicalName: 'turbo_module.error.count', - type: 'integer', - brief: - 'The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback. Only applies to React Native.', - deprecationChain: ['turbo_module.error.count', 'turbo_module.total_error_count', 'turbo_modules.total_error_count'], - }, - 'turbo_module.kind': { - canonicalName: 'turbo_module.kind', - type: 'string', - brief: - 'Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. Only applies to React Native.', - deprecationChain: ['turbo_module.kind'], + deprecationChain: ['react_native.architecture', 'turbo_module.arch'], }, 'turbo_module.method': { - canonicalName: 'turbo_module.method', + canonicalName: 'react_native.module.method', type: 'string', brief: 'The name of the native module method that was called. Only applies to React Native.', - deprecationChain: ['turbo_module.method'], + deprecationChain: ['react_native.module.method', 'turbo_module.method'], }, 'turbo_module.name': { - canonicalName: 'turbo_module.name', + canonicalName: 'react_native.module.name', type: 'string', brief: 'The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key. Only applies to React Native.', - deprecationChain: ['turbo_module.name'], - }, - 'turbo_module.top.duration': { - canonicalName: 'turbo_module.top.duration', - type: 'double', - brief: 'The total duration attributed to `turbo_module.top.name`, in milliseconds. Only applies to React Native.', - deprecationChain: ['turbo_module.top.duration', 'turbo_module.top_module_duration_ms'], - }, - 'turbo_module.top.name': { - canonicalName: 'turbo_module.top.name', - type: 'string', - brief: - 'The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`. Only applies to React Native.', - deprecationChain: ['turbo_module.top.name', 'turbo_module.top_module'], + deprecationChain: ['react_native.module.name', 'turbo_module.name'], }, 'turbo_module.top_module': { - canonicalName: 'turbo_module.top.name', + canonicalName: 'react_native.module.top.name', type: 'string', brief: 'The native module and method that accounted for the most total duration during the lifetime of the span. Only applies to React Native.', - deprecationChain: ['turbo_module.top.name', 'turbo_module.top_module'], + deprecationChain: ['react_native.module.top.name', 'turbo_module.top_module'], }, 'turbo_module.top_module_duration_ms': { - canonicalName: 'turbo_module.top.duration', + canonicalName: 'react_native.module.top.duration', type: 'double', brief: 'The total duration attributed to the top native module method, in milliseconds. Only applies to React Native.', - deprecationChain: ['turbo_module.top.duration', 'turbo_module.top_module_duration_ms'], + deprecationChain: ['react_native.module.top.duration', 'turbo_module.top_module_duration_ms'], }, 'turbo_module.total_call_count': { - canonicalName: 'turbo_module.call.count', + canonicalName: 'react_native.module.call.count', type: 'integer', brief: 'The number of native module calls observed during the lifetime of the span. Only applies to React Native.', - deprecationChain: ['turbo_module.call.count', 'turbo_module.total_call_count', 'turbo_modules.total_call_count'], + deprecationChain: [ + 'react_native.module.call.count', + 'turbo_module.total_call_count', + 'turbo_modules.total_call_count', + ], }, 'turbo_module.total_duration_ms': { - canonicalName: 'turbo_module.duration.total', + canonicalName: 'react_native.module.duration.total', type: 'double', brief: 'The combined duration of all native module calls observed during the lifetime of the span, in milliseconds. Only applies to React Native.', deprecationChain: [ - 'turbo_module.duration.total', + 'react_native.module.duration.total', 'turbo_module.total_duration_ms', 'turbo_modules.total_duration_ms', ], }, 'turbo_module.total_error_count': { - canonicalName: 'turbo_module.error.count', + canonicalName: 'react_native.module.error.count', type: 'integer', brief: 'The number of native module calls that failed during the lifetime of the span. Only applies to React Native.', - deprecationChain: ['turbo_module.error.count', 'turbo_module.total_error_count', 'turbo_modules.total_error_count'], + deprecationChain: [ + 'react_native.module.error.count', + 'turbo_module.total_error_count', + 'turbo_modules.total_error_count', + ], }, 'turbo_module.unique_methods': { - canonicalName: 'turbo_module.call.distinct_count', + canonicalName: 'react_native.module.call.distinct_count', type: 'integer', brief: 'The number of distinct native module and method pairs called during the lifetime of the span. Only applies to React Native.', deprecationChain: [ - 'turbo_module.call.distinct_count', + 'react_native.module.call.distinct_count', 'turbo_module.unique_methods', 'turbo_modules.unique_methods', ], }, 'turbo_modules.total_call_count': { - canonicalName: 'turbo_module.call.count', + canonicalName: 'react_native.module.call.count', type: 'integer', brief: 'The number of native module calls in the flushed call aggregate. Only applies to React Native.', - deprecationChain: ['turbo_module.call.count', 'turbo_module.total_call_count', 'turbo_modules.total_call_count'], + deprecationChain: [ + 'react_native.module.call.count', + 'turbo_module.total_call_count', + 'turbo_modules.total_call_count', + ], }, 'turbo_modules.total_duration_ms': { - canonicalName: 'turbo_module.duration.total', + canonicalName: 'react_native.module.duration.total', type: 'double', brief: 'The combined duration of all native module calls in the flushed call aggregate, in milliseconds. Only applies to React Native.', deprecationChain: [ - 'turbo_module.duration.total', + 'react_native.module.duration.total', 'turbo_module.total_duration_ms', 'turbo_modules.total_duration_ms', ], }, 'turbo_modules.total_error_count': { - canonicalName: 'turbo_module.error.count', + canonicalName: 'react_native.module.error.count', type: 'integer', brief: 'The number of failed native module calls in the flushed call aggregate. Only applies to React Native.', - deprecationChain: ['turbo_module.error.count', 'turbo_module.total_error_count', 'turbo_modules.total_error_count'], + deprecationChain: [ + 'react_native.module.error.count', + 'turbo_module.total_error_count', + 'turbo_modules.total_error_count', + ], }, 'turbo_modules.unique_methods': { - canonicalName: 'turbo_module.call.distinct_count', + canonicalName: 'react_native.module.call.distinct_count', type: 'integer', brief: 'The number of distinct native module and method pairs in the flushed call aggregate. Only applies to React Native.', deprecationChain: [ - 'turbo_module.call.distinct_count', + 'react_native.module.call.distinct_count', 'turbo_module.unique_methods', 'turbo_modules.unique_methods', ], diff --git a/model/attributes/react_native/react_native__architecture.json b/model/attributes/react_native/react_native__architecture.json new file mode 100644 index 000000000..04862b2d6 --- /dev/null +++ b/model/attributes/react_native/react_native__architecture.json @@ -0,0 +1,19 @@ +{ + "key": "react_native.architecture", + "brief": "The React Native architecture the app is running on. `new` for the New Architecture, where native modules are resolved as TurboModules through `TurboModuleRegistry`, `legacy` for the Old Architecture bridge.", + "type": "string", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "visibility": "public", + "examples": ["new", "legacy"], + "alias": ["turbo_module.arch"], + "changelog": [ + { + "version": "next", + "prs": [564], + "description": "Added react_native.architecture attribute" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__call__count.json b/model/attributes/react_native/react_native__module__call__count.json similarity index 70% rename from model/attributes/turbo_module/turbo_module__call__count.json rename to model/attributes/react_native/react_native__module__call__count.json index bad7ec50a..bb175319b 100644 --- a/model/attributes/turbo_module/turbo_module__call__count.json +++ b/model/attributes/react_native/react_native__module__call__count.json @@ -1,6 +1,6 @@ { - "key": "turbo_module.call.count", - "brief": "The number of native module calls observed during the lifetime of the span. Only applies to React Native.", + "key": "react_native.module.call.count", + "brief": "The number of native module calls observed during the lifetime of the span.", "type": "integer", "apply_scrubbing": { "key": "manual" @@ -13,7 +13,7 @@ { "version": "next", "prs": [564], - "description": "Added turbo_module.call.count attribute" + "description": "Added react_native.module.call.count attribute" } ] } diff --git a/model/attributes/turbo_module/turbo_module__call__distinct_count.json b/model/attributes/react_native/react_native__module__call__distinct_count.json similarity index 67% rename from model/attributes/turbo_module/turbo_module__call__distinct_count.json rename to model/attributes/react_native/react_native__module__call__distinct_count.json index 5a7ce5cf9..c569318b7 100644 --- a/model/attributes/turbo_module/turbo_module__call__distinct_count.json +++ b/model/attributes/react_native/react_native__module__call__distinct_count.json @@ -1,6 +1,6 @@ { - "key": "turbo_module.call.distinct_count", - "brief": "The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated. Only applies to React Native.", + "key": "react_native.module.call.distinct_count", + "brief": "The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated.", "type": "integer", "apply_scrubbing": { "key": "manual" @@ -13,7 +13,7 @@ { "version": "next", "prs": [564], - "description": "Added turbo_module.call.distinct_count attribute" + "description": "Added react_native.module.call.distinct_count attribute" } ] } diff --git a/model/attributes/turbo_module/turbo_module__duration__max.json b/model/attributes/react_native/react_native__module__duration__max.json similarity index 59% rename from model/attributes/turbo_module/turbo_module__duration__max.json rename to model/attributes/react_native/react_native__module__duration__max.json index 4d3b5ee8d..86fe94872 100644 --- a/model/attributes/turbo_module/turbo_module__duration__max.json +++ b/model/attributes/react_native/react_native__module__duration__max.json @@ -1,6 +1,6 @@ { - "key": "turbo_module.duration.max", - "brief": "The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds. Only applies to React Native.", + "key": "react_native.module.duration.max", + "brief": "The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds.", "type": "double", "apply_scrubbing": { "key": "manual" @@ -12,7 +12,7 @@ { "version": "next", "prs": [564], - "description": "Added turbo_module.duration.max attribute" + "description": "Added react_native.module.duration.max attribute" } ] } diff --git a/model/attributes/turbo_module/turbo_module__duration__total.json b/model/attributes/react_native/react_native__module__duration__total.json similarity index 68% rename from model/attributes/turbo_module/turbo_module__duration__total.json rename to model/attributes/react_native/react_native__module__duration__total.json index e4e07e0db..76d2f6546 100644 --- a/model/attributes/turbo_module/turbo_module__duration__total.json +++ b/model/attributes/react_native/react_native__module__duration__total.json @@ -1,6 +1,6 @@ { - "key": "turbo_module.duration.total", - "brief": "The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration. Only applies to React Native.", + "key": "react_native.module.duration.total", + "brief": "The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration.", "type": "double", "apply_scrubbing": { "key": "manual" @@ -13,7 +13,7 @@ { "version": "next", "prs": [564], - "description": "Added turbo_module.duration.total attribute" + "description": "Added react_native.module.duration.total attribute" } ] } diff --git a/model/attributes/turbo_module/turbo_module__error__count.json b/model/attributes/react_native/react_native__module__error__count.json similarity index 65% rename from model/attributes/turbo_module/turbo_module__error__count.json rename to model/attributes/react_native/react_native__module__error__count.json index ce8317bea..358f24882 100644 --- a/model/attributes/turbo_module/turbo_module__error__count.json +++ b/model/attributes/react_native/react_native__module__error__count.json @@ -1,6 +1,6 @@ { - "key": "turbo_module.error.count", - "brief": "The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback. Only applies to React Native.", + "key": "react_native.module.error.count", + "brief": "The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or \u2014 on the Old Architecture bridge only \u2014 invoked its failure callback.", "type": "integer", "apply_scrubbing": { "key": "manual" @@ -13,7 +13,7 @@ { "version": "next", "prs": [564], - "description": "Added turbo_module.error.count attribute" + "description": "Added react_native.module.error.count attribute" } ] } diff --git a/model/attributes/turbo_module/turbo_module__kind.json b/model/attributes/react_native/react_native__module__kind.json similarity index 71% rename from model/attributes/turbo_module/turbo_module__kind.json rename to model/attributes/react_native/react_native__module__kind.json index 8db0635e9..7b591e88a 100644 --- a/model/attributes/turbo_module/turbo_module__kind.json +++ b/model/attributes/react_native/react_native__module__kind.json @@ -1,6 +1,6 @@ { - "key": "turbo_module.kind", - "brief": "Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. Only applies to React Native.", + "key": "react_native.module.kind", + "brief": "Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`.", "type": "string", "apply_scrubbing": { "key": "manual" @@ -12,7 +12,7 @@ { "version": "next", "prs": [564], - "description": "Added turbo_module.kind attribute" + "description": "Added react_native.module.kind attribute" } ] } diff --git a/model/attributes/react_native/react_native__module__method.json b/model/attributes/react_native/react_native__module__method.json new file mode 100644 index 000000000..5c2c4ce0f --- /dev/null +++ b/model/attributes/react_native/react_native__module__method.json @@ -0,0 +1,20 @@ +{ + "key": "react_native.module.method", + "brief": "The name of the native module method that was called.", + "type": "string", + "apply_scrubbing": { + "key": "manual", + "reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable" + }, + "is_in_otel": false, + "visibility": "public", + "examples": ["getUniqueId"], + "alias": ["turbo_module.method"], + "changelog": [ + { + "version": "next", + "prs": [564], + "description": "Added react_native.module.method attribute" + } + ] +} diff --git a/model/attributes/react_native/react_native__module__name.json b/model/attributes/react_native/react_native__module__name.json new file mode 100644 index 000000000..7bf30c952 --- /dev/null +++ b/model/attributes/react_native/react_native__module__name.json @@ -0,0 +1,20 @@ +{ + "key": "react_native.module.name", + "brief": "The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key.", + "type": "string", + "apply_scrubbing": { + "key": "manual", + "reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable" + }, + "is_in_otel": false, + "visibility": "public", + "examples": ["RNDeviceInfo"], + "alias": ["turbo_module.name"], + "changelog": [ + { + "version": "next", + "prs": [564], + "description": "Added react_native.module.name attribute" + } + ] +} diff --git a/model/attributes/turbo_module/turbo_module__top__duration.json b/model/attributes/react_native/react_native__module__top__duration.json similarity index 55% rename from model/attributes/turbo_module/turbo_module__top__duration.json rename to model/attributes/react_native/react_native__module__top__duration.json index fba11602e..1d7a21f38 100644 --- a/model/attributes/turbo_module/turbo_module__top__duration.json +++ b/model/attributes/react_native/react_native__module__top__duration.json @@ -1,6 +1,6 @@ { - "key": "turbo_module.top.duration", - "brief": "The total duration attributed to `turbo_module.top.name`, in milliseconds. Only applies to React Native.", + "key": "react_native.module.top.duration", + "brief": "The total duration attributed to `react_native.module.top.name`, in milliseconds.", "type": "double", "apply_scrubbing": { "key": "manual" @@ -13,7 +13,7 @@ { "version": "next", "prs": [564], - "description": "Added turbo_module.top.duration attribute" + "description": "Added react_native.module.top.duration attribute" } ] } diff --git a/model/attributes/turbo_module/turbo_module__top__name.json b/model/attributes/react_native/react_native__module__top__name.json similarity index 78% rename from model/attributes/turbo_module/turbo_module__top__name.json rename to model/attributes/react_native/react_native__module__top__name.json index dd2282dc6..23b411e8f 100644 --- a/model/attributes/turbo_module/turbo_module__top__name.json +++ b/model/attributes/react_native/react_native__module__top__name.json @@ -1,6 +1,6 @@ { - "key": "turbo_module.top.name", - "brief": "The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`. Only applies to React Native.", + "key": "react_native.module.top.name", + "brief": "The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`.", "type": "string", "apply_scrubbing": { "key": "manual", @@ -14,7 +14,7 @@ { "version": "next", "prs": [564], - "description": "Added turbo_module.top.name attribute" + "description": "Added react_native.module.top.name attribute" } ] } diff --git a/model/attributes/turbo_module/turbo_module__arch.json b/model/attributes/turbo_module/turbo_module__arch.json index 2cec25f6f..d966680e5 100644 --- a/model/attributes/turbo_module/turbo_module__arch.json +++ b/model/attributes/turbo_module/turbo_module__arch.json @@ -8,11 +8,17 @@ "is_in_otel": false, "visibility": "public", "examples": ["new", "legacy"], + "alias": ["react_native.architecture"], + "deprecation": { + "replacement": "react_native.architecture", + "reason": "Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules", + "_status": "backfill" + }, "changelog": [ { "version": "next", "prs": [564], - "description": "Added turbo_module.arch attribute" + "description": "Added turbo_module.arch and deprecated it in favor of react_native.architecture" } ] } diff --git a/model/attributes/turbo_module/turbo_module__method.json b/model/attributes/turbo_module/turbo_module__method.json index a8d2e3e17..c12b6a61a 100644 --- a/model/attributes/turbo_module/turbo_module__method.json +++ b/model/attributes/turbo_module/turbo_module__method.json @@ -9,11 +9,17 @@ "is_in_otel": false, "visibility": "public", "examples": ["getUniqueId"], + "alias": ["react_native.module.method"], + "deprecation": { + "replacement": "react_native.module.method", + "reason": "Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules", + "_status": "backfill" + }, "changelog": [ { "version": "next", "prs": [564], - "description": "Added turbo_module.method attribute" + "description": "Added turbo_module.method and deprecated it in favor of react_native.module.method" } ] } diff --git a/model/attributes/turbo_module/turbo_module__name.json b/model/attributes/turbo_module/turbo_module__name.json index 713ee53d2..cf93e0a0e 100644 --- a/model/attributes/turbo_module/turbo_module__name.json +++ b/model/attributes/turbo_module/turbo_module__name.json @@ -9,11 +9,17 @@ "is_in_otel": false, "visibility": "public", "examples": ["RNDeviceInfo"], + "alias": ["react_native.module.name"], + "deprecation": { + "replacement": "react_native.module.name", + "reason": "Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules", + "_status": "backfill" + }, "changelog": [ { "version": "next", "prs": [564], - "description": "Added turbo_module.name attribute" + "description": "Added turbo_module.name and deprecated it in favor of react_native.module.name" } ] } diff --git a/model/attributes/turbo_module/turbo_module__top_module.json b/model/attributes/turbo_module/turbo_module__top_module.json index 0582c8705..f9804ad2e 100644 --- a/model/attributes/turbo_module/turbo_module__top_module.json +++ b/model/attributes/turbo_module/turbo_module__top_module.json @@ -9,17 +9,17 @@ "is_in_otel": false, "visibility": "public", "examples": ["RNDeviceInfo.getUniqueId"], - "alias": ["turbo_module.top.name"], + "alias": ["react_native.module.top.name"], "deprecation": { - "replacement": "turbo_module.top.name", - "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + "replacement": "react_native.module.top.name", + "reason": "Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping", "_status": "backfill" }, "changelog": [ { "version": "next", "prs": [564], - "description": "Added turbo_module.top_module and deprecated it in favor of turbo_module.top.name" + "description": "Added turbo_module.top_module and deprecated it in favor of react_native.module.top.name" } ] } diff --git a/model/attributes/turbo_module/turbo_module__top_module_duration_ms.json b/model/attributes/turbo_module/turbo_module__top_module_duration_ms.json index cd3b1e080..7405b98de 100644 --- a/model/attributes/turbo_module/turbo_module__top_module_duration_ms.json +++ b/model/attributes/turbo_module/turbo_module__top_module_duration_ms.json @@ -8,17 +8,17 @@ "is_in_otel": false, "visibility": "public", "examples": [87.25], - "alias": ["turbo_module.top.duration"], + "alias": ["react_native.module.top.duration"], "deprecation": { - "replacement": "turbo_module.top.duration", - "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + "replacement": "react_native.module.top.duration", + "reason": "Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping", "_status": "backfill" }, "changelog": [ { "version": "next", "prs": [564], - "description": "Added turbo_module.top_module_duration_ms and deprecated it in favor of turbo_module.top.duration" + "description": "Added turbo_module.top_module_duration_ms and deprecated it in favor of react_native.module.top.duration" } ] } diff --git a/model/attributes/turbo_module/turbo_module__total_call_count.json b/model/attributes/turbo_module/turbo_module__total_call_count.json index bbd816920..c6c5926a2 100644 --- a/model/attributes/turbo_module/turbo_module__total_call_count.json +++ b/model/attributes/turbo_module/turbo_module__total_call_count.json @@ -8,17 +8,17 @@ "is_in_otel": false, "visibility": "public", "examples": [42], - "alias": ["turbo_module.call.count", "turbo_modules.total_call_count"], + "alias": ["react_native.module.call.count", "turbo_modules.total_call_count"], "deprecation": { - "replacement": "turbo_module.call.count", - "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + "replacement": "react_native.module.call.count", + "reason": "Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping", "_status": "backfill" }, "changelog": [ { "version": "next", "prs": [564], - "description": "Added turbo_module.total_call_count and deprecated it in favor of turbo_module.call.count" + "description": "Added turbo_module.total_call_count and deprecated it in favor of react_native.module.call.count" } ] } diff --git a/model/attributes/turbo_module/turbo_module__total_duration_ms.json b/model/attributes/turbo_module/turbo_module__total_duration_ms.json index 73f0a168f..098113f10 100644 --- a/model/attributes/turbo_module/turbo_module__total_duration_ms.json +++ b/model/attributes/turbo_module/turbo_module__total_duration_ms.json @@ -8,17 +8,17 @@ "is_in_otel": false, "visibility": "public", "examples": [128.45], - "alias": ["turbo_module.duration.total", "turbo_modules.total_duration_ms"], + "alias": ["react_native.module.duration.total", "turbo_modules.total_duration_ms"], "deprecation": { - "replacement": "turbo_module.duration.total", - "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + "replacement": "react_native.module.duration.total", + "reason": "Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping", "_status": "backfill" }, "changelog": [ { "version": "next", "prs": [564], - "description": "Added turbo_module.total_duration_ms and deprecated it in favor of turbo_module.duration.total" + "description": "Added turbo_module.total_duration_ms and deprecated it in favor of react_native.module.duration.total" } ] } diff --git a/model/attributes/turbo_module/turbo_module__total_error_count.json b/model/attributes/turbo_module/turbo_module__total_error_count.json index a73f52b12..6fc3f97d3 100644 --- a/model/attributes/turbo_module/turbo_module__total_error_count.json +++ b/model/attributes/turbo_module/turbo_module__total_error_count.json @@ -8,17 +8,17 @@ "is_in_otel": false, "visibility": "public", "examples": [2], - "alias": ["turbo_module.error.count", "turbo_modules.total_error_count"], + "alias": ["react_native.module.error.count", "turbo_modules.total_error_count"], "deprecation": { - "replacement": "turbo_module.error.count", - "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + "replacement": "react_native.module.error.count", + "reason": "Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping", "_status": "backfill" }, "changelog": [ { "version": "next", "prs": [564], - "description": "Added turbo_module.total_error_count and deprecated it in favor of turbo_module.error.count" + "description": "Added turbo_module.total_error_count and deprecated it in favor of react_native.module.error.count" } ] } diff --git a/model/attributes/turbo_module/turbo_module__unique_methods.json b/model/attributes/turbo_module/turbo_module__unique_methods.json index b6af589a9..aa3a48625 100644 --- a/model/attributes/turbo_module/turbo_module__unique_methods.json +++ b/model/attributes/turbo_module/turbo_module__unique_methods.json @@ -8,17 +8,17 @@ "is_in_otel": false, "visibility": "public", "examples": [7], - "alias": ["turbo_module.call.distinct_count", "turbo_modules.unique_methods"], + "alias": ["react_native.module.call.distinct_count", "turbo_modules.unique_methods"], "deprecation": { - "replacement": "turbo_module.call.distinct_count", - "reason": "Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + "replacement": "react_native.module.call.distinct_count", + "reason": "Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping", "_status": "backfill" }, "changelog": [ { "version": "next", "prs": [564], - "description": "Added turbo_module.unique_methods and deprecated it in favor of turbo_module.call.distinct_count" + "description": "Added turbo_module.unique_methods and deprecated it in favor of react_native.module.call.distinct_count" } ] } diff --git a/model/attributes/turbo_modules/turbo_modules__total_call_count.json b/model/attributes/turbo_modules/turbo_modules__total_call_count.json index 22b30fab5..723a3bdd0 100644 --- a/model/attributes/turbo_modules/turbo_modules__total_call_count.json +++ b/model/attributes/turbo_modules/turbo_modules__total_call_count.json @@ -8,17 +8,17 @@ "is_in_otel": false, "visibility": "public", "examples": [42], - "alias": ["turbo_module.call.count", "turbo_module.total_call_count"], + "alias": ["react_native.module.call.count", "turbo_module.total_call_count"], "deprecation": { - "replacement": "turbo_module.call.count", - "reason": "Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + "replacement": "react_native.module.call.count", + "reason": "Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix", "_status": "backfill" }, "changelog": [ { "version": "next", "prs": [564], - "description": "Added turbo_modules.total_call_count and deprecated it in favor of turbo_module.call.count" + "description": "Added turbo_modules.total_call_count and deprecated it in favor of react_native.module.call.count" } ] } diff --git a/model/attributes/turbo_modules/turbo_modules__total_duration_ms.json b/model/attributes/turbo_modules/turbo_modules__total_duration_ms.json index d47db763f..3e2a53ed0 100644 --- a/model/attributes/turbo_modules/turbo_modules__total_duration_ms.json +++ b/model/attributes/turbo_modules/turbo_modules__total_duration_ms.json @@ -8,17 +8,17 @@ "is_in_otel": false, "visibility": "public", "examples": [128.45], - "alias": ["turbo_module.duration.total", "turbo_module.total_duration_ms"], + "alias": ["react_native.module.duration.total", "turbo_module.total_duration_ms"], "deprecation": { - "replacement": "turbo_module.duration.total", - "reason": "Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + "replacement": "react_native.module.duration.total", + "reason": "Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix", "_status": "backfill" }, "changelog": [ { "version": "next", "prs": [564], - "description": "Added turbo_modules.total_duration_ms and deprecated it in favor of turbo_module.duration.total" + "description": "Added turbo_modules.total_duration_ms and deprecated it in favor of react_native.module.duration.total" } ] } diff --git a/model/attributes/turbo_modules/turbo_modules__total_error_count.json b/model/attributes/turbo_modules/turbo_modules__total_error_count.json index b118751d1..03bef8134 100644 --- a/model/attributes/turbo_modules/turbo_modules__total_error_count.json +++ b/model/attributes/turbo_modules/turbo_modules__total_error_count.json @@ -8,17 +8,17 @@ "is_in_otel": false, "visibility": "public", "examples": [2], - "alias": ["turbo_module.error.count", "turbo_module.total_error_count"], + "alias": ["react_native.module.error.count", "turbo_module.total_error_count"], "deprecation": { - "replacement": "turbo_module.error.count", - "reason": "Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + "replacement": "react_native.module.error.count", + "reason": "Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix", "_status": "backfill" }, "changelog": [ { "version": "next", "prs": [564], - "description": "Added turbo_modules.total_error_count and deprecated it in favor of turbo_module.error.count" + "description": "Added turbo_modules.total_error_count and deprecated it in favor of react_native.module.error.count" } ] } diff --git a/model/attributes/turbo_modules/turbo_modules__unique_methods.json b/model/attributes/turbo_modules/turbo_modules__unique_methods.json index 46d9dc610..952cbdfe3 100644 --- a/model/attributes/turbo_modules/turbo_modules__unique_methods.json +++ b/model/attributes/turbo_modules/turbo_modules__unique_methods.json @@ -8,17 +8,17 @@ "is_in_otel": false, "visibility": "public", "examples": [7], - "alias": ["turbo_module.call.distinct_count", "turbo_module.unique_methods"], + "alias": ["react_native.module.call.distinct_count", "turbo_module.unique_methods"], "deprecation": { - "replacement": "turbo_module.call.distinct_count", - "reason": "Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + "replacement": "react_native.module.call.distinct_count", + "reason": "Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix", "_status": "backfill" }, "changelog": [ { "version": "next", "prs": [564], - "description": "Added turbo_modules.unique_methods and deprecated it in favor of turbo_module.call.distinct_count" + "description": "Added turbo_modules.unique_methods and deprecated it in favor of react_native.module.call.distinct_count" } ] } diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 33f348868..e5dc47e68 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -399,6 +399,9 @@ class _AttributeNamesMeta(type): "TRANSACTION", "TTFB_REQUESTTIME", "TTFB", + "TURBO_MODULE_ARCH", + "TURBO_MODULE_METHOD", + "TURBO_MODULE_NAME", "TURBO_MODULE_TOP_MODULE", "TURBO_MODULE_TOP_MODULE_DURATION_MS", "TURBO_MODULE_TOTAL_CALL_COUNT", @@ -8313,6 +8316,160 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "18.2.0" """ + # Path: model/attributes/react_native/react_native__architecture.json + REACT_NATIVE_ARCHITECTURE: Literal["react_native.architecture"] = ( + "react_native.architecture" + ) + """The React Native architecture the app is running on. `new` for the New Architecture, where native modules are resolved as TurboModules through `TurboModuleRegistry`, `legacy` for the Old Architecture bridge. + + Type: str + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.arch + Example: "new" + Example: "legacy" + """ + + # Path: model/attributes/react_native/react_native__module__call__count.json + REACT_NATIVE_MODULE_CALL_COUNT: Literal["react_native.module.call.count"] = ( + "react_native.module.call.count" + ) + """The number of native module calls observed during the lifetime of the span. + + Type: int + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.total_call_count, turbo_modules.total_call_count + Example: 42 + """ + + # Path: model/attributes/react_native/react_native__module__call__distinct_count.json + REACT_NATIVE_MODULE_CALL_DISTINCT_COUNT: Literal[ + "react_native.module.call.distinct_count" + ] = "react_native.module.call.distinct_count" + """The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated. + + Type: int + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.unique_methods, turbo_modules.unique_methods + Example: 7 + """ + + # Path: model/attributes/react_native/react_native__module__duration__max.json + REACT_NATIVE_MODULE_DURATION_MAX: Literal["react_native.module.duration.max"] = ( + "react_native.module.duration.max" + ) + """The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds. + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Example: 512.5 + """ + + # Path: model/attributes/react_native/react_native__module__duration__total.json + REACT_NATIVE_MODULE_DURATION_TOTAL: Literal[ + "react_native.module.duration.total" + ] = "react_native.module.duration.total" + """The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration. + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.total_duration_ms, turbo_modules.total_duration_ms + Example: 128.45 + """ + + # Path: model/attributes/react_native/react_native__module__error__count.json + REACT_NATIVE_MODULE_ERROR_COUNT: Literal["react_native.module.error.count"] = ( + "react_native.module.error.count" + ) + """The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback. + + Type: int + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.total_error_count, turbo_modules.total_error_count + Example: 2 + """ + + # Path: model/attributes/react_native/react_native__module__kind.json + REACT_NATIVE_MODULE_KIND: Literal["react_native.module.kind"] = ( + "react_native.module.kind" + ) + """Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. + + Type: str + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Example: "sync" + Example: "async" + """ + + # Path: model/attributes/react_native/react_native__module__method.json + REACT_NATIVE_MODULE_METHOD: Literal["react_native.module.method"] = ( + "react_native.module.method" + ) + """The name of the native module method that was called. + + Type: str + Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.method + Example: "getUniqueId" + """ + + # Path: model/attributes/react_native/react_native__module__name.json + REACT_NATIVE_MODULE_NAME: Literal["react_native.module.name"] = ( + "react_native.module.name" + ) + """The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key. + + Type: str + Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.name + Example: "RNDeviceInfo" + """ + + # Path: model/attributes/react_native/react_native__module__top__duration.json + REACT_NATIVE_MODULE_TOP_DURATION: Literal["react_native.module.top.duration"] = ( + "react_native.module.top.duration" + ) + """The total duration attributed to `react_native.module.top.name`, in milliseconds. + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.top_module_duration_ms + Example: 87.25 + """ + + # Path: model/attributes/react_native/react_native__module__top__name.json + REACT_NATIVE_MODULE_TOP_NAME: Literal["react_native.module.top.name"] = ( + "react_native.module.top.name" + ) + """The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`. + + Type: str + Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable + Defined in OTEL: No + Visibility: public + Aliases: turbo_module.top_module + Example: "RNDeviceInfo.getUniqueId" + """ + # Path: model/attributes/redis/redis__command.json REDIS_COMMAND: Literal["redis.command"] = "redis.command" """The name of the Redis operation being executed. @@ -10039,91 +10196,12 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Apply Scrubbing: manual Defined in OTEL: No Visibility: public + Aliases: react_native.architecture + DEPRECATED: Use react_native.architecture instead - Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules Example: "new" Example: "legacy" """ - # Path: model/attributes/turbo_module/turbo_module__call__count.json - TURBO_MODULE_CALL_COUNT: Literal["turbo_module.call.count"] = ( - "turbo_module.call.count" - ) - """The number of native module calls observed during the lifetime of the span. Only applies to React Native. - - Type: int - Apply Scrubbing: manual - Defined in OTEL: No - Visibility: public - Aliases: turbo_module.total_call_count, turbo_modules.total_call_count - Example: 42 - """ - - # Path: model/attributes/turbo_module/turbo_module__call__distinct_count.json - TURBO_MODULE_CALL_DISTINCT_COUNT: Literal["turbo_module.call.distinct_count"] = ( - "turbo_module.call.distinct_count" - ) - """The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated. Only applies to React Native. - - Type: int - Apply Scrubbing: manual - Defined in OTEL: No - Visibility: public - Aliases: turbo_module.unique_methods, turbo_modules.unique_methods - Example: 7 - """ - - # Path: model/attributes/turbo_module/turbo_module__duration__max.json - TURBO_MODULE_DURATION_MAX: Literal["turbo_module.duration.max"] = ( - "turbo_module.duration.max" - ) - """The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds. Only applies to React Native. - - Type: float - Apply Scrubbing: manual - Defined in OTEL: No - Visibility: public - Example: 512.5 - """ - - # Path: model/attributes/turbo_module/turbo_module__duration__total.json - TURBO_MODULE_DURATION_TOTAL: Literal["turbo_module.duration.total"] = ( - "turbo_module.duration.total" - ) - """The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration. Only applies to React Native. - - Type: float - Apply Scrubbing: manual - Defined in OTEL: No - Visibility: public - Aliases: turbo_module.total_duration_ms, turbo_modules.total_duration_ms - Example: 128.45 - """ - - # Path: model/attributes/turbo_module/turbo_module__error__count.json - TURBO_MODULE_ERROR_COUNT: Literal["turbo_module.error.count"] = ( - "turbo_module.error.count" - ) - """The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback. Only applies to React Native. - - Type: int - Apply Scrubbing: manual - Defined in OTEL: No - Visibility: public - Aliases: turbo_module.total_error_count, turbo_modules.total_error_count - Example: 2 - """ - - # Path: model/attributes/turbo_module/turbo_module__kind.json - TURBO_MODULE_KIND: Literal["turbo_module.kind"] = "turbo_module.kind" - """Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. Only applies to React Native. - - Type: str - Apply Scrubbing: manual - Defined in OTEL: No - Visibility: public - Example: "sync" - Example: "async" - """ - # Path: model/attributes/turbo_module/turbo_module__method.json TURBO_MODULE_METHOD: Literal["turbo_module.method"] = "turbo_module.method" """The name of the native module method that was called. Only applies to React Native. @@ -10132,6 +10210,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable Defined in OTEL: No Visibility: public + Aliases: react_native.module.method + DEPRECATED: Use react_native.module.method instead - Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules Example: "getUniqueId" """ @@ -10143,35 +10223,11 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable Defined in OTEL: No Visibility: public + Aliases: react_native.module.name + DEPRECATED: Use react_native.module.name instead - Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules Example: "RNDeviceInfo" """ - # Path: model/attributes/turbo_module/turbo_module__top__duration.json - TURBO_MODULE_TOP_DURATION: Literal["turbo_module.top.duration"] = ( - "turbo_module.top.duration" - ) - """The total duration attributed to `turbo_module.top.name`, in milliseconds. Only applies to React Native. - - Type: float - Apply Scrubbing: manual - Defined in OTEL: No - Visibility: public - Aliases: turbo_module.top_module_duration_ms - Example: 87.25 - """ - - # Path: model/attributes/turbo_module/turbo_module__top__name.json - TURBO_MODULE_TOP_NAME: Literal["turbo_module.top.name"] = "turbo_module.top.name" - """The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`. Only applies to React Native. - - Type: str - Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable - Defined in OTEL: No - Visibility: public - Aliases: turbo_module.top_module - Example: "RNDeviceInfo.getUniqueId" - """ - # Path: model/attributes/turbo_module/turbo_module__top_module.json TURBO_MODULE_TOP_MODULE: Literal["turbo_module.top_module"] = ( "turbo_module.top_module" @@ -10182,8 +10238,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Apply Scrubbing: manual - Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable Defined in OTEL: No Visibility: public - Aliases: turbo_module.top.name - DEPRECATED: Use turbo_module.top.name instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + Aliases: react_native.module.top.name + DEPRECATED: Use react_native.module.top.name instead - Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping Example: "RNDeviceInfo.getUniqueId" """ @@ -10197,8 +10253,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Apply Scrubbing: manual Defined in OTEL: No Visibility: public - Aliases: turbo_module.top.duration - DEPRECATED: Use turbo_module.top.duration instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + Aliases: react_native.module.top.duration + DEPRECATED: Use react_native.module.top.duration instead - Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping Example: 87.25 """ @@ -10212,8 +10268,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Apply Scrubbing: manual Defined in OTEL: No Visibility: public - Aliases: turbo_module.call.count, turbo_modules.total_call_count - DEPRECATED: Use turbo_module.call.count instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + Aliases: react_native.module.call.count, turbo_modules.total_call_count + DEPRECATED: Use react_native.module.call.count instead - Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping Example: 42 """ @@ -10227,8 +10283,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Apply Scrubbing: manual Defined in OTEL: No Visibility: public - Aliases: turbo_module.duration.total, turbo_modules.total_duration_ms - DEPRECATED: Use turbo_module.duration.total instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + Aliases: react_native.module.duration.total, turbo_modules.total_duration_ms + DEPRECATED: Use react_native.module.duration.total instead - Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping Example: 128.45 """ @@ -10242,8 +10298,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Apply Scrubbing: manual Defined in OTEL: No Visibility: public - Aliases: turbo_module.error.count, turbo_modules.total_error_count - DEPRECATED: Use turbo_module.error.count instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + Aliases: react_native.module.error.count, turbo_modules.total_error_count + DEPRECATED: Use react_native.module.error.count instead - Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping Example: 2 """ @@ -10257,8 +10313,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Apply Scrubbing: manual Defined in OTEL: No Visibility: public - Aliases: turbo_module.call.distinct_count, turbo_modules.unique_methods - DEPRECATED: Use turbo_module.call.distinct_count instead - Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping + Aliases: react_native.module.call.distinct_count, turbo_modules.unique_methods + DEPRECATED: Use react_native.module.call.distinct_count instead - Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping Example: 7 """ @@ -10272,8 +10328,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Apply Scrubbing: manual Defined in OTEL: No Visibility: public - Aliases: turbo_module.call.count, turbo_module.total_call_count - DEPRECATED: Use turbo_module.call.count instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + Aliases: react_native.module.call.count, turbo_module.total_call_count + DEPRECATED: Use react_native.module.call.count instead - Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix Example: 42 """ @@ -10287,8 +10343,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Apply Scrubbing: manual Defined in OTEL: No Visibility: public - Aliases: turbo_module.duration.total, turbo_module.total_duration_ms - DEPRECATED: Use turbo_module.duration.total instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + Aliases: react_native.module.duration.total, turbo_module.total_duration_ms + DEPRECATED: Use react_native.module.duration.total instead - Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix Example: 128.45 """ @@ -10302,8 +10358,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Apply Scrubbing: manual Defined in OTEL: No Visibility: public - Aliases: turbo_module.error.count, turbo_module.total_error_count - DEPRECATED: Use turbo_module.error.count instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + Aliases: react_native.module.error.count, turbo_module.total_error_count + DEPRECATED: Use react_native.module.error.count instead - Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix Example: 2 """ @@ -10317,8 +10373,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Apply Scrubbing: manual Defined in OTEL: No Visibility: public - Aliases: turbo_module.call.distinct_count, turbo_module.unique_methods - DEPRECATED: Use turbo_module.call.distinct_count instead - Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix + Aliases: react_native.module.call.distinct_count, turbo_module.unique_methods + DEPRECATED: Use react_native.module.call.distinct_count instead - Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix Example: 7 """ @@ -23100,88 +23156,324 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ), ], ), - "redis.command": AttributeMetadata( - brief="The name of the Redis operation being executed.", + "react_native.architecture": AttributeMetadata( + brief="The React Native architecture the app is running on. `new` for the New Architecture, where native modules are resolved as TurboModules through `TurboModuleRegistry`, `legacy` for the Old Architecture bridge.", type=AttributeType.STRING, keys=( - "db.operation.name", - "cloudflare.d1.query_type", - "db.operation", - "redis.command", + "react_native.architecture", + "turbo_module.arch", ), apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), is_in_otel=False, visibility=Visibility.PUBLIC, - example="SELECT", - examples=["SELECT"], - deprecation=DeprecationInfo( - replacement="db.operation.name", status=DeprecationStatus.BACKFILL - ), - aliases=["cloudflare.d1.query_type", "db.operation.name", "db.operation"], + example="new", + examples=["new", "legacy"], + aliases=["turbo_module.arch"], changelog=[ ChangelogEntry( - version="0.19.0", prs=[531], description="Added redis.command attribute" + version="next", + prs=[564], + description="Added react_native.architecture attribute", ), ], ), - "redis.key": AttributeMetadata( - brief="The key the Redis command is operating on.", - type=AttributeType.STRING, + "react_native.module.call.count": AttributeMetadata( + brief="The number of native module calls observed during the lifetime of the span.", + type=AttributeType.INTEGER, keys=( - "db.redis.key", - "redis.key", + "react_native.module.call.count", + "turbo_module.total_call_count", + "turbo_modules.total_call_count", ), apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), is_in_otel=False, visibility=Visibility.PUBLIC, - example="user:2047:city", - deprecation=DeprecationInfo( - replacement="db.redis.key", - reason="This attribute is being deprecated in favor of db.redis.key, which is the preferred replacement.", - status=DeprecationStatus.BACKFILL, - ), - aliases=["db.redis.key"], + example=42, + examples=[42], + aliases=["turbo_module.total_call_count", "turbo_modules.total_call_count"], changelog=[ ChangelogEntry( - version="0.19.0", - prs=[484], - description="Added redis.key attribute, deprecated in favor of db.redis.key", + version="next", + prs=[564], + description="Added react_native.module.call.count attribute", ), ], ), - "release": AttributeMetadata( - brief="The sentry release.", - type=AttributeType.STRING, + "react_native.module.call.distinct_count": AttributeMetadata( + brief="The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated.", + type=AttributeType.INTEGER, keys=( - "sentry.release", - "release", - "service.version", + "react_native.module.call.distinct_count", + "turbo_module.unique_methods", + "turbo_modules.unique_methods", ), - apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.NEVER), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), is_in_otel=False, visibility=Visibility.PUBLIC, - example="production", - deprecation=DeprecationInfo( - replacement="sentry.release", status=DeprecationStatus.NORMALIZE - ), - aliases=["sentry.release"], + example=7, + examples=[7], + aliases=["turbo_module.unique_methods", "turbo_modules.unique_methods"], changelog=[ ChangelogEntry( - version="0.19.0", prs=[497], description="Configured normalization" + version="next", + prs=[564], + description="Added react_native.module.call.distinct_count attribute", ), - ChangelogEntry(version="0.1.0", prs=[61, 127]), - ChangelogEntry(version="0.0.0"), ], ), - "remix.action_form_data.": AttributeMetadata( - brief="Remix form data, being the form data key, the value being the form data value.", - type=AttributeType.STRING, - keys=("remix.action_form_data.",), - apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.AUTO), + "react_native.module.duration.max": AttributeMetadata( + brief="The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds.", + type=AttributeType.DOUBLE, + keys=("react_native.module.duration.max",), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), is_in_otel=False, visibility=Visibility.PUBLIC, - has_dynamic_suffix=True, - example="http.response.header.text='test'", + example=512.5, + examples=[512.5], + changelog=[ + ChangelogEntry( + version="next", + prs=[564], + description="Added react_native.module.duration.max attribute", + ), + ], + ), + "react_native.module.duration.total": AttributeMetadata( + brief="The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration.", + type=AttributeType.DOUBLE, + keys=( + "react_native.module.duration.total", + "turbo_module.total_duration_ms", + "turbo_modules.total_duration_ms", + ), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=128.45, + examples=[128.45], + aliases=["turbo_module.total_duration_ms", "turbo_modules.total_duration_ms"], + changelog=[ + ChangelogEntry( + version="next", + prs=[564], + description="Added react_native.module.duration.total attribute", + ), + ], + ), + "react_native.module.error.count": AttributeMetadata( + brief="The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback.", + type=AttributeType.INTEGER, + keys=( + "react_native.module.error.count", + "turbo_module.total_error_count", + "turbo_modules.total_error_count", + ), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=2, + examples=[2], + aliases=["turbo_module.total_error_count", "turbo_modules.total_error_count"], + changelog=[ + ChangelogEntry( + version="next", + prs=[564], + description="Added react_native.module.error.count attribute", + ), + ], + ), + "react_native.module.kind": AttributeMetadata( + brief="Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`.", + type=AttributeType.STRING, + keys=("react_native.module.kind",), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example="sync", + examples=["sync", "async"], + changelog=[ + ChangelogEntry( + version="next", + prs=[564], + description="Added react_native.module.kind attribute", + ), + ], + ), + "react_native.module.method": AttributeMetadata( + brief="The name of the native module method that was called.", + type=AttributeType.STRING, + keys=( + "react_native.module.method", + "turbo_module.method", + ), + apply_scrubbing=ApplyScrubbingInfo( + key=ApplyScrubbing.MANUAL, + reason="Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable", + ), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example="getUniqueId", + examples=["getUniqueId"], + aliases=["turbo_module.method"], + changelog=[ + ChangelogEntry( + version="next", + prs=[564], + description="Added react_native.module.method attribute", + ), + ], + ), + "react_native.module.name": AttributeMetadata( + brief="The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key.", + type=AttributeType.STRING, + keys=( + "react_native.module.name", + "turbo_module.name", + ), + apply_scrubbing=ApplyScrubbingInfo( + key=ApplyScrubbing.MANUAL, + reason="Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable", + ), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example="RNDeviceInfo", + examples=["RNDeviceInfo"], + aliases=["turbo_module.name"], + changelog=[ + ChangelogEntry( + version="next", + prs=[564], + description="Added react_native.module.name attribute", + ), + ], + ), + "react_native.module.top.duration": AttributeMetadata( + brief="The total duration attributed to `react_native.module.top.name`, in milliseconds.", + type=AttributeType.DOUBLE, + keys=( + "react_native.module.top.duration", + "turbo_module.top_module_duration_ms", + ), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=87.25, + examples=[87.25], + aliases=["turbo_module.top_module_duration_ms"], + changelog=[ + ChangelogEntry( + version="next", + prs=[564], + description="Added react_native.module.top.duration attribute", + ), + ], + ), + "react_native.module.top.name": AttributeMetadata( + brief="The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`.", + type=AttributeType.STRING, + keys=( + "react_native.module.top.name", + "turbo_module.top_module", + ), + apply_scrubbing=ApplyScrubbingInfo( + key=ApplyScrubbing.MANUAL, + reason="Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable", + ), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example="RNDeviceInfo.getUniqueId", + examples=["RNDeviceInfo.getUniqueId"], + aliases=["turbo_module.top_module"], + changelog=[ + ChangelogEntry( + version="next", + prs=[564], + description="Added react_native.module.top.name attribute", + ), + ], + ), + "redis.command": AttributeMetadata( + brief="The name of the Redis operation being executed.", + type=AttributeType.STRING, + keys=( + "db.operation.name", + "cloudflare.d1.query_type", + "db.operation", + "redis.command", + ), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example="SELECT", + examples=["SELECT"], + deprecation=DeprecationInfo( + replacement="db.operation.name", status=DeprecationStatus.BACKFILL + ), + aliases=["cloudflare.d1.query_type", "db.operation.name", "db.operation"], + changelog=[ + ChangelogEntry( + version="0.19.0", prs=[531], description="Added redis.command attribute" + ), + ], + ), + "redis.key": AttributeMetadata( + brief="The key the Redis command is operating on.", + type=AttributeType.STRING, + keys=( + "db.redis.key", + "redis.key", + ), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example="user:2047:city", + deprecation=DeprecationInfo( + replacement="db.redis.key", + reason="This attribute is being deprecated in favor of db.redis.key, which is the preferred replacement.", + status=DeprecationStatus.BACKFILL, + ), + aliases=["db.redis.key"], + changelog=[ + ChangelogEntry( + version="0.19.0", + prs=[484], + description="Added redis.key attribute, deprecated in favor of db.redis.key", + ), + ], + ), + "release": AttributeMetadata( + brief="The sentry release.", + type=AttributeType.STRING, + keys=( + "sentry.release", + "release", + "service.version", + ), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.NEVER), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example="production", + deprecation=DeprecationInfo( + replacement="sentry.release", status=DeprecationStatus.NORMALIZE + ), + aliases=["sentry.release"], + changelog=[ + ChangelogEntry( + version="0.19.0", prs=[497], description="Configured normalization" + ), + ChangelogEntry(version="0.1.0", prs=[61, 127]), + ChangelogEntry(version="0.0.0"), + ], + ), + "remix.action_form_data.": AttributeMetadata( + brief="Remix form data, being the form data key, the value being the form data value.", + type=AttributeType.STRING, + keys=("remix.action_form_data.",), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.AUTO), + is_in_otel=False, + visibility=Visibility.PUBLIC, + has_dynamic_suffix=True, + example="http.response.header.text='test'", changelog=[ ChangelogEntry(version="0.1.0", prs=[103]), ], @@ -25641,146 +25933,36 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "turbo_module.arch": AttributeMetadata( brief="The React Native architecture the call was observed on. `new` for a TurboModule resolved through `TurboModuleRegistry`, `legacy` for a module reached over the Old Architecture bridge. Only applies to React Native.", type=AttributeType.STRING, - keys=("turbo_module.arch",), - apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), - is_in_otel=False, - visibility=Visibility.PUBLIC, - example="new", - examples=["new", "legacy"], - changelog=[ - ChangelogEntry( - version="next", - prs=[564], - description="Added turbo_module.arch attribute", - ), - ], - ), - "turbo_module.call.count": AttributeMetadata( - brief="The number of native module calls observed during the lifetime of the span. Only applies to React Native.", - type=AttributeType.INTEGER, keys=( - "turbo_module.call.count", - "turbo_module.total_call_count", - "turbo_modules.total_call_count", + "react_native.architecture", + "turbo_module.arch", ), apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), is_in_otel=False, visibility=Visibility.PUBLIC, - example=42, - examples=[42], - aliases=["turbo_module.total_call_count", "turbo_modules.total_call_count"], - changelog=[ - ChangelogEntry( - version="next", - prs=[564], - description="Added turbo_module.call.count attribute", - ), - ], - ), - "turbo_module.call.distinct_count": AttributeMetadata( - brief="The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated. Only applies to React Native.", - type=AttributeType.INTEGER, - keys=( - "turbo_module.call.distinct_count", - "turbo_module.unique_methods", - "turbo_modules.unique_methods", - ), - apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), - is_in_otel=False, - visibility=Visibility.PUBLIC, - example=7, - examples=[7], - aliases=["turbo_module.unique_methods", "turbo_modules.unique_methods"], - changelog=[ - ChangelogEntry( - version="next", - prs=[564], - description="Added turbo_module.call.distinct_count attribute", - ), - ], - ), - "turbo_module.duration.max": AttributeMetadata( - brief="The duration of the slowest single native module call observed during the lifetime of the span, in milliseconds. Only applies to React Native.", - type=AttributeType.DOUBLE, - keys=("turbo_module.duration.max",), - apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), - is_in_otel=False, - visibility=Visibility.PUBLIC, - example=512.5, - examples=[512.5], - changelog=[ - ChangelogEntry( - version="next", - prs=[564], - description="Added turbo_module.duration.max attribute", - ), - ], - ), - "turbo_module.duration.total": AttributeMetadata( - brief="The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration. Only applies to React Native.", - type=AttributeType.DOUBLE, - keys=( - "turbo_module.duration.total", - "turbo_module.total_duration_ms", - "turbo_modules.total_duration_ms", - ), - apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), - is_in_otel=False, - visibility=Visibility.PUBLIC, - example=128.45, - examples=[128.45], - aliases=["turbo_module.total_duration_ms", "turbo_modules.total_duration_ms"], - changelog=[ - ChangelogEntry( - version="next", - prs=[564], - description="Added turbo_module.duration.total attribute", - ), - ], - ), - "turbo_module.error.count": AttributeMetadata( - brief="The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback. Only applies to React Native.", - type=AttributeType.INTEGER, - keys=( - "turbo_module.error.count", - "turbo_module.total_error_count", - "turbo_modules.total_error_count", + example="new", + examples=["new", "legacy"], + deprecation=DeprecationInfo( + replacement="react_native.architecture", + reason="Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules", + status=DeprecationStatus.BACKFILL, ), - apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), - is_in_otel=False, - visibility=Visibility.PUBLIC, - example=2, - examples=[2], - aliases=["turbo_module.total_error_count", "turbo_modules.total_error_count"], + aliases=["react_native.architecture"], changelog=[ ChangelogEntry( version="next", prs=[564], - description="Added turbo_module.error.count attribute", - ), - ], - ), - "turbo_module.kind": AttributeMetadata( - brief="Whether the native module call completed synchronously or reported completion later through a Promise or a callback. One of `sync` or `async`. Only applies to React Native.", - type=AttributeType.STRING, - keys=("turbo_module.kind",), - apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), - is_in_otel=False, - visibility=Visibility.PUBLIC, - example="sync", - examples=["sync", "async"], - changelog=[ - ChangelogEntry( - version="next", - prs=[564], - description="Added turbo_module.kind attribute", + description="Added turbo_module.arch and deprecated it in favor of react_native.architecture", ), ], ), "turbo_module.method": AttributeMetadata( brief="The name of the native module method that was called. Only applies to React Native.", type=AttributeType.STRING, - keys=("turbo_module.method",), + keys=( + "react_native.module.method", + "turbo_module.method", + ), apply_scrubbing=ApplyScrubbingInfo( key=ApplyScrubbing.MANUAL, reason="Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable", @@ -25789,18 +25971,27 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): visibility=Visibility.PUBLIC, example="getUniqueId", examples=["getUniqueId"], + deprecation=DeprecationInfo( + replacement="react_native.module.method", + reason="Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules", + status=DeprecationStatus.BACKFILL, + ), + aliases=["react_native.module.method"], changelog=[ ChangelogEntry( version="next", prs=[564], - description="Added turbo_module.method attribute", + description="Added turbo_module.method and deprecated it in favor of react_native.module.method", ), ], ), "turbo_module.name": AttributeMetadata( brief="The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key. Only applies to React Native.", type=AttributeType.STRING, - keys=("turbo_module.name",), + keys=( + "react_native.module.name", + "turbo_module.name", + ), apply_scrubbing=ApplyScrubbingInfo( key=ApplyScrubbing.MANUAL, reason="Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable", @@ -25809,56 +26000,17 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): visibility=Visibility.PUBLIC, example="RNDeviceInfo", examples=["RNDeviceInfo"], - changelog=[ - ChangelogEntry( - version="next", - prs=[564], - description="Added turbo_module.name attribute", - ), - ], - ), - "turbo_module.top.duration": AttributeMetadata( - brief="The total duration attributed to `turbo_module.top.name`, in milliseconds. Only applies to React Native.", - type=AttributeType.DOUBLE, - keys=( - "turbo_module.top.duration", - "turbo_module.top_module_duration_ms", - ), - apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), - is_in_otel=False, - visibility=Visibility.PUBLIC, - example=87.25, - examples=[87.25], - aliases=["turbo_module.top_module_duration_ms"], - changelog=[ - ChangelogEntry( - version="next", - prs=[564], - description="Added turbo_module.top.duration attribute", - ), - ], - ), - "turbo_module.top.name": AttributeMetadata( - brief="The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `.`. Only applies to React Native.", - type=AttributeType.STRING, - keys=( - "turbo_module.top.name", - "turbo_module.top_module", - ), - apply_scrubbing=ApplyScrubbingInfo( - key=ApplyScrubbing.MANUAL, - reason="Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable", + deprecation=DeprecationInfo( + replacement="react_native.module.name", + reason="Replaced by the `react_native.*` namespace, which also covers native module calls made over the Old Architecture bridge, which are not TurboModules", + status=DeprecationStatus.BACKFILL, ), - is_in_otel=False, - visibility=Visibility.PUBLIC, - example="RNDeviceInfo.getUniqueId", - examples=["RNDeviceInfo.getUniqueId"], - aliases=["turbo_module.top_module"], + aliases=["react_native.module.name"], changelog=[ ChangelogEntry( version="next", prs=[564], - description="Added turbo_module.top.name attribute", + description="Added turbo_module.name and deprecated it in favor of react_native.module.name", ), ], ), @@ -25866,7 +26018,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): brief="The native module and method that accounted for the most total duration during the lifetime of the span. Only applies to React Native.", type=AttributeType.STRING, keys=( - "turbo_module.top.name", + "react_native.module.top.name", "turbo_module.top_module", ), apply_scrubbing=ApplyScrubbingInfo( @@ -25878,16 +26030,16 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example="RNDeviceInfo.getUniqueId", examples=["RNDeviceInfo.getUniqueId"], deprecation=DeprecationInfo( - replacement="turbo_module.top.name", - reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + replacement="react_native.module.top.name", + reason="Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping", status=DeprecationStatus.BACKFILL, ), - aliases=["turbo_module.top.name"], + aliases=["react_native.module.top.name"], changelog=[ ChangelogEntry( version="next", prs=[564], - description="Added turbo_module.top_module and deprecated it in favor of turbo_module.top.name", + description="Added turbo_module.top_module and deprecated it in favor of react_native.module.top.name", ), ], ), @@ -25895,7 +26047,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): brief="The total duration attributed to the top native module method, in milliseconds. Only applies to React Native.", type=AttributeType.DOUBLE, keys=( - "turbo_module.top.duration", + "react_native.module.top.duration", "turbo_module.top_module_duration_ms", ), apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), @@ -25904,16 +26056,16 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example=87.25, examples=[87.25], deprecation=DeprecationInfo( - replacement="turbo_module.top.duration", - reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + replacement="react_native.module.top.duration", + reason="Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping", status=DeprecationStatus.BACKFILL, ), - aliases=["turbo_module.top.duration"], + aliases=["react_native.module.top.duration"], changelog=[ ChangelogEntry( version="next", prs=[564], - description="Added turbo_module.top_module_duration_ms and deprecated it in favor of turbo_module.top.duration", + description="Added turbo_module.top_module_duration_ms and deprecated it in favor of react_native.module.top.duration", ), ], ), @@ -25921,7 +26073,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): brief="The number of native module calls observed during the lifetime of the span. Only applies to React Native.", type=AttributeType.INTEGER, keys=( - "turbo_module.call.count", + "react_native.module.call.count", "turbo_module.total_call_count", "turbo_modules.total_call_count", ), @@ -25931,16 +26083,16 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example=42, examples=[42], deprecation=DeprecationInfo( - replacement="turbo_module.call.count", - reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + replacement="react_native.module.call.count", + reason="Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping", status=DeprecationStatus.BACKFILL, ), - aliases=["turbo_module.call.count", "turbo_modules.total_call_count"], + aliases=["react_native.module.call.count", "turbo_modules.total_call_count"], changelog=[ ChangelogEntry( version="next", prs=[564], - description="Added turbo_module.total_call_count and deprecated it in favor of turbo_module.call.count", + description="Added turbo_module.total_call_count and deprecated it in favor of react_native.module.call.count", ), ], ), @@ -25948,7 +26100,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): brief="The combined duration of all native module calls observed during the lifetime of the span, in milliseconds. Only applies to React Native.", type=AttributeType.DOUBLE, keys=( - "turbo_module.duration.total", + "react_native.module.duration.total", "turbo_module.total_duration_ms", "turbo_modules.total_duration_ms", ), @@ -25958,16 +26110,19 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example=128.45, examples=[128.45], deprecation=DeprecationInfo( - replacement="turbo_module.duration.total", - reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + replacement="react_native.module.duration.total", + reason="Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping", status=DeprecationStatus.BACKFILL, ), - aliases=["turbo_module.duration.total", "turbo_modules.total_duration_ms"], + aliases=[ + "react_native.module.duration.total", + "turbo_modules.total_duration_ms", + ], changelog=[ ChangelogEntry( version="next", prs=[564], - description="Added turbo_module.total_duration_ms and deprecated it in favor of turbo_module.duration.total", + description="Added turbo_module.total_duration_ms and deprecated it in favor of react_native.module.duration.total", ), ], ), @@ -25975,7 +26130,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): brief="The number of native module calls that failed during the lifetime of the span. Only applies to React Native.", type=AttributeType.INTEGER, keys=( - "turbo_module.error.count", + "react_native.module.error.count", "turbo_module.total_error_count", "turbo_modules.total_error_count", ), @@ -25985,16 +26140,16 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example=2, examples=[2], deprecation=DeprecationInfo( - replacement="turbo_module.error.count", - reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + replacement="react_native.module.error.count", + reason="Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping", status=DeprecationStatus.BACKFILL, ), - aliases=["turbo_module.error.count", "turbo_modules.total_error_count"], + aliases=["react_native.module.error.count", "turbo_modules.total_error_count"], changelog=[ ChangelogEntry( version="next", prs=[564], - description="Added turbo_module.total_error_count and deprecated it in favor of turbo_module.error.count", + description="Added turbo_module.total_error_count and deprecated it in favor of react_native.module.error.count", ), ], ), @@ -26002,7 +26157,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): brief="The number of distinct native module and method pairs called during the lifetime of the span. Only applies to React Native.", type=AttributeType.INTEGER, keys=( - "turbo_module.call.distinct_count", + "react_native.module.call.distinct_count", "turbo_module.unique_methods", "turbo_modules.unique_methods", ), @@ -26012,16 +26167,19 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example=7, examples=[7], deprecation=DeprecationInfo( - replacement="turbo_module.call.distinct_count", - reason="Replaced to consolidate the React Native TurboModule attributes under a single `turbo_module.*` namespace with dot-separated logical grouping", + replacement="react_native.module.call.distinct_count", + reason="Replaced by the `react_native.module.*` namespace, which also covers native module calls made over the Old Architecture bridge, and which drops the `total_` prefix and `_ms` suffix in favor of dot-separated logical grouping", status=DeprecationStatus.BACKFILL, ), - aliases=["turbo_module.call.distinct_count", "turbo_modules.unique_methods"], + aliases=[ + "react_native.module.call.distinct_count", + "turbo_modules.unique_methods", + ], changelog=[ ChangelogEntry( version="next", prs=[564], - description="Added turbo_module.unique_methods and deprecated it in favor of turbo_module.call.distinct_count", + description="Added turbo_module.unique_methods and deprecated it in favor of react_native.module.call.distinct_count", ), ], ), @@ -26029,7 +26187,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): brief="The number of native module calls in the flushed call aggregate. Only applies to React Native.", type=AttributeType.INTEGER, keys=( - "turbo_module.call.count", + "react_native.module.call.count", "turbo_module.total_call_count", "turbo_modules.total_call_count", ), @@ -26039,16 +26197,16 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example=42, examples=[42], deprecation=DeprecationInfo( - replacement="turbo_module.call.count", - reason="Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + replacement="react_native.module.call.count", + reason="Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix", status=DeprecationStatus.BACKFILL, ), - aliases=["turbo_module.call.count", "turbo_module.total_call_count"], + aliases=["react_native.module.call.count", "turbo_module.total_call_count"], changelog=[ ChangelogEntry( version="next", prs=[564], - description="Added turbo_modules.total_call_count and deprecated it in favor of turbo_module.call.count", + description="Added turbo_modules.total_call_count and deprecated it in favor of react_native.module.call.count", ), ], ), @@ -26056,7 +26214,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): brief="The combined duration of all native module calls in the flushed call aggregate, in milliseconds. Only applies to React Native.", type=AttributeType.DOUBLE, keys=( - "turbo_module.duration.total", + "react_native.module.duration.total", "turbo_module.total_duration_ms", "turbo_modules.total_duration_ms", ), @@ -26066,16 +26224,19 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example=128.45, examples=[128.45], deprecation=DeprecationInfo( - replacement="turbo_module.duration.total", - reason="Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + replacement="react_native.module.duration.total", + reason="Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix", status=DeprecationStatus.BACKFILL, ), - aliases=["turbo_module.duration.total", "turbo_module.total_duration_ms"], + aliases=[ + "react_native.module.duration.total", + "turbo_module.total_duration_ms", + ], changelog=[ ChangelogEntry( version="next", prs=[564], - description="Added turbo_modules.total_duration_ms and deprecated it in favor of turbo_module.duration.total", + description="Added turbo_modules.total_duration_ms and deprecated it in favor of react_native.module.duration.total", ), ], ), @@ -26083,7 +26244,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): brief="The number of failed native module calls in the flushed call aggregate. Only applies to React Native.", type=AttributeType.INTEGER, keys=( - "turbo_module.error.count", + "react_native.module.error.count", "turbo_module.total_error_count", "turbo_modules.total_error_count", ), @@ -26093,16 +26254,16 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example=2, examples=[2], deprecation=DeprecationInfo( - replacement="turbo_module.error.count", - reason="Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + replacement="react_native.module.error.count", + reason="Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix", status=DeprecationStatus.BACKFILL, ), - aliases=["turbo_module.error.count", "turbo_module.total_error_count"], + aliases=["react_native.module.error.count", "turbo_module.total_error_count"], changelog=[ ChangelogEntry( version="next", prs=[564], - description="Added turbo_modules.total_error_count and deprecated it in favor of turbo_module.error.count", + description="Added turbo_modules.total_error_count and deprecated it in favor of react_native.module.error.count", ), ], ), @@ -26110,7 +26271,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): brief="The number of distinct native module and method pairs in the flushed call aggregate. Only applies to React Native.", type=AttributeType.INTEGER, keys=( - "turbo_module.call.distinct_count", + "react_native.module.call.distinct_count", "turbo_module.unique_methods", "turbo_modules.unique_methods", ), @@ -26120,16 +26281,19 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example=7, examples=[7], deprecation=DeprecationInfo( - replacement="turbo_module.call.distinct_count", - reason="Replaced by the `turbo_module.*` namespace; the SDK emitted the same values under both a singular and a plural prefix", + replacement="react_native.module.call.distinct_count", + reason="Replaced by the `react_native.module.*` namespace; the SDK emitted the same values under both a singular `turbo_module.*` and a plural `turbo_modules.*` prefix", status=DeprecationStatus.BACKFILL, ), - aliases=["turbo_module.call.distinct_count", "turbo_module.unique_methods"], + aliases=[ + "react_native.module.call.distinct_count", + "turbo_module.unique_methods", + ], changelog=[ ChangelogEntry( version="next", prs=[564], - description="Added turbo_modules.unique_methods and deprecated it in favor of turbo_module.call.distinct_count", + description="Added turbo_modules.unique_methods and deprecated it in favor of react_native.module.call.distinct_count", ), ], ), @@ -27818,6 +27982,17 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "query.": str, "query": str, "react.version": str, + "react_native.architecture": str, + "react_native.module.call.count": int, + "react_native.module.call.distinct_count": int, + "react_native.module.duration.max": float, + "react_native.module.duration.total": float, + "react_native.module.error.count": int, + "react_native.module.kind": str, + "react_native.module.method": str, + "react_native.module.name": str, + "react_native.module.top.duration": float, + "react_native.module.top.name": str, "redis.command": str, "redis.key": str, "release": str, @@ -27958,16 +28133,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "ttfb.requestTime": float, "ttfb": float, "turbo_module.arch": str, - "turbo_module.call.count": int, - "turbo_module.call.distinct_count": int, - "turbo_module.duration.max": float, - "turbo_module.duration.total": float, - "turbo_module.error.count": int, - "turbo_module.kind": str, "turbo_module.method": str, "turbo_module.name": str, - "turbo_module.top.duration": float, - "turbo_module.top.name": str, "turbo_module.top_module": str, "turbo_module.top_module_duration_ms": float, "turbo_module.total_call_count": int,