diff --git a/javascript/sentry-conventions/src/attributes.ts b/javascript/sentry-conventions/src/attributes.ts index f5a668e72..9a36713c1 100644 --- a/javascript/sentry-conventions/src/attributes.ts +++ b/javascript/sentry-conventions/src/attributes.ts @@ -3778,6 +3778,27 @@ export const BROWSER_WEB_VITAL_FP_VALUE = 'browser.web_vital.fp.value'; */ export type BROWSER_WEB_VITAL_FP_VALUE_TYPE = number; +// Path: model/attributes/browser/browser__web_vital__inp__input_delay.json + +/** + * The time between the user interacting with the page and the browser starting to run the event handlers, for the interaction INP was reported on, in milliseconds `browser.web_vital.inp.input_delay` + * + * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_INP_INPUT_DELAY_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * @example 120 + */ +export const BROWSER_WEB_VITAL_INP_INPUT_DELAY = 'browser.web_vital.inp.input_delay'; + +/** + * Type for {@link BROWSER_WEB_VITAL_INP_INPUT_DELAY} browser.web_vital.inp.input_delay + */ +export type BROWSER_WEB_VITAL_INP_INPUT_DELAY_TYPE = number; + // Path: model/attributes/browser/browser__web_vital__inp__interaction_type.json /** @@ -3802,6 +3823,48 @@ export const BROWSER_WEB_VITAL_INP_INTERACTION_TYPE = 'browser.web_vital.inp.int */ export type BROWSER_WEB_VITAL_INP_INTERACTION_TYPE_TYPE = string; +// Path: model/attributes/browser/browser__web_vital__inp__presentation_delay.json + +/** + * The time between the event handlers finishing and the browser presenting the next frame, for the interaction INP was reported on, in milliseconds `browser.web_vital.inp.presentation_delay` + * + * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_INP_PRESENTATION_DELAY_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * @example 100 + */ +export const BROWSER_WEB_VITAL_INP_PRESENTATION_DELAY = 'browser.web_vital.inp.presentation_delay'; + +/** + * Type for {@link BROWSER_WEB_VITAL_INP_PRESENTATION_DELAY} browser.web_vital.inp.presentation_delay + */ +export type BROWSER_WEB_VITAL_INP_PRESENTATION_DELAY_TYPE = number; + +// Path: model/attributes/browser/browser__web_vital__inp__processing_duration.json + +/** + * The time it took the event handlers to run, for the interaction INP was reported on, in milliseconds `browser.web_vital.inp.processing_duration` + * + * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_INP_PROCESSING_DURATION_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * @example 140 + */ +export const BROWSER_WEB_VITAL_INP_PROCESSING_DURATION = 'browser.web_vital.inp.processing_duration'; + +/** + * Type for {@link BROWSER_WEB_VITAL_INP_PROCESSING_DURATION} browser.web_vital.inp.processing_duration + */ +export type BROWSER_WEB_VITAL_INP_PROCESSING_DURATION_TYPE = number; + // Path: model/attributes/browser/browser__web_vital__inp__target.json /** @@ -3870,6 +3933,27 @@ export const 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__element_render_delay.json + +/** + * The time between the LCP resource finishing loading and the LCP element being rendered, in milliseconds `browser.web_vital.lcp.element_render_delay` + * + * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_LCP_ELEMENT_RENDER_DELAY_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * @example 410 + */ +export const BROWSER_WEB_VITAL_LCP_ELEMENT_RENDER_DELAY = 'browser.web_vital.lcp.element_render_delay'; + +/** + * Type for {@link BROWSER_WEB_VITAL_LCP_ELEMENT_RENDER_DELAY} browser.web_vital.lcp.element_render_delay + */ +export type BROWSER_WEB_VITAL_LCP_ELEMENT_RENDER_DELAY_TYPE = number; + // Path: model/attributes/browser/browser__web_vital__lcp__id.json /** @@ -3961,6 +4045,48 @@ export const BROWSER_WEB_VITAL_LCP_REPORT_EVENT = 'browser.web_vital.lcp.report_ */ export type BROWSER_WEB_VITAL_LCP_REPORT_EVENT_TYPE = string; +// Path: model/attributes/browser/browser__web_vital__lcp__resource_load_delay.json + +/** + * The time between the first byte of the document arriving and the browser starting to load the LCP resource, in milliseconds `browser.web_vital.lcp.resource_load_delay` + * + * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DELAY_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * @example 320.5 + */ +export const BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DELAY = 'browser.web_vital.lcp.resource_load_delay'; + +/** + * Type for {@link BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DELAY} browser.web_vital.lcp.resource_load_delay + */ +export type BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DELAY_TYPE = number; + +// Path: model/attributes/browser/browser__web_vital__lcp__resource_load_duration.json + +/** + * The time it took to load the LCP resource, in milliseconds `browser.web_vital.lcp.resource_load_duration` + * + * Attribute Value Type: `number` {@link BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DURATION_TYPE} + * + * Apply Scrubbing: manual + * + * Attribute defined in OTEL: No + * Visibility: public + * + * @example 780.2 + */ +export const BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DURATION = 'browser.web_vital.lcp.resource_load_duration'; + +/** + * Type for {@link BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DURATION} browser.web_vital.lcp.resource_load_duration + */ +export type BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DURATION_TYPE = number; + // Path: model/attributes/browser/browser__web_vital__lcp__size.json /** @@ -20610,14 +20736,20 @@ export const ATTRIBUTE_TYPE: Record = { 'browser.web_vital.cls.value': 'double', 'browser.web_vital.fcp.value': 'double', 'browser.web_vital.fp.value': 'double', + 'browser.web_vital.inp.input_delay': 'double', 'browser.web_vital.inp.interaction_type': 'string', + 'browser.web_vital.inp.presentation_delay': 'double', + 'browser.web_vital.inp.processing_duration': 'double', 'browser.web_vital.inp.target': 'string', 'browser.web_vital.inp.value': 'double', 'browser.web_vital.lcp.element': 'string', + 'browser.web_vital.lcp.element_render_delay': 'double', 'browser.web_vital.lcp.id': 'string', 'browser.web_vital.lcp.load_time': 'integer', 'browser.web_vital.lcp.render_time': 'integer', 'browser.web_vital.lcp.report_event': 'string', + 'browser.web_vital.lcp.resource_load_delay': 'double', + 'browser.web_vital.lcp.resource_load_duration': 'double', 'browser.web_vital.lcp.size': 'integer', 'browser.web_vital.lcp.url': 'string', 'browser.web_vital.lcp.value': 'double', @@ -21519,14 +21651,20 @@ export type AttributeName = | typeof BROWSER_WEB_VITAL_CLS_VALUE | typeof BROWSER_WEB_VITAL_FCP_VALUE | typeof BROWSER_WEB_VITAL_FP_VALUE + | typeof BROWSER_WEB_VITAL_INP_INPUT_DELAY | typeof BROWSER_WEB_VITAL_INP_INTERACTION_TYPE + | typeof BROWSER_WEB_VITAL_INP_PRESENTATION_DELAY + | typeof BROWSER_WEB_VITAL_INP_PROCESSING_DURATION | typeof BROWSER_WEB_VITAL_INP_TARGET | typeof BROWSER_WEB_VITAL_INP_VALUE | typeof BROWSER_WEB_VITAL_LCP_ELEMENT + | typeof BROWSER_WEB_VITAL_LCP_ELEMENT_RENDER_DELAY | 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_REPORT_EVENT + | typeof BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DELAY + | typeof BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DURATION | typeof BROWSER_WEB_VITAL_LCP_SIZE | typeof BROWSER_WEB_VITAL_LCP_URL | typeof BROWSER_WEB_VITAL_LCP_VALUE @@ -24980,6 +25118,25 @@ export const ATTRIBUTE_METADATA: Record = { aliases: ['fp'], changelog: [{ version: '0.5.0', prs: [235] }], }, + 'browser.web_vital.inp.input_delay': { + brief: + 'The time between the user interacting with the page and the browser starting to run the event handlers, for the interaction INP was reported on, in milliseconds', + type: 'double', + keys: ['browser.web_vital.inp.input_delay'], + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 120, + examples: [120], + changelog: [{ version: 'next', prs: [712], description: 'Added browser.web_vital.inp.input_delay attribute' }], + additionalContext: [ + 'One of the three INP subparts, which add up to `browser.web_vital.inp.value`: input delay, processing duration and presentation delay. Named after `inputDelay` in the web-vitals attribution build.', + "Measured from the interaction's `PerformanceEventTiming` entry as `processingStart` minus `startTime`.", + 'Omitted when INP is reported without an interaction to attribute it to, like `browser.web_vital.inp.target`.', + ], + }, 'browser.web_vital.inp.interaction_type': { brief: 'The kind of user interaction INP was reported on', type: 'string', @@ -25000,6 +25157,47 @@ export const ATTRIBUTE_METADATA: Record = { 'Omitted when INP is reported without an interaction to attribute it to, see `browser.web_vital.inp.target`. The op of such a span still falls into `ui.interaction.click` so that it stays within the interaction span family, which makes this attribute, not the op, the way to tell a real click from a value with no interaction.', ], }, + 'browser.web_vital.inp.presentation_delay': { + brief: + 'The time between the event handlers finishing and the browser presenting the next frame, for the interaction INP was reported on, in milliseconds', + type: 'double', + keys: ['browser.web_vital.inp.presentation_delay'], + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 100, + examples: [100], + changelog: [ + { version: 'next', prs: [712], description: 'Added browser.web_vital.inp.presentation_delay attribute' }, + ], + additionalContext: [ + 'One of the three INP subparts, which add up to `browser.web_vital.inp.value`. Named after `presentationDelay` in the web-vitals attribution build.', + "Measured from the interaction's `PerformanceEventTiming` entry as `startTime` plus `duration` minus `processingEnd`.", + 'Omitted when INP is reported without an interaction to attribute it to, like `browser.web_vital.inp.target`.', + ], + }, + 'browser.web_vital.inp.processing_duration': { + brief: 'The time it took the event handlers to run, for the interaction INP was reported on, in milliseconds', + type: 'double', + keys: ['browser.web_vital.inp.processing_duration'], + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 140, + examples: [140], + changelog: [ + { version: 'next', prs: [712], description: 'Added browser.web_vital.inp.processing_duration attribute' }, + ], + additionalContext: [ + 'One of the three INP subparts, which add up to `browser.web_vital.inp.value`. Named after `processingDuration` in the web-vitals attribution build.', + "Measured from the interaction's `PerformanceEventTiming` entry as `processingEnd` minus `processingStart`.", + 'Omitted when INP is reported without an interaction to attribute it to, like `browser.web_vital.inp.target`.', + ], + }, 'browser.web_vital.inp.target': { brief: 'The HTML element selector or component name of the element the user interacted with, for the interaction INP was reported on', @@ -25044,6 +25242,26 @@ export const ATTRIBUTE_METADATA: Record = { aliases: ['lcp.element'], changelog: [{ version: '0.5.0', prs: [233] }], }, + 'browser.web_vital.lcp.element_render_delay': { + brief: 'The time between the LCP resource finishing loading and the LCP element being rendered, in milliseconds', + type: 'double', + keys: ['browser.web_vital.lcp.element_render_delay'], + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 410, + examples: [410], + changelog: [ + { version: 'next', prs: [712], description: 'Added browser.web_vital.lcp.element_render_delay attribute' }, + ], + additionalContext: [ + 'One of the four LCP subparts, which add up to `browser.web_vital.lcp.value`. Named after `elementRenderDelay` in the web-vitals attribution build.', + "Measured as the LCP value minus the LCP resource's `responseEnd`. When the LCP element is text, it covers all time after TTFB.", + 'For a prerendered page, timestamps are measured from `activationStart`.', + ], + }, 'browser.web_vital.lcp.id': { brief: 'The id of the dom element responsible for the largest contentful paint', type: 'string', @@ -25106,6 +25324,47 @@ export const ATTRIBUTE_METADATA: Record = { { version: '0.5.0', prs: [319], description: 'Added browser.web_vital.lcp.report_event attribute' }, ], }, + 'browser.web_vital.lcp.resource_load_delay': { + brief: + 'The time between the first byte of the document arriving and the browser starting to load the LCP resource, in milliseconds', + type: 'double', + keys: ['browser.web_vital.lcp.resource_load_delay'], + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 320.5, + examples: [320.5], + changelog: [ + { version: 'next', prs: [712], description: 'Added browser.web_vital.lcp.resource_load_delay attribute' }, + ], + additionalContext: [ + 'One of the four LCP subparts, which add up to `browser.web_vital.lcp.value`: TTFB (`browser.web_vital.ttfb.value`), resource load delay, resource load duration and element render delay. Named after `resourceLoadDelay` in the web-vitals attribution build.', + "Measured as the LCP resource's `requestStart` (or `startTime` when `requestStart` is not exposed) minus TTFB. It is 0 when the LCP element is text, since no resource is loaded.", + 'For a prerendered page, timestamps are measured from `activationStart`.', + ], + }, + 'browser.web_vital.lcp.resource_load_duration': { + brief: 'The time it took to load the LCP resource, in milliseconds', + type: 'double', + keys: ['browser.web_vital.lcp.resource_load_duration'], + applyScrubbing: { + key: 'manual', + }, + isInOtel: false, + visibility: 'public', + example: 780.2, + examples: [780.2], + changelog: [ + { version: 'next', prs: [712], description: 'Added browser.web_vital.lcp.resource_load_duration attribute' }, + ], + additionalContext: [ + 'One of the four LCP subparts, which add up to `browser.web_vital.lcp.value`. Named after `resourceLoadDuration` in the web-vitals attribution build.', + "Measured as the LCP resource's `responseEnd` minus its `requestStart` (or `startTime` when `requestStart` is not exposed). It is 0 when the LCP element is text, since no resource is loaded.", + 'For a prerendered page, timestamps are measured from `activationStart`.', + ], + }, 'browser.web_vital.lcp.size': { brief: 'The size of the largest contentful paint element', type: 'integer', @@ -37376,14 +37635,20 @@ export type Attributes = { [BROWSER_WEB_VITAL_CLS_VALUE]?: BROWSER_WEB_VITAL_CLS_VALUE_TYPE; [BROWSER_WEB_VITAL_FCP_VALUE]?: BROWSER_WEB_VITAL_FCP_VALUE_TYPE; [BROWSER_WEB_VITAL_FP_VALUE]?: BROWSER_WEB_VITAL_FP_VALUE_TYPE; + [BROWSER_WEB_VITAL_INP_INPUT_DELAY]?: BROWSER_WEB_VITAL_INP_INPUT_DELAY_TYPE; [BROWSER_WEB_VITAL_INP_INTERACTION_TYPE]?: BROWSER_WEB_VITAL_INP_INTERACTION_TYPE_TYPE; + [BROWSER_WEB_VITAL_INP_PRESENTATION_DELAY]?: BROWSER_WEB_VITAL_INP_PRESENTATION_DELAY_TYPE; + [BROWSER_WEB_VITAL_INP_PROCESSING_DURATION]?: BROWSER_WEB_VITAL_INP_PROCESSING_DURATION_TYPE; [BROWSER_WEB_VITAL_INP_TARGET]?: BROWSER_WEB_VITAL_INP_TARGET_TYPE; [BROWSER_WEB_VITAL_INP_VALUE]?: BROWSER_WEB_VITAL_INP_VALUE_TYPE; [BROWSER_WEB_VITAL_LCP_ELEMENT]?: BROWSER_WEB_VITAL_LCP_ELEMENT_TYPE; + [BROWSER_WEB_VITAL_LCP_ELEMENT_RENDER_DELAY]?: BROWSER_WEB_VITAL_LCP_ELEMENT_RENDER_DELAY_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_REPORT_EVENT]?: BROWSER_WEB_VITAL_LCP_REPORT_EVENT_TYPE; + [BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DELAY]?: BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DELAY_TYPE; + [BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DURATION]?: BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DURATION_TYPE; [BROWSER_WEB_VITAL_LCP_SIZE]?: BROWSER_WEB_VITAL_LCP_SIZE_TYPE; [BROWSER_WEB_VITAL_LCP_URL]?: BROWSER_WEB_VITAL_LCP_URL_TYPE; [BROWSER_WEB_VITAL_LCP_VALUE]?: BROWSER_WEB_VITAL_LCP_VALUE_TYPE; diff --git a/javascript/sentry-conventions/src/search.ts b/javascript/sentry-conventions/src/search.ts index 663e145e5..ad0ebc70e 100644 --- a/javascript/sentry-conventions/src/search.ts +++ b/javascript/sentry-conventions/src/search.ts @@ -1006,11 +1006,26 @@ export const SEARCH_BROWSER__WEB_VITAL__FCP__VALUE = 'browser.web_vital.fcp.valu */ export const SEARCH_BROWSER__WEB_VITAL__FP__VALUE = 'browser.web_vital.fp.value'; +/** + * Search name for {@link attributes.BROWSER_WEB_VITAL_INP_INPUT_DELAY}. `browser.web_vital.inp.input_delay` + */ +export const SEARCH_BROWSER__WEB_VITAL__INP__INPUT_DELAY = 'browser.web_vital.inp.input_delay'; + /** * Search name for {@link attributes.BROWSER_WEB_VITAL_INP_INTERACTION_TYPE}. `browser.web_vital.inp.interaction_type` */ export const SEARCH_BROWSER__WEB_VITAL__INP__INTERACTION_TYPE = 'browser.web_vital.inp.interaction_type'; +/** + * Search name for {@link attributes.BROWSER_WEB_VITAL_INP_PRESENTATION_DELAY}. `browser.web_vital.inp.presentation_delay` + */ +export const SEARCH_BROWSER__WEB_VITAL__INP__PRESENTATION_DELAY = 'browser.web_vital.inp.presentation_delay'; + +/** + * Search name for {@link attributes.BROWSER_WEB_VITAL_INP_PROCESSING_DURATION}. `browser.web_vital.inp.processing_duration` + */ +export const SEARCH_BROWSER__WEB_VITAL__INP__PROCESSING_DURATION = 'browser.web_vital.inp.processing_duration'; + /** * Search name for {@link attributes.BROWSER_WEB_VITAL_INP_TARGET}. `browser.web_vital.inp.target` */ @@ -1026,6 +1041,11 @@ export const SEARCH_BROWSER__WEB_VITAL__INP__VALUE = 'browser.web_vital.inp.valu */ export const SEARCH_BROWSER__WEB_VITAL__LCP__ELEMENT = 'browser.web_vital.lcp.element'; +/** + * Search name for {@link attributes.BROWSER_WEB_VITAL_LCP_ELEMENT_RENDER_DELAY}. `browser.web_vital.lcp.element_render_delay` + */ +export const SEARCH_BROWSER__WEB_VITAL__LCP__ELEMENT_RENDER_DELAY = 'browser.web_vital.lcp.element_render_delay'; + /** * Search name for {@link attributes.BROWSER_WEB_VITAL_LCP_ID}. `browser.web_vital.lcp.id` */ @@ -1048,6 +1068,16 @@ export const SEARCH_BROWSER__WEB_VITAL__LCP__RENDER_TIME = 'browser.web_vital.lc */ export const SEARCH_BROWSER__WEB_VITAL__LCP__REPORT_EVENT = 'browser.web_vital.lcp.report_event'; +/** + * Search name for {@link attributes.BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DELAY}. `browser.web_vital.lcp.resource_load_delay` + */ +export const SEARCH_BROWSER__WEB_VITAL__LCP__RESOURCE_LOAD_DELAY = 'browser.web_vital.lcp.resource_load_delay'; + +/** + * Search name for {@link attributes.BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DURATION}. `browser.web_vital.lcp.resource_load_duration` + */ +export const SEARCH_BROWSER__WEB_VITAL__LCP__RESOURCE_LOAD_DURATION = 'browser.web_vital.lcp.resource_load_duration'; + /** * Search name for {@link attributes.BROWSER_WEB_VITAL_LCP_SIZE}. `browser.web_vital.lcp.size` */ @@ -5424,14 +5454,20 @@ export type AttributeSearchName = | typeof SEARCH_BROWSER__WEB_VITAL__CLS__VALUE | typeof SEARCH_BROWSER__WEB_VITAL__FCP__VALUE | typeof SEARCH_BROWSER__WEB_VITAL__FP__VALUE + | typeof SEARCH_BROWSER__WEB_VITAL__INP__INPUT_DELAY | typeof SEARCH_BROWSER__WEB_VITAL__INP__INTERACTION_TYPE + | typeof SEARCH_BROWSER__WEB_VITAL__INP__PRESENTATION_DELAY + | typeof SEARCH_BROWSER__WEB_VITAL__INP__PROCESSING_DURATION | typeof SEARCH_BROWSER__WEB_VITAL__INP__TARGET | typeof SEARCH_BROWSER__WEB_VITAL__INP__VALUE | typeof SEARCH_BROWSER__WEB_VITAL__LCP__ELEMENT + | typeof SEARCH_BROWSER__WEB_VITAL__LCP__ELEMENT_RENDER_DELAY | typeof SEARCH_BROWSER__WEB_VITAL__LCP__ID | typeof SEARCH_BROWSER__WEB_VITAL__LCP__LOAD_TIME | typeof SEARCH_BROWSER__WEB_VITAL__LCP__RENDER_TIME | typeof SEARCH_BROWSER__WEB_VITAL__LCP__REPORT_EVENT + | typeof SEARCH_BROWSER__WEB_VITAL__LCP__RESOURCE_LOAD_DELAY + | typeof SEARCH_BROWSER__WEB_VITAL__LCP__RESOURCE_LOAD_DURATION | typeof SEARCH_BROWSER__WEB_VITAL__LCP__SIZE | typeof SEARCH_BROWSER__WEB_VITAL__LCP__URL | typeof SEARCH_BROWSER__WEB_VITAL__LCP__VALUE @@ -7323,12 +7359,32 @@ export const ATTRIBUTE_SEARCH_METADATA: Record brief: 'The time in milliseconds it takes for the browser to render the first pixel on the screen', deprecationChain: ['browser.web_vital.fp.value', 'fp'], }, + 'browser.web_vital.inp.input_delay': { + canonicalName: 'browser.web_vital.inp.input_delay', + type: 'double', + brief: + 'The time between the user interacting with the page and the browser starting to run the event handlers, for the interaction INP was reported on, in milliseconds', + deprecationChain: ['browser.web_vital.inp.input_delay'], + }, 'browser.web_vital.inp.interaction_type': { canonicalName: 'browser.web_vital.inp.interaction_type', type: 'string', brief: 'The kind of user interaction INP was reported on', deprecationChain: ['browser.web_vital.inp.interaction_type'], }, + 'browser.web_vital.inp.presentation_delay': { + canonicalName: 'browser.web_vital.inp.presentation_delay', + type: 'double', + brief: + 'The time between the event handlers finishing and the browser presenting the next frame, for the interaction INP was reported on, in milliseconds', + deprecationChain: ['browser.web_vital.inp.presentation_delay'], + }, + 'browser.web_vital.inp.processing_duration': { + canonicalName: 'browser.web_vital.inp.processing_duration', + type: 'double', + brief: 'The time it took the event handlers to run, for the interaction INP was reported on, in milliseconds', + deprecationChain: ['browser.web_vital.inp.processing_duration'], + }, 'browser.web_vital.inp.target': { canonicalName: 'browser.web_vital.inp.target', type: 'string', @@ -7348,6 +7404,12 @@ export const ATTRIBUTE_SEARCH_METADATA: Record brief: 'The HTML element selector or component name for which LCP was reported', deprecationChain: ['browser.web_vital.lcp.element', 'lcp.element'], }, + 'browser.web_vital.lcp.element_render_delay': { + canonicalName: 'browser.web_vital.lcp.element_render_delay', + type: 'double', + brief: 'The time between the LCP resource finishing loading and the LCP element being rendered, in milliseconds', + deprecationChain: ['browser.web_vital.lcp.element_render_delay'], + }, 'browser.web_vital.lcp.id': { canonicalName: 'browser.web_vital.lcp.id', type: 'string', @@ -7373,6 +7435,19 @@ export const ATTRIBUTE_SEARCH_METADATA: Record deprecated: true, deprecationChain: ['browser.web_vital.lcp.report_event'], }, + 'browser.web_vital.lcp.resource_load_delay': { + canonicalName: 'browser.web_vital.lcp.resource_load_delay', + type: 'double', + brief: + 'The time between the first byte of the document arriving and the browser starting to load the LCP resource, in milliseconds', + deprecationChain: ['browser.web_vital.lcp.resource_load_delay'], + }, + 'browser.web_vital.lcp.resource_load_duration': { + canonicalName: 'browser.web_vital.lcp.resource_load_duration', + type: 'double', + brief: 'The time it took to load the LCP resource, in milliseconds', + deprecationChain: ['browser.web_vital.lcp.resource_load_duration'], + }, 'browser.web_vital.lcp.size': { canonicalName: 'browser.web_vital.lcp.size', type: 'integer', diff --git a/model/attributes/browser/browser__web_vital__inp__input_delay.json b/model/attributes/browser/browser__web_vital__inp__input_delay.json new file mode 100644 index 000000000..4fd33706b --- /dev/null +++ b/model/attributes/browser/browser__web_vital__inp__input_delay.json @@ -0,0 +1,23 @@ +{ + "key": "browser.web_vital.inp.input_delay", + "brief": "The time between the user interacting with the page and the browser starting to run the event handlers, for the interaction INP was reported on, in milliseconds", + "type": "double", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "visibility": "public", + "examples": [120.0], + "additional_context": [ + "One of the three INP subparts, which add up to `browser.web_vital.inp.value`: input delay, processing duration and presentation delay. Named after `inputDelay` in the web-vitals attribution build.", + "Measured from the interaction's `PerformanceEventTiming` entry as `processingStart` minus `startTime`.", + "Omitted when INP is reported without an interaction to attribute it to, like `browser.web_vital.inp.target`." + ], + "changelog": [ + { + "version": "next", + "prs": [712], + "description": "Added browser.web_vital.inp.input_delay attribute" + } + ] +} diff --git a/model/attributes/browser/browser__web_vital__inp__presentation_delay.json b/model/attributes/browser/browser__web_vital__inp__presentation_delay.json new file mode 100644 index 000000000..a68280bbe --- /dev/null +++ b/model/attributes/browser/browser__web_vital__inp__presentation_delay.json @@ -0,0 +1,23 @@ +{ + "key": "browser.web_vital.inp.presentation_delay", + "brief": "The time between the event handlers finishing and the browser presenting the next frame, for the interaction INP was reported on, in milliseconds", + "type": "double", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "visibility": "public", + "examples": [100.0], + "additional_context": [ + "One of the three INP subparts, which add up to `browser.web_vital.inp.value`. Named after `presentationDelay` in the web-vitals attribution build.", + "Measured from the interaction's `PerformanceEventTiming` entry as `startTime` plus `duration` minus `processingEnd`.", + "Omitted when INP is reported without an interaction to attribute it to, like `browser.web_vital.inp.target`." + ], + "changelog": [ + { + "version": "next", + "prs": [712], + "description": "Added browser.web_vital.inp.presentation_delay attribute" + } + ] +} diff --git a/model/attributes/browser/browser__web_vital__inp__processing_duration.json b/model/attributes/browser/browser__web_vital__inp__processing_duration.json new file mode 100644 index 000000000..1b0dfb76f --- /dev/null +++ b/model/attributes/browser/browser__web_vital__inp__processing_duration.json @@ -0,0 +1,23 @@ +{ + "key": "browser.web_vital.inp.processing_duration", + "brief": "The time it took the event handlers to run, for the interaction INP was reported on, in milliseconds", + "type": "double", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "visibility": "public", + "examples": [140.0], + "additional_context": [ + "One of the three INP subparts, which add up to `browser.web_vital.inp.value`. Named after `processingDuration` in the web-vitals attribution build.", + "Measured from the interaction's `PerformanceEventTiming` entry as `processingEnd` minus `processingStart`.", + "Omitted when INP is reported without an interaction to attribute it to, like `browser.web_vital.inp.target`." + ], + "changelog": [ + { + "version": "next", + "prs": [712], + "description": "Added browser.web_vital.inp.processing_duration attribute" + } + ] +} diff --git a/model/attributes/browser/browser__web_vital__lcp__element_render_delay.json b/model/attributes/browser/browser__web_vital__lcp__element_render_delay.json new file mode 100644 index 000000000..5948b2059 --- /dev/null +++ b/model/attributes/browser/browser__web_vital__lcp__element_render_delay.json @@ -0,0 +1,23 @@ +{ + "key": "browser.web_vital.lcp.element_render_delay", + "brief": "The time between the LCP resource finishing loading and the LCP element being rendered, in milliseconds", + "type": "double", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "visibility": "public", + "examples": [410.0], + "additional_context": [ + "One of the four LCP subparts, which add up to `browser.web_vital.lcp.value`. Named after `elementRenderDelay` in the web-vitals attribution build.", + "Measured as the LCP value minus the LCP resource's `responseEnd`. When the LCP element is text, it covers all time after TTFB.", + "For a prerendered page, timestamps are measured from `activationStart`." + ], + "changelog": [ + { + "version": "next", + "prs": [712], + "description": "Added browser.web_vital.lcp.element_render_delay attribute" + } + ] +} diff --git a/model/attributes/browser/browser__web_vital__lcp__resource_load_delay.json b/model/attributes/browser/browser__web_vital__lcp__resource_load_delay.json new file mode 100644 index 000000000..4cf59c760 --- /dev/null +++ b/model/attributes/browser/browser__web_vital__lcp__resource_load_delay.json @@ -0,0 +1,23 @@ +{ + "key": "browser.web_vital.lcp.resource_load_delay", + "brief": "The time between the first byte of the document arriving and the browser starting to load the LCP resource, in milliseconds", + "type": "double", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "visibility": "public", + "examples": [320.5], + "additional_context": [ + "One of the four LCP subparts, which add up to `browser.web_vital.lcp.value`: TTFB (`browser.web_vital.ttfb.value`), resource load delay, resource load duration and element render delay. Named after `resourceLoadDelay` in the web-vitals attribution build.", + "Measured as the LCP resource's `requestStart` (or `startTime` when `requestStart` is not exposed) minus TTFB. It is 0 when the LCP element is text, since no resource is loaded.", + "For a prerendered page, timestamps are measured from `activationStart`." + ], + "changelog": [ + { + "version": "next", + "prs": [712], + "description": "Added browser.web_vital.lcp.resource_load_delay attribute" + } + ] +} diff --git a/model/attributes/browser/browser__web_vital__lcp__resource_load_duration.json b/model/attributes/browser/browser__web_vital__lcp__resource_load_duration.json new file mode 100644 index 000000000..f320cf1e6 --- /dev/null +++ b/model/attributes/browser/browser__web_vital__lcp__resource_load_duration.json @@ -0,0 +1,23 @@ +{ + "key": "browser.web_vital.lcp.resource_load_duration", + "brief": "The time it took to load the LCP resource, in milliseconds", + "type": "double", + "apply_scrubbing": { + "key": "manual" + }, + "is_in_otel": false, + "visibility": "public", + "examples": [780.2], + "additional_context": [ + "One of the four LCP subparts, which add up to `browser.web_vital.lcp.value`. Named after `resourceLoadDuration` in the web-vitals attribution build.", + "Measured as the LCP resource's `responseEnd` minus its `requestStart` (or `startTime` when `requestStart` is not exposed). It is 0 when the LCP element is text, since no resource is loaded.", + "For a prerendered page, timestamps are measured from `activationStart`." + ], + "changelog": [ + { + "version": "next", + "prs": [712], + "description": "Added browser.web_vital.lcp.resource_load_duration attribute" + } + ] +} diff --git a/python/src/sentry_conventions/attributes.py b/python/src/sentry_conventions/attributes.py index bc1cf32ce..c8205e21c 100644 --- a/python/src/sentry_conventions/attributes.py +++ b/python/src/sentry_conventions/attributes.py @@ -2590,6 +2590,19 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: 477.1926 """ + # Path: model/attributes/browser/browser__web_vital__inp__input_delay.json + BROWSER_WEB_VITAL_INP_INPUT_DELAY: Literal["browser.web_vital.inp.input_delay"] = ( + "browser.web_vital.inp.input_delay" + ) + """The time between the user interacting with the page and the browser starting to run the event handlers, for the interaction INP was reported on, in milliseconds + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Example: 120 + """ + # Path: model/attributes/browser/browser__web_vital__inp__interaction_type.json BROWSER_WEB_VITAL_INP_INTERACTION_TYPE: Literal[ "browser.web_vital.inp.interaction_type" @@ -2606,6 +2619,32 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "press" """ + # Path: model/attributes/browser/browser__web_vital__inp__presentation_delay.json + BROWSER_WEB_VITAL_INP_PRESENTATION_DELAY: Literal[ + "browser.web_vital.inp.presentation_delay" + ] = "browser.web_vital.inp.presentation_delay" + """The time between the event handlers finishing and the browser presenting the next frame, for the interaction INP was reported on, in milliseconds + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Example: 100 + """ + + # Path: model/attributes/browser/browser__web_vital__inp__processing_duration.json + BROWSER_WEB_VITAL_INP_PROCESSING_DURATION: Literal[ + "browser.web_vital.inp.processing_duration" + ] = "browser.web_vital.inp.processing_duration" + """The time it took the event handlers to run, for the interaction INP was reported on, in milliseconds + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Example: 140 + """ + # Path: model/attributes/browser/browser__web_vital__inp__target.json BROWSER_WEB_VITAL_INP_TARGET: Literal["browser.web_vital.inp.target"] = ( "browser.web_vital.inp.target" @@ -2648,6 +2687,19 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "body > div#app > div#container > div" """ + # Path: model/attributes/browser/browser__web_vital__lcp__element_render_delay.json + BROWSER_WEB_VITAL_LCP_ELEMENT_RENDER_DELAY: Literal[ + "browser.web_vital.lcp.element_render_delay" + ] = "browser.web_vital.lcp.element_render_delay" + """The time between the LCP resource finishing loading and the LCP element being rendered, in milliseconds + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Example: 410 + """ + # 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" @@ -2704,6 +2756,32 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): Example: "pagehide" """ + # Path: model/attributes/browser/browser__web_vital__lcp__resource_load_delay.json + BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DELAY: Literal[ + "browser.web_vital.lcp.resource_load_delay" + ] = "browser.web_vital.lcp.resource_load_delay" + """The time between the first byte of the document arriving and the browser starting to load the LCP resource, in milliseconds + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Example: 320.5 + """ + + # Path: model/attributes/browser/browser__web_vital__lcp__resource_load_duration.json + BROWSER_WEB_VITAL_LCP_RESOURCE_LOAD_DURATION: Literal[ + "browser.web_vital.lcp.resource_load_duration" + ] = "browser.web_vital.lcp.resource_load_duration" + """The time it took to load the LCP resource, in milliseconds + + Type: float + Apply Scrubbing: manual + Defined in OTEL: No + Visibility: public + Example: 780.2 + """ + # 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" @@ -15260,6 +15338,28 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ChangelogEntry(version="0.5.0", prs=[235]), ], ), + "browser.web_vital.inp.input_delay": AttributeMetadata( + brief="The time between the user interacting with the page and the browser starting to run the event handlers, for the interaction INP was reported on, in milliseconds", + type=AttributeType.DOUBLE, + keys=("browser.web_vital.inp.input_delay",), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=120, + examples=[120], + changelog=[ + ChangelogEntry( + version="next", + prs=[712], + description="Added browser.web_vital.inp.input_delay attribute", + ), + ], + additional_context=[ + "One of the three INP subparts, which add up to `browser.web_vital.inp.value`: input delay, processing duration and presentation delay. Named after `inputDelay` in the web-vitals attribution build.", + "Measured from the interaction's `PerformanceEventTiming` entry as `processingStart` minus `startTime`.", + "Omitted when INP is reported without an interaction to attribute it to, like `browser.web_vital.inp.target`.", + ], + ), "browser.web_vital.inp.interaction_type": AttributeMetadata( brief="The kind of user interaction INP was reported on", type=AttributeType.STRING, @@ -15282,6 +15382,50 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "Omitted when INP is reported without an interaction to attribute it to, see `browser.web_vital.inp.target`. The op of such a span still falls into `ui.interaction.click` so that it stays within the interaction span family, which makes this attribute, not the op, the way to tell a real click from a value with no interaction.", ], ), + "browser.web_vital.inp.presentation_delay": AttributeMetadata( + brief="The time between the event handlers finishing and the browser presenting the next frame, for the interaction INP was reported on, in milliseconds", + type=AttributeType.DOUBLE, + keys=("browser.web_vital.inp.presentation_delay",), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=100, + examples=[100], + changelog=[ + ChangelogEntry( + version="next", + prs=[712], + description="Added browser.web_vital.inp.presentation_delay attribute", + ), + ], + additional_context=[ + "One of the three INP subparts, which add up to `browser.web_vital.inp.value`. Named after `presentationDelay` in the web-vitals attribution build.", + "Measured from the interaction's `PerformanceEventTiming` entry as `startTime` plus `duration` minus `processingEnd`.", + "Omitted when INP is reported without an interaction to attribute it to, like `browser.web_vital.inp.target`.", + ], + ), + "browser.web_vital.inp.processing_duration": AttributeMetadata( + brief="The time it took the event handlers to run, for the interaction INP was reported on, in milliseconds", + type=AttributeType.DOUBLE, + keys=("browser.web_vital.inp.processing_duration",), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=140, + examples=[140], + changelog=[ + ChangelogEntry( + version="next", + prs=[712], + description="Added browser.web_vital.inp.processing_duration attribute", + ), + ], + additional_context=[ + "One of the three INP subparts, which add up to `browser.web_vital.inp.value`. Named after `processingDuration` in the web-vitals attribution build.", + "Measured from the interaction's `PerformanceEventTiming` entry as `processingEnd` minus `processingStart`.", + "Omitted when INP is reported without an interaction to attribute it to, like `browser.web_vital.inp.target`.", + ], + ), "browser.web_vital.inp.target": AttributeMetadata( brief="The HTML element selector or component name of the element the user interacted with, for the interaction INP was reported on", type=AttributeType.STRING, @@ -15339,6 +15483,28 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ChangelogEntry(version="0.5.0", prs=[233]), ], ), + "browser.web_vital.lcp.element_render_delay": AttributeMetadata( + brief="The time between the LCP resource finishing loading and the LCP element being rendered, in milliseconds", + type=AttributeType.DOUBLE, + keys=("browser.web_vital.lcp.element_render_delay",), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=410, + examples=[410], + changelog=[ + ChangelogEntry( + version="next", + prs=[712], + description="Added browser.web_vital.lcp.element_render_delay attribute", + ), + ], + additional_context=[ + "One of the four LCP subparts, which add up to `browser.web_vital.lcp.value`. Named after `elementRenderDelay` in the web-vitals attribution build.", + "Measured as the LCP value minus the LCP resource's `responseEnd`. When the LCP element is text, it covers all time after TTFB.", + "For a prerendered page, timestamps are measured from `activationStart`.", + ], + ), "browser.web_vital.lcp.id": AttributeMetadata( brief="The id of the dom element responsible for the largest contentful paint", type=AttributeType.STRING, @@ -15411,6 +15577,50 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): ), ], ), + "browser.web_vital.lcp.resource_load_delay": AttributeMetadata( + brief="The time between the first byte of the document arriving and the browser starting to load the LCP resource, in milliseconds", + type=AttributeType.DOUBLE, + keys=("browser.web_vital.lcp.resource_load_delay",), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=320.5, + examples=[320.5], + changelog=[ + ChangelogEntry( + version="next", + prs=[712], + description="Added browser.web_vital.lcp.resource_load_delay attribute", + ), + ], + additional_context=[ + "One of the four LCP subparts, which add up to `browser.web_vital.lcp.value`: TTFB (`browser.web_vital.ttfb.value`), resource load delay, resource load duration and element render delay. Named after `resourceLoadDelay` in the web-vitals attribution build.", + "Measured as the LCP resource's `requestStart` (or `startTime` when `requestStart` is not exposed) minus TTFB. It is 0 when the LCP element is text, since no resource is loaded.", + "For a prerendered page, timestamps are measured from `activationStart`.", + ], + ), + "browser.web_vital.lcp.resource_load_duration": AttributeMetadata( + brief="The time it took to load the LCP resource, in milliseconds", + type=AttributeType.DOUBLE, + keys=("browser.web_vital.lcp.resource_load_duration",), + apply_scrubbing=ApplyScrubbingInfo(key=ApplyScrubbing.MANUAL), + is_in_otel=False, + visibility=Visibility.PUBLIC, + example=780.2, + examples=[780.2], + changelog=[ + ChangelogEntry( + version="next", + prs=[712], + description="Added browser.web_vital.lcp.resource_load_duration attribute", + ), + ], + additional_context=[ + "One of the four LCP subparts, which add up to `browser.web_vital.lcp.value`. Named after `resourceLoadDuration` in the web-vitals attribution build.", + "Measured as the LCP resource's `responseEnd` minus its `requestStart` (or `startTime` when `requestStart` is not exposed). It is 0 when the LCP element is text, since no resource is loaded.", + "For a prerendered page, timestamps are measured from `activationStart`.", + ], + ), "browser.web_vital.lcp.size": AttributeMetadata( brief="The size of the largest contentful paint element", type=AttributeType.INTEGER, @@ -29409,14 +29619,20 @@ class ATTRIBUTE_NAMES(metaclass=_AttributeNamesMeta): "browser.web_vital.cls.value": float, "browser.web_vital.fcp.value": float, "browser.web_vital.fp.value": float, + "browser.web_vital.inp.input_delay": float, "browser.web_vital.inp.interaction_type": str, + "browser.web_vital.inp.presentation_delay": float, + "browser.web_vital.inp.processing_duration": float, "browser.web_vital.inp.target": str, "browser.web_vital.inp.value": float, "browser.web_vital.lcp.element": str, + "browser.web_vital.lcp.element_render_delay": float, "browser.web_vital.lcp.id": str, "browser.web_vital.lcp.load_time": int, "browser.web_vital.lcp.render_time": int, "browser.web_vital.lcp.report_event": str, + "browser.web_vital.lcp.resource_load_delay": float, + "browser.web_vital.lcp.resource_load_duration": float, "browser.web_vital.lcp.size": int, "browser.web_vital.lcp.url": str, "browser.web_vital.lcp.value": float,