From 9a42c5e4f6cc3eb1a504dc42bb30e642723f2522 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Wed, 8 Apr 2026 13:18:52 +0200 Subject: [PATCH 1/7] feat(attributes): Add app start and display timing attributes Add app.start.cold.value, app.start.warm.value, app.ttid.value, and app.ttfd.value attributes for tracking cold/warm app start durations and time to initial/full display metrics. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../sentry-conventions/src/attributes.ts | 132 ++++++++++++++++++ .../app/app__start__cold__value.json | 17 +++ .../app/app__start__warm__value.json | 17 +++ model/attributes/app/app__ttfd__value.json | 17 +++ model/attributes/app/app__ttid__value.json | 17 +++ python/src/sentry_conventions/attributes.py | 96 +++++++++++++ 6 files changed, 296 insertions(+) create mode 100644 model/attributes/app/app__start__cold__value.json create mode 100644 model/attributes/app/app__start__warm__value.json create mode 100644 model/attributes/app/app__ttfd__value.json create mode 100644 model/attributes/app/app__ttid__value.json diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 6e68f75d..18d39c17 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -813,6 +813,26 @@ export const APP_NAME = 'app.name'; */ export type APP_NAME_TYPE = string; +// Path: model/attributes/app/app__start__cold__value.json + +/** + * The duration of a cold app start in milliseconds `app.start.cold.value` + * + * Attribute Value Type: `number` {@link APP_START_COLD_VALUE_TYPE} + * + * Contains PII: false + * + * Attribute defined in OTEL: No + * + * @example 1234.56 + */ +export const APP_START_COLD_VALUE = 'app.start.cold.value'; + +/** + * Type for {@link APP_START_COLD_VALUE} app.start.cold.value + */ +export type APP_START_COLD_VALUE_TYPE = number; + // Path: model/attributes/app/app__start_time.json /** @@ -853,6 +873,66 @@ export const APP_START_TYPE = 'app_start_type'; */ export type APP_START_TYPE_TYPE = string; +// Path: model/attributes/app/app__start__warm__value.json + +/** + * The duration of a warm app start in milliseconds `app.start.warm.value` + * + * Attribute Value Type: `number` {@link APP_START_WARM_VALUE_TYPE} + * + * Contains PII: false + * + * Attribute defined in OTEL: No + * + * @example 1234.56 + */ +export const APP_START_WARM_VALUE = 'app.start.warm.value'; + +/** + * Type for {@link APP_START_WARM_VALUE} app.start.warm.value + */ +export type APP_START_WARM_VALUE_TYPE = number; + +// Path: model/attributes/app/app__ttfd__value.json + +/** + * The duration of time to full display in milliseconds `app.ttfd.value` + * + * Attribute Value Type: `number` {@link APP_TTFD_VALUE_TYPE} + * + * Contains PII: false + * + * Attribute defined in OTEL: No + * + * @example 1234.56 + */ +export const APP_TTFD_VALUE = 'app.ttfd.value'; + +/** + * Type for {@link APP_TTFD_VALUE} app.ttfd.value + */ +export type APP_TTFD_VALUE_TYPE = number; + +// Path: model/attributes/app/app__ttid__value.json + +/** + * The duration of time to initial display in milliseconds `app.ttid.value` + * + * Attribute Value Type: `number` {@link APP_TTID_VALUE_TYPE} + * + * Contains PII: false + * + * Attribute defined in OTEL: No + * + * @example 1234.56 + */ +export const APP_TTID_VALUE = 'app.ttid.value'; + +/** + * Type for {@link APP_TTID_VALUE} app.ttid.value + */ +export type APP_TTID_VALUE_TYPE = number; + // Path: model/attributes/app/app__version.json /** @@ -10255,8 +10335,12 @@ export const ATTRIBUTE_TYPE: Record = { [APP_IDENTIFIER]: 'string', [APP_IN_FOREGROUND]: 'boolean', [APP_NAME]: 'string', + [APP_START_COLD_VALUE]: 'double', [APP_START_TIME]: 'string', [APP_START_TYPE]: 'string', + [APP_START_WARM_VALUE]: 'double', + [APP_TTFD_VALUE]: 'double', + [APP_TTID_VALUE]: 'double', [APP_VERSION]: 'string', [BLOCKED_MAIN_THREAD]: 'boolean', [BROWSER_NAME]: 'string', @@ -10743,8 +10827,12 @@ export type AttributeName = | typeof APP_IDENTIFIER | typeof APP_IN_FOREGROUND | typeof APP_NAME + | typeof APP_START_COLD_VALUE | typeof APP_START_TIME | typeof APP_START_TYPE + | typeof APP_START_WARM_VALUE + | typeof APP_TTFD_VALUE + | typeof APP_TTID_VALUE | typeof APP_VERSION | typeof BLOCKED_MAIN_THREAD | typeof BROWSER_NAME @@ -11738,6 +11826,16 @@ export const ATTRIBUTE_METADATA: Record = { sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], changelog: [{ version: 'next', prs: [296], description: 'Added app.name attribute' }], }, + [APP_START_COLD_VALUE]: { + brief: 'The duration of a cold app start in milliseconds', + type: 'double', + pii: { + isPii: 'false', + }, + isInOtel: false, + example: 1234.56, + changelog: [{ version: 'next', prs: [312], description: 'Added app.start.cold.value attribute' }], + }, [APP_START_TIME]: { brief: 'Formatted UTC timestamp when the user started the application.', type: 'string', @@ -11759,6 +11857,36 @@ export const ATTRIBUTE_METADATA: Record = { example: 'cold', changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }], }, + [APP_START_WARM_VALUE]: { + brief: 'The duration of a warm app start in milliseconds', + type: 'double', + pii: { + isPii: 'false', + }, + isInOtel: false, + example: 1234.56, + changelog: [{ version: 'next', prs: [312], description: 'Added app.start.warm.value attribute' }], + }, + [APP_TTFD_VALUE]: { + brief: 'The duration of time to full display in milliseconds', + type: 'double', + pii: { + isPii: 'false', + }, + isInOtel: false, + example: 1234.56, + changelog: [{ version: 'next', prs: [312], description: 'Added app.ttfd.value attribute' }], + }, + [APP_TTID_VALUE]: { + brief: 'The duration of time to initial display in milliseconds', + type: 'double', + pii: { + isPii: 'false', + }, + isInOtel: false, + example: 1234.56, + changelog: [{ version: 'next', prs: [312], description: 'Added app.ttid.value attribute' }], + }, [APP_VERSION]: { brief: 'Human readable application version, as it appears on the platform.', type: 'string', @@ -17134,8 +17262,12 @@ export type Attributes = { [APP_IDENTIFIER]?: APP_IDENTIFIER_TYPE; [APP_IN_FOREGROUND]?: APP_IN_FOREGROUND_TYPE; [APP_NAME]?: APP_NAME_TYPE; + [APP_START_COLD_VALUE]?: APP_START_COLD_VALUE_TYPE; [APP_START_TIME]?: APP_START_TIME_TYPE; [APP_START_TYPE]?: APP_START_TYPE_TYPE; + [APP_START_WARM_VALUE]?: APP_START_WARM_VALUE_TYPE; + [APP_TTFD_VALUE]?: APP_TTFD_VALUE_TYPE; + [APP_TTID_VALUE]?: APP_TTID_VALUE_TYPE; [APP_VERSION]?: APP_VERSION_TYPE; [BLOCKED_MAIN_THREAD]?: BLOCKED_MAIN_THREAD_TYPE; [BROWSER_NAME]?: BROWSER_NAME_TYPE; diff --git a/model/attributes/app/app__start__cold__value.json b/model/attributes/app/app__start__cold__value.json new file mode 100644 index 00000000..55622db1 --- /dev/null +++ b/model/attributes/app/app__start__cold__value.json @@ -0,0 +1,17 @@ +{ + "key": "app.start.cold.value", + "brief": "The duration of a cold app start in milliseconds", + "type": "double", + "pii": { + "key": "false" + }, + "is_in_otel": false, + "example": 1234.56, + "changelog": [ + { + "version": "next", + "prs": [312], + "description": "Added app.start.cold.value attribute" + } + ] +} diff --git a/model/attributes/app/app__start__warm__value.json b/model/attributes/app/app__start__warm__value.json new file mode 100644 index 00000000..880e3871 --- /dev/null +++ b/model/attributes/app/app__start__warm__value.json @@ -0,0 +1,17 @@ +{ + "key": "app.start.warm.value", + "brief": "The duration of a warm app start in milliseconds", + "type": "double", + "pii": { + "key": "false" + }, + "is_in_otel": false, + "example": 1234.56, + "changelog": [ + { + "version": "next", + "prs": [312], + "description": "Added app.start.warm.value attribute" + } + ] +} diff --git a/model/attributes/app/app__ttfd__value.json b/model/attributes/app/app__ttfd__value.json new file mode 100644 index 00000000..fad502d0 --- /dev/null +++ b/model/attributes/app/app__ttfd__value.json @@ -0,0 +1,17 @@ +{ + "key": "app.ttfd.value", + "brief": "The duration of time to full display in milliseconds", + "type": "double", + "pii": { + "key": "false" + }, + "is_in_otel": false, + "example": 1234.56, + "changelog": [ + { + "version": "next", + "prs": [312], + "description": "Added app.ttfd.value attribute" + } + ] +} diff --git a/model/attributes/app/app__ttid__value.json b/model/attributes/app/app__ttid__value.json new file mode 100644 index 00000000..e4d78ca3 --- /dev/null +++ b/model/attributes/app/app__ttid__value.json @@ -0,0 +1,17 @@ +{ + "key": "app.ttid.value", + "brief": "The duration of time to initial display in milliseconds", + "type": "double", + "pii": { + "key": "false" + }, + "is_in_otel": false, + "example": 1234.56, + "changelog": [ + { + "version": "next", + "prs": [312], + "description": "Added app.ttid.value attribute" + } + ] +} diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index a1602e9b..03e9c7fa 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -661,6 +661,26 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "My App" """ + # Path: model/attributes/app/app__start__cold__value.json + APP_START_COLD_VALUE: Literal["app.start.cold.value"] = "app.start.cold.value" + """The duration of a cold app start in milliseconds + + Type: float + Contains PII: false + Defined in OTEL: No + Example: 1234.56 + """ + + # Path: model/attributes/app/app__start__warm__value.json + APP_START_WARM_VALUE: Literal["app.start.warm.value"] = "app.start.warm.value" + """The duration of a warm app start in milliseconds + + Type: float + Contains PII: false + Defined in OTEL: No + Example: 1234.56 + """ + # Path: model/attributes/app/app__start_time.json APP_START_TIME: Literal["app.start_time"] = "app.start_time" """Formatted UTC timestamp when the user started the application. @@ -671,6 +691,26 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "2025-01-01T00:00:00.000Z" """ + # Path: model/attributes/app/app__ttfd__value.json + APP_TTFD_VALUE: Literal["app.ttfd.value"] = "app.ttfd.value" + """The duration of time to full display in milliseconds + + Type: float + Contains PII: false + Defined in OTEL: No + Example: 1234.56 + """ + + # Path: model/attributes/app/app__ttid__value.json + APP_TTID_VALUE: Literal["app.ttid.value"] = "app.ttid.value" + """The duration of time to initial display in milliseconds + + Type: float + Contains PII: false + Defined in OTEL: No + Example: 1234.56 + """ + # Path: model/attributes/app/app__version.json APP_VERSION: Literal["app.version"] = "app.version" """Human readable application version, as it appears on the platform. @@ -6131,6 +6171,34 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ), ], ), + "app.start.cold.value": AttributeMetadata( + brief="The duration of a cold app start in milliseconds", + type=AttributeType.DOUBLE, + pii=PiiInfo(isPii=IsPii.FALSE), + is_in_otel=False, + example=1234.56, + changelog=[ + ChangelogEntry( + version="next", + prs=[312], + description="Added app.start.cold.value attribute", + ), + ], + ), + "app.start.warm.value": AttributeMetadata( + brief="The duration of a warm app start in milliseconds", + type=AttributeType.DOUBLE, + pii=PiiInfo(isPii=IsPii.FALSE), + is_in_otel=False, + example=1234.56, + changelog=[ + ChangelogEntry( + version="next", + prs=[312], + description="Added app.start.warm.value attribute", + ), + ], + ), "app.start_time": AttributeMetadata( brief="Formatted UTC timestamp when the user started the application.", type=AttributeType.STRING, @@ -6149,6 +6217,30 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ), ], ), + "app.ttfd.value": AttributeMetadata( + brief="The duration of time to full display in milliseconds", + type=AttributeType.DOUBLE, + pii=PiiInfo(isPii=IsPii.FALSE), + is_in_otel=False, + example=1234.56, + changelog=[ + ChangelogEntry( + version="next", prs=[312], description="Added app.ttfd.value attribute" + ), + ], + ), + "app.ttid.value": AttributeMetadata( + brief="The duration of time to initial display in milliseconds", + type=AttributeType.DOUBLE, + pii=PiiInfo(isPii=IsPii.FALSE), + is_in_otel=False, + example=1234.56, + changelog=[ + ChangelogEntry( + version="next", prs=[312], description="Added app.ttid.value attribute" + ), + ], + ), "app.version": AttributeMetadata( brief="Human readable application version, as it appears on the platform.", type=AttributeType.STRING, @@ -11532,7 +11624,11 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "app.identifier": str, "app.in_foreground": bool, "app.name": str, + "app.start.cold.value": float, + "app.start.warm.value": float, "app.start_time": str, + "app.ttfd.value": float, + "app.ttid.value": float, "app.version": str, "app_start_type": str, "blocked_main_thread": bool, From d0f54661b6f4cb930620ae186431d6df6be4f0d2 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Wed, 8 Apr 2026 14:39:46 +0200 Subject: [PATCH 2/7] fix(attributes): Set pii to maybe for app timing attributes Per CONTRIBUTING.md policy, pii MUST be maybe or true unless scrubbing would break product features. Duration values don't need exemption. Co-Authored-By: Claude Opus 4.6 (1M context) --- javascript/sentry-conventions/src/attributes.ts | 16 ++++++++-------- .../attributes/app/app__start__cold__value.json | 2 +- .../attributes/app/app__start__warm__value.json | 2 +- model/attributes/app/app__ttfd__value.json | 2 +- model/attributes/app/app__ttid__value.json | 2 +- python/src/sentry_conventions/attributes.py | 16 ++++++++-------- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 18d39c17..e92f2b31 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -820,7 +820,7 @@ export type APP_NAME_TYPE = string; * * Attribute Value Type: `number` {@link APP_START_COLD_VALUE_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * @@ -880,7 +880,7 @@ export type APP_START_TYPE_TYPE = string; * * Attribute Value Type: `number` {@link APP_START_WARM_VALUE_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * @@ -900,7 +900,7 @@ export type APP_START_WARM_VALUE_TYPE = number; * * Attribute Value Type: `number` {@link APP_TTFD_VALUE_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * @@ -920,7 +920,7 @@ export type APP_TTFD_VALUE_TYPE = number; * * Attribute Value Type: `number` {@link APP_TTID_VALUE_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * @@ -11830,7 +11830,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The duration of a cold app start in milliseconds', type: 'double', pii: { - isPii: 'false', + isPii: 'maybe', }, isInOtel: false, example: 1234.56, @@ -11861,7 +11861,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The duration of a warm app start in milliseconds', type: 'double', pii: { - isPii: 'false', + isPii: 'maybe', }, isInOtel: false, example: 1234.56, @@ -11871,7 +11871,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The duration of time to full display in milliseconds', type: 'double', pii: { - isPii: 'false', + isPii: 'maybe', }, isInOtel: false, example: 1234.56, @@ -11881,7 +11881,7 @@ export const ATTRIBUTE_METADATA: Record = { brief: 'The duration of time to initial display in milliseconds', type: 'double', pii: { - isPii: 'false', + isPii: 'maybe', }, isInOtel: false, example: 1234.56, diff --git a/model/attributes/app/app__start__cold__value.json b/model/attributes/app/app__start__cold__value.json index 55622db1..ac5073f3 100644 --- a/model/attributes/app/app__start__cold__value.json +++ b/model/attributes/app/app__start__cold__value.json @@ -3,7 +3,7 @@ "brief": "The duration of a cold app start in milliseconds", "type": "double", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "example": 1234.56, diff --git a/model/attributes/app/app__start__warm__value.json b/model/attributes/app/app__start__warm__value.json index 880e3871..a27be199 100644 --- a/model/attributes/app/app__start__warm__value.json +++ b/model/attributes/app/app__start__warm__value.json @@ -3,7 +3,7 @@ "brief": "The duration of a warm app start in milliseconds", "type": "double", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "example": 1234.56, diff --git a/model/attributes/app/app__ttfd__value.json b/model/attributes/app/app__ttfd__value.json index fad502d0..36103501 100644 --- a/model/attributes/app/app__ttfd__value.json +++ b/model/attributes/app/app__ttfd__value.json @@ -3,7 +3,7 @@ "brief": "The duration of time to full display in milliseconds", "type": "double", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "example": 1234.56, diff --git a/model/attributes/app/app__ttid__value.json b/model/attributes/app/app__ttid__value.json index e4d78ca3..682aac8c 100644 --- a/model/attributes/app/app__ttid__value.json +++ b/model/attributes/app/app__ttid__value.json @@ -3,7 +3,7 @@ "brief": "The duration of time to initial display in milliseconds", "type": "double", "pii": { - "key": "false" + "key": "maybe" }, "is_in_otel": false, "example": 1234.56, diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 03e9c7fa..8dcb21f0 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -666,7 +666,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """The duration of a cold app start in milliseconds Type: float - Contains PII: false + Contains PII: maybe Defined in OTEL: No Example: 1234.56 """ @@ -676,7 +676,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """The duration of a warm app start in milliseconds Type: float - Contains PII: false + Contains PII: maybe Defined in OTEL: No Example: 1234.56 """ @@ -696,7 +696,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """The duration of time to full display in milliseconds Type: float - Contains PII: false + Contains PII: maybe Defined in OTEL: No Example: 1234.56 """ @@ -706,7 +706,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """The duration of time to initial display in milliseconds Type: float - Contains PII: false + Contains PII: maybe Defined in OTEL: No Example: 1234.56 """ @@ -6174,7 +6174,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "app.start.cold.value": AttributeMetadata( brief="The duration of a cold app start in milliseconds", type=AttributeType.DOUBLE, - pii=PiiInfo(isPii=IsPii.FALSE), + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=1234.56, changelog=[ @@ -6188,7 +6188,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "app.start.warm.value": AttributeMetadata( brief="The duration of a warm app start in milliseconds", type=AttributeType.DOUBLE, - pii=PiiInfo(isPii=IsPii.FALSE), + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=1234.56, changelog=[ @@ -6220,7 +6220,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "app.ttfd.value": AttributeMetadata( brief="The duration of time to full display in milliseconds", type=AttributeType.DOUBLE, - pii=PiiInfo(isPii=IsPii.FALSE), + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=1234.56, changelog=[ @@ -6232,7 +6232,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "app.ttid.value": AttributeMetadata( brief="The duration of time to initial display in milliseconds", type=AttributeType.DOUBLE, - pii=PiiInfo(isPii=IsPii.FALSE), + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=1234.56, changelog=[ From ddf3b2521a0f2e56223289e97325f5c8f01cde9c Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Thu, 9 Apr 2026 15:48:26 +0200 Subject: [PATCH 3/7] feat(attributes): Add app.start, app.frames attributes and deprecate old ones Replace app.start.cold.value/app.start.warm.value with app.start.value and app.start.type. Add app.frames.total.count, app.frames.slow.count, app.frames.frozen.count, and app.frames.delay.value under the app namespace. Deprecate frames.* and app_start_type with backfill status per CONTRIBUTING.md policy. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../sentry-conventions/src/attributes.ts | 316 +++++++++++++++--- .../app/app__frames__delay__value.json | 19 ++ .../app/app__frames__frozen__count.json | 19 ++ .../app/app__frames__slow__count.json | 19 ++ .../app/app__frames__total__count.json | 19 ++ .../app/app__start__cold__value.json | 17 - model/attributes/app/app__start__type.json | 19 ++ model/attributes/app/app__start__value.json | 18 + .../app/app__start__warm__value.json | 17 - model/attributes/app/app__ttfd__value.json | 3 +- model/attributes/app/app__ttid__value.json | 3 +- model/attributes/app_start_type.json | 11 + model/attributes/frames/frames__delay.json | 11 + model/attributes/frames/frames__frozen.json | 11 + model/attributes/frames/frames__slow.json | 11 + model/attributes/frames/frames__total.json | 11 + python/src/sentry_conventions/attributes.py | 276 +++++++++++++-- shared/deprecated_attributes.json | 150 +++++++++ 18 files changed, 839 insertions(+), 111 deletions(-) create mode 100644 model/attributes/app/app__frames__delay__value.json create mode 100644 model/attributes/app/app__frames__frozen__count.json create mode 100644 model/attributes/app/app__frames__slow__count.json create mode 100644 model/attributes/app/app__frames__total__count.json delete mode 100644 model/attributes/app/app__start__cold__value.json create mode 100644 model/attributes/app/app__start__type.json create mode 100644 model/attributes/app/app__start__value.json delete mode 100644 model/attributes/app/app__start__warm__value.json diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index e92f2b31..7dfeaa78 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -753,6 +753,94 @@ export const APP_BUILD = 'app.build'; */ export type APP_BUILD_TYPE = string; +// Path: model/attributes/app/app__frames__delay__value.json + +/** + * The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/). `app.frames.delay.value` + * + * Attribute Value Type: `number` {@link APP_FRAMES_DELAY_VALUE_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * Aliases: {@link FRAMES_DELAY} `frames.delay` + * + * @example 5 + */ +export const APP_FRAMES_DELAY_VALUE = 'app.frames.delay.value'; + +/** + * Type for {@link APP_FRAMES_DELAY_VALUE} app.frames.delay.value + */ +export type APP_FRAMES_DELAY_VALUE_TYPE = number; + +// Path: model/attributes/app/app__frames__frozen__count.json + +/** + * The number of frozen frames rendered during the lifetime of the span. `app.frames.frozen.count` + * + * Attribute Value Type: `number` {@link APP_FRAMES_FROZEN_COUNT_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * Aliases: {@link FRAMES_FROZEN} `frames.frozen` + * + * @example 3 + */ +export const APP_FRAMES_FROZEN_COUNT = 'app.frames.frozen.count'; + +/** + * Type for {@link APP_FRAMES_FROZEN_COUNT} app.frames.frozen.count + */ +export type APP_FRAMES_FROZEN_COUNT_TYPE = number; + +// Path: model/attributes/app/app__frames__slow__count.json + +/** + * The number of slow frames rendered during the lifetime of the span. `app.frames.slow.count` + * + * Attribute Value Type: `number` {@link APP_FRAMES_SLOW_COUNT_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * Aliases: {@link FRAMES_SLOW} `frames.slow` + * + * @example 1 + */ +export const APP_FRAMES_SLOW_COUNT = 'app.frames.slow.count'; + +/** + * Type for {@link APP_FRAMES_SLOW_COUNT} app.frames.slow.count + */ +export type APP_FRAMES_SLOW_COUNT_TYPE = number; + +// Path: model/attributes/app/app__frames__total__count.json + +/** + * The number of total frames rendered during the lifetime of the span. `app.frames.total.count` + * + * Attribute Value Type: `number` {@link APP_FRAMES_TOTAL_COUNT_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * Aliases: {@link FRAMES_TOTAL} `frames.total` + * + * @example 60 + */ +export const APP_FRAMES_TOTAL_COUNT = 'app.frames.total.count'; + +/** + * Type for {@link APP_FRAMES_TOTAL_COUNT} app.frames.total.count + */ +export type APP_FRAMES_TOTAL_COUNT_TYPE = number; + // Path: model/attributes/app/app__identifier.json /** @@ -813,72 +901,77 @@ export const APP_NAME = 'app.name'; */ export type APP_NAME_TYPE = string; -// Path: model/attributes/app/app__start__cold__value.json +// Path: model/attributes/app/app__start_time.json /** - * The duration of a cold app start in milliseconds `app.start.cold.value` + * Formatted UTC timestamp when the user started the application. `app.start_time` * - * Attribute Value Type: `number` {@link APP_START_COLD_VALUE_TYPE} + * Attribute Value Type: `string` {@link APP_START_TIME_TYPE} * * Contains PII: maybe * * Attribute defined in OTEL: No * - * @example 1234.56 + * @example "2025-01-01T00:00:00.000Z" */ -export const APP_START_COLD_VALUE = 'app.start.cold.value'; +export const APP_START_TIME = 'app.start_time'; /** - * Type for {@link APP_START_COLD_VALUE} app.start.cold.value + * Type for {@link APP_START_TIME} app.start_time */ -export type APP_START_COLD_VALUE_TYPE = number; +export type APP_START_TIME_TYPE = string; -// Path: model/attributes/app/app__start_time.json +// Path: model/attributes/app/app__start__type.json /** - * Formatted UTC timestamp when the user started the application. `app.start_time` + * The type of app start `app.start.type` * - * Attribute Value Type: `string` {@link APP_START_TIME_TYPE} + * Attribute Value Type: `string` {@link APP_START_TYPE_TYPE} * * Contains PII: maybe * * Attribute defined in OTEL: No * - * @example "2025-01-01T00:00:00.000Z" + * Aliases: {@link _APP_START_TYPE} `app_start_type` + * + * @example "cold" */ -export const APP_START_TIME = 'app.start_time'; +export const APP_START_TYPE = 'app.start.type'; /** - * Type for {@link APP_START_TIME} app.start_time + * Type for {@link APP_START_TYPE} app.start.type */ -export type APP_START_TIME_TYPE = string; +export type APP_START_TYPE_TYPE = string; // Path: model/attributes/app_start_type.json /** * Mobile app start variant. Either cold or warm. `app_start_type` * - * Attribute Value Type: `string` {@link APP_START_TYPE_TYPE} + * Attribute Value Type: `string` {@link _APP_START_TYPE_TYPE} * * Contains PII: maybe * * Attribute defined in OTEL: No * + * Aliases: {@link APP_START_TYPE} `app.start.type` + * + * @deprecated Use {@link APP_START_TYPE} (app.start.type) instead - Old namespace-less attribute, to be replaced with app.start.type * @example "cold" */ -export const APP_START_TYPE = 'app_start_type'; +export const _APP_START_TYPE = 'app_start_type'; /** - * Type for {@link APP_START_TYPE} app_start_type + * Type for {@link _APP_START_TYPE} app_start_type */ -export type APP_START_TYPE_TYPE = string; +export type _APP_START_TYPE_TYPE = string; -// Path: model/attributes/app/app__start__warm__value.json +// Path: model/attributes/app/app__start__value.json /** - * The duration of a warm app start in milliseconds `app.start.warm.value` + * The duration of the app start in milliseconds `app.start.value` * - * Attribute Value Type: `number` {@link APP_START_WARM_VALUE_TYPE} + * Attribute Value Type: `number` {@link APP_START_VALUE_TYPE} * * Contains PII: maybe * @@ -886,12 +979,12 @@ export type APP_START_TYPE_TYPE = string; * * @example 1234.56 */ -export const APP_START_WARM_VALUE = 'app.start.warm.value'; +export const APP_START_VALUE = 'app.start.value'; /** - * Type for {@link APP_START_WARM_VALUE} app.start.warm.value + * Type for {@link APP_START_VALUE} app.start.value */ -export type APP_START_WARM_VALUE_TYPE = number; +export type APP_START_VALUE_TYPE = number; // Path: model/attributes/app/app__ttfd__value.json @@ -2894,6 +2987,9 @@ export type FP_TYPE = number; * * Attribute defined in OTEL: No * + * Aliases: {@link APP_FRAMES_DELAY_VALUE} `app.frames.delay.value` + * + * @deprecated Use {@link APP_FRAMES_DELAY_VALUE} (app.frames.delay.value) instead - Old namespace-less attribute, to be replaced with app.frames.delay.value * @example 5 */ export const FRAMES_DELAY = 'frames.delay'; @@ -2914,6 +3010,9 @@ export type FRAMES_DELAY_TYPE = number; * * Attribute defined in OTEL: No * + * Aliases: {@link APP_FRAMES_FROZEN_COUNT} `app.frames.frozen.count` + * + * @deprecated Use {@link APP_FRAMES_FROZEN_COUNT} (app.frames.frozen.count) instead - Old namespace-less attribute, to be replaced with app.frames.frozen.count * @example 3 */ export const FRAMES_FROZEN = 'frames.frozen'; @@ -2934,6 +3033,9 @@ export type FRAMES_FROZEN_TYPE = number; * * Attribute defined in OTEL: No * + * Aliases: {@link APP_FRAMES_SLOW_COUNT} `app.frames.slow.count` + * + * @deprecated Use {@link APP_FRAMES_SLOW_COUNT} (app.frames.slow.count) instead - Old namespace-less attribute, to be replaced with app.frames.slow.count * @example 1 */ export const FRAMES_SLOW = 'frames.slow'; @@ -2954,6 +3056,9 @@ export type FRAMES_SLOW_TYPE = number; * * Attribute defined in OTEL: No * + * Aliases: {@link APP_FRAMES_TOTAL_COUNT} `app.frames.total.count` + * + * @deprecated Use {@link APP_FRAMES_TOTAL_COUNT} (app.frames.total.count) instead - Old namespace-less attribute, to be replaced with app.frames.total.count * @example 60 */ export const FRAMES_TOTAL = 'frames.total'; @@ -10332,13 +10437,17 @@ export const ATTRIBUTE_TYPE: Record = { [AI_TOTAL_TOKENS_USED]: 'integer', [AI_WARNINGS]: 'string[]', [APP_BUILD]: 'string', + [APP_FRAMES_DELAY_VALUE]: 'integer', + [APP_FRAMES_FROZEN_COUNT]: 'integer', + [APP_FRAMES_SLOW_COUNT]: 'integer', + [APP_FRAMES_TOTAL_COUNT]: 'integer', [APP_IDENTIFIER]: 'string', [APP_IN_FOREGROUND]: 'boolean', [APP_NAME]: 'string', - [APP_START_COLD_VALUE]: 'double', [APP_START_TIME]: 'string', [APP_START_TYPE]: 'string', - [APP_START_WARM_VALUE]: 'double', + [_APP_START_TYPE]: 'string', + [APP_START_VALUE]: 'double', [APP_TTFD_VALUE]: 'double', [APP_TTID_VALUE]: 'double', [APP_VERSION]: 'string', @@ -10824,13 +10933,17 @@ export type AttributeName = | typeof AI_TOTAL_TOKENS_USED | typeof AI_WARNINGS | typeof APP_BUILD + | typeof APP_FRAMES_DELAY_VALUE + | typeof APP_FRAMES_FROZEN_COUNT + | typeof APP_FRAMES_SLOW_COUNT + | typeof APP_FRAMES_TOTAL_COUNT | typeof APP_IDENTIFIER | typeof APP_IN_FOREGROUND | typeof APP_NAME - | typeof APP_START_COLD_VALUE | typeof APP_START_TIME | typeof APP_START_TYPE - | typeof APP_START_WARM_VALUE + | typeof _APP_START_TYPE + | typeof APP_START_VALUE | typeof APP_TTFD_VALUE | typeof APP_TTID_VALUE | typeof APP_VERSION @@ -11793,6 +11906,55 @@ export const ATTRIBUTE_METADATA: Record = { sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], changelog: [{ version: 'next', prs: [296], description: 'Added app.build attribute' }], }, + [APP_FRAMES_DELAY_VALUE]: { + brief: + 'The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).', + type: 'integer', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 5, + aliases: [FRAMES_DELAY], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', prs: [313], description: 'Added app.frames.delay.value to replace frames.delay' }], + }, + [APP_FRAMES_FROZEN_COUNT]: { + brief: 'The number of frozen frames rendered during the lifetime of the span.', + type: 'integer', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 3, + aliases: [FRAMES_FROZEN], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', prs: [313], description: 'Added app.frames.frozen.count to replace frames.frozen' }], + }, + [APP_FRAMES_SLOW_COUNT]: { + brief: 'The number of slow frames rendered during the lifetime of the span.', + type: 'integer', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 1, + aliases: [FRAMES_SLOW], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', prs: [313], description: 'Added app.frames.slow.count to replace frames.slow' }], + }, + [APP_FRAMES_TOTAL_COUNT]: { + brief: 'The number of total frames rendered during the lifetime of the span.', + type: 'integer', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 60, + aliases: [FRAMES_TOTAL], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', prs: [313], description: 'Added app.frames.total.count to replace frames.total' }], + }, [APP_IDENTIFIER]: { brief: 'Version-independent application identifier, often a dotted bundle ID.', type: 'string', @@ -11826,16 +11988,6 @@ export const ATTRIBUTE_METADATA: Record = { sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], changelog: [{ version: 'next', prs: [296], description: 'Added app.name attribute' }], }, - [APP_START_COLD_VALUE]: { - brief: 'The duration of a cold app start in milliseconds', - type: 'double', - pii: { - isPii: 'maybe', - }, - isInOtel: false, - example: 1234.56, - changelog: [{ version: 'next', prs: [312], description: 'Added app.start.cold.value attribute' }], - }, [APP_START_TIME]: { brief: 'Formatted UTC timestamp when the user started the application.', type: 'string', @@ -11848,6 +12000,18 @@ export const ATTRIBUTE_METADATA: Record = { changelog: [{ version: 'next', prs: [296], description: 'Added app.start_time attribute' }], }, [APP_START_TYPE]: { + brief: 'The type of app start', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 'cold', + aliases: [_APP_START_TYPE], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', prs: [313], description: 'Added app.start.type attribute' }], + }, + [_APP_START_TYPE]: { brief: 'Mobile app start variant. Either cold or warm.', type: 'string', pii: { @@ -11855,17 +12019,27 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: 'cold', - changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }], + deprecation: { + replacement: 'app.start.type', + reason: 'Old namespace-less attribute, to be replaced with app.start.type', + }, + aliases: [APP_START_TYPE], + changelog: [ + { version: 'next', prs: [313], description: 'Deprecated in favor of app.start.type' }, + { version: '0.1.0', prs: [127] }, + { version: '0.0.0' }, + ], }, - [APP_START_WARM_VALUE]: { - brief: 'The duration of a warm app start in milliseconds', + [APP_START_VALUE]: { + brief: 'The duration of the app start in milliseconds', type: 'double', pii: { isPii: 'maybe', }, isInOtel: false, example: 1234.56, - changelog: [{ version: 'next', prs: [312], description: 'Added app.start.warm.value attribute' }], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', prs: [313], description: 'Added app.start.value attribute' }], }, [APP_TTFD_VALUE]: { brief: 'The duration of time to full display in milliseconds', @@ -11875,7 +12049,8 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: 1234.56, - changelog: [{ version: 'next', prs: [312], description: 'Added app.ttfd.value attribute' }], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', prs: [313], description: 'Added app.ttfd.value attribute' }], }, [APP_TTID_VALUE]: { brief: 'The duration of time to initial display in milliseconds', @@ -11885,7 +12060,8 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: 1234.56, - changelog: [{ version: 'next', prs: [312], description: 'Added app.ttid.value attribute' }], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', prs: [313], description: 'Added app.ttid.value attribute' }], }, [APP_VERSION]: { brief: 'Human readable application version, as it appears on the platform.', @@ -13035,7 +13211,16 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: 5, - changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }], + deprecation: { + replacement: 'app.frames.delay.value', + reason: 'Old namespace-less attribute, to be replaced with app.frames.delay.value', + }, + aliases: [APP_FRAMES_DELAY_VALUE], + changelog: [ + { version: 'next', prs: [313], description: 'Deprecated in favor of app.frames.delay.value' }, + { version: '0.4.0', prs: [228] }, + { version: '0.0.0' }, + ], }, [FRAMES_FROZEN]: { brief: 'The number of frozen frames rendered during the lifetime of the span.', @@ -13045,7 +13230,16 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: 3, - changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }], + deprecation: { + replacement: 'app.frames.frozen.count', + reason: 'Old namespace-less attribute, to be replaced with app.frames.frozen.count', + }, + aliases: [APP_FRAMES_FROZEN_COUNT], + changelog: [ + { version: 'next', prs: [313], description: 'Deprecated in favor of app.frames.frozen.count' }, + { version: '0.4.0', prs: [228] }, + { version: '0.0.0' }, + ], }, [FRAMES_SLOW]: { brief: 'The number of slow frames rendered during the lifetime of the span.', @@ -13055,7 +13249,16 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: 1, - changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }], + deprecation: { + replacement: 'app.frames.slow.count', + reason: 'Old namespace-less attribute, to be replaced with app.frames.slow.count', + }, + aliases: [APP_FRAMES_SLOW_COUNT], + changelog: [ + { version: 'next', prs: [313], description: 'Deprecated in favor of app.frames.slow.count' }, + { version: '0.4.0', prs: [228] }, + { version: '0.0.0' }, + ], }, [FRAMES_TOTAL]: { brief: 'The number of total frames rendered during the lifetime of the span.', @@ -13065,7 +13268,16 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: 60, - changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }], + deprecation: { + replacement: 'app.frames.total.count', + reason: 'Old namespace-less attribute, to be replaced with app.frames.total.count', + }, + aliases: [APP_FRAMES_TOTAL_COUNT], + changelog: [ + { version: 'next', prs: [313], description: 'Deprecated in favor of app.frames.total.count' }, + { version: '0.4.0', prs: [228] }, + { version: '0.0.0' }, + ], }, [FS_ERROR]: { brief: 'The error message of a file system error.', @@ -17259,13 +17471,17 @@ export type Attributes = { [AI_TOTAL_TOKENS_USED]?: AI_TOTAL_TOKENS_USED_TYPE; [AI_WARNINGS]?: AI_WARNINGS_TYPE; [APP_BUILD]?: APP_BUILD_TYPE; + [APP_FRAMES_DELAY_VALUE]?: APP_FRAMES_DELAY_VALUE_TYPE; + [APP_FRAMES_FROZEN_COUNT]?: APP_FRAMES_FROZEN_COUNT_TYPE; + [APP_FRAMES_SLOW_COUNT]?: APP_FRAMES_SLOW_COUNT_TYPE; + [APP_FRAMES_TOTAL_COUNT]?: APP_FRAMES_TOTAL_COUNT_TYPE; [APP_IDENTIFIER]?: APP_IDENTIFIER_TYPE; [APP_IN_FOREGROUND]?: APP_IN_FOREGROUND_TYPE; [APP_NAME]?: APP_NAME_TYPE; - [APP_START_COLD_VALUE]?: APP_START_COLD_VALUE_TYPE; [APP_START_TIME]?: APP_START_TIME_TYPE; [APP_START_TYPE]?: APP_START_TYPE_TYPE; - [APP_START_WARM_VALUE]?: APP_START_WARM_VALUE_TYPE; + [_APP_START_TYPE]?: _APP_START_TYPE_TYPE; + [APP_START_VALUE]?: APP_START_VALUE_TYPE; [APP_TTFD_VALUE]?: APP_TTFD_VALUE_TYPE; [APP_TTID_VALUE]?: APP_TTID_VALUE_TYPE; [APP_VERSION]?: APP_VERSION_TYPE; diff --git a/model/attributes/app/app__frames__delay__value.json b/model/attributes/app/app__frames__delay__value.json new file mode 100644 index 00000000..2e973c36 --- /dev/null +++ b/model/attributes/app/app__frames__delay__value.json @@ -0,0 +1,19 @@ +{ + "key": "app.frames.delay.value", + "brief": "The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "alias": ["frames.delay"], + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": 5, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Added app.frames.delay.value to replace frames.delay" + } + ] +} diff --git a/model/attributes/app/app__frames__frozen__count.json b/model/attributes/app/app__frames__frozen__count.json new file mode 100644 index 00000000..a9c69fc0 --- /dev/null +++ b/model/attributes/app/app__frames__frozen__count.json @@ -0,0 +1,19 @@ +{ + "key": "app.frames.frozen.count", + "brief": "The number of frozen frames rendered during the lifetime of the span.", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "alias": ["frames.frozen"], + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": 3, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Added app.frames.frozen.count to replace frames.frozen" + } + ] +} diff --git a/model/attributes/app/app__frames__slow__count.json b/model/attributes/app/app__frames__slow__count.json new file mode 100644 index 00000000..18e128f9 --- /dev/null +++ b/model/attributes/app/app__frames__slow__count.json @@ -0,0 +1,19 @@ +{ + "key": "app.frames.slow.count", + "brief": "The number of slow frames rendered during the lifetime of the span.", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "alias": ["frames.slow"], + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": 1, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Added app.frames.slow.count to replace frames.slow" + } + ] +} diff --git a/model/attributes/app/app__frames__total__count.json b/model/attributes/app/app__frames__total__count.json new file mode 100644 index 00000000..119f1ea1 --- /dev/null +++ b/model/attributes/app/app__frames__total__count.json @@ -0,0 +1,19 @@ +{ + "key": "app.frames.total.count", + "brief": "The number of total frames rendered during the lifetime of the span.", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "alias": ["frames.total"], + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": 60, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Added app.frames.total.count to replace frames.total" + } + ] +} diff --git a/model/attributes/app/app__start__cold__value.json b/model/attributes/app/app__start__cold__value.json deleted file mode 100644 index ac5073f3..00000000 --- a/model/attributes/app/app__start__cold__value.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "key": "app.start.cold.value", - "brief": "The duration of a cold app start in milliseconds", - "type": "double", - "pii": { - "key": "maybe" - }, - "is_in_otel": false, - "example": 1234.56, - "changelog": [ - { - "version": "next", - "prs": [312], - "description": "Added app.start.cold.value attribute" - } - ] -} diff --git a/model/attributes/app/app__start__type.json b/model/attributes/app/app__start__type.json new file mode 100644 index 00000000..d93c7f37 --- /dev/null +++ b/model/attributes/app/app__start__type.json @@ -0,0 +1,19 @@ +{ + "key": "app.start.type", + "brief": "The type of app start", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "alias": ["app_start_type"], + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": "cold", + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Added app.start.type attribute" + } + ] +} diff --git a/model/attributes/app/app__start__value.json b/model/attributes/app/app__start__value.json new file mode 100644 index 00000000..fb3ea196 --- /dev/null +++ b/model/attributes/app/app__start__value.json @@ -0,0 +1,18 @@ +{ + "key": "app.start.value", + "brief": "The duration of the app start in milliseconds", + "type": "double", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": 1234.56, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Added app.start.value attribute" + } + ] +} diff --git a/model/attributes/app/app__start__warm__value.json b/model/attributes/app/app__start__warm__value.json deleted file mode 100644 index a27be199..00000000 --- a/model/attributes/app/app__start__warm__value.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "key": "app.start.warm.value", - "brief": "The duration of a warm app start in milliseconds", - "type": "double", - "pii": { - "key": "maybe" - }, - "is_in_otel": false, - "example": 1234.56, - "changelog": [ - { - "version": "next", - "prs": [312], - "description": "Added app.start.warm.value attribute" - } - ] -} diff --git a/model/attributes/app/app__ttfd__value.json b/model/attributes/app/app__ttfd__value.json index 36103501..f5f3b207 100644 --- a/model/attributes/app/app__ttfd__value.json +++ b/model/attributes/app/app__ttfd__value.json @@ -6,11 +6,12 @@ "key": "maybe" }, "is_in_otel": false, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], "example": 1234.56, "changelog": [ { "version": "next", - "prs": [312], + "prs": [313], "description": "Added app.ttfd.value attribute" } ] diff --git a/model/attributes/app/app__ttid__value.json b/model/attributes/app/app__ttid__value.json index 682aac8c..0fe2995d 100644 --- a/model/attributes/app/app__ttid__value.json +++ b/model/attributes/app/app__ttid__value.json @@ -6,11 +6,12 @@ "key": "maybe" }, "is_in_otel": false, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], "example": 1234.56, "changelog": [ { "version": "next", - "prs": [312], + "prs": [313], "description": "Added app.ttid.value attribute" } ] diff --git a/model/attributes/app_start_type.json b/model/attributes/app_start_type.json index a55e2192..97c7a758 100644 --- a/model/attributes/app_start_type.json +++ b/model/attributes/app_start_type.json @@ -7,7 +7,18 @@ }, "is_in_otel": false, "example": "cold", + "alias": ["app.start.type"], + "deprecation": { + "replacement": "app.start.type", + "reason": "Old namespace-less attribute, to be replaced with app.start.type", + "_status": "backfill" + }, "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Deprecated in favor of app.start.type" + }, { "version": "0.1.0", "prs": [127] diff --git a/model/attributes/frames/frames__delay.json b/model/attributes/frames/frames__delay.json index 44388ffc..d0c89a25 100644 --- a/model/attributes/frames/frames__delay.json +++ b/model/attributes/frames/frames__delay.json @@ -7,7 +7,18 @@ }, "is_in_otel": false, "example": 5, + "alias": ["app.frames.delay.value"], + "deprecation": { + "replacement": "app.frames.delay.value", + "reason": "Old namespace-less attribute, to be replaced with app.frames.delay.value", + "_status": "backfill" + }, "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Deprecated in favor of app.frames.delay.value" + }, { "version": "0.4.0", "prs": [228] diff --git a/model/attributes/frames/frames__frozen.json b/model/attributes/frames/frames__frozen.json index 41846a67..301f6c0a 100644 --- a/model/attributes/frames/frames__frozen.json +++ b/model/attributes/frames/frames__frozen.json @@ -7,7 +7,18 @@ }, "is_in_otel": false, "example": 3, + "alias": ["app.frames.frozen.count"], + "deprecation": { + "replacement": "app.frames.frozen.count", + "reason": "Old namespace-less attribute, to be replaced with app.frames.frozen.count", + "_status": "backfill" + }, "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Deprecated in favor of app.frames.frozen.count" + }, { "version": "0.4.0", "prs": [228] diff --git a/model/attributes/frames/frames__slow.json b/model/attributes/frames/frames__slow.json index 46f517c5..01324edc 100644 --- a/model/attributes/frames/frames__slow.json +++ b/model/attributes/frames/frames__slow.json @@ -7,7 +7,18 @@ }, "is_in_otel": false, "example": 1, + "alias": ["app.frames.slow.count"], + "deprecation": { + "replacement": "app.frames.slow.count", + "reason": "Old namespace-less attribute, to be replaced with app.frames.slow.count", + "_status": "backfill" + }, "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Deprecated in favor of app.frames.slow.count" + }, { "version": "0.4.0", "prs": [228] diff --git a/model/attributes/frames/frames__total.json b/model/attributes/frames/frames__total.json index c7a761b4..0044ecfc 100644 --- a/model/attributes/frames/frames__total.json +++ b/model/attributes/frames/frames__total.json @@ -7,7 +7,18 @@ }, "is_in_otel": false, "example": 60, + "alias": ["app.frames.total.count"], + "deprecation": { + "replacement": "app.frames.total.count", + "reason": "Old namespace-less attribute, to be replaced with app.frames.total.count", + "_status": "backfill" + }, "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Deprecated in favor of app.frames.total.count" + }, { "version": "0.4.0", "prs": [228] diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 8dcb21f0..833371a6 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -136,6 +136,7 @@ class _AttributeNamesMeta(type): "AI_TOTAL_COST", "AI_TOTAL_TOKENS_USED", "AI_WARNINGS", + "_APP_START_TYPE", "CLS_SOURCE_KEY", "CLS", "CODE_FILEPATH", @@ -154,6 +155,10 @@ class _AttributeNamesMeta(type): "ENVIRONMENT", "FCP", "FP", + "FRAMES_DELAY", + "FRAMES_FROZEN", + "FRAMES_SLOW", + "FRAMES_TOTAL", "FS_ERROR", "GEN_AI_PROMPT", "GEN_AI_REQUEST_AVAILABLE_TOOLS", @@ -631,6 +636,52 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "1" """ + # Path: model/attributes/app/app__frames__delay__value.json + APP_FRAMES_DELAY_VALUE: Literal["app.frames.delay.value"] = "app.frames.delay.value" + """The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/). + + Type: int + Contains PII: maybe + Defined in OTEL: No + Aliases: frames.delay + Example: 5 + """ + + # Path: model/attributes/app/app__frames__frozen__count.json + APP_FRAMES_FROZEN_COUNT: Literal["app.frames.frozen.count"] = ( + "app.frames.frozen.count" + ) + """The number of frozen frames rendered during the lifetime of the span. + + Type: int + Contains PII: maybe + Defined in OTEL: No + Aliases: frames.frozen + Example: 3 + """ + + # Path: model/attributes/app/app__frames__slow__count.json + APP_FRAMES_SLOW_COUNT: Literal["app.frames.slow.count"] = "app.frames.slow.count" + """The number of slow frames rendered during the lifetime of the span. + + Type: int + Contains PII: maybe + Defined in OTEL: No + Aliases: frames.slow + Example: 1 + """ + + # Path: model/attributes/app/app__frames__total__count.json + APP_FRAMES_TOTAL_COUNT: Literal["app.frames.total.count"] = "app.frames.total.count" + """The number of total frames rendered during the lifetime of the span. + + Type: int + Contains PII: maybe + Defined in OTEL: No + Aliases: frames.total + Example: 60 + """ + # Path: model/attributes/app/app__identifier.json APP_IDENTIFIER: Literal["app.identifier"] = "app.identifier" """Version-independent application identifier, often a dotted bundle ID. @@ -661,19 +712,20 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "My App" """ - # Path: model/attributes/app/app__start__cold__value.json - APP_START_COLD_VALUE: Literal["app.start.cold.value"] = "app.start.cold.value" - """The duration of a cold app start in milliseconds + # Path: model/attributes/app/app__start__type.json + APP_START_TYPE: Literal["app.start.type"] = "app.start.type" + """The type of app start - Type: float + Type: str Contains PII: maybe Defined in OTEL: No - Example: 1234.56 + Aliases: app_start_type + Example: "cold" """ - # Path: model/attributes/app/app__start__warm__value.json - APP_START_WARM_VALUE: Literal["app.start.warm.value"] = "app.start.warm.value" - """The duration of a warm app start in milliseconds + # Path: model/attributes/app/app__start__value.json + APP_START_VALUE: Literal["app.start.value"] = "app.start.value" + """The duration of the app start in milliseconds Type: float Contains PII: maybe @@ -722,12 +774,14 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): """ # Path: model/attributes/app_start_type.json - APP_START_TYPE: Literal["app_start_type"] = "app_start_type" + _APP_START_TYPE: Literal["app_start_type"] = "app_start_type" """Mobile app start variant. Either cold or warm. Type: str Contains PII: maybe Defined in OTEL: No + Aliases: app.start.type + DEPRECATED: Use app.start.type instead - Old namespace-less attribute, to be replaced with app.start.type Example: "cold" """ @@ -1756,6 +1810,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: int Contains PII: maybe Defined in OTEL: No + Aliases: app.frames.delay.value + DEPRECATED: Use app.frames.delay.value instead - Old namespace-less attribute, to be replaced with app.frames.delay.value Example: 5 """ @@ -1766,6 +1822,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: int Contains PII: maybe Defined in OTEL: No + Aliases: app.frames.frozen.count + DEPRECATED: Use app.frames.frozen.count instead - Old namespace-less attribute, to be replaced with app.frames.frozen.count Example: 3 """ @@ -1776,6 +1834,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: int Contains PII: maybe Defined in OTEL: No + Aliases: app.frames.slow.count + DEPRECATED: Use app.frames.slow.count instead - Old namespace-less attribute, to be replaced with app.frames.slow.count Example: 1 """ @@ -1786,6 +1846,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: int Contains PII: maybe Defined in OTEL: No + Aliases: app.frames.total.count + DEPRECATED: Use app.frames.total.count instead - Old namespace-less attribute, to be replaced with app.frames.total.count Example: 60 """ @@ -6115,6 +6177,90 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ), ], ), + "app.frames.delay.value": AttributeMetadata( + brief="The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).", + type=AttributeType.INTEGER, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=5, + aliases=["frames.delay"], + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry( + version="next", + prs=[313], + description="Added app.frames.delay.value to replace frames.delay", + ), + ], + ), + "app.frames.frozen.count": AttributeMetadata( + brief="The number of frozen frames rendered during the lifetime of the span.", + type=AttributeType.INTEGER, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=3, + aliases=["frames.frozen"], + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry( + version="next", + prs=[313], + description="Added app.frames.frozen.count to replace frames.frozen", + ), + ], + ), + "app.frames.slow.count": AttributeMetadata( + brief="The number of slow frames rendered during the lifetime of the span.", + type=AttributeType.INTEGER, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=1, + aliases=["frames.slow"], + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry( + version="next", + prs=[313], + description="Added app.frames.slow.count to replace frames.slow", + ), + ], + ), + "app.frames.total.count": AttributeMetadata( + brief="The number of total frames rendered during the lifetime of the span.", + type=AttributeType.INTEGER, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=60, + aliases=["frames.total"], + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry( + version="next", + prs=[313], + description="Added app.frames.total.count to replace frames.total", + ), + ], + ), "app.identifier": AttributeMetadata( brief="Version-independent application identifier, often a dotted bundle ID.", type=AttributeType.STRING, @@ -6171,31 +6317,40 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ), ], ), - "app.start.cold.value": AttributeMetadata( - brief="The duration of a cold app start in milliseconds", - type=AttributeType.DOUBLE, + "app.start.type": AttributeMetadata( + brief="The type of app start", + type=AttributeType.STRING, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, - example=1234.56, + example="cold", + aliases=["app_start_type"], + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], changelog=[ ChangelogEntry( - version="next", - prs=[312], - description="Added app.start.cold.value attribute", + version="next", prs=[313], description="Added app.start.type attribute" ), ], ), - "app.start.warm.value": AttributeMetadata( - brief="The duration of a warm app start in milliseconds", + "app.start.value": AttributeMetadata( + brief="The duration of the app start in milliseconds", type=AttributeType.DOUBLE, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=1234.56, + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], changelog=[ ChangelogEntry( - version="next", - prs=[312], - description="Added app.start.warm.value attribute", + version="next", prs=[313], description="Added app.start.value attribute" ), ], ), @@ -6223,9 +6378,15 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=1234.56, + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], changelog=[ ChangelogEntry( - version="next", prs=[312], description="Added app.ttfd.value attribute" + version="next", prs=[313], description="Added app.ttfd.value attribute" ), ], ), @@ -6235,9 +6396,15 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=1234.56, + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], changelog=[ ChangelogEntry( - version="next", prs=[312], description="Added app.ttid.value attribute" + version="next", prs=[313], description="Added app.ttid.value attribute" ), ], ), @@ -6265,7 +6432,18 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example="cold", + deprecation=DeprecationInfo( + replacement="app.start.type", + reason="Old namespace-less attribute, to be replaced with app.start.type", + status=DeprecationStatus.BACKFILL, + ), + aliases=["app.start.type"], changelog=[ + ChangelogEntry( + version="next", + prs=[313], + description="Deprecated in favor of app.start.type", + ), ChangelogEntry(version="0.1.0", prs=[127]), ChangelogEntry(version="0.0.0"), ], @@ -7438,7 +7616,18 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=5, + deprecation=DeprecationInfo( + replacement="app.frames.delay.value", + reason="Old namespace-less attribute, to be replaced with app.frames.delay.value", + status=DeprecationStatus.BACKFILL, + ), + aliases=["app.frames.delay.value"], changelog=[ + ChangelogEntry( + version="next", + prs=[313], + description="Deprecated in favor of app.frames.delay.value", + ), ChangelogEntry(version="0.4.0", prs=[228]), ChangelogEntry(version="0.0.0"), ], @@ -7449,7 +7638,18 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=3, + deprecation=DeprecationInfo( + replacement="app.frames.frozen.count", + reason="Old namespace-less attribute, to be replaced with app.frames.frozen.count", + status=DeprecationStatus.BACKFILL, + ), + aliases=["app.frames.frozen.count"], changelog=[ + ChangelogEntry( + version="next", + prs=[313], + description="Deprecated in favor of app.frames.frozen.count", + ), ChangelogEntry(version="0.4.0", prs=[228]), ChangelogEntry(version="0.0.0"), ], @@ -7460,7 +7660,18 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=1, + deprecation=DeprecationInfo( + replacement="app.frames.slow.count", + reason="Old namespace-less attribute, to be replaced with app.frames.slow.count", + status=DeprecationStatus.BACKFILL, + ), + aliases=["app.frames.slow.count"], changelog=[ + ChangelogEntry( + version="next", + prs=[313], + description="Deprecated in favor of app.frames.slow.count", + ), ChangelogEntry(version="0.4.0", prs=[228]), ChangelogEntry(version="0.0.0"), ], @@ -7471,7 +7682,18 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=60, + deprecation=DeprecationInfo( + replacement="app.frames.total.count", + reason="Old namespace-less attribute, to be replaced with app.frames.total.count", + status=DeprecationStatus.BACKFILL, + ), + aliases=["app.frames.total.count"], changelog=[ + ChangelogEntry( + version="next", + prs=[313], + description="Deprecated in favor of app.frames.total.count", + ), ChangelogEntry(version="0.4.0", prs=[228]), ChangelogEntry(version="0.0.0"), ], @@ -11621,11 +11843,15 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "ai.total_tokens.used": int, "ai.warnings": List[str], "app.build": str, + "app.frames.delay.value": int, + "app.frames.frozen.count": int, + "app.frames.slow.count": int, + "app.frames.total.count": int, "app.identifier": str, "app.in_foreground": bool, "app.name": str, - "app.start.cold.value": float, - "app.start.warm.value": float, + "app.start.type": str, + "app.start.value": float, "app.start_time": str, "app.ttfd.value": float, "app.ttid.value": float, diff --git a/shared/deprecated_attributes.json b/shared/deprecated_attributes.json index 9e75c710..95660763 100644 --- a/shared/deprecated_attributes.json +++ b/shared/deprecated_attributes.json @@ -1,6 +1,36 @@ { "_generated": "This file is generated. Do not modify it directly. See scripts/generate_deprecated_attributes_json.ts", "attributes": [ + { + "key": "app_start_type", + "brief": "Mobile app start variant. Either cold or warm.", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": "cold", + "alias": ["app.start.type"], + "deprecation": { + "replacement": "app.start.type", + "reason": "Old namespace-less attribute, to be replaced with app.start.type", + "_status": "backfill" + }, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Deprecated in favor of app.start.type" + }, + { + "version": "0.1.0", + "prs": [127] + }, + { + "version": "0.0.0" + } + ] + }, { "key": "cls", "brief": "The value of the recorded Cumulative Layout Shift (CLS) web vital", @@ -1510,6 +1540,126 @@ } ] }, + { + "key": "frames.delay", + "brief": "The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 5, + "alias": ["app.frames.delay.value"], + "deprecation": { + "replacement": "app.frames.delay.value", + "reason": "Old namespace-less attribute, to be replaced with app.frames.delay.value", + "_status": "backfill" + }, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Deprecated in favor of app.frames.delay.value" + }, + { + "version": "0.4.0", + "prs": [228] + }, + { + "version": "0.0.0" + } + ] + }, + { + "key": "frames.frozen", + "brief": "The number of frozen frames rendered during the lifetime of the span.", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 3, + "alias": ["app.frames.frozen.count"], + "deprecation": { + "replacement": "app.frames.frozen.count", + "reason": "Old namespace-less attribute, to be replaced with app.frames.frozen.count", + "_status": "backfill" + }, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Deprecated in favor of app.frames.frozen.count" + }, + { + "version": "0.4.0", + "prs": [228] + }, + { + "version": "0.0.0" + } + ] + }, + { + "key": "frames.slow", + "brief": "The number of slow frames rendered during the lifetime of the span.", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 1, + "alias": ["app.frames.slow.count"], + "deprecation": { + "replacement": "app.frames.slow.count", + "reason": "Old namespace-less attribute, to be replaced with app.frames.slow.count", + "_status": "backfill" + }, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Deprecated in favor of app.frames.slow.count" + }, + { + "version": "0.4.0", + "prs": [228] + }, + { + "version": "0.0.0" + } + ] + }, + { + "key": "frames.total", + "brief": "The number of total frames rendered during the lifetime of the span.", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 60, + "alias": ["app.frames.total.count"], + "deprecation": { + "replacement": "app.frames.total.count", + "reason": "Old namespace-less attribute, to be replaced with app.frames.total.count", + "_status": "backfill" + }, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Deprecated in favor of app.frames.total.count" + }, + { + "version": "0.4.0", + "prs": [228] + }, + { + "version": "0.0.0" + } + ] + }, { "key": "gen_ai.prompt", "brief": "The input messages sent to the model", From bba6c8046b83a0e5a95614f18320891800c73232 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Mon, 13 Apr 2026 10:44:10 +0200 Subject: [PATCH 4/7] feat(attributes): Deprecate time_to_initial_display and time_to_full_display Add time_to_initial_display and time_to_full_display as deprecated attributes with backfill status, pointing to app.ttid.value and app.ttfd.value respectively. Adds aliases on both sides and SDK usages. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../sentry-conventions/src/attributes.ts | 90 +++++++++++++++++++ model/attributes/app/app__ttfd__value.json | 1 + model/attributes/app/app__ttid__value.json | 1 + model/attributes/time_to_full_display.json | 24 +++++ model/attributes/time_to_initial_display.json | 24 +++++ python/src/sentry_conventions/attributes.py | 86 ++++++++++++++++++ shared/deprecated_attributes.json | 48 ++++++++++ 7 files changed, 274 insertions(+) create mode 100644 model/attributes/time_to_full_display.json create mode 100644 model/attributes/time_to_initial_display.json diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 7dfeaa78..243b4e1c 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -997,6 +997,8 @@ export type APP_START_VALUE_TYPE = number; * * Attribute defined in OTEL: No * + * Aliases: {@link TIME_TO_FULL_DISPLAY} `time_to_full_display` + * * @example 1234.56 */ export const APP_TTFD_VALUE = 'app.ttfd.value'; @@ -1017,6 +1019,8 @@ export type APP_TTFD_VALUE_TYPE = number; * * Attribute defined in OTEL: No * + * Aliases: {@link TIME_TO_INITIAL_DISPLAY} `time_to_initial_display` + * * @example 1234.56 */ export const APP_TTID_VALUE = 'app.ttid.value'; @@ -8859,6 +8863,52 @@ export const TIMBER_TAG = 'timber.tag'; */ export type TIMBER_TAG_TYPE = string; +// Path: model/attributes/time_to_full_display.json + +/** + * The duration of time to full display in milliseconds `time_to_full_display` + * + * Attribute Value Type: `number` {@link TIME_TO_FULL_DISPLAY_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * Aliases: {@link APP_TTFD_VALUE} `app.ttfd.value` + * + * @deprecated Use {@link APP_TTFD_VALUE} (app.ttfd.value) instead - Old namespace-less attribute, to be replaced with app.ttfd.value + * @example 1234.56 + */ +export const TIME_TO_FULL_DISPLAY = 'time_to_full_display'; + +/** + * Type for {@link TIME_TO_FULL_DISPLAY} time_to_full_display + */ +export type TIME_TO_FULL_DISPLAY_TYPE = number; + +// Path: model/attributes/time_to_initial_display.json + +/** + * The duration of time to initial display in milliseconds `time_to_initial_display` + * + * Attribute Value Type: `number` {@link TIME_TO_INITIAL_DISPLAY_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * Aliases: {@link APP_TTID_VALUE} `app.ttid.value` + * + * @deprecated Use {@link APP_TTID_VALUE} (app.ttid.value) instead - Old namespace-less attribute, to be replaced with app.ttid.value + * @example 1234.56 + */ +export const TIME_TO_INITIAL_DISPLAY = 'time_to_initial_display'; + +/** + * Type for {@link TIME_TO_INITIAL_DISPLAY} time_to_initial_display + */ +export type TIME_TO_INITIAL_DISPLAY_TYPE = number; + // Path: model/attributes/transaction.json /** @@ -10823,6 +10873,8 @@ export const ATTRIBUTE_TYPE: Record = { [THREAD_ID]: 'integer', [THREAD_NAME]: 'string', [TIMBER_TAG]: 'string', + [TIME_TO_FULL_DISPLAY]: 'double', + [TIME_TO_INITIAL_DISPLAY]: 'double', [TRANSACTION]: 'string', [TTFB]: 'double', [TTFB_REQUESTTIME]: 'double', @@ -11319,6 +11371,8 @@ export type AttributeName = | typeof THREAD_ID | typeof THREAD_NAME | typeof TIMBER_TAG + | typeof TIME_TO_FULL_DISPLAY + | typeof TIME_TO_INITIAL_DISPLAY | typeof TRANSACTION | typeof TTFB | typeof TTFB_REQUESTTIME @@ -12049,6 +12103,7 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: 1234.56, + aliases: [TIME_TO_FULL_DISPLAY], sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], changelog: [{ version: 'next', prs: [313], description: 'Added app.ttfd.value attribute' }], }, @@ -12060,6 +12115,7 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: 1234.56, + aliases: [TIME_TO_INITIAL_DISPLAY], sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], changelog: [{ version: 'next', prs: [313], description: 'Added app.ttid.value attribute' }], }, @@ -16645,6 +16701,38 @@ export const ATTRIBUTE_METADATA: Record = { sdks: ['sentry.java.android'], changelog: [{ version: '0.3.0', prs: [183] }], }, + [TIME_TO_FULL_DISPLAY]: { + brief: 'The duration of time to full display in milliseconds', + type: 'double', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 1234.56, + deprecation: { + replacement: 'app.ttfd.value', + reason: 'Old namespace-less attribute, to be replaced with app.ttfd.value', + }, + aliases: [APP_TTFD_VALUE], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', prs: [313], description: 'Added and deprecated in favor of app.ttfd.value' }], + }, + [TIME_TO_INITIAL_DISPLAY]: { + brief: 'The duration of time to initial display in milliseconds', + type: 'double', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 1234.56, + deprecation: { + replacement: 'app.ttid.value', + reason: 'Old namespace-less attribute, to be replaced with app.ttid.value', + }, + aliases: [APP_TTID_VALUE], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', prs: [313], description: 'Added and deprecated in favor of app.ttid.value' }], + }, [TRANSACTION]: { brief: 'The sentry transaction (segment name).', type: 'string', @@ -17857,6 +17945,8 @@ export type Attributes = { [THREAD_ID]?: THREAD_ID_TYPE; [THREAD_NAME]?: THREAD_NAME_TYPE; [TIMBER_TAG]?: TIMBER_TAG_TYPE; + [TIME_TO_FULL_DISPLAY]?: TIME_TO_FULL_DISPLAY_TYPE; + [TIME_TO_INITIAL_DISPLAY]?: TIME_TO_INITIAL_DISPLAY_TYPE; [TRANSACTION]?: TRANSACTION_TYPE; [TTFB]?: TTFB_TYPE; [TTFB_REQUESTTIME]?: TTFB_REQUESTTIME_TYPE; diff --git a/model/attributes/app/app__ttfd__value.json b/model/attributes/app/app__ttfd__value.json index f5f3b207..b290d4bf 100644 --- a/model/attributes/app/app__ttfd__value.json +++ b/model/attributes/app/app__ttfd__value.json @@ -6,6 +6,7 @@ "key": "maybe" }, "is_in_otel": false, + "alias": ["time_to_full_display"], "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], "example": 1234.56, "changelog": [ diff --git a/model/attributes/app/app__ttid__value.json b/model/attributes/app/app__ttid__value.json index 0fe2995d..e1f016e3 100644 --- a/model/attributes/app/app__ttid__value.json +++ b/model/attributes/app/app__ttid__value.json @@ -6,6 +6,7 @@ "key": "maybe" }, "is_in_otel": false, + "alias": ["time_to_initial_display"], "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], "example": 1234.56, "changelog": [ diff --git a/model/attributes/time_to_full_display.json b/model/attributes/time_to_full_display.json new file mode 100644 index 00000000..80b794b4 --- /dev/null +++ b/model/attributes/time_to_full_display.json @@ -0,0 +1,24 @@ +{ + "key": "time_to_full_display", + "brief": "The duration of time to full display in milliseconds", + "type": "double", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 1234.56, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "alias": ["app.ttfd.value"], + "deprecation": { + "replacement": "app.ttfd.value", + "reason": "Old namespace-less attribute, to be replaced with app.ttfd.value", + "_status": "backfill" + }, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Added and deprecated in favor of app.ttfd.value" + } + ] +} diff --git a/model/attributes/time_to_initial_display.json b/model/attributes/time_to_initial_display.json new file mode 100644 index 00000000..a63c2ea9 --- /dev/null +++ b/model/attributes/time_to_initial_display.json @@ -0,0 +1,24 @@ +{ + "key": "time_to_initial_display", + "brief": "The duration of time to initial display in milliseconds", + "type": "double", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 1234.56, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "alias": ["app.ttid.value"], + "deprecation": { + "replacement": "app.ttid.value", + "reason": "Old namespace-less attribute, to be replaced with app.ttid.value", + "_status": "backfill" + }, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Added and deprecated in favor of app.ttid.value" + } + ] +} diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 833371a6..12d04e09 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -220,6 +220,8 @@ class _AttributeNamesMeta(type): "_SENTRY_SEGMENT_ID", "SENTRY_SOURCE", "SENTRY_TRACE_PARENT_SPAN_ID", + "TIME_TO_FULL_DISPLAY", + "TIME_TO_INITIAL_DISPLAY", "TRANSACTION", "TTFB_REQUESTTIME", "TTFB", @@ -750,6 +752,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: float Contains PII: maybe Defined in OTEL: No + Aliases: time_to_full_display Example: 1234.56 """ @@ -760,6 +763,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: float Contains PII: maybe Defined in OTEL: No + Aliases: time_to_initial_display Example: 1234.56 """ @@ -4973,6 +4977,32 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "MyTag" """ + # Path: model/attributes/time_to_full_display.json + TIME_TO_FULL_DISPLAY: Literal["time_to_full_display"] = "time_to_full_display" + """The duration of time to full display in milliseconds + + Type: float + Contains PII: maybe + Defined in OTEL: No + Aliases: app.ttfd.value + DEPRECATED: Use app.ttfd.value instead - Old namespace-less attribute, to be replaced with app.ttfd.value + Example: 1234.56 + """ + + # Path: model/attributes/time_to_initial_display.json + TIME_TO_INITIAL_DISPLAY: Literal["time_to_initial_display"] = ( + "time_to_initial_display" + ) + """The duration of time to initial display in milliseconds + + Type: float + Contains PII: maybe + Defined in OTEL: No + Aliases: app.ttid.value + DEPRECATED: Use app.ttid.value instead - Old namespace-less attribute, to be replaced with app.ttid.value + Example: 1234.56 + """ + # Path: model/attributes/transaction.json TRANSACTION: Literal["transaction"] = "transaction" """The sentry transaction (segment name). @@ -6378,6 +6408,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=1234.56, + aliases=["time_to_full_display"], sdks=[ "sentry.cocoa", "sentry.java.android", @@ -6396,6 +6427,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=1234.56, + aliases=["time_to_initial_display"], sdks=[ "sentry.cocoa", "sentry.java.android", @@ -10988,6 +11020,58 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ChangelogEntry(version="0.3.0", prs=[183]), ], ), + "time_to_full_display": AttributeMetadata( + brief="The duration of time to full display in milliseconds", + type=AttributeType.DOUBLE, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=1234.56, + deprecation=DeprecationInfo( + replacement="app.ttfd.value", + reason="Old namespace-less attribute, to be replaced with app.ttfd.value", + status=DeprecationStatus.BACKFILL, + ), + aliases=["app.ttfd.value"], + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry( + version="next", + prs=[313], + description="Added and deprecated in favor of app.ttfd.value", + ), + ], + ), + "time_to_initial_display": AttributeMetadata( + brief="The duration of time to initial display in milliseconds", + type=AttributeType.DOUBLE, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=1234.56, + deprecation=DeprecationInfo( + replacement="app.ttid.value", + reason="Old namespace-less attribute, to be replaced with app.ttid.value", + status=DeprecationStatus.BACKFILL, + ), + aliases=["app.ttid.value"], + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry( + version="next", + prs=[313], + description="Added and deprecated in favor of app.ttid.value", + ), + ], + ), "transaction": AttributeMetadata( brief="The sentry transaction (segment name).", type=AttributeType.STRING, @@ -12229,6 +12313,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "thread.id": int, "thread.name": str, "timber.tag": str, + "time_to_full_display": float, + "time_to_initial_display": float, "transaction": str, "ttfb.requestTime": float, "ttfb": float, diff --git a/shared/deprecated_attributes.json b/shared/deprecated_attributes.json index 95660763..69298d2e 100644 --- a/shared/deprecated_attributes.json +++ b/shared/deprecated_attributes.json @@ -397,6 +397,54 @@ } ] }, + { + "key": "time_to_full_display", + "brief": "The duration of time to full display in milliseconds", + "type": "double", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 1234.56, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "alias": ["app.ttfd.value"], + "deprecation": { + "replacement": "app.ttfd.value", + "reason": "Old namespace-less attribute, to be replaced with app.ttfd.value", + "_status": "backfill" + }, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Added and deprecated in favor of app.ttfd.value" + } + ] + }, + { + "key": "time_to_initial_display", + "brief": "The duration of time to initial display in milliseconds", + "type": "double", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 1234.56, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "alias": ["app.ttid.value"], + "deprecation": { + "replacement": "app.ttid.value", + "reason": "Old namespace-less attribute, to be replaced with app.ttid.value", + "_status": "backfill" + }, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Added and deprecated in favor of app.ttid.value" + } + ] + }, { "key": "transaction", "brief": "The sentry transaction (segment name).", From 1ec65a747a7fb596b269b0bd731592693d1515a4 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Mon, 13 Apr 2026 10:45:25 +0200 Subject: [PATCH 5/7] fix(attributes): Address PR review feedback - Change app.frames.delay.value type from integer to double since frame delays are fractional seconds - Fix frames.* deprecation reasons to say "Old frames.* attribute" instead of "Old namespace-less attribute" - Improve app.start.type brief to mention cold/warm examples Co-Authored-By: Claude Opus 4.6 (1M context) --- .../sentry-conventions/src/attributes.ts | 24 ++++++++--------- .../app/app__frames__delay__value.json | 2 +- model/attributes/app/app__start__type.json | 2 +- model/attributes/frames/frames__delay.json | 2 +- model/attributes/frames/frames__frozen.json | 2 +- model/attributes/frames/frames__slow.json | 2 +- model/attributes/frames/frames__total.json | 2 +- python/src/sentry_conventions/attributes.py | 26 +++++++++---------- shared/deprecated_attributes.json | 8 +++--- 9 files changed, 35 insertions(+), 35 deletions(-) diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 243b4e1c..8f3fb619 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -924,7 +924,7 @@ export type APP_START_TIME_TYPE = string; // Path: model/attributes/app/app__start__type.json /** - * The type of app start `app.start.type` + * The type of app start, for example `cold` or `warm` `app.start.type` * * Attribute Value Type: `string` {@link APP_START_TYPE_TYPE} * @@ -2993,7 +2993,7 @@ export type FP_TYPE = number; * * Aliases: {@link APP_FRAMES_DELAY_VALUE} `app.frames.delay.value` * - * @deprecated Use {@link APP_FRAMES_DELAY_VALUE} (app.frames.delay.value) instead - Old namespace-less attribute, to be replaced with app.frames.delay.value + * @deprecated Use {@link APP_FRAMES_DELAY_VALUE} (app.frames.delay.value) instead - Old frames.* attribute, to be replaced with app.frames.delay.value for app namespacing * @example 5 */ export const FRAMES_DELAY = 'frames.delay'; @@ -3016,7 +3016,7 @@ export type FRAMES_DELAY_TYPE = number; * * Aliases: {@link APP_FRAMES_FROZEN_COUNT} `app.frames.frozen.count` * - * @deprecated Use {@link APP_FRAMES_FROZEN_COUNT} (app.frames.frozen.count) instead - Old namespace-less attribute, to be replaced with app.frames.frozen.count + * @deprecated Use {@link APP_FRAMES_FROZEN_COUNT} (app.frames.frozen.count) instead - Old frames.* attribute, to be replaced with app.frames.frozen.count for app namespacing * @example 3 */ export const FRAMES_FROZEN = 'frames.frozen'; @@ -3039,7 +3039,7 @@ export type FRAMES_FROZEN_TYPE = number; * * Aliases: {@link APP_FRAMES_SLOW_COUNT} `app.frames.slow.count` * - * @deprecated Use {@link APP_FRAMES_SLOW_COUNT} (app.frames.slow.count) instead - Old namespace-less attribute, to be replaced with app.frames.slow.count + * @deprecated Use {@link APP_FRAMES_SLOW_COUNT} (app.frames.slow.count) instead - Old frames.* attribute, to be replaced with app.frames.slow.count for app namespacing * @example 1 */ export const FRAMES_SLOW = 'frames.slow'; @@ -3062,7 +3062,7 @@ export type FRAMES_SLOW_TYPE = number; * * Aliases: {@link APP_FRAMES_TOTAL_COUNT} `app.frames.total.count` * - * @deprecated Use {@link APP_FRAMES_TOTAL_COUNT} (app.frames.total.count) instead - Old namespace-less attribute, to be replaced with app.frames.total.count + * @deprecated Use {@link APP_FRAMES_TOTAL_COUNT} (app.frames.total.count) instead - Old frames.* attribute, to be replaced with app.frames.total.count for app namespacing * @example 60 */ export const FRAMES_TOTAL = 'frames.total'; @@ -10487,7 +10487,7 @@ export const ATTRIBUTE_TYPE: Record = { [AI_TOTAL_TOKENS_USED]: 'integer', [AI_WARNINGS]: 'string[]', [APP_BUILD]: 'string', - [APP_FRAMES_DELAY_VALUE]: 'integer', + [APP_FRAMES_DELAY_VALUE]: 'double', [APP_FRAMES_FROZEN_COUNT]: 'integer', [APP_FRAMES_SLOW_COUNT]: 'integer', [APP_FRAMES_TOTAL_COUNT]: 'integer', @@ -11963,7 +11963,7 @@ export const ATTRIBUTE_METADATA: Record = { [APP_FRAMES_DELAY_VALUE]: { brief: 'The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).', - type: 'integer', + type: 'double', pii: { isPii: 'maybe', }, @@ -12054,7 +12054,7 @@ export const ATTRIBUTE_METADATA: Record = { changelog: [{ version: 'next', prs: [296], description: 'Added app.start_time attribute' }], }, [APP_START_TYPE]: { - brief: 'The type of app start', + brief: 'The type of app start, for example `cold` or `warm`', type: 'string', pii: { isPii: 'maybe', @@ -13269,7 +13269,7 @@ export const ATTRIBUTE_METADATA: Record = { example: 5, deprecation: { replacement: 'app.frames.delay.value', - reason: 'Old namespace-less attribute, to be replaced with app.frames.delay.value', + reason: 'Old frames.* attribute, to be replaced with app.frames.delay.value for app namespacing', }, aliases: [APP_FRAMES_DELAY_VALUE], changelog: [ @@ -13288,7 +13288,7 @@ export const ATTRIBUTE_METADATA: Record = { example: 3, deprecation: { replacement: 'app.frames.frozen.count', - reason: 'Old namespace-less attribute, to be replaced with app.frames.frozen.count', + reason: 'Old frames.* attribute, to be replaced with app.frames.frozen.count for app namespacing', }, aliases: [APP_FRAMES_FROZEN_COUNT], changelog: [ @@ -13307,7 +13307,7 @@ export const ATTRIBUTE_METADATA: Record = { example: 1, deprecation: { replacement: 'app.frames.slow.count', - reason: 'Old namespace-less attribute, to be replaced with app.frames.slow.count', + reason: 'Old frames.* attribute, to be replaced with app.frames.slow.count for app namespacing', }, aliases: [APP_FRAMES_SLOW_COUNT], changelog: [ @@ -13326,7 +13326,7 @@ export const ATTRIBUTE_METADATA: Record = { example: 60, deprecation: { replacement: 'app.frames.total.count', - reason: 'Old namespace-less attribute, to be replaced with app.frames.total.count', + reason: 'Old frames.* attribute, to be replaced with app.frames.total.count for app namespacing', }, aliases: [APP_FRAMES_TOTAL_COUNT], changelog: [ diff --git a/model/attributes/app/app__frames__delay__value.json b/model/attributes/app/app__frames__delay__value.json index 2e973c36..4af5d3de 100644 --- a/model/attributes/app/app__frames__delay__value.json +++ b/model/attributes/app/app__frames__delay__value.json @@ -1,7 +1,7 @@ { "key": "app.frames.delay.value", "brief": "The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).", - "type": "integer", + "type": "double", "pii": { "key": "maybe" }, diff --git a/model/attributes/app/app__start__type.json b/model/attributes/app/app__start__type.json index d93c7f37..a910de5f 100644 --- a/model/attributes/app/app__start__type.json +++ b/model/attributes/app/app__start__type.json @@ -1,6 +1,6 @@ { "key": "app.start.type", - "brief": "The type of app start", + "brief": "The type of app start, for example `cold` or `warm`", "type": "string", "pii": { "key": "maybe" diff --git a/model/attributes/frames/frames__delay.json b/model/attributes/frames/frames__delay.json index d0c89a25..2f5976ff 100644 --- a/model/attributes/frames/frames__delay.json +++ b/model/attributes/frames/frames__delay.json @@ -10,7 +10,7 @@ "alias": ["app.frames.delay.value"], "deprecation": { "replacement": "app.frames.delay.value", - "reason": "Old namespace-less attribute, to be replaced with app.frames.delay.value", + "reason": "Old frames.* attribute, to be replaced with app.frames.delay.value for app namespacing", "_status": "backfill" }, "changelog": [ diff --git a/model/attributes/frames/frames__frozen.json b/model/attributes/frames/frames__frozen.json index 301f6c0a..05b0458c 100644 --- a/model/attributes/frames/frames__frozen.json +++ b/model/attributes/frames/frames__frozen.json @@ -10,7 +10,7 @@ "alias": ["app.frames.frozen.count"], "deprecation": { "replacement": "app.frames.frozen.count", - "reason": "Old namespace-less attribute, to be replaced with app.frames.frozen.count", + "reason": "Old frames.* attribute, to be replaced with app.frames.frozen.count for app namespacing", "_status": "backfill" }, "changelog": [ diff --git a/model/attributes/frames/frames__slow.json b/model/attributes/frames/frames__slow.json index 01324edc..37dfbdf5 100644 --- a/model/attributes/frames/frames__slow.json +++ b/model/attributes/frames/frames__slow.json @@ -10,7 +10,7 @@ "alias": ["app.frames.slow.count"], "deprecation": { "replacement": "app.frames.slow.count", - "reason": "Old namespace-less attribute, to be replaced with app.frames.slow.count", + "reason": "Old frames.* attribute, to be replaced with app.frames.slow.count for app namespacing", "_status": "backfill" }, "changelog": [ diff --git a/model/attributes/frames/frames__total.json b/model/attributes/frames/frames__total.json index 0044ecfc..224b7c9a 100644 --- a/model/attributes/frames/frames__total.json +++ b/model/attributes/frames/frames__total.json @@ -10,7 +10,7 @@ "alias": ["app.frames.total.count"], "deprecation": { "replacement": "app.frames.total.count", - "reason": "Old namespace-less attribute, to be replaced with app.frames.total.count", + "reason": "Old frames.* attribute, to be replaced with app.frames.total.count for app namespacing", "_status": "backfill" }, "changelog": [ diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 12d04e09..154be1bb 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -642,7 +642,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): APP_FRAMES_DELAY_VALUE: Literal["app.frames.delay.value"] = "app.frames.delay.value" """The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/). - Type: int + Type: float Contains PII: maybe Defined in OTEL: No Aliases: frames.delay @@ -716,7 +716,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): # Path: model/attributes/app/app__start__type.json APP_START_TYPE: Literal["app.start.type"] = "app.start.type" - """The type of app start + """The type of app start, for example `cold` or `warm` Type: str Contains PII: maybe @@ -1815,7 +1815,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Contains PII: maybe Defined in OTEL: No Aliases: app.frames.delay.value - DEPRECATED: Use app.frames.delay.value instead - Old namespace-less attribute, to be replaced with app.frames.delay.value + DEPRECATED: Use app.frames.delay.value instead - Old frames.* attribute, to be replaced with app.frames.delay.value for app namespacing Example: 5 """ @@ -1827,7 +1827,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Contains PII: maybe Defined in OTEL: No Aliases: app.frames.frozen.count - DEPRECATED: Use app.frames.frozen.count instead - Old namespace-less attribute, to be replaced with app.frames.frozen.count + DEPRECATED: Use app.frames.frozen.count instead - Old frames.* attribute, to be replaced with app.frames.frozen.count for app namespacing Example: 3 """ @@ -1839,7 +1839,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Contains PII: maybe Defined in OTEL: No Aliases: app.frames.slow.count - DEPRECATED: Use app.frames.slow.count instead - Old namespace-less attribute, to be replaced with app.frames.slow.count + DEPRECATED: Use app.frames.slow.count instead - Old frames.* attribute, to be replaced with app.frames.slow.count for app namespacing Example: 1 """ @@ -1851,7 +1851,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Contains PII: maybe Defined in OTEL: No Aliases: app.frames.total.count - DEPRECATED: Use app.frames.total.count instead - Old namespace-less attribute, to be replaced with app.frames.total.count + DEPRECATED: Use app.frames.total.count instead - Old frames.* attribute, to be replaced with app.frames.total.count for app namespacing Example: 60 """ @@ -6209,7 +6209,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ), "app.frames.delay.value": AttributeMetadata( brief="The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).", - type=AttributeType.INTEGER, + type=AttributeType.DOUBLE, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=5, @@ -6348,7 +6348,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], ), "app.start.type": AttributeMetadata( - brief="The type of app start", + brief="The type of app start, for example `cold` or `warm`", type=AttributeType.STRING, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, @@ -7650,7 +7650,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example=5, deprecation=DeprecationInfo( replacement="app.frames.delay.value", - reason="Old namespace-less attribute, to be replaced with app.frames.delay.value", + reason="Old frames.* attribute, to be replaced with app.frames.delay.value for app namespacing", status=DeprecationStatus.BACKFILL, ), aliases=["app.frames.delay.value"], @@ -7672,7 +7672,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example=3, deprecation=DeprecationInfo( replacement="app.frames.frozen.count", - reason="Old namespace-less attribute, to be replaced with app.frames.frozen.count", + reason="Old frames.* attribute, to be replaced with app.frames.frozen.count for app namespacing", status=DeprecationStatus.BACKFILL, ), aliases=["app.frames.frozen.count"], @@ -7694,7 +7694,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example=1, deprecation=DeprecationInfo( replacement="app.frames.slow.count", - reason="Old namespace-less attribute, to be replaced with app.frames.slow.count", + reason="Old frames.* attribute, to be replaced with app.frames.slow.count for app namespacing", status=DeprecationStatus.BACKFILL, ), aliases=["app.frames.slow.count"], @@ -7716,7 +7716,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): example=60, deprecation=DeprecationInfo( replacement="app.frames.total.count", - reason="Old namespace-less attribute, to be replaced with app.frames.total.count", + reason="Old frames.* attribute, to be replaced with app.frames.total.count for app namespacing", status=DeprecationStatus.BACKFILL, ), aliases=["app.frames.total.count"], @@ -11927,7 +11927,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "ai.total_tokens.used": int, "ai.warnings": List[str], "app.build": str, - "app.frames.delay.value": int, + "app.frames.delay.value": float, "app.frames.frozen.count": int, "app.frames.slow.count": int, "app.frames.total.count": int, diff --git a/shared/deprecated_attributes.json b/shared/deprecated_attributes.json index 69298d2e..25bbacd8 100644 --- a/shared/deprecated_attributes.json +++ b/shared/deprecated_attributes.json @@ -1600,7 +1600,7 @@ "alias": ["app.frames.delay.value"], "deprecation": { "replacement": "app.frames.delay.value", - "reason": "Old namespace-less attribute, to be replaced with app.frames.delay.value", + "reason": "Old frames.* attribute, to be replaced with app.frames.delay.value for app namespacing", "_status": "backfill" }, "changelog": [ @@ -1630,7 +1630,7 @@ "alias": ["app.frames.frozen.count"], "deprecation": { "replacement": "app.frames.frozen.count", - "reason": "Old namespace-less attribute, to be replaced with app.frames.frozen.count", + "reason": "Old frames.* attribute, to be replaced with app.frames.frozen.count for app namespacing", "_status": "backfill" }, "changelog": [ @@ -1660,7 +1660,7 @@ "alias": ["app.frames.slow.count"], "deprecation": { "replacement": "app.frames.slow.count", - "reason": "Old namespace-less attribute, to be replaced with app.frames.slow.count", + "reason": "Old frames.* attribute, to be replaced with app.frames.slow.count for app namespacing", "_status": "backfill" }, "changelog": [ @@ -1690,7 +1690,7 @@ "alias": ["app.frames.total.count"], "deprecation": { "replacement": "app.frames.total.count", - "reason": "Old namespace-less attribute, to be replaced with app.frames.total.count", + "reason": "Old frames.* attribute, to be replaced with app.frames.total.count for app namespacing", "_status": "backfill" }, "changelog": [ From 6efd2d9e860b1acfc31bc4bb5d7d57ab04df3b40 Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Mon, 13 Apr 2026 10:46:17 +0200 Subject: [PATCH 6/7] fix(attributes): Revert app.frames.delay.value type back to integer Co-Authored-By: Claude Opus 4.6 (1M context) --- javascript/sentry-conventions/src/attributes.ts | 4 ++-- model/attributes/app/app__frames__delay__value.json | 2 +- python/src/sentry_conventions/attributes.py | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 8f3fb619..d4094ce6 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -10487,7 +10487,7 @@ export const ATTRIBUTE_TYPE: Record = { [AI_TOTAL_TOKENS_USED]: 'integer', [AI_WARNINGS]: 'string[]', [APP_BUILD]: 'string', - [APP_FRAMES_DELAY_VALUE]: 'double', + [APP_FRAMES_DELAY_VALUE]: 'integer', [APP_FRAMES_FROZEN_COUNT]: 'integer', [APP_FRAMES_SLOW_COUNT]: 'integer', [APP_FRAMES_TOTAL_COUNT]: 'integer', @@ -11963,7 +11963,7 @@ export const ATTRIBUTE_METADATA: Record = { [APP_FRAMES_DELAY_VALUE]: { brief: 'The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).', - type: 'double', + type: 'integer', pii: { isPii: 'maybe', }, diff --git a/model/attributes/app/app__frames__delay__value.json b/model/attributes/app/app__frames__delay__value.json index 4af5d3de..2e973c36 100644 --- a/model/attributes/app/app__frames__delay__value.json +++ b/model/attributes/app/app__frames__delay__value.json @@ -1,7 +1,7 @@ { "key": "app.frames.delay.value", "brief": "The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).", - "type": "double", + "type": "integer", "pii": { "key": "maybe" }, diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 154be1bb..2dc6a271 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -642,7 +642,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): APP_FRAMES_DELAY_VALUE: Literal["app.frames.delay.value"] = "app.frames.delay.value" """The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/). - Type: float + Type: int Contains PII: maybe Defined in OTEL: No Aliases: frames.delay @@ -6209,7 +6209,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ), "app.frames.delay.value": AttributeMetadata( brief="The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).", - type=AttributeType.DOUBLE, + type=AttributeType.INTEGER, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=5, @@ -11927,7 +11927,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "ai.total_tokens.used": int, "ai.warnings": List[str], "app.build": str, - "app.frames.delay.value": float, + "app.frames.delay.value": int, "app.frames.frozen.count": int, "app.frames.slow.count": int, "app.frames.total.count": int, From 03d84e34f81dd9fc20125c564cfea547f116ba0c Mon Sep 17 00:00:00 2001 From: Giancarlo Buenaflor Date: Mon, 13 Apr 2026 13:01:02 +0200 Subject: [PATCH 7/7] ref(attributes): Move to app.vitals.* namespace and restore cold/warm keys Rename all new attributes to app.vitals.* namespace. Replace app.start.value + app.start.type with app.vitals.start.cold.value and app.vitals.start.warm.value. Add app.vitals.start.type deprecating app_start_type. Improve deprecation reasons across all deprecated attributes. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../sentry-conventions/src/attributes.ts | 535 ++++++++++-------- ...=> app__vitals__frames__delay__value.json} | 4 +- ...> app__vitals__frames__frozen__count.json} | 4 +- ... => app__vitals__frames__slow__count.json} | 4 +- ...=> app__vitals__frames__total__count.json} | 4 +- ...n => app__vitals__start__cold__value.json} | 6 +- ...ype.json => app__vitals__start__type.json} | 4 +- .../app/app__vitals__start__warm__value.json | 18 + ...lue.json => app__vitals__ttfd__value.json} | 4 +- ...lue.json => app__vitals__ttid__value.json} | 4 +- model/attributes/app_start_type.json | 8 +- model/attributes/frames/frames__delay.json | 6 +- model/attributes/frames/frames__frozen.json | 6 +- model/attributes/frames/frames__slow.json | 6 +- model/attributes/frames/frames__total.json | 6 +- model/attributes/time_to_full_display.json | 6 +- model/attributes/time_to_initial_display.json | 6 +- python/src/sentry_conventions/attributes.py | 415 ++++++++------ shared/deprecated_attributes.json | 44 +- 19 files changed, 603 insertions(+), 487 deletions(-) rename model/attributes/app/{app__frames__delay__value.json => app__vitals__frames__delay__value.json} (80%) rename model/attributes/app/{app__frames__frozen__count.json => app__vitals__frames__frozen__count.json} (75%) rename model/attributes/app/{app__frames__slow__count.json => app__vitals__frames__slow__count.json} (76%) rename model/attributes/app/{app__frames__total__count.json => app__vitals__frames__total__count.json} (76%) rename model/attributes/app/{app__start__value.json => app__vitals__start__cold__value.json} (63%) rename model/attributes/app/{app__start__type.json => app__vitals__start__type.json} (80%) create mode 100644 model/attributes/app/app__vitals__start__warm__value.json rename model/attributes/app/{app__ttfd__value.json => app__vitals__ttfd__value.json} (80%) rename model/attributes/app/{app__ttid__value.json => app__vitals__ttid__value.json} (80%) diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index d4094ce6..add178ef 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -753,225 +753,223 @@ export const APP_BUILD = 'app.build'; */ export type APP_BUILD_TYPE = string; -// Path: model/attributes/app/app__frames__delay__value.json +// Path: model/attributes/app/app__identifier.json /** - * The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/). `app.frames.delay.value` + * Version-independent application identifier, often a dotted bundle ID. `app.identifier` * - * Attribute Value Type: `number` {@link APP_FRAMES_DELAY_VALUE_TYPE} + * Attribute Value Type: `string` {@link APP_IDENTIFIER_TYPE} * * Contains PII: maybe * * Attribute defined in OTEL: No * - * Aliases: {@link FRAMES_DELAY} `frames.delay` - * - * @example 5 + * @example "com.example.myapp" */ -export const APP_FRAMES_DELAY_VALUE = 'app.frames.delay.value'; +export const APP_IDENTIFIER = 'app.identifier'; /** - * Type for {@link APP_FRAMES_DELAY_VALUE} app.frames.delay.value + * Type for {@link APP_IDENTIFIER} app.identifier */ -export type APP_FRAMES_DELAY_VALUE_TYPE = number; +export type APP_IDENTIFIER_TYPE = string; -// Path: model/attributes/app/app__frames__frozen__count.json +// Path: model/attributes/app/app__in_foreground.json /** - * The number of frozen frames rendered during the lifetime of the span. `app.frames.frozen.count` + * Whether the application is currently in the foreground. `app.in_foreground` * - * Attribute Value Type: `number` {@link APP_FRAMES_FROZEN_COUNT_TYPE} + * Attribute Value Type: `boolean` {@link APP_IN_FOREGROUND_TYPE} * - * Contains PII: maybe + * Contains PII: false * * Attribute defined in OTEL: No * - * Aliases: {@link FRAMES_FROZEN} `frames.frozen` - * - * @example 3 + * @example true */ -export const APP_FRAMES_FROZEN_COUNT = 'app.frames.frozen.count'; +export const APP_IN_FOREGROUND = 'app.in_foreground'; /** - * Type for {@link APP_FRAMES_FROZEN_COUNT} app.frames.frozen.count + * Type for {@link APP_IN_FOREGROUND} app.in_foreground */ -export type APP_FRAMES_FROZEN_COUNT_TYPE = number; +export type APP_IN_FOREGROUND_TYPE = boolean; -// Path: model/attributes/app/app__frames__slow__count.json +// Path: model/attributes/app/app__name.json /** - * The number of slow frames rendered during the lifetime of the span. `app.frames.slow.count` + * Human readable application name, as it appears on the platform. `app.name` * - * Attribute Value Type: `number` {@link APP_FRAMES_SLOW_COUNT_TYPE} + * Attribute Value Type: `string` {@link APP_NAME_TYPE} * * Contains PII: maybe * * Attribute defined in OTEL: No * - * Aliases: {@link FRAMES_SLOW} `frames.slow` - * - * @example 1 + * @example "My App" */ -export const APP_FRAMES_SLOW_COUNT = 'app.frames.slow.count'; +export const APP_NAME = 'app.name'; /** - * Type for {@link APP_FRAMES_SLOW_COUNT} app.frames.slow.count + * Type for {@link APP_NAME} app.name */ -export type APP_FRAMES_SLOW_COUNT_TYPE = number; +export type APP_NAME_TYPE = string; -// Path: model/attributes/app/app__frames__total__count.json +// Path: model/attributes/app/app__start_time.json /** - * The number of total frames rendered during the lifetime of the span. `app.frames.total.count` + * Formatted UTC timestamp when the user started the application. `app.start_time` * - * Attribute Value Type: `number` {@link APP_FRAMES_TOTAL_COUNT_TYPE} + * Attribute Value Type: `string` {@link APP_START_TIME_TYPE} * * Contains PII: maybe * * Attribute defined in OTEL: No * - * Aliases: {@link FRAMES_TOTAL} `frames.total` - * - * @example 60 + * @example "2025-01-01T00:00:00.000Z" */ -export const APP_FRAMES_TOTAL_COUNT = 'app.frames.total.count'; +export const APP_START_TIME = 'app.start_time'; /** - * Type for {@link APP_FRAMES_TOTAL_COUNT} app.frames.total.count + * Type for {@link APP_START_TIME} app.start_time */ -export type APP_FRAMES_TOTAL_COUNT_TYPE = number; +export type APP_START_TIME_TYPE = string; -// Path: model/attributes/app/app__identifier.json +// Path: model/attributes/app_start_type.json /** - * Version-independent application identifier, often a dotted bundle ID. `app.identifier` + * Mobile app start variant. Either cold or warm. `app_start_type` * - * Attribute Value Type: `string` {@link APP_IDENTIFIER_TYPE} + * Attribute Value Type: `string` {@link APP_START_TYPE_TYPE} * * Contains PII: maybe * * Attribute defined in OTEL: No * - * @example "com.example.myapp" + * Aliases: {@link APP_VITALS_START_TYPE} `app.vitals.start.type` + * + * @deprecated Use {@link APP_VITALS_START_TYPE} (app.vitals.start.type) instead - Replaced by app.vitals.start.type to align with the app.vitals.* namespace for mobile performance attributes + * @example "cold" */ -export const APP_IDENTIFIER = 'app.identifier'; +export const APP_START_TYPE = 'app_start_type'; /** - * Type for {@link APP_IDENTIFIER} app.identifier + * Type for {@link APP_START_TYPE} app_start_type */ -export type APP_IDENTIFIER_TYPE = string; +export type APP_START_TYPE_TYPE = string; -// Path: model/attributes/app/app__in_foreground.json +// Path: model/attributes/app/app__version.json /** - * Whether the application is currently in the foreground. `app.in_foreground` + * Human readable application version, as it appears on the platform. `app.version` * - * Attribute Value Type: `boolean` {@link APP_IN_FOREGROUND_TYPE} + * Attribute Value Type: `string` {@link APP_VERSION_TYPE} * - * Contains PII: false + * Contains PII: maybe * * Attribute defined in OTEL: No * - * @example true + * @example "1.0.0" */ -export const APP_IN_FOREGROUND = 'app.in_foreground'; +export const APP_VERSION = 'app.version'; /** - * Type for {@link APP_IN_FOREGROUND} app.in_foreground + * Type for {@link APP_VERSION} app.version */ -export type APP_IN_FOREGROUND_TYPE = boolean; +export type APP_VERSION_TYPE = string; -// Path: model/attributes/app/app__name.json +// Path: model/attributes/app/app__vitals__frames__delay__value.json /** - * Human readable application name, as it appears on the platform. `app.name` + * The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/). `app.vitals.frames.delay.value` * - * Attribute Value Type: `string` {@link APP_NAME_TYPE} + * Attribute Value Type: `number` {@link APP_VITALS_FRAMES_DELAY_VALUE_TYPE} * * Contains PII: maybe * * Attribute defined in OTEL: No * - * @example "My App" + * Aliases: {@link FRAMES_DELAY} `frames.delay` + * + * @example 5 */ -export const APP_NAME = 'app.name'; +export const APP_VITALS_FRAMES_DELAY_VALUE = 'app.vitals.frames.delay.value'; /** - * Type for {@link APP_NAME} app.name + * Type for {@link APP_VITALS_FRAMES_DELAY_VALUE} app.vitals.frames.delay.value */ -export type APP_NAME_TYPE = string; +export type APP_VITALS_FRAMES_DELAY_VALUE_TYPE = number; -// Path: model/attributes/app/app__start_time.json +// Path: model/attributes/app/app__vitals__frames__frozen__count.json /** - * Formatted UTC timestamp when the user started the application. `app.start_time` + * The number of frozen frames rendered during the lifetime of the span. `app.vitals.frames.frozen.count` * - * Attribute Value Type: `string` {@link APP_START_TIME_TYPE} + * Attribute Value Type: `number` {@link APP_VITALS_FRAMES_FROZEN_COUNT_TYPE} * * Contains PII: maybe * * Attribute defined in OTEL: No * - * @example "2025-01-01T00:00:00.000Z" + * Aliases: {@link FRAMES_FROZEN} `frames.frozen` + * + * @example 3 */ -export const APP_START_TIME = 'app.start_time'; +export const APP_VITALS_FRAMES_FROZEN_COUNT = 'app.vitals.frames.frozen.count'; /** - * Type for {@link APP_START_TIME} app.start_time + * Type for {@link APP_VITALS_FRAMES_FROZEN_COUNT} app.vitals.frames.frozen.count */ -export type APP_START_TIME_TYPE = string; +export type APP_VITALS_FRAMES_FROZEN_COUNT_TYPE = number; -// Path: model/attributes/app/app__start__type.json +// Path: model/attributes/app/app__vitals__frames__slow__count.json /** - * The type of app start, for example `cold` or `warm` `app.start.type` + * The number of slow frames rendered during the lifetime of the span. `app.vitals.frames.slow.count` * - * Attribute Value Type: `string` {@link APP_START_TYPE_TYPE} + * Attribute Value Type: `number` {@link APP_VITALS_FRAMES_SLOW_COUNT_TYPE} * * Contains PII: maybe * * Attribute defined in OTEL: No * - * Aliases: {@link _APP_START_TYPE} `app_start_type` + * Aliases: {@link FRAMES_SLOW} `frames.slow` * - * @example "cold" + * @example 1 */ -export const APP_START_TYPE = 'app.start.type'; +export const APP_VITALS_FRAMES_SLOW_COUNT = 'app.vitals.frames.slow.count'; /** - * Type for {@link APP_START_TYPE} app.start.type + * Type for {@link APP_VITALS_FRAMES_SLOW_COUNT} app.vitals.frames.slow.count */ -export type APP_START_TYPE_TYPE = string; +export type APP_VITALS_FRAMES_SLOW_COUNT_TYPE = number; -// Path: model/attributes/app_start_type.json +// Path: model/attributes/app/app__vitals__frames__total__count.json /** - * Mobile app start variant. Either cold or warm. `app_start_type` + * The number of total frames rendered during the lifetime of the span. `app.vitals.frames.total.count` * - * Attribute Value Type: `string` {@link _APP_START_TYPE_TYPE} + * Attribute Value Type: `number` {@link APP_VITALS_FRAMES_TOTAL_COUNT_TYPE} * * Contains PII: maybe * * Attribute defined in OTEL: No * - * Aliases: {@link APP_START_TYPE} `app.start.type` + * Aliases: {@link FRAMES_TOTAL} `frames.total` * - * @deprecated Use {@link APP_START_TYPE} (app.start.type) instead - Old namespace-less attribute, to be replaced with app.start.type - * @example "cold" + * @example 60 */ -export const _APP_START_TYPE = 'app_start_type'; +export const APP_VITALS_FRAMES_TOTAL_COUNT = 'app.vitals.frames.total.count'; /** - * Type for {@link _APP_START_TYPE} app_start_type + * Type for {@link APP_VITALS_FRAMES_TOTAL_COUNT} app.vitals.frames.total.count */ -export type _APP_START_TYPE_TYPE = string; +export type APP_VITALS_FRAMES_TOTAL_COUNT_TYPE = number; -// Path: model/attributes/app/app__start__value.json +// Path: model/attributes/app/app__vitals__start__cold__value.json /** - * The duration of the app start in milliseconds `app.start.value` + * The duration of a cold app start in milliseconds `app.vitals.start.cold.value` * - * Attribute Value Type: `number` {@link APP_START_VALUE_TYPE} + * Attribute Value Type: `number` {@link APP_VITALS_START_COLD_VALUE_TYPE} * * Contains PII: maybe * @@ -979,76 +977,98 @@ export type _APP_START_TYPE_TYPE = string; * * @example 1234.56 */ -export const APP_START_VALUE = 'app.start.value'; +export const APP_VITALS_START_COLD_VALUE = 'app.vitals.start.cold.value'; /** - * Type for {@link APP_START_VALUE} app.start.value + * Type for {@link APP_VITALS_START_COLD_VALUE} app.vitals.start.cold.value */ -export type APP_START_VALUE_TYPE = number; +export type APP_VITALS_START_COLD_VALUE_TYPE = number; -// Path: model/attributes/app/app__ttfd__value.json +// Path: model/attributes/app/app__vitals__start__type.json /** - * The duration of time to full display in milliseconds `app.ttfd.value` + * The type of app start, for example `cold` or `warm` `app.vitals.start.type` * - * Attribute Value Type: `number` {@link APP_TTFD_VALUE_TYPE} + * Attribute Value Type: `string` {@link APP_VITALS_START_TYPE_TYPE} * * Contains PII: maybe * * Attribute defined in OTEL: No * - * Aliases: {@link TIME_TO_FULL_DISPLAY} `time_to_full_display` + * Aliases: {@link APP_START_TYPE} `app_start_type` + * + * @example "cold" + */ +export const APP_VITALS_START_TYPE = 'app.vitals.start.type'; + +/** + * Type for {@link APP_VITALS_START_TYPE} app.vitals.start.type + */ +export type APP_VITALS_START_TYPE_TYPE = string; + +// Path: model/attributes/app/app__vitals__start__warm__value.json + +/** + * The duration of a warm app start in milliseconds `app.vitals.start.warm.value` + * + * Attribute Value Type: `number` {@link APP_VITALS_START_WARM_VALUE_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No * * @example 1234.56 */ -export const APP_TTFD_VALUE = 'app.ttfd.value'; +export const APP_VITALS_START_WARM_VALUE = 'app.vitals.start.warm.value'; /** - * Type for {@link APP_TTFD_VALUE} app.ttfd.value + * Type for {@link APP_VITALS_START_WARM_VALUE} app.vitals.start.warm.value */ -export type APP_TTFD_VALUE_TYPE = number; +export type APP_VITALS_START_WARM_VALUE_TYPE = number; -// Path: model/attributes/app/app__ttid__value.json +// Path: model/attributes/app/app__vitals__ttfd__value.json /** - * The duration of time to initial display in milliseconds `app.ttid.value` + * The duration of time to full display in milliseconds `app.vitals.ttfd.value` * - * Attribute Value Type: `number` {@link APP_TTID_VALUE_TYPE} + * Attribute Value Type: `number` {@link APP_VITALS_TTFD_VALUE_TYPE} * * Contains PII: maybe * * Attribute defined in OTEL: No * - * Aliases: {@link TIME_TO_INITIAL_DISPLAY} `time_to_initial_display` + * Aliases: {@link TIME_TO_FULL_DISPLAY} `time_to_full_display` * * @example 1234.56 */ -export const APP_TTID_VALUE = 'app.ttid.value'; +export const APP_VITALS_TTFD_VALUE = 'app.vitals.ttfd.value'; /** - * Type for {@link APP_TTID_VALUE} app.ttid.value + * Type for {@link APP_VITALS_TTFD_VALUE} app.vitals.ttfd.value */ -export type APP_TTID_VALUE_TYPE = number; +export type APP_VITALS_TTFD_VALUE_TYPE = number; -// Path: model/attributes/app/app__version.json +// Path: model/attributes/app/app__vitals__ttid__value.json /** - * Human readable application version, as it appears on the platform. `app.version` + * The duration of time to initial display in milliseconds `app.vitals.ttid.value` * - * Attribute Value Type: `string` {@link APP_VERSION_TYPE} + * Attribute Value Type: `number` {@link APP_VITALS_TTID_VALUE_TYPE} * * Contains PII: maybe * * Attribute defined in OTEL: No * - * @example "1.0.0" + * Aliases: {@link TIME_TO_INITIAL_DISPLAY} `time_to_initial_display` + * + * @example 1234.56 */ -export const APP_VERSION = 'app.version'; +export const APP_VITALS_TTID_VALUE = 'app.vitals.ttid.value'; /** - * Type for {@link APP_VERSION} app.version + * Type for {@link APP_VITALS_TTID_VALUE} app.vitals.ttid.value */ -export type APP_VERSION_TYPE = string; +export type APP_VITALS_TTID_VALUE_TYPE = number; // Path: model/attributes/blocked_main_thread.json @@ -2991,9 +3011,9 @@ export type FP_TYPE = number; * * Attribute defined in OTEL: No * - * Aliases: {@link APP_FRAMES_DELAY_VALUE} `app.frames.delay.value` + * Aliases: {@link APP_VITALS_FRAMES_DELAY_VALUE} `app.vitals.frames.delay.value` * - * @deprecated Use {@link APP_FRAMES_DELAY_VALUE} (app.frames.delay.value) instead - Old frames.* attribute, to be replaced with app.frames.delay.value for app namespacing + * @deprecated Use {@link APP_VITALS_FRAMES_DELAY_VALUE} (app.vitals.frames.delay.value) instead - Replaced by app.vitals.frames.delay.value to align with the app.vitals.* namespace for mobile performance attributes * @example 5 */ export const FRAMES_DELAY = 'frames.delay'; @@ -3014,9 +3034,9 @@ export type FRAMES_DELAY_TYPE = number; * * Attribute defined in OTEL: No * - * Aliases: {@link APP_FRAMES_FROZEN_COUNT} `app.frames.frozen.count` + * Aliases: {@link APP_VITALS_FRAMES_FROZEN_COUNT} `app.vitals.frames.frozen.count` * - * @deprecated Use {@link APP_FRAMES_FROZEN_COUNT} (app.frames.frozen.count) instead - Old frames.* attribute, to be replaced with app.frames.frozen.count for app namespacing + * @deprecated Use {@link APP_VITALS_FRAMES_FROZEN_COUNT} (app.vitals.frames.frozen.count) instead - Replaced by app.vitals.frames.frozen.count to align with the app.vitals.* namespace for mobile performance attributes * @example 3 */ export const FRAMES_FROZEN = 'frames.frozen'; @@ -3037,9 +3057,9 @@ export type FRAMES_FROZEN_TYPE = number; * * Attribute defined in OTEL: No * - * Aliases: {@link APP_FRAMES_SLOW_COUNT} `app.frames.slow.count` + * Aliases: {@link APP_VITALS_FRAMES_SLOW_COUNT} `app.vitals.frames.slow.count` * - * @deprecated Use {@link APP_FRAMES_SLOW_COUNT} (app.frames.slow.count) instead - Old frames.* attribute, to be replaced with app.frames.slow.count for app namespacing + * @deprecated Use {@link APP_VITALS_FRAMES_SLOW_COUNT} (app.vitals.frames.slow.count) instead - Replaced by app.vitals.frames.slow.count to align with the app.vitals.* namespace for mobile performance attributes * @example 1 */ export const FRAMES_SLOW = 'frames.slow'; @@ -3060,9 +3080,9 @@ export type FRAMES_SLOW_TYPE = number; * * Attribute defined in OTEL: No * - * Aliases: {@link APP_FRAMES_TOTAL_COUNT} `app.frames.total.count` + * Aliases: {@link APP_VITALS_FRAMES_TOTAL_COUNT} `app.vitals.frames.total.count` * - * @deprecated Use {@link APP_FRAMES_TOTAL_COUNT} (app.frames.total.count) instead - Old frames.* attribute, to be replaced with app.frames.total.count for app namespacing + * @deprecated Use {@link APP_VITALS_FRAMES_TOTAL_COUNT} (app.vitals.frames.total.count) instead - Replaced by app.vitals.frames.total.count to align with the app.vitals.* namespace for mobile performance attributes * @example 60 */ export const FRAMES_TOTAL = 'frames.total'; @@ -8874,9 +8894,9 @@ export type TIMBER_TAG_TYPE = string; * * Attribute defined in OTEL: No * - * Aliases: {@link APP_TTFD_VALUE} `app.ttfd.value` + * Aliases: {@link APP_VITALS_TTFD_VALUE} `app.vitals.ttfd.value` * - * @deprecated Use {@link APP_TTFD_VALUE} (app.ttfd.value) instead - Old namespace-less attribute, to be replaced with app.ttfd.value + * @deprecated Use {@link APP_VITALS_TTFD_VALUE} (app.vitals.ttfd.value) instead - Replaced by app.vitals.ttfd.value to align with the app.vitals.* namespace for mobile performance attributes * @example 1234.56 */ export const TIME_TO_FULL_DISPLAY = 'time_to_full_display'; @@ -8897,9 +8917,9 @@ export type TIME_TO_FULL_DISPLAY_TYPE = number; * * Attribute defined in OTEL: No * - * Aliases: {@link APP_TTID_VALUE} `app.ttid.value` + * Aliases: {@link APP_VITALS_TTID_VALUE} `app.vitals.ttid.value` * - * @deprecated Use {@link APP_TTID_VALUE} (app.ttid.value) instead - Old namespace-less attribute, to be replaced with app.ttid.value + * @deprecated Use {@link APP_VITALS_TTID_VALUE} (app.vitals.ttid.value) instead - Replaced by app.vitals.ttid.value to align with the app.vitals.* namespace for mobile performance attributes * @example 1234.56 */ export const TIME_TO_INITIAL_DISPLAY = 'time_to_initial_display'; @@ -10487,20 +10507,21 @@ export const ATTRIBUTE_TYPE: Record = { [AI_TOTAL_TOKENS_USED]: 'integer', [AI_WARNINGS]: 'string[]', [APP_BUILD]: 'string', - [APP_FRAMES_DELAY_VALUE]: 'integer', - [APP_FRAMES_FROZEN_COUNT]: 'integer', - [APP_FRAMES_SLOW_COUNT]: 'integer', - [APP_FRAMES_TOTAL_COUNT]: 'integer', [APP_IDENTIFIER]: 'string', [APP_IN_FOREGROUND]: 'boolean', [APP_NAME]: 'string', [APP_START_TIME]: 'string', [APP_START_TYPE]: 'string', - [_APP_START_TYPE]: 'string', - [APP_START_VALUE]: 'double', - [APP_TTFD_VALUE]: 'double', - [APP_TTID_VALUE]: 'double', [APP_VERSION]: 'string', + [APP_VITALS_FRAMES_DELAY_VALUE]: 'integer', + [APP_VITALS_FRAMES_FROZEN_COUNT]: 'integer', + [APP_VITALS_FRAMES_SLOW_COUNT]: 'integer', + [APP_VITALS_FRAMES_TOTAL_COUNT]: 'integer', + [APP_VITALS_START_COLD_VALUE]: 'double', + [APP_VITALS_START_TYPE]: 'string', + [APP_VITALS_START_WARM_VALUE]: 'double', + [APP_VITALS_TTFD_VALUE]: 'double', + [APP_VITALS_TTID_VALUE]: 'double', [BLOCKED_MAIN_THREAD]: 'boolean', [BROWSER_NAME]: 'string', [BROWSER_REPORT_TYPE]: 'string', @@ -10985,20 +11006,21 @@ export type AttributeName = | typeof AI_TOTAL_TOKENS_USED | typeof AI_WARNINGS | typeof APP_BUILD - | typeof APP_FRAMES_DELAY_VALUE - | typeof APP_FRAMES_FROZEN_COUNT - | typeof APP_FRAMES_SLOW_COUNT - | typeof APP_FRAMES_TOTAL_COUNT | typeof APP_IDENTIFIER | typeof APP_IN_FOREGROUND | typeof APP_NAME | typeof APP_START_TIME | typeof APP_START_TYPE - | typeof _APP_START_TYPE - | typeof APP_START_VALUE - | typeof APP_TTFD_VALUE - | typeof APP_TTID_VALUE | typeof APP_VERSION + | typeof APP_VITALS_FRAMES_DELAY_VALUE + | typeof APP_VITALS_FRAMES_FROZEN_COUNT + | typeof APP_VITALS_FRAMES_SLOW_COUNT + | typeof APP_VITALS_FRAMES_TOTAL_COUNT + | typeof APP_VITALS_START_COLD_VALUE + | typeof APP_VITALS_START_TYPE + | typeof APP_VITALS_START_WARM_VALUE + | typeof APP_VITALS_TTFD_VALUE + | typeof APP_VITALS_TTID_VALUE | typeof BLOCKED_MAIN_THREAD | typeof BROWSER_NAME | typeof BROWSER_REPORT_TYPE @@ -11960,55 +11982,6 @@ export const ATTRIBUTE_METADATA: Record = { sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], changelog: [{ version: 'next', prs: [296], description: 'Added app.build attribute' }], }, - [APP_FRAMES_DELAY_VALUE]: { - brief: - 'The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).', - type: 'integer', - pii: { - isPii: 'maybe', - }, - isInOtel: false, - example: 5, - aliases: [FRAMES_DELAY], - sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', prs: [313], description: 'Added app.frames.delay.value to replace frames.delay' }], - }, - [APP_FRAMES_FROZEN_COUNT]: { - brief: 'The number of frozen frames rendered during the lifetime of the span.', - type: 'integer', - pii: { - isPii: 'maybe', - }, - isInOtel: false, - example: 3, - aliases: [FRAMES_FROZEN], - sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', prs: [313], description: 'Added app.frames.frozen.count to replace frames.frozen' }], - }, - [APP_FRAMES_SLOW_COUNT]: { - brief: 'The number of slow frames rendered during the lifetime of the span.', - type: 'integer', - pii: { - isPii: 'maybe', - }, - isInOtel: false, - example: 1, - aliases: [FRAMES_SLOW], - sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', prs: [313], description: 'Added app.frames.slow.count to replace frames.slow' }], - }, - [APP_FRAMES_TOTAL_COUNT]: { - brief: 'The number of total frames rendered during the lifetime of the span.', - type: 'integer', - pii: { - isPii: 'maybe', - }, - isInOtel: false, - example: 60, - aliases: [FRAMES_TOTAL], - sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', prs: [313], description: 'Added app.frames.total.count to replace frames.total' }], - }, [APP_IDENTIFIER]: { brief: 'Version-independent application identifier, often a dotted bundle ID.', type: 'string', @@ -12054,38 +12027,95 @@ export const ATTRIBUTE_METADATA: Record = { changelog: [{ version: 'next', prs: [296], description: 'Added app.start_time attribute' }], }, [APP_START_TYPE]: { - brief: 'The type of app start, for example `cold` or `warm`', + brief: 'Mobile app start variant. Either cold or warm.', type: 'string', pii: { isPii: 'maybe', }, isInOtel: false, example: 'cold', - aliases: [_APP_START_TYPE], - sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', prs: [313], description: 'Added app.start.type attribute' }], + deprecation: { + replacement: 'app.vitals.start.type', + reason: + 'Replaced by app.vitals.start.type to align with the app.vitals.* namespace for mobile performance attributes', + }, + aliases: [APP_VITALS_START_TYPE], + changelog: [ + { version: 'next', prs: [313], description: 'Deprecated in favor of app.vitals.start.type' }, + { version: '0.1.0', prs: [127] }, + { version: '0.0.0' }, + ], }, - [_APP_START_TYPE]: { - brief: 'Mobile app start variant. Either cold or warm.', + [APP_VERSION]: { + brief: 'Human readable application version, as it appears on the platform.', type: 'string', pii: { isPii: 'maybe', }, isInOtel: false, - example: 'cold', - deprecation: { - replacement: 'app.start.type', - reason: 'Old namespace-less attribute, to be replaced with app.start.type', + example: '1.0.0', + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', prs: [296], description: 'Added app.version attribute' }], + }, + [APP_VITALS_FRAMES_DELAY_VALUE]: { + brief: + 'The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).', + type: 'integer', + pii: { + isPii: 'maybe', }, - aliases: [APP_START_TYPE], + isInOtel: false, + example: 5, + aliases: [FRAMES_DELAY], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], changelog: [ - { version: 'next', prs: [313], description: 'Deprecated in favor of app.start.type' }, - { version: '0.1.0', prs: [127] }, - { version: '0.0.0' }, + { version: 'next', prs: [313], description: 'Added app.vitals.frames.delay.value to replace frames.delay' }, ], }, - [APP_START_VALUE]: { - brief: 'The duration of the app start in milliseconds', + [APP_VITALS_FRAMES_FROZEN_COUNT]: { + brief: 'The number of frozen frames rendered during the lifetime of the span.', + type: 'integer', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 3, + aliases: [FRAMES_FROZEN], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [ + { version: 'next', prs: [313], description: 'Added app.vitals.frames.frozen.count to replace frames.frozen' }, + ], + }, + [APP_VITALS_FRAMES_SLOW_COUNT]: { + brief: 'The number of slow frames rendered during the lifetime of the span.', + type: 'integer', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 1, + aliases: [FRAMES_SLOW], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [ + { version: 'next', prs: [313], description: 'Added app.vitals.frames.slow.count to replace frames.slow' }, + ], + }, + [APP_VITALS_FRAMES_TOTAL_COUNT]: { + brief: 'The number of total frames rendered during the lifetime of the span.', + type: 'integer', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 60, + aliases: [FRAMES_TOTAL], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [ + { version: 'next', prs: [313], description: 'Added app.vitals.frames.total.count to replace frames.total' }, + ], + }, + [APP_VITALS_START_COLD_VALUE]: { + brief: 'The duration of a cold app start in milliseconds', type: 'double', pii: { isPii: 'maybe', @@ -12093,42 +12123,54 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, example: 1234.56, sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', prs: [313], description: 'Added app.start.value attribute' }], + changelog: [{ version: 'next', prs: [313], description: 'Added app.vitals.start.cold.value attribute' }], }, - [APP_TTFD_VALUE]: { - brief: 'The duration of time to full display in milliseconds', + [APP_VITALS_START_TYPE]: { + brief: 'The type of app start, for example `cold` or `warm`', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 'cold', + aliases: [APP_START_TYPE], + sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], + changelog: [{ version: 'next', prs: [313], description: 'Added app.vitals.start.type attribute' }], + }, + [APP_VITALS_START_WARM_VALUE]: { + brief: 'The duration of a warm app start in milliseconds', type: 'double', pii: { isPii: 'maybe', }, isInOtel: false, example: 1234.56, - aliases: [TIME_TO_FULL_DISPLAY], sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', prs: [313], description: 'Added app.ttfd.value attribute' }], + changelog: [{ version: 'next', prs: [313], description: 'Added app.vitals.start.warm.value attribute' }], }, - [APP_TTID_VALUE]: { - brief: 'The duration of time to initial display in milliseconds', + [APP_VITALS_TTFD_VALUE]: { + brief: 'The duration of time to full display in milliseconds', type: 'double', pii: { isPii: 'maybe', }, isInOtel: false, example: 1234.56, - aliases: [TIME_TO_INITIAL_DISPLAY], + aliases: [TIME_TO_FULL_DISPLAY], sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', prs: [313], description: 'Added app.ttid.value attribute' }], + changelog: [{ version: 'next', prs: [313], description: 'Added app.vitals.ttfd.value attribute' }], }, - [APP_VERSION]: { - brief: 'Human readable application version, as it appears on the platform.', - type: 'string', + [APP_VITALS_TTID_VALUE]: { + brief: 'The duration of time to initial display in milliseconds', + type: 'double', pii: { isPii: 'maybe', }, isInOtel: false, - example: '1.0.0', + example: 1234.56, + aliases: [TIME_TO_INITIAL_DISPLAY], sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], - changelog: [{ version: 'next', prs: [296], description: 'Added app.version attribute' }], + changelog: [{ version: 'next', prs: [313], description: 'Added app.vitals.ttid.value attribute' }], }, [BLOCKED_MAIN_THREAD]: { brief: 'Whether the main thread was blocked by the span.', @@ -13268,10 +13310,11 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, example: 5, deprecation: { - replacement: 'app.frames.delay.value', - reason: 'Old frames.* attribute, to be replaced with app.frames.delay.value for app namespacing', + replacement: 'app.vitals.frames.delay.value', + reason: + 'Replaced by app.vitals.frames.delay.value to align with the app.vitals.* namespace for mobile performance attributes', }, - aliases: [APP_FRAMES_DELAY_VALUE], + aliases: [APP_VITALS_FRAMES_DELAY_VALUE], changelog: [ { version: 'next', prs: [313], description: 'Deprecated in favor of app.frames.delay.value' }, { version: '0.4.0', prs: [228] }, @@ -13287,10 +13330,11 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, example: 3, deprecation: { - replacement: 'app.frames.frozen.count', - reason: 'Old frames.* attribute, to be replaced with app.frames.frozen.count for app namespacing', + replacement: 'app.vitals.frames.frozen.count', + reason: + 'Replaced by app.vitals.frames.frozen.count to align with the app.vitals.* namespace for mobile performance attributes', }, - aliases: [APP_FRAMES_FROZEN_COUNT], + aliases: [APP_VITALS_FRAMES_FROZEN_COUNT], changelog: [ { version: 'next', prs: [313], description: 'Deprecated in favor of app.frames.frozen.count' }, { version: '0.4.0', prs: [228] }, @@ -13306,10 +13350,11 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, example: 1, deprecation: { - replacement: 'app.frames.slow.count', - reason: 'Old frames.* attribute, to be replaced with app.frames.slow.count for app namespacing', + replacement: 'app.vitals.frames.slow.count', + reason: + 'Replaced by app.vitals.frames.slow.count to align with the app.vitals.* namespace for mobile performance attributes', }, - aliases: [APP_FRAMES_SLOW_COUNT], + aliases: [APP_VITALS_FRAMES_SLOW_COUNT], changelog: [ { version: 'next', prs: [313], description: 'Deprecated in favor of app.frames.slow.count' }, { version: '0.4.0', prs: [228] }, @@ -13325,10 +13370,11 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, example: 60, deprecation: { - replacement: 'app.frames.total.count', - reason: 'Old frames.* attribute, to be replaced with app.frames.total.count for app namespacing', + replacement: 'app.vitals.frames.total.count', + reason: + 'Replaced by app.vitals.frames.total.count to align with the app.vitals.* namespace for mobile performance attributes', }, - aliases: [APP_FRAMES_TOTAL_COUNT], + aliases: [APP_VITALS_FRAMES_TOTAL_COUNT], changelog: [ { version: 'next', prs: [313], description: 'Deprecated in favor of app.frames.total.count' }, { version: '0.4.0', prs: [228] }, @@ -16710,10 +16756,11 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, example: 1234.56, deprecation: { - replacement: 'app.ttfd.value', - reason: 'Old namespace-less attribute, to be replaced with app.ttfd.value', + replacement: 'app.vitals.ttfd.value', + reason: + 'Replaced by app.vitals.ttfd.value to align with the app.vitals.* namespace for mobile performance attributes', }, - aliases: [APP_TTFD_VALUE], + aliases: [APP_VITALS_TTFD_VALUE], sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], changelog: [{ version: 'next', prs: [313], description: 'Added and deprecated in favor of app.ttfd.value' }], }, @@ -16726,10 +16773,11 @@ export const ATTRIBUTE_METADATA: Record = { isInOtel: false, example: 1234.56, deprecation: { - replacement: 'app.ttid.value', - reason: 'Old namespace-less attribute, to be replaced with app.ttid.value', + replacement: 'app.vitals.ttid.value', + reason: + 'Replaced by app.vitals.ttid.value to align with the app.vitals.* namespace for mobile performance attributes', }, - aliases: [APP_TTID_VALUE], + aliases: [APP_VITALS_TTID_VALUE], sdks: ['sentry.cocoa', 'sentry.java.android', 'sentry.javascript.react-native', 'sentry.dart.flutter'], changelog: [{ version: 'next', prs: [313], description: 'Added and deprecated in favor of app.ttid.value' }], }, @@ -17559,20 +17607,21 @@ export type Attributes = { [AI_TOTAL_TOKENS_USED]?: AI_TOTAL_TOKENS_USED_TYPE; [AI_WARNINGS]?: AI_WARNINGS_TYPE; [APP_BUILD]?: APP_BUILD_TYPE; - [APP_FRAMES_DELAY_VALUE]?: APP_FRAMES_DELAY_VALUE_TYPE; - [APP_FRAMES_FROZEN_COUNT]?: APP_FRAMES_FROZEN_COUNT_TYPE; - [APP_FRAMES_SLOW_COUNT]?: APP_FRAMES_SLOW_COUNT_TYPE; - [APP_FRAMES_TOTAL_COUNT]?: APP_FRAMES_TOTAL_COUNT_TYPE; [APP_IDENTIFIER]?: APP_IDENTIFIER_TYPE; [APP_IN_FOREGROUND]?: APP_IN_FOREGROUND_TYPE; [APP_NAME]?: APP_NAME_TYPE; [APP_START_TIME]?: APP_START_TIME_TYPE; [APP_START_TYPE]?: APP_START_TYPE_TYPE; - [_APP_START_TYPE]?: _APP_START_TYPE_TYPE; - [APP_START_VALUE]?: APP_START_VALUE_TYPE; - [APP_TTFD_VALUE]?: APP_TTFD_VALUE_TYPE; - [APP_TTID_VALUE]?: APP_TTID_VALUE_TYPE; [APP_VERSION]?: APP_VERSION_TYPE; + [APP_VITALS_FRAMES_DELAY_VALUE]?: APP_VITALS_FRAMES_DELAY_VALUE_TYPE; + [APP_VITALS_FRAMES_FROZEN_COUNT]?: APP_VITALS_FRAMES_FROZEN_COUNT_TYPE; + [APP_VITALS_FRAMES_SLOW_COUNT]?: APP_VITALS_FRAMES_SLOW_COUNT_TYPE; + [APP_VITALS_FRAMES_TOTAL_COUNT]?: APP_VITALS_FRAMES_TOTAL_COUNT_TYPE; + [APP_VITALS_START_COLD_VALUE]?: APP_VITALS_START_COLD_VALUE_TYPE; + [APP_VITALS_START_TYPE]?: APP_VITALS_START_TYPE_TYPE; + [APP_VITALS_START_WARM_VALUE]?: APP_VITALS_START_WARM_VALUE_TYPE; + [APP_VITALS_TTFD_VALUE]?: APP_VITALS_TTFD_VALUE_TYPE; + [APP_VITALS_TTID_VALUE]?: APP_VITALS_TTID_VALUE_TYPE; [BLOCKED_MAIN_THREAD]?: BLOCKED_MAIN_THREAD_TYPE; [BROWSER_NAME]?: BROWSER_NAME_TYPE; [BROWSER_REPORT_TYPE]?: BROWSER_REPORT_TYPE_TYPE; diff --git a/model/attributes/app/app__frames__delay__value.json b/model/attributes/app/app__vitals__frames__delay__value.json similarity index 80% rename from model/attributes/app/app__frames__delay__value.json rename to model/attributes/app/app__vitals__frames__delay__value.json index 2e973c36..86e003ae 100644 --- a/model/attributes/app/app__frames__delay__value.json +++ b/model/attributes/app/app__vitals__frames__delay__value.json @@ -1,5 +1,5 @@ { - "key": "app.frames.delay.value", + "key": "app.vitals.frames.delay.value", "brief": "The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).", "type": "integer", "pii": { @@ -13,7 +13,7 @@ { "version": "next", "prs": [313], - "description": "Added app.frames.delay.value to replace frames.delay" + "description": "Added app.vitals.frames.delay.value to replace frames.delay" } ] } diff --git a/model/attributes/app/app__frames__frozen__count.json b/model/attributes/app/app__vitals__frames__frozen__count.json similarity index 75% rename from model/attributes/app/app__frames__frozen__count.json rename to model/attributes/app/app__vitals__frames__frozen__count.json index a9c69fc0..abb54bd3 100644 --- a/model/attributes/app/app__frames__frozen__count.json +++ b/model/attributes/app/app__vitals__frames__frozen__count.json @@ -1,5 +1,5 @@ { - "key": "app.frames.frozen.count", + "key": "app.vitals.frames.frozen.count", "brief": "The number of frozen frames rendered during the lifetime of the span.", "type": "integer", "pii": { @@ -13,7 +13,7 @@ { "version": "next", "prs": [313], - "description": "Added app.frames.frozen.count to replace frames.frozen" + "description": "Added app.vitals.frames.frozen.count to replace frames.frozen" } ] } diff --git a/model/attributes/app/app__frames__slow__count.json b/model/attributes/app/app__vitals__frames__slow__count.json similarity index 76% rename from model/attributes/app/app__frames__slow__count.json rename to model/attributes/app/app__vitals__frames__slow__count.json index 18e128f9..87be1a4c 100644 --- a/model/attributes/app/app__frames__slow__count.json +++ b/model/attributes/app/app__vitals__frames__slow__count.json @@ -1,5 +1,5 @@ { - "key": "app.frames.slow.count", + "key": "app.vitals.frames.slow.count", "brief": "The number of slow frames rendered during the lifetime of the span.", "type": "integer", "pii": { @@ -13,7 +13,7 @@ { "version": "next", "prs": [313], - "description": "Added app.frames.slow.count to replace frames.slow" + "description": "Added app.vitals.frames.slow.count to replace frames.slow" } ] } diff --git a/model/attributes/app/app__frames__total__count.json b/model/attributes/app/app__vitals__frames__total__count.json similarity index 76% rename from model/attributes/app/app__frames__total__count.json rename to model/attributes/app/app__vitals__frames__total__count.json index 119f1ea1..59ce940a 100644 --- a/model/attributes/app/app__frames__total__count.json +++ b/model/attributes/app/app__vitals__frames__total__count.json @@ -1,5 +1,5 @@ { - "key": "app.frames.total.count", + "key": "app.vitals.frames.total.count", "brief": "The number of total frames rendered during the lifetime of the span.", "type": "integer", "pii": { @@ -13,7 +13,7 @@ { "version": "next", "prs": [313], - "description": "Added app.frames.total.count to replace frames.total" + "description": "Added app.vitals.frames.total.count to replace frames.total" } ] } diff --git a/model/attributes/app/app__start__value.json b/model/attributes/app/app__vitals__start__cold__value.json similarity index 63% rename from model/attributes/app/app__start__value.json rename to model/attributes/app/app__vitals__start__cold__value.json index fb3ea196..92d12db3 100644 --- a/model/attributes/app/app__start__value.json +++ b/model/attributes/app/app__vitals__start__cold__value.json @@ -1,6 +1,6 @@ { - "key": "app.start.value", - "brief": "The duration of the app start in milliseconds", + "key": "app.vitals.start.cold.value", + "brief": "The duration of a cold app start in milliseconds", "type": "double", "pii": { "key": "maybe" @@ -12,7 +12,7 @@ { "version": "next", "prs": [313], - "description": "Added app.start.value attribute" + "description": "Added app.vitals.start.cold.value attribute" } ] } diff --git a/model/attributes/app/app__start__type.json b/model/attributes/app/app__vitals__start__type.json similarity index 80% rename from model/attributes/app/app__start__type.json rename to model/attributes/app/app__vitals__start__type.json index a910de5f..9a2d0e68 100644 --- a/model/attributes/app/app__start__type.json +++ b/model/attributes/app/app__vitals__start__type.json @@ -1,5 +1,5 @@ { - "key": "app.start.type", + "key": "app.vitals.start.type", "brief": "The type of app start, for example `cold` or `warm`", "type": "string", "pii": { @@ -13,7 +13,7 @@ { "version": "next", "prs": [313], - "description": "Added app.start.type attribute" + "description": "Added app.vitals.start.type attribute" } ] } diff --git a/model/attributes/app/app__vitals__start__warm__value.json b/model/attributes/app/app__vitals__start__warm__value.json new file mode 100644 index 00000000..2ecb7337 --- /dev/null +++ b/model/attributes/app/app__vitals__start__warm__value.json @@ -0,0 +1,18 @@ +{ + "key": "app.vitals.start.warm.value", + "brief": "The duration of a warm app start in milliseconds", + "type": "double", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], + "example": 1234.56, + "changelog": [ + { + "version": "next", + "prs": [313], + "description": "Added app.vitals.start.warm.value attribute" + } + ] +} diff --git a/model/attributes/app/app__ttfd__value.json b/model/attributes/app/app__vitals__ttfd__value.json similarity index 80% rename from model/attributes/app/app__ttfd__value.json rename to model/attributes/app/app__vitals__ttfd__value.json index b290d4bf..3f865d77 100644 --- a/model/attributes/app/app__ttfd__value.json +++ b/model/attributes/app/app__vitals__ttfd__value.json @@ -1,5 +1,5 @@ { - "key": "app.ttfd.value", + "key": "app.vitals.ttfd.value", "brief": "The duration of time to full display in milliseconds", "type": "double", "pii": { @@ -13,7 +13,7 @@ { "version": "next", "prs": [313], - "description": "Added app.ttfd.value attribute" + "description": "Added app.vitals.ttfd.value attribute" } ] } diff --git a/model/attributes/app/app__ttid__value.json b/model/attributes/app/app__vitals__ttid__value.json similarity index 80% rename from model/attributes/app/app__ttid__value.json rename to model/attributes/app/app__vitals__ttid__value.json index e1f016e3..8a063149 100644 --- a/model/attributes/app/app__ttid__value.json +++ b/model/attributes/app/app__vitals__ttid__value.json @@ -1,5 +1,5 @@ { - "key": "app.ttid.value", + "key": "app.vitals.ttid.value", "brief": "The duration of time to initial display in milliseconds", "type": "double", "pii": { @@ -13,7 +13,7 @@ { "version": "next", "prs": [313], - "description": "Added app.ttid.value attribute" + "description": "Added app.vitals.ttid.value attribute" } ] } diff --git a/model/attributes/app_start_type.json b/model/attributes/app_start_type.json index 97c7a758..fbd8a11a 100644 --- a/model/attributes/app_start_type.json +++ b/model/attributes/app_start_type.json @@ -7,17 +7,17 @@ }, "is_in_otel": false, "example": "cold", - "alias": ["app.start.type"], + "alias": ["app.vitals.start.type"], "deprecation": { - "replacement": "app.start.type", - "reason": "Old namespace-less attribute, to be replaced with app.start.type", + "replacement": "app.vitals.start.type", + "reason": "Replaced by app.vitals.start.type to align with the app.vitals.* namespace for mobile performance attributes", "_status": "backfill" }, "changelog": [ { "version": "next", "prs": [313], - "description": "Deprecated in favor of app.start.type" + "description": "Deprecated in favor of app.vitals.start.type" }, { "version": "0.1.0", diff --git a/model/attributes/frames/frames__delay.json b/model/attributes/frames/frames__delay.json index 2f5976ff..386e8416 100644 --- a/model/attributes/frames/frames__delay.json +++ b/model/attributes/frames/frames__delay.json @@ -7,10 +7,10 @@ }, "is_in_otel": false, "example": 5, - "alias": ["app.frames.delay.value"], + "alias": ["app.vitals.frames.delay.value"], "deprecation": { - "replacement": "app.frames.delay.value", - "reason": "Old frames.* attribute, to be replaced with app.frames.delay.value for app namespacing", + "replacement": "app.vitals.frames.delay.value", + "reason": "Replaced by app.vitals.frames.delay.value to align with the app.vitals.* namespace for mobile performance attributes", "_status": "backfill" }, "changelog": [ diff --git a/model/attributes/frames/frames__frozen.json b/model/attributes/frames/frames__frozen.json index 05b0458c..7e5ed520 100644 --- a/model/attributes/frames/frames__frozen.json +++ b/model/attributes/frames/frames__frozen.json @@ -7,10 +7,10 @@ }, "is_in_otel": false, "example": 3, - "alias": ["app.frames.frozen.count"], + "alias": ["app.vitals.frames.frozen.count"], "deprecation": { - "replacement": "app.frames.frozen.count", - "reason": "Old frames.* attribute, to be replaced with app.frames.frozen.count for app namespacing", + "replacement": "app.vitals.frames.frozen.count", + "reason": "Replaced by app.vitals.frames.frozen.count to align with the app.vitals.* namespace for mobile performance attributes", "_status": "backfill" }, "changelog": [ diff --git a/model/attributes/frames/frames__slow.json b/model/attributes/frames/frames__slow.json index 37dfbdf5..98c17c4b 100644 --- a/model/attributes/frames/frames__slow.json +++ b/model/attributes/frames/frames__slow.json @@ -7,10 +7,10 @@ }, "is_in_otel": false, "example": 1, - "alias": ["app.frames.slow.count"], + "alias": ["app.vitals.frames.slow.count"], "deprecation": { - "replacement": "app.frames.slow.count", - "reason": "Old frames.* attribute, to be replaced with app.frames.slow.count for app namespacing", + "replacement": "app.vitals.frames.slow.count", + "reason": "Replaced by app.vitals.frames.slow.count to align with the app.vitals.* namespace for mobile performance attributes", "_status": "backfill" }, "changelog": [ diff --git a/model/attributes/frames/frames__total.json b/model/attributes/frames/frames__total.json index 224b7c9a..78c76d97 100644 --- a/model/attributes/frames/frames__total.json +++ b/model/attributes/frames/frames__total.json @@ -7,10 +7,10 @@ }, "is_in_otel": false, "example": 60, - "alias": ["app.frames.total.count"], + "alias": ["app.vitals.frames.total.count"], "deprecation": { - "replacement": "app.frames.total.count", - "reason": "Old frames.* attribute, to be replaced with app.frames.total.count for app namespacing", + "replacement": "app.vitals.frames.total.count", + "reason": "Replaced by app.vitals.frames.total.count to align with the app.vitals.* namespace for mobile performance attributes", "_status": "backfill" }, "changelog": [ diff --git a/model/attributes/time_to_full_display.json b/model/attributes/time_to_full_display.json index 80b794b4..943bde60 100644 --- a/model/attributes/time_to_full_display.json +++ b/model/attributes/time_to_full_display.json @@ -8,10 +8,10 @@ "is_in_otel": false, "example": 1234.56, "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], - "alias": ["app.ttfd.value"], + "alias": ["app.vitals.ttfd.value"], "deprecation": { - "replacement": "app.ttfd.value", - "reason": "Old namespace-less attribute, to be replaced with app.ttfd.value", + "replacement": "app.vitals.ttfd.value", + "reason": "Replaced by app.vitals.ttfd.value to align with the app.vitals.* namespace for mobile performance attributes", "_status": "backfill" }, "changelog": [ diff --git a/model/attributes/time_to_initial_display.json b/model/attributes/time_to_initial_display.json index a63c2ea9..36b83e78 100644 --- a/model/attributes/time_to_initial_display.json +++ b/model/attributes/time_to_initial_display.json @@ -8,10 +8,10 @@ "is_in_otel": false, "example": 1234.56, "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], - "alias": ["app.ttid.value"], + "alias": ["app.vitals.ttid.value"], "deprecation": { - "replacement": "app.ttid.value", - "reason": "Old namespace-less attribute, to be replaced with app.ttid.value", + "replacement": "app.vitals.ttid.value", + "reason": "Replaced by app.vitals.ttid.value to align with the app.vitals.* namespace for mobile performance attributes", "_status": "backfill" }, "changelog": [ diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 2dc6a271..2932454d 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -136,7 +136,7 @@ class _AttributeNamesMeta(type): "AI_TOTAL_COST", "AI_TOTAL_TOKENS_USED", "AI_WARNINGS", - "_APP_START_TYPE", + "APP_START_TYPE", "CLS_SOURCE_KEY", "CLS", "CODE_FILEPATH", @@ -638,8 +638,60 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "1" """ - # Path: model/attributes/app/app__frames__delay__value.json - APP_FRAMES_DELAY_VALUE: Literal["app.frames.delay.value"] = "app.frames.delay.value" + # Path: model/attributes/app/app__identifier.json + APP_IDENTIFIER: Literal["app.identifier"] = "app.identifier" + """Version-independent application identifier, often a dotted bundle ID. + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "com.example.myapp" + """ + + # Path: model/attributes/app/app__in_foreground.json + APP_IN_FOREGROUND: Literal["app.in_foreground"] = "app.in_foreground" + """Whether the application is currently in the foreground. + + Type: bool + Contains PII: false + Defined in OTEL: No + Example: true + """ + + # Path: model/attributes/app/app__name.json + APP_NAME: Literal["app.name"] = "app.name" + """Human readable application name, as it appears on the platform. + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "My App" + """ + + # Path: model/attributes/app/app__start_time.json + APP_START_TIME: Literal["app.start_time"] = "app.start_time" + """Formatted UTC timestamp when the user started the application. + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "2025-01-01T00:00:00.000Z" + """ + + # Path: model/attributes/app/app__version.json + APP_VERSION: Literal["app.version"] = "app.version" + """Human readable application version, as it appears on the platform. + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "1.0.0" + """ + + # Path: model/attributes/app/app__vitals__frames__delay__value.json + APP_VITALS_FRAMES_DELAY_VALUE: Literal["app.vitals.frames.delay.value"] = ( + "app.vitals.frames.delay.value" + ) """The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/). Type: int @@ -649,9 +701,9 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: 5 """ - # Path: model/attributes/app/app__frames__frozen__count.json - APP_FRAMES_FROZEN_COUNT: Literal["app.frames.frozen.count"] = ( - "app.frames.frozen.count" + # Path: model/attributes/app/app__vitals__frames__frozen__count.json + APP_VITALS_FRAMES_FROZEN_COUNT: Literal["app.vitals.frames.frozen.count"] = ( + "app.vitals.frames.frozen.count" ) """The number of frozen frames rendered during the lifetime of the span. @@ -662,8 +714,10 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: 3 """ - # Path: model/attributes/app/app__frames__slow__count.json - APP_FRAMES_SLOW_COUNT: Literal["app.frames.slow.count"] = "app.frames.slow.count" + # Path: model/attributes/app/app__vitals__frames__slow__count.json + APP_VITALS_FRAMES_SLOW_COUNT: Literal["app.vitals.frames.slow.count"] = ( + "app.vitals.frames.slow.count" + ) """The number of slow frames rendered during the lifetime of the span. Type: int @@ -673,8 +727,10 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: 1 """ - # Path: model/attributes/app/app__frames__total__count.json - APP_FRAMES_TOTAL_COUNT: Literal["app.frames.total.count"] = "app.frames.total.count" + # Path: model/attributes/app/app__vitals__frames__total__count.json + APP_VITALS_FRAMES_TOTAL_COUNT: Literal["app.vitals.frames.total.count"] = ( + "app.vitals.frames.total.count" + ) """The number of total frames rendered during the lifetime of the span. Type: int @@ -684,38 +740,20 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: 60 """ - # Path: model/attributes/app/app__identifier.json - APP_IDENTIFIER: Literal["app.identifier"] = "app.identifier" - """Version-independent application identifier, often a dotted bundle ID. - - Type: str - Contains PII: maybe - Defined in OTEL: No - Example: "com.example.myapp" - """ - - # Path: model/attributes/app/app__in_foreground.json - APP_IN_FOREGROUND: Literal["app.in_foreground"] = "app.in_foreground" - """Whether the application is currently in the foreground. - - Type: bool - Contains PII: false - Defined in OTEL: No - Example: true - """ - - # Path: model/attributes/app/app__name.json - APP_NAME: Literal["app.name"] = "app.name" - """Human readable application name, as it appears on the platform. + # Path: model/attributes/app/app__vitals__start__cold__value.json + APP_VITALS_START_COLD_VALUE: Literal["app.vitals.start.cold.value"] = ( + "app.vitals.start.cold.value" + ) + """The duration of a cold app start in milliseconds - Type: str + Type: float Contains PII: maybe Defined in OTEL: No - Example: "My App" + Example: 1234.56 """ - # Path: model/attributes/app/app__start__type.json - APP_START_TYPE: Literal["app.start.type"] = "app.start.type" + # Path: model/attributes/app/app__vitals__start__type.json + APP_VITALS_START_TYPE: Literal["app.vitals.start.type"] = "app.vitals.start.type" """The type of app start, for example `cold` or `warm` Type: str @@ -725,9 +763,11 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "cold" """ - # Path: model/attributes/app/app__start__value.json - APP_START_VALUE: Literal["app.start.value"] = "app.start.value" - """The duration of the app start in milliseconds + # Path: model/attributes/app/app__vitals__start__warm__value.json + APP_VITALS_START_WARM_VALUE: Literal["app.vitals.start.warm.value"] = ( + "app.vitals.start.warm.value" + ) + """The duration of a warm app start in milliseconds Type: float Contains PII: maybe @@ -735,18 +775,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: 1234.56 """ - # Path: model/attributes/app/app__start_time.json - APP_START_TIME: Literal["app.start_time"] = "app.start_time" - """Formatted UTC timestamp when the user started the application. - - Type: str - Contains PII: maybe - Defined in OTEL: No - Example: "2025-01-01T00:00:00.000Z" - """ - - # Path: model/attributes/app/app__ttfd__value.json - APP_TTFD_VALUE: Literal["app.ttfd.value"] = "app.ttfd.value" + # Path: model/attributes/app/app__vitals__ttfd__value.json + APP_VITALS_TTFD_VALUE: Literal["app.vitals.ttfd.value"] = "app.vitals.ttfd.value" """The duration of time to full display in milliseconds Type: float @@ -756,8 +786,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: 1234.56 """ - # Path: model/attributes/app/app__ttid__value.json - APP_TTID_VALUE: Literal["app.ttid.value"] = "app.ttid.value" + # Path: model/attributes/app/app__vitals__ttid__value.json + APP_VITALS_TTID_VALUE: Literal["app.vitals.ttid.value"] = "app.vitals.ttid.value" """The duration of time to initial display in milliseconds Type: float @@ -767,25 +797,15 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: 1234.56 """ - # Path: model/attributes/app/app__version.json - APP_VERSION: Literal["app.version"] = "app.version" - """Human readable application version, as it appears on the platform. - - Type: str - Contains PII: maybe - Defined in OTEL: No - Example: "1.0.0" - """ - # Path: model/attributes/app_start_type.json - _APP_START_TYPE: Literal["app_start_type"] = "app_start_type" + APP_START_TYPE: Literal["app_start_type"] = "app_start_type" """Mobile app start variant. Either cold or warm. Type: str Contains PII: maybe Defined in OTEL: No - Aliases: app.start.type - DEPRECATED: Use app.start.type instead - Old namespace-less attribute, to be replaced with app.start.type + Aliases: app.vitals.start.type + DEPRECATED: Use app.vitals.start.type instead - Replaced by app.vitals.start.type to align with the app.vitals.* namespace for mobile performance attributes Example: "cold" """ @@ -1814,8 +1834,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: int Contains PII: maybe Defined in OTEL: No - Aliases: app.frames.delay.value - DEPRECATED: Use app.frames.delay.value instead - Old frames.* attribute, to be replaced with app.frames.delay.value for app namespacing + Aliases: app.vitals.frames.delay.value + DEPRECATED: Use app.vitals.frames.delay.value instead - Replaced by app.vitals.frames.delay.value to align with the app.vitals.* namespace for mobile performance attributes Example: 5 """ @@ -1826,8 +1846,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: int Contains PII: maybe Defined in OTEL: No - Aliases: app.frames.frozen.count - DEPRECATED: Use app.frames.frozen.count instead - Old frames.* attribute, to be replaced with app.frames.frozen.count for app namespacing + Aliases: app.vitals.frames.frozen.count + DEPRECATED: Use app.vitals.frames.frozen.count instead - Replaced by app.vitals.frames.frozen.count to align with the app.vitals.* namespace for mobile performance attributes Example: 3 """ @@ -1838,8 +1858,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: int Contains PII: maybe Defined in OTEL: No - Aliases: app.frames.slow.count - DEPRECATED: Use app.frames.slow.count instead - Old frames.* attribute, to be replaced with app.frames.slow.count for app namespacing + Aliases: app.vitals.frames.slow.count + DEPRECATED: Use app.vitals.frames.slow.count instead - Replaced by app.vitals.frames.slow.count to align with the app.vitals.* namespace for mobile performance attributes Example: 1 """ @@ -1850,8 +1870,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: int Contains PII: maybe Defined in OTEL: No - Aliases: app.frames.total.count - DEPRECATED: Use app.frames.total.count instead - Old frames.* attribute, to be replaced with app.frames.total.count for app namespacing + Aliases: app.vitals.frames.total.count + DEPRECATED: Use app.vitals.frames.total.count instead - Replaced by app.vitals.frames.total.count to align with the app.vitals.* namespace for mobile performance attributes Example: 60 """ @@ -4984,8 +5004,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: float Contains PII: maybe Defined in OTEL: No - Aliases: app.ttfd.value - DEPRECATED: Use app.ttfd.value instead - Old namespace-less attribute, to be replaced with app.ttfd.value + Aliases: app.vitals.ttfd.value + DEPRECATED: Use app.vitals.ttfd.value instead - Replaced by app.vitals.ttfd.value to align with the app.vitals.* namespace for mobile performance attributes Example: 1234.56 """ @@ -4998,8 +5018,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: float Contains PII: maybe Defined in OTEL: No - Aliases: app.ttid.value - DEPRECATED: Use app.ttid.value instead - Old namespace-less attribute, to be replaced with app.ttid.value + Aliases: app.vitals.ttid.value + DEPRECATED: Use app.vitals.ttid.value instead - Replaced by app.vitals.ttid.value to align with the app.vitals.* namespace for mobile performance attributes Example: 1234.56 """ @@ -6207,13 +6227,12 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ), ], ), - "app.frames.delay.value": AttributeMetadata( - brief="The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).", - type=AttributeType.INTEGER, + "app.identifier": AttributeMetadata( + brief="Version-independent application identifier, often a dotted bundle ID.", + type=AttributeType.STRING, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, - example=5, - aliases=["frames.delay"], + example="com.example.myapp", sdks=[ "sentry.cocoa", "sentry.java.android", @@ -6222,19 +6241,16 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], changelog=[ ChangelogEntry( - version="next", - prs=[313], - description="Added app.frames.delay.value to replace frames.delay", + version="next", prs=[296], description="Added app.identifier attribute" ), ], ), - "app.frames.frozen.count": AttributeMetadata( - brief="The number of frozen frames rendered during the lifetime of the span.", - type=AttributeType.INTEGER, - pii=PiiInfo(isPii=IsPii.MAYBE), + "app.in_foreground": AttributeMetadata( + brief="Whether the application is currently in the foreground.", + type=AttributeType.BOOLEAN, + pii=PiiInfo(isPii=IsPii.FALSE), is_in_otel=False, - example=3, - aliases=["frames.frozen"], + example=True, sdks=[ "sentry.cocoa", "sentry.java.android", @@ -6244,18 +6260,17 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): changelog=[ ChangelogEntry( version="next", - prs=[313], - description="Added app.frames.frozen.count to replace frames.frozen", + prs=[296], + description="Added app.in_foreground attribute", ), ], ), - "app.frames.slow.count": AttributeMetadata( - brief="The number of slow frames rendered during the lifetime of the span.", - type=AttributeType.INTEGER, + "app.name": AttributeMetadata( + brief="Human readable application name, as it appears on the platform.", + type=AttributeType.STRING, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, - example=1, - aliases=["frames.slow"], + example="My App", sdks=[ "sentry.cocoa", "sentry.java.android", @@ -6264,19 +6279,16 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], changelog=[ ChangelogEntry( - version="next", - prs=[313], - description="Added app.frames.slow.count to replace frames.slow", + version="next", prs=[296], description="Added app.name attribute" ), ], ), - "app.frames.total.count": AttributeMetadata( - brief="The number of total frames rendered during the lifetime of the span.", - type=AttributeType.INTEGER, + "app.start_time": AttributeMetadata( + brief="Formatted UTC timestamp when the user started the application.", + type=AttributeType.STRING, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, - example=60, - aliases=["frames.total"], + example="2025-01-01T00:00:00.000Z", sdks=[ "sentry.cocoa", "sentry.java.android", @@ -6285,18 +6297,16 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], changelog=[ ChangelogEntry( - version="next", - prs=[313], - description="Added app.frames.total.count to replace frames.total", + version="next", prs=[296], description="Added app.start_time attribute" ), ], ), - "app.identifier": AttributeMetadata( - brief="Version-independent application identifier, often a dotted bundle ID.", + "app.version": AttributeMetadata( + brief="Human readable application version, as it appears on the platform.", type=AttributeType.STRING, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, - example="com.example.myapp", + example="1.0.0", sdks=[ "sentry.cocoa", "sentry.java.android", @@ -6305,16 +6315,17 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], changelog=[ ChangelogEntry( - version="next", prs=[296], description="Added app.identifier attribute" + version="next", prs=[296], description="Added app.version attribute" ), ], ), - "app.in_foreground": AttributeMetadata( - brief="Whether the application is currently in the foreground.", - type=AttributeType.BOOLEAN, - pii=PiiInfo(isPii=IsPii.FALSE), + "app.vitals.frames.delay.value": AttributeMetadata( + brief="The sum of all delayed frame durations in seconds during the lifetime of the span. For more information see [frames delay](https://develop.sentry.dev/sdk/performance/frames-delay/).", + type=AttributeType.INTEGER, + pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, - example=True, + example=5, + aliases=["frames.delay"], sdks=[ "sentry.cocoa", "sentry.java.android", @@ -6324,17 +6335,18 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): changelog=[ ChangelogEntry( version="next", - prs=[296], - description="Added app.in_foreground attribute", + prs=[313], + description="Added app.vitals.frames.delay.value to replace frames.delay", ), ], ), - "app.name": AttributeMetadata( - brief="Human readable application name, as it appears on the platform.", - type=AttributeType.STRING, + "app.vitals.frames.frozen.count": AttributeMetadata( + brief="The number of frozen frames rendered during the lifetime of the span.", + type=AttributeType.INTEGER, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, - example="My App", + example=3, + aliases=["frames.frozen"], sdks=[ "sentry.cocoa", "sentry.java.android", @@ -6343,17 +6355,40 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], changelog=[ ChangelogEntry( - version="next", prs=[296], description="Added app.name attribute" + version="next", + prs=[313], + description="Added app.vitals.frames.frozen.count to replace frames.frozen", ), ], ), - "app.start.type": AttributeMetadata( - brief="The type of app start, for example `cold` or `warm`", - type=AttributeType.STRING, + "app.vitals.frames.slow.count": AttributeMetadata( + brief="The number of slow frames rendered during the lifetime of the span.", + type=AttributeType.INTEGER, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, - example="cold", - aliases=["app_start_type"], + example=1, + aliases=["frames.slow"], + sdks=[ + "sentry.cocoa", + "sentry.java.android", + "sentry.javascript.react-native", + "sentry.dart.flutter", + ], + changelog=[ + ChangelogEntry( + version="next", + prs=[313], + description="Added app.vitals.frames.slow.count to replace frames.slow", + ), + ], + ), + "app.vitals.frames.total.count": AttributeMetadata( + brief="The number of total frames rendered during the lifetime of the span.", + type=AttributeType.INTEGER, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=60, + aliases=["frames.total"], sdks=[ "sentry.cocoa", "sentry.java.android", @@ -6362,12 +6397,14 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], changelog=[ ChangelogEntry( - version="next", prs=[313], description="Added app.start.type attribute" + version="next", + prs=[313], + description="Added app.vitals.frames.total.count to replace frames.total", ), ], ), - "app.start.value": AttributeMetadata( - brief="The duration of the app start in milliseconds", + "app.vitals.start.cold.value": AttributeMetadata( + brief="The duration of a cold app start in milliseconds", type=AttributeType.DOUBLE, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, @@ -6380,16 +6417,19 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], changelog=[ ChangelogEntry( - version="next", prs=[313], description="Added app.start.value attribute" + version="next", + prs=[313], + description="Added app.vitals.start.cold.value attribute", ), ], ), - "app.start_time": AttributeMetadata( - brief="Formatted UTC timestamp when the user started the application.", + "app.vitals.start.type": AttributeMetadata( + brief="The type of app start, for example `cold` or `warm`", type=AttributeType.STRING, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, - example="2025-01-01T00:00:00.000Z", + example="cold", + aliases=["app_start_type"], sdks=[ "sentry.cocoa", "sentry.java.android", @@ -6398,17 +6438,18 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], changelog=[ ChangelogEntry( - version="next", prs=[296], description="Added app.start_time attribute" + version="next", + prs=[313], + description="Added app.vitals.start.type attribute", ), ], ), - "app.ttfd.value": AttributeMetadata( - brief="The duration of time to full display in milliseconds", + "app.vitals.start.warm.value": AttributeMetadata( + brief="The duration of a warm app start in milliseconds", type=AttributeType.DOUBLE, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=1234.56, - aliases=["time_to_full_display"], sdks=[ "sentry.cocoa", "sentry.java.android", @@ -6417,17 +6458,19 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], changelog=[ ChangelogEntry( - version="next", prs=[313], description="Added app.ttfd.value attribute" + version="next", + prs=[313], + description="Added app.vitals.start.warm.value attribute", ), ], ), - "app.ttid.value": AttributeMetadata( - brief="The duration of time to initial display in milliseconds", + "app.vitals.ttfd.value": AttributeMetadata( + brief="The duration of time to full display in milliseconds", type=AttributeType.DOUBLE, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=1234.56, - aliases=["time_to_initial_display"], + aliases=["time_to_full_display"], sdks=[ "sentry.cocoa", "sentry.java.android", @@ -6436,16 +6479,19 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], changelog=[ ChangelogEntry( - version="next", prs=[313], description="Added app.ttid.value attribute" + version="next", + prs=[313], + description="Added app.vitals.ttfd.value attribute", ), ], ), - "app.version": AttributeMetadata( - brief="Human readable application version, as it appears on the platform.", - type=AttributeType.STRING, + "app.vitals.ttid.value": AttributeMetadata( + brief="The duration of time to initial display in milliseconds", + type=AttributeType.DOUBLE, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, - example="1.0.0", + example=1234.56, + aliases=["time_to_initial_display"], sdks=[ "sentry.cocoa", "sentry.java.android", @@ -6454,7 +6500,9 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ], changelog=[ ChangelogEntry( - version="next", prs=[296], description="Added app.version attribute" + version="next", + prs=[313], + description="Added app.vitals.ttid.value attribute", ), ], ), @@ -6465,16 +6513,16 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, example="cold", deprecation=DeprecationInfo( - replacement="app.start.type", - reason="Old namespace-less attribute, to be replaced with app.start.type", + replacement="app.vitals.start.type", + reason="Replaced by app.vitals.start.type to align with the app.vitals.* namespace for mobile performance attributes", status=DeprecationStatus.BACKFILL, ), - aliases=["app.start.type"], + aliases=["app.vitals.start.type"], changelog=[ ChangelogEntry( version="next", prs=[313], - description="Deprecated in favor of app.start.type", + description="Deprecated in favor of app.vitals.start.type", ), ChangelogEntry(version="0.1.0", prs=[127]), ChangelogEntry(version="0.0.0"), @@ -7649,11 +7697,11 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, example=5, deprecation=DeprecationInfo( - replacement="app.frames.delay.value", - reason="Old frames.* attribute, to be replaced with app.frames.delay.value for app namespacing", + replacement="app.vitals.frames.delay.value", + reason="Replaced by app.vitals.frames.delay.value to align with the app.vitals.* namespace for mobile performance attributes", status=DeprecationStatus.BACKFILL, ), - aliases=["app.frames.delay.value"], + aliases=["app.vitals.frames.delay.value"], changelog=[ ChangelogEntry( version="next", @@ -7671,11 +7719,11 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, example=3, deprecation=DeprecationInfo( - replacement="app.frames.frozen.count", - reason="Old frames.* attribute, to be replaced with app.frames.frozen.count for app namespacing", + replacement="app.vitals.frames.frozen.count", + reason="Replaced by app.vitals.frames.frozen.count to align with the app.vitals.* namespace for mobile performance attributes", status=DeprecationStatus.BACKFILL, ), - aliases=["app.frames.frozen.count"], + aliases=["app.vitals.frames.frozen.count"], changelog=[ ChangelogEntry( version="next", @@ -7693,11 +7741,11 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, example=1, deprecation=DeprecationInfo( - replacement="app.frames.slow.count", - reason="Old frames.* attribute, to be replaced with app.frames.slow.count for app namespacing", + replacement="app.vitals.frames.slow.count", + reason="Replaced by app.vitals.frames.slow.count to align with the app.vitals.* namespace for mobile performance attributes", status=DeprecationStatus.BACKFILL, ), - aliases=["app.frames.slow.count"], + aliases=["app.vitals.frames.slow.count"], changelog=[ ChangelogEntry( version="next", @@ -7715,11 +7763,11 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, example=60, deprecation=DeprecationInfo( - replacement="app.frames.total.count", - reason="Old frames.* attribute, to be replaced with app.frames.total.count for app namespacing", + replacement="app.vitals.frames.total.count", + reason="Replaced by app.vitals.frames.total.count to align with the app.vitals.* namespace for mobile performance attributes", status=DeprecationStatus.BACKFILL, ), - aliases=["app.frames.total.count"], + aliases=["app.vitals.frames.total.count"], changelog=[ ChangelogEntry( version="next", @@ -11027,11 +11075,11 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, example=1234.56, deprecation=DeprecationInfo( - replacement="app.ttfd.value", - reason="Old namespace-less attribute, to be replaced with app.ttfd.value", + replacement="app.vitals.ttfd.value", + reason="Replaced by app.vitals.ttfd.value to align with the app.vitals.* namespace for mobile performance attributes", status=DeprecationStatus.BACKFILL, ), - aliases=["app.ttfd.value"], + aliases=["app.vitals.ttfd.value"], sdks=[ "sentry.cocoa", "sentry.java.android", @@ -11053,11 +11101,11 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): is_in_otel=False, example=1234.56, deprecation=DeprecationInfo( - replacement="app.ttid.value", - reason="Old namespace-less attribute, to be replaced with app.ttid.value", + replacement="app.vitals.ttid.value", + reason="Replaced by app.vitals.ttid.value to align with the app.vitals.* namespace for mobile performance attributes", status=DeprecationStatus.BACKFILL, ), - aliases=["app.ttid.value"], + aliases=["app.vitals.ttid.value"], sdks=[ "sentry.cocoa", "sentry.java.android", @@ -11927,19 +11975,20 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "ai.total_tokens.used": int, "ai.warnings": List[str], "app.build": str, - "app.frames.delay.value": int, - "app.frames.frozen.count": int, - "app.frames.slow.count": int, - "app.frames.total.count": int, "app.identifier": str, "app.in_foreground": bool, "app.name": str, - "app.start.type": str, - "app.start.value": float, "app.start_time": str, - "app.ttfd.value": float, - "app.ttid.value": float, "app.version": str, + "app.vitals.frames.delay.value": int, + "app.vitals.frames.frozen.count": int, + "app.vitals.frames.slow.count": int, + "app.vitals.frames.total.count": int, + "app.vitals.start.cold.value": float, + "app.vitals.start.type": str, + "app.vitals.start.warm.value": float, + "app.vitals.ttfd.value": float, + "app.vitals.ttid.value": float, "app_start_type": str, "blocked_main_thread": bool, "browser.name": str, diff --git a/shared/deprecated_attributes.json b/shared/deprecated_attributes.json index 25bbacd8..46b62134 100644 --- a/shared/deprecated_attributes.json +++ b/shared/deprecated_attributes.json @@ -10,17 +10,17 @@ }, "is_in_otel": false, "example": "cold", - "alias": ["app.start.type"], + "alias": ["app.vitals.start.type"], "deprecation": { - "replacement": "app.start.type", - "reason": "Old namespace-less attribute, to be replaced with app.start.type", + "replacement": "app.vitals.start.type", + "reason": "Replaced by app.vitals.start.type to align with the app.vitals.* namespace for mobile performance attributes", "_status": "backfill" }, "changelog": [ { "version": "next", "prs": [313], - "description": "Deprecated in favor of app.start.type" + "description": "Deprecated in favor of app.vitals.start.type" }, { "version": "0.1.0", @@ -407,10 +407,10 @@ "is_in_otel": false, "example": 1234.56, "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], - "alias": ["app.ttfd.value"], + "alias": ["app.vitals.ttfd.value"], "deprecation": { - "replacement": "app.ttfd.value", - "reason": "Old namespace-less attribute, to be replaced with app.ttfd.value", + "replacement": "app.vitals.ttfd.value", + "reason": "Replaced by app.vitals.ttfd.value to align with the app.vitals.* namespace for mobile performance attributes", "_status": "backfill" }, "changelog": [ @@ -431,10 +431,10 @@ "is_in_otel": false, "example": 1234.56, "sdks": ["sentry.cocoa", "sentry.java.android", "sentry.javascript.react-native", "sentry.dart.flutter"], - "alias": ["app.ttid.value"], + "alias": ["app.vitals.ttid.value"], "deprecation": { - "replacement": "app.ttid.value", - "reason": "Old namespace-less attribute, to be replaced with app.ttid.value", + "replacement": "app.vitals.ttid.value", + "reason": "Replaced by app.vitals.ttid.value to align with the app.vitals.* namespace for mobile performance attributes", "_status": "backfill" }, "changelog": [ @@ -1597,10 +1597,10 @@ }, "is_in_otel": false, "example": 5, - "alias": ["app.frames.delay.value"], + "alias": ["app.vitals.frames.delay.value"], "deprecation": { - "replacement": "app.frames.delay.value", - "reason": "Old frames.* attribute, to be replaced with app.frames.delay.value for app namespacing", + "replacement": "app.vitals.frames.delay.value", + "reason": "Replaced by app.vitals.frames.delay.value to align with the app.vitals.* namespace for mobile performance attributes", "_status": "backfill" }, "changelog": [ @@ -1627,10 +1627,10 @@ }, "is_in_otel": false, "example": 3, - "alias": ["app.frames.frozen.count"], + "alias": ["app.vitals.frames.frozen.count"], "deprecation": { - "replacement": "app.frames.frozen.count", - "reason": "Old frames.* attribute, to be replaced with app.frames.frozen.count for app namespacing", + "replacement": "app.vitals.frames.frozen.count", + "reason": "Replaced by app.vitals.frames.frozen.count to align with the app.vitals.* namespace for mobile performance attributes", "_status": "backfill" }, "changelog": [ @@ -1657,10 +1657,10 @@ }, "is_in_otel": false, "example": 1, - "alias": ["app.frames.slow.count"], + "alias": ["app.vitals.frames.slow.count"], "deprecation": { - "replacement": "app.frames.slow.count", - "reason": "Old frames.* attribute, to be replaced with app.frames.slow.count for app namespacing", + "replacement": "app.vitals.frames.slow.count", + "reason": "Replaced by app.vitals.frames.slow.count to align with the app.vitals.* namespace for mobile performance attributes", "_status": "backfill" }, "changelog": [ @@ -1687,10 +1687,10 @@ }, "is_in_otel": false, "example": 60, - "alias": ["app.frames.total.count"], + "alias": ["app.vitals.frames.total.count"], "deprecation": { - "replacement": "app.frames.total.count", - "reason": "Old frames.* attribute, to be replaced with app.frames.total.count for app namespacing", + "replacement": "app.vitals.frames.total.count", + "reason": "Replaced by app.vitals.frames.total.count to align with the app.vitals.* namespace for mobile performance attributes", "_status": "backfill" }, "changelog": [