diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index e4e72f9b..1238f33d 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -897,6 +897,138 @@ export const BROWSER_VERSION = 'browser.version'; */ export type BROWSER_VERSION_TYPE = string; +// Path: model/attributes/browser/browser__web_vital__lcp__element.json + +/** + * The HTML element selector or component name for which LCP was reported `browser.web_vital.lcp.element` + * + * Attribute Value Type: `string` {@link BROWSER_WEB_VITAL_LCP_ELEMENT_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * Aliases: {@link LCP_ELEMENT} `lcp.element` + * + * @example "body > div#app > div#container > div" + */ +export const BROWSER_WEB_VITAL_LCP_ELEMENT = 'browser.web_vital.lcp.element'; + +/** + * Type for {@link BROWSER_WEB_VITAL_LCP_ELEMENT} browser.web_vital.lcp.element + */ +export type BROWSER_WEB_VITAL_LCP_ELEMENT_TYPE = string; + +// Path: model/attributes/browser/browser__web_vital__lcp__id.json + +/** + * The id of the dom element responsible for the largest contentful paint `browser.web_vital.lcp.id` + * + * Attribute Value Type: `string` {@link BROWSER_WEB_VITAL_LCP_ID_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * Aliases: {@link LCP_ID} `lcp.id` + * + * @example "#gero" + */ +export const BROWSER_WEB_VITAL_LCP_ID = 'browser.web_vital.lcp.id'; + +/** + * Type for {@link BROWSER_WEB_VITAL_LCP_ID} browser.web_vital.lcp.id + */ +export type BROWSER_WEB_VITAL_LCP_ID_TYPE = string; + +// Path: model/attributes/browser/browser__web_vital__lcp__load_time.json + +/** + * The time it took for the LCP element to be loaded `browser.web_vital.lcp.load_time` + * + * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_LCP_LOAD_TIME_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * Aliases: {@link LCP_LOADTIME} `lcp.loadTime` + * + * @example 1402 + */ +export const BROWSER_WEB_VITAL_LCP_LOAD_TIME = 'browser.web_vital.lcp.load_time'; + +/** + * Type for {@link BROWSER_WEB_VITAL_LCP_LOAD_TIME} browser.web_vital.lcp.load_time + */ +export type BROWSER_WEB_VITAL_LCP_LOAD_TIME_TYPE = number; + +// Path: model/attributes/browser/browser__web_vital__lcp__render_time.json + +/** + * The time it took for the LCP element to be rendered `browser.web_vital.lcp.render_time` + * + * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_LCP_RENDER_TIME_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * Aliases: {@link LCP_RENDERTIME} `lcp.renderTime` + * + * @example 1685 + */ +export const BROWSER_WEB_VITAL_LCP_RENDER_TIME = 'browser.web_vital.lcp.render_time'; + +/** + * Type for {@link BROWSER_WEB_VITAL_LCP_RENDER_TIME} browser.web_vital.lcp.render_time + */ +export type BROWSER_WEB_VITAL_LCP_RENDER_TIME_TYPE = number; + +// Path: model/attributes/browser/browser__web_vital__lcp__size.json + +/** + * The size of the largest contentful paint element `browser.web_vital.lcp.size` + * + * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_LCP_SIZE_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * Aliases: {@link LCP_SIZE} `lcp.size` + * + * @example 1024 + */ +export const BROWSER_WEB_VITAL_LCP_SIZE = 'browser.web_vital.lcp.size'; + +/** + * Type for {@link BROWSER_WEB_VITAL_LCP_SIZE} browser.web_vital.lcp.size + */ +export type BROWSER_WEB_VITAL_LCP_SIZE_TYPE = number; + +// Path: model/attributes/browser/browser__web_vital__lcp__url.json + +/** + * The url of the dom element responsible for the largest contentful paint `browser.web_vital.lcp.url` + * + * Attribute Value Type: `string` {@link BROWSER_WEB_VITAL_LCP_URL_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * Aliases: {@link LCP_URL} `lcp.url` + * + * @example "https://example.com/static/img.png" + */ +export const BROWSER_WEB_VITAL_LCP_URL = 'browser.web_vital.lcp.url'; + +/** + * Type for {@link BROWSER_WEB_VITAL_LCP_URL} browser.web_vital.lcp.url + */ +export type BROWSER_WEB_VITAL_LCP_URL_TYPE = string; + // Path: model/attributes/cache/cache__hit.json /** @@ -4213,6 +4345,9 @@ export type JVM_THREAD_STATE_TYPE = string; * * Attribute defined in OTEL: No * + * Aliases: {@link BROWSER_WEB_VITAL_LCP_ELEMENT} `browser.web_vital.lcp.element` + * + * @deprecated Use {@link BROWSER_WEB_VITAL_LCP_ELEMENT} (browser.web_vital.lcp.element) instead - The LCP element is now recorded as a browser.web_vital.lcp.element attribute. * @example "img" */ export const LCP_ELEMENT = 'lcp.element'; @@ -4233,6 +4368,9 @@ export type LCP_ELEMENT_TYPE = string; * * Attribute defined in OTEL: No * + * Aliases: {@link BROWSER_WEB_VITAL_LCP_ID} `browser.web_vital.lcp.id` + * + * @deprecated Use {@link BROWSER_WEB_VITAL_LCP_ID} (browser.web_vital.lcp.id) instead - The LCP id is now recorded as a browser.web_vital.lcp.id attribute. * @example "#hero" */ export const LCP_ID = 'lcp.id'; @@ -4242,6 +4380,52 @@ export const LCP_ID = 'lcp.id'; */ export type LCP_ID_TYPE = string; +// Path: model/attributes/lcp/lcp__loadTime.json + +/** + * The time it took for the LCP element to be loaded `lcp.loadTime` + * + * Attribute Value Type: `number` {@link LCP_LOADTIME_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * Aliases: {@link BROWSER_WEB_VITAL_LCP_LOAD_TIME} `browser.web_vital.lcp.load_time` + * + * @deprecated Use {@link BROWSER_WEB_VITAL_LCP_LOAD_TIME} (browser.web_vital.lcp.load_time) instead - The LCP load time is now recorded as a browser.web_vital.lcp.load_time attribute. + * @example 1402 + */ +export const LCP_LOADTIME = 'lcp.loadTime'; + +/** + * Type for {@link LCP_LOADTIME} lcp.loadTime + */ +export type LCP_LOADTIME_TYPE = number; + +// Path: model/attributes/lcp/lcp__renderTime.json + +/** + * The time it took for the LCP element to be rendered `lcp.renderTime` + * + * Attribute Value Type: `number` {@link LCP_RENDERTIME_TYPE} + * + * Contains PII: maybe + * + * Attribute defined in OTEL: No + * + * Aliases: {@link BROWSER_WEB_VITAL_LCP_RENDER_TIME} `browser.web_vital.lcp.render_time` + * + * @deprecated Use {@link BROWSER_WEB_VITAL_LCP_RENDER_TIME} (browser.web_vital.lcp.render_time) instead - The LCP render time is now recorded as a browser.web_vital.lcp.render_time attribute. + * @example 1685 + */ +export const LCP_RENDERTIME = 'lcp.renderTime'; + +/** + * Type for {@link LCP_RENDERTIME} lcp.renderTime + */ +export type LCP_RENDERTIME_TYPE = number; + // Path: model/attributes/lcp/lcp__size.json /** @@ -4253,6 +4437,9 @@ export type LCP_ID_TYPE = string; * * Attribute defined in OTEL: No * + * Aliases: {@link BROWSER_WEB_VITAL_LCP_SIZE} `browser.web_vital.lcp.size` + * + * @deprecated Use {@link BROWSER_WEB_VITAL_LCP_SIZE} (browser.web_vital.lcp.size) instead - The LCP size is now recorded as a browser.web_vital.lcp.size attribute. * @example 1234 */ export const LCP_SIZE = 'lcp.size'; @@ -4273,6 +4460,9 @@ export type LCP_SIZE_TYPE = number; * * Attribute defined in OTEL: No * + * Aliases: {@link BROWSER_WEB_VITAL_LCP_URL} `browser.web_vital.lcp.url` + * + * @deprecated Use {@link BROWSER_WEB_VITAL_LCP_URL} (browser.web_vital.lcp.url) instead - The LCP url is now recorded as a browser.web_vital.lcp.url attribute. * @example "https://example.com" */ export const LCP_URL = 'lcp.url'; @@ -9038,6 +9228,12 @@ export const ATTRIBUTE_TYPE: Record = { [BROWSER_SCRIPT_INVOKER_TYPE]: 'string', [BROWSER_SCRIPT_SOURCE_CHAR_POSITION]: 'integer', [BROWSER_VERSION]: 'string', + [BROWSER_WEB_VITAL_LCP_ELEMENT]: 'string', + [BROWSER_WEB_VITAL_LCP_ID]: 'string', + [BROWSER_WEB_VITAL_LCP_LOAD_TIME]: 'integer', + [BROWSER_WEB_VITAL_LCP_RENDER_TIME]: 'integer', + [BROWSER_WEB_VITAL_LCP_SIZE]: 'integer', + [BROWSER_WEB_VITAL_LCP_URL]: 'string', [CACHE_HIT]: 'boolean', [CACHE_ITEM_SIZE]: 'integer', [CACHE_KEY]: 'string[]', @@ -9197,6 +9393,8 @@ export const ATTRIBUTE_TYPE: Record = { [JVM_THREAD_STATE]: 'string', [LCP_ELEMENT]: 'string', [LCP_ID]: 'string', + [LCP_LOADTIME]: 'integer', + [LCP_RENDERTIME]: 'integer', [LCP_SIZE]: 'integer', [LCP_URL]: 'string', [LOGGER_NAME]: 'string', @@ -9470,6 +9668,12 @@ export type AttributeName = | typeof BROWSER_SCRIPT_INVOKER_TYPE | typeof BROWSER_SCRIPT_SOURCE_CHAR_POSITION | typeof BROWSER_VERSION + | typeof BROWSER_WEB_VITAL_LCP_ELEMENT + | typeof BROWSER_WEB_VITAL_LCP_ID + | typeof BROWSER_WEB_VITAL_LCP_LOAD_TIME + | typeof BROWSER_WEB_VITAL_LCP_RENDER_TIME + | typeof BROWSER_WEB_VITAL_LCP_SIZE + | typeof BROWSER_WEB_VITAL_LCP_URL | typeof CACHE_HIT | typeof CACHE_ITEM_SIZE | typeof CACHE_KEY @@ -9629,6 +9833,8 @@ export type AttributeName = | typeof JVM_THREAD_STATE | typeof LCP_ELEMENT | typeof LCP_ID + | typeof LCP_LOADTIME + | typeof LCP_RENDERTIME | typeof LCP_SIZE | typeof LCP_URL | typeof LOGGER_NAME @@ -10446,6 +10652,78 @@ export const ATTRIBUTE_METADATA: Record = { aliases: [SENTRY_BROWSER_VERSION], changelog: [{ version: '0.1.0', prs: [59, 127, 139] }], }, + [BROWSER_WEB_VITAL_LCP_ELEMENT]: { + brief: 'The HTML element selector or component name for which LCP was reported', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 'body > div#app > div#container > div', + aliases: [LCP_ELEMENT], + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [233] }], + }, + [BROWSER_WEB_VITAL_LCP_ID]: { + brief: 'The id of the dom element responsible for the largest contentful paint', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: '#gero', + aliases: [LCP_ID], + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [233] }], + }, + [BROWSER_WEB_VITAL_LCP_LOAD_TIME]: { + brief: 'The time it took for the LCP element to be loaded', + type: 'integer', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 1402, + aliases: [LCP_LOADTIME], + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [233] }], + }, + [BROWSER_WEB_VITAL_LCP_RENDER_TIME]: { + brief: 'The time it took for the LCP element to be rendered', + type: 'integer', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 1685, + aliases: [LCP_RENDERTIME], + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [233] }], + }, + [BROWSER_WEB_VITAL_LCP_SIZE]: { + brief: 'The size of the largest contentful paint element', + type: 'integer', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 1024, + aliases: [LCP_SIZE], + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [233] }], + }, + [BROWSER_WEB_VITAL_LCP_URL]: { + brief: 'The url of the dom element responsible for the largest contentful paint', + type: 'string', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 'https://example.com/static/img.png', + aliases: [LCP_URL], + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [233] }], + }, [CACHE_HIT]: { brief: 'If the cache was hit during this span.', type: 'boolean', @@ -12393,7 +12671,12 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: 'img', - changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }], + deprecation: { + replacement: 'browser.web_vital.lcp.element', + reason: 'The LCP element is now recorded as a browser.web_vital.lcp.element attribute.', + }, + aliases: [BROWSER_WEB_VITAL_LCP_ELEMENT], + changelog: [{ version: 'next', prs: [233] }, { version: '0.1.0', prs: [127] }, { version: '0.0.0' }], }, [LCP_ID]: { brief: 'The id of the dom element responsible for the largest contentful paint.', @@ -12403,7 +12686,44 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: '#hero', - changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }], + deprecation: { + replacement: 'browser.web_vital.lcp.id', + reason: 'The LCP id is now recorded as a browser.web_vital.lcp.id attribute.', + }, + aliases: [BROWSER_WEB_VITAL_LCP_ID], + changelog: [{ version: 'next', prs: [233] }, { version: '0.1.0', prs: [127] }, { version: '0.0.0' }], + }, + [LCP_LOADTIME]: { + brief: 'The time it took for the LCP element to be loaded', + type: 'integer', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 1402, + deprecation: { + replacement: 'browser.web_vital.lcp.load_time', + reason: 'The LCP load time is now recorded as a browser.web_vital.lcp.load_time attribute.', + }, + aliases: [BROWSER_WEB_VITAL_LCP_LOAD_TIME], + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [233] }], + }, + [LCP_RENDERTIME]: { + brief: 'The time it took for the LCP element to be rendered', + type: 'integer', + pii: { + isPii: 'maybe', + }, + isInOtel: false, + example: 1685, + deprecation: { + replacement: 'browser.web_vital.lcp.render_time', + reason: 'The LCP render time is now recorded as a browser.web_vital.lcp.render_time attribute.', + }, + aliases: [BROWSER_WEB_VITAL_LCP_RENDER_TIME], + sdks: ['javascript-browser'], + changelog: [{ version: 'next', prs: [233] }], }, [LCP_SIZE]: { brief: 'The size of the largest contentful paint element.', @@ -12413,7 +12733,12 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: 1234, - changelog: [{ version: '0.4.0', prs: [228] }, { version: '0.0.0' }], + deprecation: { + replacement: 'browser.web_vital.lcp.size', + reason: 'The LCP size is now recorded as a browser.web_vital.lcp.size attribute.', + }, + aliases: [BROWSER_WEB_VITAL_LCP_SIZE], + changelog: [{ version: 'next', prs: [233] }, { version: '0.4.0', prs: [228] }, { version: '0.0.0' }], }, [LCP_URL]: { brief: 'The url of the dom element responsible for the largest contentful paint.', @@ -12423,7 +12748,12 @@ export const ATTRIBUTE_METADATA: Record = { }, isInOtel: false, example: 'https://example.com', - changelog: [{ version: '0.1.0', prs: [127] }, { version: '0.0.0' }], + deprecation: { + replacement: 'browser.web_vital.lcp.url', + reason: 'The LCP url is now recorded as a browser.web_vital.lcp.url attribute.', + }, + aliases: [BROWSER_WEB_VITAL_LCP_URL], + changelog: [{ version: 'next', prs: [233] }, { version: '0.1.0', prs: [127] }, { version: '0.0.0' }], }, [LOGGER_NAME]: { brief: 'The name of the logger that generated this event.', @@ -14976,6 +15306,12 @@ export type Attributes = { [BROWSER_SCRIPT_INVOKER_TYPE]?: BROWSER_SCRIPT_INVOKER_TYPE_TYPE; [BROWSER_SCRIPT_SOURCE_CHAR_POSITION]?: BROWSER_SCRIPT_SOURCE_CHAR_POSITION_TYPE; [BROWSER_VERSION]?: BROWSER_VERSION_TYPE; + [BROWSER_WEB_VITAL_LCP_ELEMENT]?: BROWSER_WEB_VITAL_LCP_ELEMENT_TYPE; + [BROWSER_WEB_VITAL_LCP_ID]?: BROWSER_WEB_VITAL_LCP_ID_TYPE; + [BROWSER_WEB_VITAL_LCP_LOAD_TIME]?: BROWSER_WEB_VITAL_LCP_LOAD_TIME_TYPE; + [BROWSER_WEB_VITAL_LCP_RENDER_TIME]?: BROWSER_WEB_VITAL_LCP_RENDER_TIME_TYPE; + [BROWSER_WEB_VITAL_LCP_SIZE]?: BROWSER_WEB_VITAL_LCP_SIZE_TYPE; + [BROWSER_WEB_VITAL_LCP_URL]?: BROWSER_WEB_VITAL_LCP_URL_TYPE; [CACHE_HIT]?: CACHE_HIT_TYPE; [CACHE_ITEM_SIZE]?: CACHE_ITEM_SIZE_TYPE; [CACHE_KEY]?: CACHE_KEY_TYPE; @@ -15135,6 +15471,8 @@ export type Attributes = { [JVM_THREAD_STATE]?: JVM_THREAD_STATE_TYPE; [LCP_ELEMENT]?: LCP_ELEMENT_TYPE; [LCP_ID]?: LCP_ID_TYPE; + [LCP_LOADTIME]?: LCP_LOADTIME_TYPE; + [LCP_RENDERTIME]?: LCP_RENDERTIME_TYPE; [LCP_SIZE]?: LCP_SIZE_TYPE; [LCP_URL]?: LCP_URL_TYPE; [LOGGER_NAME]?: LOGGER_NAME_TYPE; diff --git a/model/attributes/browser/browser__web_vital__lcp__element.json b/model/attributes/browser/browser__web_vital__lcp__element.json new file mode 100644 index 00000000..0c0e98e8 --- /dev/null +++ b/model/attributes/browser/browser__web_vital__lcp__element.json @@ -0,0 +1,18 @@ +{ + "key": "browser.web_vital.lcp.element", + "brief": "The HTML element selector or component name for which LCP was reported", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": "body > div#app > div#container > div", + "alias": ["lcp.element"], + "sdks": ["javascript-browser"], + "changelog": [ + { + "version": "next", + "prs": [233] + } + ] +} diff --git a/model/attributes/browser/browser__web_vital__lcp__id.json b/model/attributes/browser/browser__web_vital__lcp__id.json new file mode 100644 index 00000000..e8d654fe --- /dev/null +++ b/model/attributes/browser/browser__web_vital__lcp__id.json @@ -0,0 +1,18 @@ +{ + "key": "browser.web_vital.lcp.id", + "brief": "The id of the dom element responsible for the largest contentful paint", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": "#gero", + "alias": ["lcp.id"], + "sdks": ["javascript-browser"], + "changelog": [ + { + "version": "next", + "prs": [233] + } + ] +} diff --git a/model/attributes/browser/browser__web_vital__lcp__load_time.json b/model/attributes/browser/browser__web_vital__lcp__load_time.json new file mode 100644 index 00000000..0a8f8afa --- /dev/null +++ b/model/attributes/browser/browser__web_vital__lcp__load_time.json @@ -0,0 +1,18 @@ +{ + "key": "browser.web_vital.lcp.load_time", + "brief": "The time it took for the LCP element to be loaded", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 1402, + "alias": ["lcp.loadTime"], + "sdks": ["javascript-browser"], + "changelog": [ + { + "version": "next", + "prs": [233] + } + ] +} diff --git a/model/attributes/browser/browser__web_vital__lcp__render_time.json b/model/attributes/browser/browser__web_vital__lcp__render_time.json new file mode 100644 index 00000000..fe28883e --- /dev/null +++ b/model/attributes/browser/browser__web_vital__lcp__render_time.json @@ -0,0 +1,18 @@ +{ + "key": "browser.web_vital.lcp.render_time", + "brief": "The time it took for the LCP element to be rendered", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 1685, + "alias": ["lcp.renderTime"], + "sdks": ["javascript-browser"], + "changelog": [ + { + "version": "next", + "prs": [233] + } + ] +} diff --git a/model/attributes/browser/browser__web_vital__lcp__size.json b/model/attributes/browser/browser__web_vital__lcp__size.json new file mode 100644 index 00000000..270f41fa --- /dev/null +++ b/model/attributes/browser/browser__web_vital__lcp__size.json @@ -0,0 +1,18 @@ +{ + "key": "browser.web_vital.lcp.size", + "brief": "The size of the largest contentful paint element", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 1024, + "alias": ["lcp.size"], + "sdks": ["javascript-browser"], + "changelog": [ + { + "version": "next", + "prs": [233] + } + ] +} diff --git a/model/attributes/browser/browser__web_vital__lcp__url.json b/model/attributes/browser/browser__web_vital__lcp__url.json new file mode 100644 index 00000000..da2fe8f6 --- /dev/null +++ b/model/attributes/browser/browser__web_vital__lcp__url.json @@ -0,0 +1,18 @@ +{ + "key": "browser.web_vital.lcp.url", + "brief": "The url of the dom element responsible for the largest contentful paint", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": "https://example.com/static/img.png", + "alias": ["lcp.url"], + "sdks": ["javascript-browser"], + "changelog": [ + { + "version": "next", + "prs": [233] + } + ] +} diff --git a/model/attributes/lcp/lcp__element.json b/model/attributes/lcp/lcp__element.json index 31df8f97..a3fea349 100644 --- a/model/attributes/lcp/lcp__element.json +++ b/model/attributes/lcp/lcp__element.json @@ -7,7 +7,17 @@ }, "is_in_otel": false, "example": "img", + "deprecation": { + "replacement": "browser.web_vital.lcp.element", + "reason": "The LCP element is now recorded as a browser.web_vital.lcp.element attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.lcp.element"], "changelog": [ + { + "version": "next", + "prs": [233] + }, { "version": "0.1.0", "prs": [127] diff --git a/model/attributes/lcp/lcp__id.json b/model/attributes/lcp/lcp__id.json index 8bff47af..a5c42a8c 100644 --- a/model/attributes/lcp/lcp__id.json +++ b/model/attributes/lcp/lcp__id.json @@ -7,7 +7,17 @@ }, "is_in_otel": false, "example": "#hero", + "deprecation": { + "replacement": "browser.web_vital.lcp.id", + "reason": "The LCP id is now recorded as a browser.web_vital.lcp.id attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.lcp.id"], "changelog": [ + { + "version": "next", + "prs": [233] + }, { "version": "0.1.0", "prs": [127] diff --git a/model/attributes/lcp/lcp__loadTime.json b/model/attributes/lcp/lcp__loadTime.json new file mode 100644 index 00000000..2152722a --- /dev/null +++ b/model/attributes/lcp/lcp__loadTime.json @@ -0,0 +1,23 @@ +{ + "key": "lcp.loadTime", + "brief": "The time it took for the LCP element to be loaded", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 1402, + "sdks": ["javascript-browser"], + "deprecation": { + "replacement": "browser.web_vital.lcp.load_time", + "reason": "The LCP load time is now recorded as a browser.web_vital.lcp.load_time attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.lcp.load_time"], + "changelog": [ + { + "version": "next", + "prs": [233] + } + ] +} diff --git a/model/attributes/lcp/lcp__renderTime.json b/model/attributes/lcp/lcp__renderTime.json new file mode 100644 index 00000000..e65a5c23 --- /dev/null +++ b/model/attributes/lcp/lcp__renderTime.json @@ -0,0 +1,23 @@ +{ + "key": "lcp.renderTime", + "brief": "The time it took for the LCP element to be rendered", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 1685, + "sdks": ["javascript-browser"], + "deprecation": { + "replacement": "browser.web_vital.lcp.render_time", + "reason": "The LCP render time is now recorded as a browser.web_vital.lcp.render_time attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.lcp.render_time"], + "changelog": [ + { + "version": "next", + "prs": [233] + } + ] +} diff --git a/model/attributes/lcp/lcp__size.json b/model/attributes/lcp/lcp__size.json index 79395161..c610a781 100644 --- a/model/attributes/lcp/lcp__size.json +++ b/model/attributes/lcp/lcp__size.json @@ -7,7 +7,17 @@ }, "is_in_otel": false, "example": 1234, + "deprecation": { + "replacement": "browser.web_vital.lcp.size", + "reason": "The LCP size is now recorded as a browser.web_vital.lcp.size attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.lcp.size"], "changelog": [ + { + "version": "next", + "prs": [233] + }, { "version": "0.4.0", "prs": [228] diff --git a/model/attributes/lcp/lcp__url.json b/model/attributes/lcp/lcp__url.json index ca6377e9..7444d257 100644 --- a/model/attributes/lcp/lcp__url.json +++ b/model/attributes/lcp/lcp__url.json @@ -7,7 +7,17 @@ }, "is_in_otel": false, "example": "https://example.com", + "deprecation": { + "replacement": "browser.web_vital.lcp.url", + "reason": "The LCP url is now recorded as a browser.web_vital.lcp.url attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.lcp.url"], "changelog": [ + { + "version": "next", + "prs": [233] + }, { "version": "0.1.0", "prs": [127] diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index 0f2c980e..070b0344 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -171,6 +171,12 @@ class _AttributeNamesMeta(type): "HTTP_TARGET", "HTTP_URL", "HTTP_USER_AGENT", + "LCP_ELEMENT", + "LCP_ID", + "LCP_LOADTIME", + "LCP_RENDERTIME", + "LCP_SIZE", + "LCP_URL", "METHOD", "NET_HOST_IP", "NET_HOST_NAME", @@ -686,6 +692,84 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "120.0.6099.130" """ + # Path: model/attributes/browser/browser__web_vital__lcp__element.json + BROWSER_WEB_VITAL_LCP_ELEMENT: Literal["browser.web_vital.lcp.element"] = ( + "browser.web_vital.lcp.element" + ) + """The HTML element selector or component name for which LCP was reported + + Type: str + Contains PII: maybe + Defined in OTEL: No + Aliases: lcp.element + Example: "body > div#app > div#container > div" + """ + + # Path: model/attributes/browser/browser__web_vital__lcp__id.json + BROWSER_WEB_VITAL_LCP_ID: Literal["browser.web_vital.lcp.id"] = ( + "browser.web_vital.lcp.id" + ) + """The id of the dom element responsible for the largest contentful paint + + Type: str + Contains PII: maybe + Defined in OTEL: No + Aliases: lcp.id + Example: "#gero" + """ + + # Path: model/attributes/browser/browser__web_vital__lcp__load_time.json + BROWSER_WEB_VITAL_LCP_LOAD_TIME: Literal["browser.web_vital.lcp.load_time"] = ( + "browser.web_vital.lcp.load_time" + ) + """The time it took for the LCP element to be loaded + + Type: int + Contains PII: maybe + Defined in OTEL: No + Aliases: lcp.loadTime + Example: 1402 + """ + + # Path: model/attributes/browser/browser__web_vital__lcp__render_time.json + BROWSER_WEB_VITAL_LCP_RENDER_TIME: Literal["browser.web_vital.lcp.render_time"] = ( + "browser.web_vital.lcp.render_time" + ) + """The time it took for the LCP element to be rendered + + Type: int + Contains PII: maybe + Defined in OTEL: No + Aliases: lcp.renderTime + Example: 1685 + """ + + # Path: model/attributes/browser/browser__web_vital__lcp__size.json + BROWSER_WEB_VITAL_LCP_SIZE: Literal["browser.web_vital.lcp.size"] = ( + "browser.web_vital.lcp.size" + ) + """The size of the largest contentful paint element + + Type: int + Contains PII: maybe + Defined in OTEL: No + Aliases: lcp.size + Example: 1024 + """ + + # Path: model/attributes/browser/browser__web_vital__lcp__url.json + BROWSER_WEB_VITAL_LCP_URL: Literal["browser.web_vital.lcp.url"] = ( + "browser.web_vital.lcp.url" + ) + """The url of the dom element responsible for the largest contentful paint + + Type: str + Contains PII: maybe + Defined in OTEL: No + Aliases: lcp.url + Example: "https://example.com/static/img.png" + """ + # Path: model/attributes/cache/cache__hit.json CACHE_HIT: Literal["cache.hit"] = "cache.hit" """If the cache was hit during this span. @@ -2473,6 +2557,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: str Contains PII: maybe Defined in OTEL: No + Aliases: browser.web_vital.lcp.element + DEPRECATED: Use browser.web_vital.lcp.element instead - The LCP element is now recorded as a browser.web_vital.lcp.element attribute. Example: "img" """ @@ -2483,9 +2569,35 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: str Contains PII: maybe Defined in OTEL: No + Aliases: browser.web_vital.lcp.id + DEPRECATED: Use browser.web_vital.lcp.id instead - The LCP id is now recorded as a browser.web_vital.lcp.id attribute. Example: "#hero" """ + # Path: model/attributes/lcp/lcp__loadTime.json + LCP_LOADTIME: Literal["lcp.loadTime"] = "lcp.loadTime" + """The time it took for the LCP element to be loaded + + Type: int + Contains PII: maybe + Defined in OTEL: No + Aliases: browser.web_vital.lcp.load_time + DEPRECATED: Use browser.web_vital.lcp.load_time instead - The LCP load time is now recorded as a browser.web_vital.lcp.load_time attribute. + Example: 1402 + """ + + # Path: model/attributes/lcp/lcp__renderTime.json + LCP_RENDERTIME: Literal["lcp.renderTime"] = "lcp.renderTime" + """The time it took for the LCP element to be rendered + + Type: int + Contains PII: maybe + Defined in OTEL: No + Aliases: browser.web_vital.lcp.render_time + DEPRECATED: Use browser.web_vital.lcp.render_time instead - The LCP render time is now recorded as a browser.web_vital.lcp.render_time attribute. + Example: 1685 + """ + # Path: model/attributes/lcp/lcp__size.json LCP_SIZE: Literal["lcp.size"] = "lcp.size" """The size of the largest contentful paint element. @@ -2493,6 +2605,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: int Contains PII: maybe Defined in OTEL: No + Aliases: browser.web_vital.lcp.size + DEPRECATED: Use browser.web_vital.lcp.size instead - The LCP size is now recorded as a browser.web_vital.lcp.size attribute. Example: 1234 """ @@ -2503,6 +2617,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Type: str Contains PII: maybe Defined in OTEL: No + Aliases: browser.web_vital.lcp.url + DEPRECATED: Use browser.web_vital.lcp.url instead - The LCP url is now recorded as a browser.web_vital.lcp.url attribute. Example: "https://example.com" """ @@ -5469,6 +5585,78 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ChangelogEntry(version="0.1.0", prs=[59, 127, 139]), ], ), + "browser.web_vital.lcp.element": AttributeMetadata( + brief="The HTML element selector or component name for which LCP was reported", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="body > div#app > div#container > div", + aliases=["lcp.element"], + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry(version="next", prs=[233]), + ], + ), + "browser.web_vital.lcp.id": AttributeMetadata( + brief="The id of the dom element responsible for the largest contentful paint", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="#gero", + aliases=["lcp.id"], + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry(version="next", prs=[233]), + ], + ), + "browser.web_vital.lcp.load_time": AttributeMetadata( + brief="The time it took for the LCP element to be loaded", + type=AttributeType.INTEGER, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=1402, + aliases=["lcp.loadTime"], + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry(version="next", prs=[233]), + ], + ), + "browser.web_vital.lcp.render_time": AttributeMetadata( + brief="The time it took for the LCP element to be rendered", + type=AttributeType.INTEGER, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=1685, + aliases=["lcp.renderTime"], + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry(version="next", prs=[233]), + ], + ), + "browser.web_vital.lcp.size": AttributeMetadata( + brief="The size of the largest contentful paint element", + type=AttributeType.INTEGER, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=1024, + aliases=["lcp.size"], + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry(version="next", prs=[233]), + ], + ), + "browser.web_vital.lcp.url": AttributeMetadata( + brief="The url of the dom element responsible for the largest contentful paint", + type=AttributeType.STRING, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example="https://example.com/static/img.png", + aliases=["lcp.url"], + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry(version="next", prs=[233]), + ], + ), "cache.hit": AttributeMetadata( brief="If the cache was hit during this span.", type=AttributeType.BOOLEAN, @@ -7351,7 +7539,14 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example="img", + deprecation=DeprecationInfo( + replacement="browser.web_vital.lcp.element", + reason="The LCP element is now recorded as a browser.web_vital.lcp.element attribute.", + status=DeprecationStatus.BACKFILL, + ), + aliases=["browser.web_vital.lcp.element"], changelog=[ + ChangelogEntry(version="next", prs=[233]), ChangelogEntry(version="0.1.0", prs=[127]), ChangelogEntry(version="0.0.0"), ], @@ -7362,18 +7557,66 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example="#hero", + deprecation=DeprecationInfo( + replacement="browser.web_vital.lcp.id", + reason="The LCP id is now recorded as a browser.web_vital.lcp.id attribute.", + status=DeprecationStatus.BACKFILL, + ), + aliases=["browser.web_vital.lcp.id"], changelog=[ + ChangelogEntry(version="next", prs=[233]), ChangelogEntry(version="0.1.0", prs=[127]), ChangelogEntry(version="0.0.0"), ], ), + "lcp.loadTime": AttributeMetadata( + brief="The time it took for the LCP element to be loaded", + type=AttributeType.INTEGER, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=1402, + deprecation=DeprecationInfo( + replacement="browser.web_vital.lcp.load_time", + reason="The LCP load time is now recorded as a browser.web_vital.lcp.load_time attribute.", + status=DeprecationStatus.BACKFILL, + ), + aliases=["browser.web_vital.lcp.load_time"], + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry(version="next", prs=[233]), + ], + ), + "lcp.renderTime": AttributeMetadata( + brief="The time it took for the LCP element to be rendered", + type=AttributeType.INTEGER, + pii=PiiInfo(isPii=IsPii.MAYBE), + is_in_otel=False, + example=1685, + deprecation=DeprecationInfo( + replacement="browser.web_vital.lcp.render_time", + reason="The LCP render time is now recorded as a browser.web_vital.lcp.render_time attribute.", + status=DeprecationStatus.BACKFILL, + ), + aliases=["browser.web_vital.lcp.render_time"], + sdks=["javascript-browser"], + changelog=[ + ChangelogEntry(version="next", prs=[233]), + ], + ), "lcp.size": AttributeMetadata( brief="The size of the largest contentful paint element.", type=AttributeType.INTEGER, pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example=1234, + deprecation=DeprecationInfo( + replacement="browser.web_vital.lcp.size", + reason="The LCP size is now recorded as a browser.web_vital.lcp.size attribute.", + status=DeprecationStatus.BACKFILL, + ), + aliases=["browser.web_vital.lcp.size"], changelog=[ + ChangelogEntry(version="next", prs=[233]), ChangelogEntry(version="0.4.0", prs=[228]), ChangelogEntry(version="0.0.0"), ], @@ -7384,7 +7627,14 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): pii=PiiInfo(isPii=IsPii.MAYBE), is_in_otel=False, example="https://example.com", + deprecation=DeprecationInfo( + replacement="browser.web_vital.lcp.url", + reason="The LCP url is now recorded as a browser.web_vital.lcp.url attribute.", + status=DeprecationStatus.BACKFILL, + ), + aliases=["browser.web_vital.lcp.url"], changelog=[ + ChangelogEntry(version="next", prs=[233]), ChangelogEntry(version="0.1.0", prs=[127]), ChangelogEntry(version="0.0.0"), ], @@ -9935,6 +10185,12 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "browser.script.invoker_type": str, "browser.script.source_char_position": int, "browser.version": str, + "browser.web_vital.lcp.element": str, + "browser.web_vital.lcp.id": str, + "browser.web_vital.lcp.load_time": int, + "browser.web_vital.lcp.render_time": int, + "browser.web_vital.lcp.size": int, + "browser.web_vital.lcp.url": str, "cache.hit": bool, "cache.item_size": int, "cache.key": List[str], @@ -10094,6 +10350,8 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "jvm.thread.state": str, "lcp.element": str, "lcp.id": str, + "lcp.loadTime": int, + "lcp.renderTime": int, "lcp.size": int, "lcp.url": str, "logger.name": str, diff --git a/shared/deprecated_attributes.json b/shared/deprecated_attributes.json index 76c15e9e..853e3dc2 100644 --- a/shared/deprecated_attributes.json +++ b/shared/deprecated_attributes.json @@ -1824,6 +1824,168 @@ } ] }, + { + "key": "lcp.element", + "brief": "The dom element responsible for the largest contentful paint.", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": "img", + "deprecation": { + "replacement": "browser.web_vital.lcp.element", + "reason": "The LCP element is now recorded as a browser.web_vital.lcp.element attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.lcp.element"], + "changelog": [ + { + "version": "next", + "prs": [233] + }, + { + "version": "0.1.0", + "prs": [127] + }, + { + "version": "0.0.0" + } + ] + }, + { + "key": "lcp.id", + "brief": "The id of the dom element responsible for the largest contentful paint.", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": "#hero", + "deprecation": { + "replacement": "browser.web_vital.lcp.id", + "reason": "The LCP id is now recorded as a browser.web_vital.lcp.id attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.lcp.id"], + "changelog": [ + { + "version": "next", + "prs": [233] + }, + { + "version": "0.1.0", + "prs": [127] + }, + { + "version": "0.0.0" + } + ] + }, + { + "key": "lcp.loadTime", + "brief": "The time it took for the LCP element to be loaded", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 1402, + "sdks": ["javascript-browser"], + "deprecation": { + "replacement": "browser.web_vital.lcp.load_time", + "reason": "The LCP load time is now recorded as a browser.web_vital.lcp.load_time attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.lcp.load_time"], + "changelog": [ + { + "version": "next", + "prs": [233] + } + ] + }, + { + "key": "lcp.renderTime", + "brief": "The time it took for the LCP element to be rendered", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 1685, + "sdks": ["javascript-browser"], + "deprecation": { + "replacement": "browser.web_vital.lcp.render_time", + "reason": "The LCP render time is now recorded as a browser.web_vital.lcp.render_time attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.lcp.render_time"], + "changelog": [ + { + "version": "next", + "prs": [233] + } + ] + }, + { + "key": "lcp.size", + "brief": "The size of the largest contentful paint element.", + "type": "integer", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": 1234, + "deprecation": { + "replacement": "browser.web_vital.lcp.size", + "reason": "The LCP size is now recorded as a browser.web_vital.lcp.size attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.lcp.size"], + "changelog": [ + { + "version": "next", + "prs": [233] + }, + { + "version": "0.4.0", + "prs": [228] + }, + { + "version": "0.0.0" + } + ] + }, + { + "key": "lcp.url", + "brief": "The url of the dom element responsible for the largest contentful paint.", + "type": "string", + "pii": { + "key": "maybe" + }, + "is_in_otel": false, + "example": "https://example.com", + "deprecation": { + "replacement": "browser.web_vital.lcp.url", + "reason": "The LCP url is now recorded as a browser.web_vital.lcp.url attribute.", + "_status": "backfill" + }, + "alias": ["browser.web_vital.lcp.url"], + "changelog": [ + { + "version": "next", + "prs": [233] + }, + { + "version": "0.1.0", + "prs": [127] + }, + { + "version": "0.0.0" + } + ] + }, { "key": "net.host.ip", "brief": "Local address of the network connection - IP address or Unix domain socket name.",