From 7561c34196689db60e37ea55ee69f377132dbf29 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Wed, 11 Mar 2026 16:08:26 +0100 Subject: [PATCH 1/2] feat(attributes): Add `ui.element.*` attributes --- .../sentry-conventions/src/attributes.ts | 306 ++++++++++++++++++ model/attributes/ui/ui__element__height.json | 18 ++ model/attributes/ui/ui__element__id.json | 18 ++ .../ui/ui__element__identifier.json | 18 ++ .../attributes/ui/ui__element__load_time.json | 18 ++ .../ui/ui__element__paint_type.json | 18 ++ .../ui/ui__element__render_time.json | 18 ++ model/attributes/ui/ui__element__type.json | 18 ++ model/attributes/ui/ui__element__url.json | 18 ++ model/attributes/ui/ui__element__width.json | 18 ++ python/src/sentry_conventions/attributes.py | 228 +++++++++++++ 11 files changed, 696 insertions(+) create mode 100644 model/attributes/ui/ui__element__height.json create mode 100644 model/attributes/ui/ui__element__id.json create mode 100644 model/attributes/ui/ui__element__identifier.json create mode 100644 model/attributes/ui/ui__element__load_time.json create mode 100644 model/attributes/ui/ui__element__paint_type.json create mode 100644 model/attributes/ui/ui__element__render_time.json create mode 100644 model/attributes/ui/ui__element__type.json create mode 100644 model/attributes/ui/ui__element__url.json create mode 100644 model/attributes/ui/ui__element__width.json diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index e9f25e44..536e49c3 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -8336,6 +8336,186 @@ export const UI_CONTRIBUTES_TO_TTID = 'ui.contributes_to_ttid'; */ export type UI_CONTRIBUTES_TO_TTID_TYPE = boolean; +// Path: model/attributes/ui/ui__element__height.json + +/** + * The height of the UI element (for Html in pixels) `ui.element.height` + * + * Attribute Value Type: `number` {@link UI_ELEMENT_HEIGHT_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example 256 + */ +export const UI_ELEMENT_HEIGHT = 'ui.element.height'; + +/** + * Type for {@link UI_ELEMENT_HEIGHT} ui.element.height + */ +export type UI_ELEMENT_HEIGHT_TYPE = number; + +// Path: model/attributes/ui/ui__element__id.json + +/** + * The id of the UI element `ui.element.id` + * + * Attribute Value Type: `string` {@link UI_ELEMENT_ID_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example "btn-login" + */ +export const UI_ELEMENT_ID = 'ui.element.id'; + +/** + * Type for {@link UI_ELEMENT_ID} ui.element.id + */ +export type UI_ELEMENT_ID_TYPE = string; + +// Path: model/attributes/ui/ui__element__identifier.json + +/** + * The identifier used to measure the UI element timing `ui.element.identifier` + * + * Attribute Value Type: `string` {@link UI_ELEMENT_IDENTIFIER_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example "heroImage" + */ +export const UI_ELEMENT_IDENTIFIER = 'ui.element.identifier'; + +/** + * Type for {@link UI_ELEMENT_IDENTIFIER} ui.element.identifier + */ +export type UI_ELEMENT_IDENTIFIER_TYPE = string; + +// Path: model/attributes/ui/ui__element__load_time.json + +/** + * The loading time of a UI element (from time origin to finished loading) `ui.element.load_time` + * + * Attribute Value Type: `number` {@link UI_ELEMENT_LOAD_TIME_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example 998.2234 + */ +export const UI_ELEMENT_LOAD_TIME = 'ui.element.load_time'; + +/** + * Type for {@link UI_ELEMENT_LOAD_TIME} ui.element.load_time + */ +export type UI_ELEMENT_LOAD_TIME_TYPE = number; + +// Path: model/attributes/ui/ui__element__paint_type.json + +/** + * The type of element paint. Can either be 'image-paint' or 'text-paint' `ui.element.paint_type` + * + * Attribute Value Type: `string` {@link UI_ELEMENT_PAINT_TYPE_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example "image-paint" + */ +export const UI_ELEMENT_PAINT_TYPE = 'ui.element.paint_type'; + +/** + * Type for {@link UI_ELEMENT_PAINT_TYPE} ui.element.paint_type + */ +export type UI_ELEMENT_PAINT_TYPE_TYPE = string; + +// Path: model/attributes/ui/ui__element__render_time.json + +/** + * The rendering time of the UI element (from time origin to finished rendering) `ui.element.render_time` + * + * Attribute Value Type: `number` {@link UI_ELEMENT_RENDER_TIME_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example 1023.1124 + */ +export const UI_ELEMENT_RENDER_TIME = 'ui.element.render_time'; + +/** + * Type for {@link UI_ELEMENT_RENDER_TIME} ui.element.render_time + */ +export type UI_ELEMENT_RENDER_TIME_TYPE = number; + +// Path: model/attributes/ui/ui__element__type.json + +/** + * type of the UI element `ui.element.type` + * + * Attribute Value Type: `string` {@link UI_ELEMENT_TYPE_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example "img" + */ +export const UI_ELEMENT_TYPE = 'ui.element.type'; + +/** + * Type for {@link UI_ELEMENT_TYPE} ui.element.type + */ +export type UI_ELEMENT_TYPE_TYPE = string; + +// Path: model/attributes/ui/ui__element__url.json + +/** + * The URL of the UI element (e.g. an img src) `ui.element.url` + * + * Attribute Value Type: `string` {@link UI_ELEMENT_URL_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example "https://assets.myapp.com/hero.png" + */ +export const UI_ELEMENT_URL = 'ui.element.url'; + +/** + * Type for {@link UI_ELEMENT_URL} ui.element.url + */ +export type UI_ELEMENT_URL_TYPE = string; + +// Path: model/attributes/ui/ui__element__width.json + +/** + * The width of the UI element (for HTML in pixels) `ui.element.width` + * + * Attribute Value Type: `number` {@link UI_ELEMENT_WIDTH_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * @example 512 + */ +export const UI_ELEMENT_WIDTH = 'ui.element.width'; + +/** + * Type for {@link UI_ELEMENT_WIDTH} ui.element.width + */ +export type UI_ELEMENT_WIDTH_TYPE = number; + // Path: model/attributes/url.json /** @@ -9947,6 +10127,15 @@ export const ATTRIBUTE_TYPE: Record = { [UI_COMPONENT_NAME]: 'string', [UI_CONTRIBUTES_TO_TTFD]: 'boolean', [UI_CONTRIBUTES_TO_TTID]: 'boolean', + [UI_ELEMENT_HEIGHT]: 'integer', + [UI_ELEMENT_ID]: 'string', + [UI_ELEMENT_IDENTIFIER]: 'string', + [UI_ELEMENT_LOAD_TIME]: 'double', + [UI_ELEMENT_PAINT_TYPE]: 'string', + [UI_ELEMENT_RENDER_TIME]: 'double', + [UI_ELEMENT_TYPE]: 'string', + [UI_ELEMENT_URL]: 'string', + [UI_ELEMENT_WIDTH]: 'integer', [URL]: 'string', [URL_DOMAIN]: 'string', [URL_FRAGMENT]: 'string', @@ -10403,6 +10592,15 @@ export type AttributeName = | typeof UI_COMPONENT_NAME | typeof UI_CONTRIBUTES_TO_TTFD | typeof UI_CONTRIBUTES_TO_TTID + | typeof UI_ELEMENT_HEIGHT + | typeof UI_ELEMENT_ID + | typeof UI_ELEMENT_IDENTIFIER + | typeof UI_ELEMENT_LOAD_TIME + | typeof UI_ELEMENT_PAINT_TYPE + | typeof UI_ELEMENT_RENDER_TIME + | typeof UI_ELEMENT_TYPE + | typeof UI_ELEMENT_URL + | typeof UI_ELEMENT_WIDTH | typeof URL | typeof URL_DOMAIN | typeof URL_FRAGMENT @@ -15302,6 +15500,105 @@ export const ATTRIBUTE_METADATA: Record = { example: true, changelog: [{ version: '0.0.0' }], }, + [UI_ELEMENT_HEIGHT]: { + brief: 'The height of the UI element (for Html in pixels)', + type: 'integer', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 256, + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [284], description: 'Added ui.element.height attribute' }], + }, + [UI_ELEMENT_ID]: { + brief: 'The id of the UI element', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 'btn-login', + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [284], description: 'Added ui.element.id attribute' }], + }, + [UI_ELEMENT_IDENTIFIER]: { + brief: 'The identifier used to measure the UI element timing', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 'heroImage', + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [284], description: 'Added ui.element.identifier attribute' }], + }, + [UI_ELEMENT_LOAD_TIME]: { + brief: 'The loading time of a UI element (from time origin to finished loading)', + type: 'double', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 998.2234, + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [284], description: 'Added ui.element.load_time attribute' }], + }, + [UI_ELEMENT_PAINT_TYPE]: { + brief: "The type of element paint. Can either be 'image-paint' or 'text-paint'", + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 'image-paint', + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [284], description: 'Added ui.element.paint_type attribute' }], + }, + [UI_ELEMENT_RENDER_TIME]: { + brief: 'The rendering time of the UI element (from time origin to finished rendering)', + type: 'double', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 1023.1124, + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [284], description: 'Added ui.element.render_time attribute' }], + }, + [UI_ELEMENT_TYPE]: { + brief: 'type of the UI element', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 'img', + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [284], description: 'Added ui.element.type attribute' }], + }, + [UI_ELEMENT_URL]: { + brief: 'The URL of the UI element (e.g. an img src)', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 'https://assets.myapp.com/hero.png', + sdks: ['javascript.browser'], + changelog: [{ version: 'next', prs: [284], description: 'Added ui.element.url attribute' }], + }, + [UI_ELEMENT_WIDTH]: { + brief: 'The width of the UI element (for HTML in pixels)', + type: 'integer', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 512, + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [284], description: 'Added ui.element.width attribute' }], + }, [URL]: { brief: 'The URL of the resource that was fetched.', type: 'string', @@ -16303,6 +16600,15 @@ export type Attributes = { [UI_COMPONENT_NAME]?: UI_COMPONENT_NAME_TYPE; [UI_CONTRIBUTES_TO_TTFD]?: UI_CONTRIBUTES_TO_TTFD_TYPE; [UI_CONTRIBUTES_TO_TTID]?: UI_CONTRIBUTES_TO_TTID_TYPE; + [UI_ELEMENT_HEIGHT]?: UI_ELEMENT_HEIGHT_TYPE; + [UI_ELEMENT_ID]?: UI_ELEMENT_ID_TYPE; + [UI_ELEMENT_IDENTIFIER]?: UI_ELEMENT_IDENTIFIER_TYPE; + [UI_ELEMENT_LOAD_TIME]?: UI_ELEMENT_LOAD_TIME_TYPE; + [UI_ELEMENT_PAINT_TYPE]?: UI_ELEMENT_PAINT_TYPE_TYPE; + [UI_ELEMENT_RENDER_TIME]?: UI_ELEMENT_RENDER_TIME_TYPE; + [UI_ELEMENT_TYPE]?: UI_ELEMENT_TYPE_TYPE; + [UI_ELEMENT_URL]?: UI_ELEMENT_URL_TYPE; + [UI_ELEMENT_WIDTH]?: UI_ELEMENT_WIDTH_TYPE; [URL]?: URL_TYPE; [URL_DOMAIN]?: URL_DOMAIN_TYPE; [URL_FRAGMENT]?: URL_FRAGMENT_TYPE; diff --git a/model/attributes/ui/ui__element__height.json b/model/attributes/ui/ui__element__height.json new file mode 100644 index 00000000..84cf8e07 --- /dev/null +++ b/model/attributes/ui/ui__element__height.json @@ -0,0 +1,18 @@ +{ + "key": "ui.element.height", + "brief": "The height of the UI element (for Html in pixels)", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 256, + "sdks": ["javascript-browser"], + "changelog": [ + { + "version": "next", + "prs": [284], + "description": "Added ui.element.height attribute" + } + ] +} diff --git a/model/attributes/ui/ui__element__id.json b/model/attributes/ui/ui__element__id.json new file mode 100644 index 00000000..b91ae00e --- /dev/null +++ b/model/attributes/ui/ui__element__id.json @@ -0,0 +1,18 @@ +{ + "key": "ui.element.id", + "brief": "The id of the UI element", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": "btn-login", + "sdks": ["javascript-browser"], + "changelog": [ + { + "version": "next", + "prs": [284], + "description": "Added ui.element.id attribute" + } + ] +} diff --git a/model/attributes/ui/ui__element__identifier.json b/model/attributes/ui/ui__element__identifier.json new file mode 100644 index 00000000..a95bffed --- /dev/null +++ b/model/attributes/ui/ui__element__identifier.json @@ -0,0 +1,18 @@ +{ + "key": "ui.element.identifier", + "brief": "The identifier used to measure the UI element timing", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": "heroImage", + "sdks": ["javascript-browser"], + "changelog": [ + { + "version": "next", + "prs": [284], + "description": "Added ui.element.identifier attribute" + } + ] +} diff --git a/model/attributes/ui/ui__element__load_time.json b/model/attributes/ui/ui__element__load_time.json new file mode 100644 index 00000000..66246abc --- /dev/null +++ b/model/attributes/ui/ui__element__load_time.json @@ -0,0 +1,18 @@ +{ + "key": "ui.element.load_time", + "brief": "The loading time of a UI element (from time origin to finished loading)", + "type": "double", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 998.2234, + "sdks": ["javascript-browser"], + "changelog": [ + { + "version": "next", + "prs": [284], + "description": "Added ui.element.load_time attribute" + } + ] +} diff --git a/model/attributes/ui/ui__element__paint_type.json b/model/attributes/ui/ui__element__paint_type.json new file mode 100644 index 00000000..fdb1dab7 --- /dev/null +++ b/model/attributes/ui/ui__element__paint_type.json @@ -0,0 +1,18 @@ +{ + "key": "ui.element.paint_type", + "brief": "The type of element paint. Can either be 'image-paint' or 'text-paint'", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": "image-paint", + "sdks": ["javascript-browser"], + "changelog": [ + { + "version": "next", + "prs": [284], + "description": "Added ui.element.paint_type attribute" + } + ] +} diff --git a/model/attributes/ui/ui__element__render_time.json b/model/attributes/ui/ui__element__render_time.json new file mode 100644 index 00000000..fbe64923 --- /dev/null +++ b/model/attributes/ui/ui__element__render_time.json @@ -0,0 +1,18 @@ +{ + "key": "ui.element.render_time", + "brief": "The rendering time of the UI element (from time origin to finished rendering)", + "type": "double", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 1023.1124, + "sdks": ["javascript-browser"], + "changelog": [ + { + "version": "next", + "prs": [284], + "description": "Added ui.element.render_time attribute" + } + ] +} diff --git a/model/attributes/ui/ui__element__type.json b/model/attributes/ui/ui__element__type.json new file mode 100644 index 00000000..50953528 --- /dev/null +++ b/model/attributes/ui/ui__element__type.json @@ -0,0 +1,18 @@ +{ + "key": "ui.element.type", + "brief": "type of the UI element", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": "img", + "sdks": ["javascript-browser"], + "changelog": [ + { + "version": "next", + "prs": [284], + "description": "Added ui.element.type attribute" + } + ] +} diff --git a/model/attributes/ui/ui__element__url.json b/model/attributes/ui/ui__element__url.json new file mode 100644 index 00000000..7146c76f --- /dev/null +++ b/model/attributes/ui/ui__element__url.json @@ -0,0 +1,18 @@ +{ + "key": "ui.element.url", + "brief": "The URL of the UI element (e.g. an img src)", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": "https://assets.myapp.com/hero.png", + "sdks": ["javascript.browser"], + "changelog": [ + { + "version": "next", + "prs": [284], + "description": "Added ui.element.url attribute" + } + ] +} diff --git a/model/attributes/ui/ui__element__width.json b/model/attributes/ui/ui__element__width.json new file mode 100644 index 00000000..fa6abd13 --- /dev/null +++ b/model/attributes/ui/ui__element__width.json @@ -0,0 +1,18 @@ +{ + "key": "ui.element.width", + "brief": "The width of the UI element (for HTML in pixels)", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 512, + "sdks": ["javascript-browser"], + "changelog": [ + { + "version": "next", + "prs": [284], + "description": "Added ui.element.width attribute" + } + ] +} diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index d28fe12a..6d0e48c3 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -4685,6 +4685,96 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: true """ + # Path: model/attributes/ui/ui__element__height.json + UI_ELEMENT_HEIGHT: Literal["ui.element.height"] = "ui.element.height" + """The height of the UI element (for Html in pixels) + + Type: int + Contains PII: maybe + Defined in OTEL: No + Example: 256 + """ + + # Path: model/attributes/ui/ui__element__id.json + UI_ELEMENT_ID: Literal["ui.element.id"] = "ui.element.id" + """The id of the UI element + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "btn-login" + """ + + # Path: model/attributes/ui/ui__element__identifier.json + UI_ELEMENT_IDENTIFIER: Literal["ui.element.identifier"] = "ui.element.identifier" + """The identifier used to measure the UI element timing + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "heroImage" + """ + + # Path: model/attributes/ui/ui__element__load_time.json + UI_ELEMENT_LOAD_TIME: Literal["ui.element.load_time"] = "ui.element.load_time" + """The loading time of a UI element (from time origin to finished loading) + + Type: float + Contains PII: maybe + Defined in OTEL: No + Example: 998.2234 + """ + + # Path: model/attributes/ui/ui__element__paint_type.json + UI_ELEMENT_PAINT_TYPE: Literal["ui.element.paint_type"] = "ui.element.paint_type" + """The type of element paint. Can either be 'image-paint' or 'text-paint' + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "image-paint" + """ + + # Path: model/attributes/ui/ui__element__render_time.json + UI_ELEMENT_RENDER_TIME: Literal["ui.element.render_time"] = "ui.element.render_time" + """The rendering time of the UI element (from time origin to finished rendering) + + Type: float + Contains PII: maybe + Defined in OTEL: No + Example: 1023.1124 + """ + + # Path: model/attributes/ui/ui__element__type.json + UI_ELEMENT_TYPE: Literal["ui.element.type"] = "ui.element.type" + """type of the UI element + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "img" + """ + + # Path: model/attributes/ui/ui__element__url.json + UI_ELEMENT_URL: Literal["ui.element.url"] = "ui.element.url" + """The URL of the UI element (e.g. an img src) + + Type: str + Contains PII: maybe + Defined in OTEL: No + Example: "https://assets.myapp.com/hero.png" + """ + + # Path: model/attributes/ui/ui__element__width.json + UI_ELEMENT_WIDTH: Literal["ui.element.width"] = "ui.element.width" + """The width of the UI element (for HTML in pixels) + + Type: int + Contains PII: maybe + Defined in OTEL: No + Example: 512 + """ + # Path: model/attributes/url/url__domain.json URL_DOMAIN: Literal["url.domain"] = "url.domain" """Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name. @@ -10009,6 +10099,135 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ChangelogEntry(version="0.0.0"), ], ), + "ui.element.height": AttributeMetadata( + brief="The height of the UI element (for Html in pixels)", + type=AttributeType.INTEGER, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=256, + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry( + version="next", + prs=[284], + description="Added ui.element.height attribute", + ), + ], + ), + "ui.element.id": AttributeMetadata( + brief="The id of the UI element", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="btn-login", + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry( + version="next", prs=[284], description="Added ui.element.id attribute" + ), + ], + ), + "ui.element.identifier": AttributeMetadata( + brief="The identifier used to measure the UI element timing", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="heroImage", + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry( + version="next", + prs=[284], + description="Added ui.element.identifier attribute", + ), + ], + ), + "ui.element.load_time": AttributeMetadata( + brief="The loading time of a UI element (from time origin to finished loading)", + type=AttributeType.DOUBLE, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=998.2234, + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry( + version="next", + prs=[284], + description="Added ui.element.load_time attribute", + ), + ], + ), + "ui.element.paint_type": AttributeMetadata( + brief="The type of element paint. Can either be 'image-paint' or 'text-paint'", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="image-paint", + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry( + version="next", + prs=[284], + description="Added ui.element.paint_type attribute", + ), + ], + ), + "ui.element.render_time": AttributeMetadata( + brief="The rendering time of the UI element (from time origin to finished rendering)", + type=AttributeType.DOUBLE, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=1023.1124, + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry( + version="next", + prs=[284], + description="Added ui.element.render_time attribute", + ), + ], + ), + "ui.element.type": AttributeMetadata( + brief="type of the UI element", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="img", + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry( + version="next", prs=[284], description="Added ui.element.type attribute" + ), + ], + ), + "ui.element.url": AttributeMetadata( + brief="The URL of the UI element (e.g. an img src)", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="https://assets.myapp.com/hero.png", + sdks=["javascript.browser"], + changelog=[ + ChangelogEntry( + version="next", prs=[284], description="Added ui.element.url attribute" + ), + ], + ), + "ui.element.width": AttributeMetadata( + brief="The width of the UI element (for HTML in pixels)", + type=AttributeType.INTEGER, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=512, + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry( + version="next", + prs=[284], + description="Added ui.element.width attribute", + ), + ], + ), "url.domain": AttributeMetadata( brief="Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", type=AttributeType.STRING, @@ -11008,6 +11227,15 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "ui.component_name": str, "ui.contributes_to_ttfd": bool, "ui.contributes_to_ttid": bool, + "ui.element.height": int, + "ui.element.id": str, + "ui.element.identifier": str, + "ui.element.load_time": float, + "ui.element.paint_type": str, + "ui.element.render_time": float, + "ui.element.type": str, + "ui.element.url": str, + "ui.element.width": int, "url.domain": str, "url.fragment": str, "url.full": str, From 8156e3ad3cff5dae2fe0f0f8bb74467c3b0d5aaf Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Wed, 11 Mar 2026 16:11:50 +0100 Subject: [PATCH 2/2] fix incorrect sdk identifier --- javascript/sentry-conventions/src/attributes.ts | 2 +- model/attributes/ui/ui__element__url.json | 2 +- python/src/sentry_conventions/attributes.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index 536e49c3..28f3a42e 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -15585,7 +15585,7 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: 'https://assets.myapp.com/hero.png', - sdks: ['javascript.browser'], + sdks: ['javascript-browser'], changelog: [{ version: 'next', prs: [284], description: 'Added ui.element.url attribute' }], }, [UI_ELEMENT_WIDTH]: { diff --git a/model/attributes/ui/ui__element__url.json b/model/attributes/ui/ui__element__url.json index 7146c76f..53573782 100644 --- a/model/attributes/ui/ui__element__url.json +++ b/model/attributes/ui/ui__element__url.json @@ -7,7 +7,7 @@ }, "is_in_otel": false, "example": "https://assets.myapp.com/hero.png", - "sdks": ["javascript.browser"], + "sdks": ["javascript-browser"], "changelog": [ { "version": "next", diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 6d0e48c3..50fedf1d 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -10206,7 +10206,7 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example="https://assets.myapp.com/hero.png", - sdks=["javascript.browser"], + sdks=["javascript-browser"], changelog=[ ChangelogEntry( version="next", prs=[284], description="Added ui.element.url attribute"