12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361 |
- import {t} from 'sentry/locale';
- import {TagCollection} from 'sentry/types';
- // Don't forget to update https://docs.sentry.io/product/sentry-basics/search/searchable-properties/ for any changes made here
- export enum FieldKind {
- TAG = 'tag',
- MEASUREMENT = 'measurement',
- BREAKDOWN = 'breakdown',
- FIELD = 'field',
- FUNCTION = 'function',
- EQUATION = 'equation',
- METRICS = 'metric',
- NUMERIC_METRICS = 'numeric_metric',
- }
- export enum FieldKey {
- AGE = 'age',
- ASSIGNED = 'assigned',
- ASSIGNED_OR_SUGGESTED = 'assigned_or_suggested',
- BOOKMARKS = 'bookmarks',
- CULPRIT = 'culprit',
- DEVICE_ARCH = 'device.arch',
- DEVICE_BATTERY_LEVEL = 'device.battery_level',
- DEVICE_BRAND = 'device.brand',
- DEVICE_CHARGING = 'device.charging',
- DEVICE_CLASS = 'device.class',
- DEVICE_FAMILY = 'device.family',
- DEVICE_LOCALE = 'device.locale',
- DEVICE_MODEL_ID = 'device.model_id',
- DEVICE_NAME = 'device.name',
- DEVICE_ONLINE = 'device.online',
- DEVICE_ORIENTATION = 'device.orientation',
- DEVICE_SCREEN_DENSITY = 'device.screen_density',
- DEVICE_SCREEN_DPI = 'device.screen_dpi',
- DEVICE_SCREEN_HEIGHT_PIXELS = 'device.screen_height_pixels',
- DEVICE_SCREEN_WIDTH_PIXELS = 'device.screen_width_pixels',
- DEVICE_SIMULATOR = 'device.simulator',
- DEVICE_UUID = 'device.uuid',
- DIST = 'dist',
- ENVIRONMENT = 'environment',
- ERROR_HANDLED = 'error.handled',
- ERROR_MECHANISM = 'error.mechanism',
- ERROR_TYPE = 'error.type',
- ERROR_UNHANDLED = 'error.unhandled',
- ERROR_VALUE = 'error.value',
- ERROR_RECEIVED = 'error.received',
- EVENT_TIMESTAMP = 'event.timestamp',
- EVENT_TYPE = 'event.type',
- FIRST_RELEASE = 'firstRelease',
- FIRST_SEEN = 'firstSeen',
- GEO_CITY = 'geo.city',
- GEO_COUNTRY_CODE = 'geo.country_code',
- GEO_REGION = 'geo.region',
- HAS = 'has',
- HTTP_METHOD = 'http.method',
- HTTP_REFERER = 'http.referer',
- HTTP_STATUS_CODE = 'http.status_code',
- HTTP_URL = 'http.url',
- ID = 'id',
- IS = 'is',
- ISSUE = 'issue',
- ISSUE_CATEGORY = 'issue.category',
- ISSUE_TYPE = 'issue.type',
- LAST_SEEN = 'lastSeen',
- LEVEL = 'level',
- LOCATION = 'location',
- MESSAGE = 'message',
- OS = 'os',
- OS_BUILD = 'os.build',
- OS_KERNEL_VERSION = 'os.kernel_version',
- PLATFORM = 'platform',
- PLATFORM_NAME = 'platform.name',
- PROFILE_ID = 'profile.id',
- PROJECT = 'project',
- RELEASE = 'release',
- RELEASE_BUILD = 'release.build',
- RELEASE_PACKAGE = 'release.package',
- RELEASE_STAGE = 'release.stage',
- RELEASE_VERSION = 'release.version',
- REPLAY_ID = 'replayId',
- SDK_NAME = 'sdk.name',
- SDK_VERSION = 'sdk.version',
- STACK_ABS_PATH = 'stack.abs_path',
- STACK_COLNO = 'stack.colno',
- STACK_FILENAME = 'stack.filename',
- STACK_FUNCTION = 'stack.function',
- STACK_IN_APP = 'stack.in_app',
- STACK_LINENO = 'stack.lineno',
- STACK_MODULE = 'stack.module',
- STACK_PACKAGE = 'stack.package',
- STACK_RESOURCE = 'stack.resource',
- STACK_STACK_LEVEL = 'stack.stack_level',
- TIMESTAMP = 'timestamp',
- TIMESTAMP_TO_DAY = 'timestamp.to_day',
- TIMESTAMP_TO_HOUR = 'timestamp.to_hour',
- TIMES_SEEN = 'timesSeen',
- TITLE = 'title',
- TOTAL_COUNT = 'total.count',
- TRACE = 'trace',
- TRACE_PARENT_SPAN = 'trace.parent_span',
- TRACE_SPAN = 'trace.span',
- TRANSACTION = 'transaction',
- TRANSACTION_DURATION = 'transaction.duration',
- TRANSACTION_OP = 'transaction.op',
- TRANSACTION_STATUS = 'transaction.status',
- UNREAL_CRASH_TYPE = 'unreal.crash_type',
- USER = 'user',
- USER_DISPLAY = 'user.display',
- USER_EMAIL = 'user.email',
- USER_ID = 'user.id',
- USER_IP = 'user.ip',
- USER_USERNAME = 'user.username',
- APP_IN_FOREGROUND = 'app.in_foreground',
- }
- export enum FieldValueType {
- BOOLEAN = 'boolean',
- DATE = 'date',
- DURATION = 'duration',
- INTEGER = 'integer',
- NUMBER = 'number',
- PERCENTAGE = 'percentage',
- STRING = 'string',
- NEVER = 'never',
- SIZE = 'size',
- }
- export enum WebVital {
- FP = 'measurements.fp',
- FCP = 'measurements.fcp',
- LCP = 'measurements.lcp',
- FID = 'measurements.fid',
- CLS = 'measurements.cls',
- TTFB = 'measurements.ttfb',
- RequestTime = 'measurements.ttfb.requesttime',
- }
- export enum MobileVital {
- AppStartCold = 'measurements.app_start_cold',
- AppStartWarm = 'measurements.app_start_warm',
- FramesTotal = 'measurements.frames_total',
- FramesSlow = 'measurements.frames_slow',
- FramesFrozen = 'measurements.frames_frozen',
- FramesSlowRate = 'measurements.frames_slow_rate',
- FramesFrozenRate = 'measurements.frames_frozen_rate',
- StallCount = 'measurements.stall_count',
- StallTotalTime = 'measurements.stall_total_time',
- StallLongestTime = 'measurements.stall_longest_time',
- StallPercentage = 'measurements.stall_percentage',
- TimeToFullDisplay = 'measurements.time_to_full_display',
- TimeToInitialDisplay = 'measurements.time_to_initial_display',
- }
- export enum SpanOpBreakdown {
- SpansBrowser = 'spans.browser',
- SpansDb = 'spans.db',
- SpansHttp = 'spans.http',
- SpansResource = 'spans.resource',
- SpansUi = 'spans.ui',
- }
- export enum AggregationKey {
- Count = 'count',
- CountUnique = 'count_unique',
- CountMiserable = 'count_miserable',
- CountIf = 'count_if',
- CountWebVitals = 'count_web_vitals',
- Eps = 'eps',
- Epm = 'epm',
- FailureCount = 'failure_count',
- Min = 'min',
- Max = 'max',
- Sum = 'sum',
- Any = 'any',
- P50 = 'p50',
- P75 = 'p75',
- P95 = 'p95',
- P99 = 'p99',
- P100 = 'p100',
- Percentile = 'percentile',
- Avg = 'avg',
- Apdex = 'apdex',
- UserMisery = 'user_misery',
- FailureRate = 'failure_rate',
- LastSeen = 'last_seen',
- }
- export interface FieldDefinition {
- kind: FieldKind;
- valueType: FieldValueType | null;
- /**
- * Is this field being deprecated
- */
- deprecated?: boolean;
- /**
- * Description of the field
- */
- desc?: string;
- /**
- * Feature flag that indicates gating of the field from use
- */
- featureFlag?: string;
- /**
- * Additional keywords used when filtering via autocomplete
- */
- keywords?: string[];
- }
- export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
- [AggregationKey.Count]: {
- desc: t('count of events'),
- kind: FieldKind.FUNCTION,
- valueType: FieldValueType.NUMBER,
- },
- [AggregationKey.CountUnique]: {
- desc: t('Unique count of the field values'),
- kind: FieldKind.FUNCTION,
- valueType: FieldValueType.INTEGER,
- },
- [AggregationKey.CountMiserable]: {
- desc: t('Count of unique miserable users'),
- kind: FieldKind.FUNCTION,
- valueType: FieldValueType.NUMBER,
- },
- [AggregationKey.CountIf]: {
- desc: t('Count of events matching the parameter conditions'),
- kind: FieldKind.FUNCTION,
- valueType: FieldValueType.NUMBER,
- },
- [AggregationKey.CountWebVitals]: {
- desc: t('Count of web vitals with a specific status'),
- kind: FieldKind.FUNCTION,
- valueType: FieldValueType.NUMBER,
- },
- [AggregationKey.Eps]: {
- desc: t('Events per second'),
- kind: FieldKind.FUNCTION,
- valueType: FieldValueType.NUMBER,
- },
- [AggregationKey.Epm]: {
- desc: t('Events per minute'),
- kind: FieldKind.FUNCTION,
- valueType: FieldValueType.NUMBER,
- },
- [AggregationKey.FailureRate]: {
- desc: t('Failed event percentage based on transaction.status'),
- kind: FieldKind.FUNCTION,
- valueType: FieldValueType.PERCENTAGE,
- },
- [AggregationKey.FailureCount]: {
- desc: t('Failed event count based on transaction.status'),
- kind: FieldKind.FUNCTION,
- valueType: FieldValueType.NUMBER,
- },
- [AggregationKey.Min]: {
- desc: t('Returns the minimum value of the selected field'),
- kind: FieldKind.FUNCTION,
- valueType: null,
- },
- [AggregationKey.Max]: {
- desc: t('Returns maximum value of the selected field'),
- kind: FieldKind.FUNCTION,
- valueType: null,
- },
- [AggregationKey.Sum]: {
- desc: t('Returns the total value for the selected field'),
- kind: FieldKind.FUNCTION,
- valueType: null,
- },
- [AggregationKey.Any]: {
- desc: t('Not Recommended, a random field value'),
- kind: FieldKind.FUNCTION,
- valueType: null,
- },
- [AggregationKey.P50]: {
- desc: t('Returns the 50th percentile of the selected field'),
- kind: FieldKind.FUNCTION,
- valueType: null,
- },
- [AggregationKey.P75]: {
- desc: t('Returns the 75th percentile of the selected field'),
- kind: FieldKind.FUNCTION,
- valueType: null,
- },
- [AggregationKey.P95]: {
- desc: t('Returns the 95th percentile of the selected field'),
- kind: FieldKind.FUNCTION,
- valueType: null,
- },
- [AggregationKey.P99]: {
- desc: t('Returns the 99th percentile of the selected field'),
- kind: FieldKind.FUNCTION,
- valueType: null,
- },
- [AggregationKey.P100]: {
- desc: t('Returns the 100th percentile of the selected field'),
- kind: FieldKind.FUNCTION,
- valueType: null,
- },
- [AggregationKey.Percentile]: {
- desc: t('Returns the percentile of the selected field'),
- kind: FieldKind.FUNCTION,
- valueType: null,
- },
- [AggregationKey.Avg]: {
- desc: t('Returns averages for a selected field'),
- kind: FieldKind.FUNCTION,
- valueType: null,
- },
- [AggregationKey.Apdex]: {
- desc: t('Performance score based on a duration threshold'),
- kind: FieldKind.FUNCTION,
- valueType: FieldValueType.NUMBER,
- },
- [AggregationKey.UserMisery]: {
- desc: t(
- 'User-weighted performance metric that counts the number of unique users who were frustrated'
- ),
- kind: FieldKind.FUNCTION,
- valueType: null,
- },
- [AggregationKey.LastSeen]: {
- desc: t('Issues last seen at a date and time'),
- kind: FieldKind.FUNCTION,
- valueType: FieldValueType.DATE,
- },
- };
- export const MEASUREMENT_FIELDS: Record<WebVital | MobileVital, FieldDefinition> = {
- [WebVital.FP]: {
- desc: t('Web Vital First Paint'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- [WebVital.FCP]: {
- desc: t('Web Vital First Contentful Paint'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- [WebVital.LCP]: {
- desc: t('Web Vital Largest Contentful Paint'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- [WebVital.FID]: {
- desc: t('Web Vital First Input Delay'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- [WebVital.CLS]: {
- desc: t('Web Vital Cumulative Layout Shift'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.NUMBER,
- },
- [WebVital.TTFB]: {
- desc: t('Web Vital Time To First Byte'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- [WebVital.RequestTime]: {
- desc: t('Time between start of request to start of response'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- [MobileVital.AppStartCold]: {
- desc: t('First launch (not in memory and no process exists)'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- [MobileVital.AppStartWarm]: {
- desc: t('Already launched (partial memory and process may exist)'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- [MobileVital.FramesTotal]: {
- desc: t('Total number of frames'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.INTEGER,
- },
- [MobileVital.FramesSlow]: {
- desc: t('Number of slow frames'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.INTEGER,
- },
- [MobileVital.FramesFrozen]: {
- desc: t('Number of frozen frames'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.INTEGER,
- },
- [MobileVital.FramesSlowRate]: {
- desc: t('Number of slow frames out of the total'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.PERCENTAGE,
- },
- [MobileVital.FramesFrozenRate]: {
- desc: t('Number of frozen frames out of the total'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.PERCENTAGE,
- },
- [MobileVital.StallCount]: {
- desc: t('Count of slow Javascript event loops (React Native)'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.INTEGER,
- },
- [MobileVital.StallTotalTime]: {
- desc: t('Total stall duration (React Native)'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.PERCENTAGE,
- },
- [MobileVital.StallLongestTime]: {
- desc: t('Duration of slowest Javascript event loop (React Native)'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.INTEGER,
- },
- [MobileVital.StallPercentage]: {
- desc: t('Total stall duration out of the total transaction duration (React Native)'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.PERCENTAGE,
- },
- [MobileVital.TimeToFullDisplay]: {
- desc: t(
- 'The time between application launch and complete display of all resources and views'
- ),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- [MobileVital.TimeToInitialDisplay]: {
- desc: t('The time it takes for an application to produce its first frame'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- };
- export const SPAN_OP_FIELDS: Record<SpanOpBreakdown, FieldDefinition> = {
- [SpanOpBreakdown.SpansBrowser]: {
- desc: t('Cumulative time based on the browser operation'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- [SpanOpBreakdown.SpansDb]: {
- desc: t('Cumulative time based on the database operation'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- [SpanOpBreakdown.SpansHttp]: {
- desc: t('Cumulative time based on the http operation'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- [SpanOpBreakdown.SpansResource]: {
- desc: t('Cumulative time based on the resource operation'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- [SpanOpBreakdown.SpansUi]: {
- desc: t('Cumulative time based on the ui operation'),
- kind: FieldKind.METRICS,
- valueType: FieldValueType.DURATION,
- },
- };
- type AllEventFieldKeys =
- | keyof typeof AGGREGATION_FIELDS
- | keyof typeof MEASUREMENT_FIELDS
- | keyof typeof SPAN_OP_FIELDS
- | FieldKey;
- const EVENT_FIELD_DEFINITIONS: Record<AllEventFieldKeys, FieldDefinition> = {
- ...AGGREGATION_FIELDS,
- ...MEASUREMENT_FIELDS,
- ...SPAN_OP_FIELDS,
- [FieldKey.AGE]: {
- desc: t('The age of the issue in relative time'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.DURATION,
- },
- [FieldKey.ASSIGNED]: {
- desc: t('Assignee of the issue as a user ID'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.ASSIGNED_OR_SUGGESTED]: {
- desc: t('Assignee or suggestee of the issue as a user ID'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.CULPRIT]: {
- deprecated: true,
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.BOOKMARKS]: {
- desc: t('The issues bookmarked by a user ID'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DEVICE_ARCH]: {
- desc: t('CPU architecture'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DEVICE_BATTERY_LEVEL]: {
- desc: t('Indicates remaining battery life'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DEVICE_BRAND]: {
- desc: t('Brand of device'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DEVICE_CHARGING]: {
- desc: t('Charging at the time of the event'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.BOOLEAN,
- },
- [FieldKey.DEVICE_CLASS]: {
- desc: t('The estimated performance level of the device, graded low, medium, or high'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DEVICE_FAMILY]: {
- desc: t('Model name across generations'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DEVICE_LOCALE]: {
- desc: t("The locale of the user's device"),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DEVICE_MODEL_ID]: {
- desc: t('Internal hardware revision'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DEVICE_NAME]: {
- desc: t('Descriptor details'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DEVICE_ONLINE]: {
- desc: t('Online at the time of the event'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.BOOLEAN,
- },
- [FieldKey.DEVICE_ORIENTATION]: {
- desc: t('Portrait or landscape view '),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DEVICE_SCREEN_DENSITY]: {
- desc: t('Pixel density of the device screen'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DEVICE_SCREEN_DPI]: {
- desc: t('Dots per inch of the device screen'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DEVICE_SCREEN_HEIGHT_PIXELS]: {
- desc: t('Height of the device screen in pixels'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DEVICE_SCREEN_WIDTH_PIXELS]: {
- desc: t('Width of the device screen in pixels'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DEVICE_SIMULATOR]: {
- desc: t('Indicates if it occured on a simulator'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.BOOLEAN,
- },
- [FieldKey.DEVICE_UUID]: {
- desc: t('Unique device identifier'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.DIST]: {
- desc: t(
- 'Distinguishes between build or deployment variants of the same release of an application.'
- ),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.ENVIRONMENT]: {
- desc: t('The environment the event was seen in'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.ERROR_HANDLED]: {
- desc: t('Determines handling status of the error'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.BOOLEAN,
- },
- [FieldKey.ERROR_MECHANISM]: {
- desc: t('The mechanism that created the error'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.ERROR_TYPE]: {
- desc: t('The type of exception'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.ERROR_UNHANDLED]: {
- desc: t('Determines unhandling status of the error'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.BOOLEAN,
- },
- [FieldKey.ERROR_VALUE]: {
- desc: t('Original value that exhibits error'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.ERROR_RECEIVED]: {
- desc: t('The datetime that the error was received'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.DATE,
- },
- [FieldKey.EVENT_TIMESTAMP]: {
- desc: t('Date and time of the event'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.DATE,
- },
- [FieldKey.EVENT_TYPE]: {
- desc: t('Type of event (Errors, transactions, csp and default)'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.GEO_CITY]: {
- desc: t('Full name of the city'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.GEO_COUNTRY_CODE]: {
- desc: t('Country code based on ISO 3166-1'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.GEO_REGION]: {
- desc: t('Full name of the country'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.HTTP_METHOD]: {
- desc: t('Method of the request that created the event'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.HTTP_REFERER]: {
- desc: t('The web page the resource was requested from'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.HTTP_STATUS_CODE]: {
- desc: t('Type of response (i.e., 200, 404)'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.HTTP_URL]: {
- desc: t('Full URL of the request without parameters'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.ID]: {
- desc: t('The event identification number'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.IS]: {
- desc: t('The properties of an issue (i.e. Resolved, unresolved)'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- keywords: ['ignored', 'assigned', 'for_review', 'unassigned', 'linked', 'unlinked'],
- },
- [FieldKey.ISSUE]: {
- desc: t('The issue identification short code'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.ISSUE_CATEGORY]: {
- desc: t('Category of issue (error or performance)'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- keywords: ['error', 'performance'],
- },
- [FieldKey.ISSUE_TYPE]: {
- desc: t('Type of problem the issue represents (i.e. N+1 Query)'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.LAST_SEEN]: {
- desc: t('Issues last seen at a given time'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.DATE,
- },
- [FieldKey.LEVEL]: {
- kind: FieldKind.FIELD,
- desc: t('Severity of the event (i.e., fatal, error, warning)'),
- valueType: FieldValueType.STRING,
- },
- [FieldKey.LOCATION]: {
- desc: t('Location of error'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.MESSAGE]: {
- desc: t('Error message or transaction name'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.OS]: {
- desc: t('Build and kernel version'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.OS_BUILD]: {
- desc: t('Name of the build'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.OS_KERNEL_VERSION]: {
- desc: t('Version number'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.PLATFORM]: {
- desc: t('Name of the platform'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.PLATFORM_NAME]: {
- desc: t('Name of the platform'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.PROFILE_ID]: {
- desc: t('The ID of an associated profile'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.PROJECT]: {
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.FIRST_RELEASE]: {
- desc: t('Issues first seen in a given release'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.FIRST_SEEN]: {
- desc: t('Issues first seen at a given time'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.DATE,
- },
- [FieldKey.HAS]: {
- desc: t('Determines if a tag or field exists in an event'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.RELEASE]: {
- desc: t('The version of your code deployed to an environment'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.RELEASE_BUILD]: {
- desc: t('The full version number that identifies the iteration'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.RELEASE_PACKAGE]: {
- desc: t('The identifier unique to the project or application'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.RELEASE_STAGE]: {
- desc: t('Stage of usage (i.e., adopted, replaced, low)'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.RELEASE_VERSION]: {
- desc: t('An abbreviated version number of the build'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.REPLAY_ID]: {
- desc: t('The ID of an associated Session Replay'),
- kind: FieldKind.TAG,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.SDK_NAME]: {
- desc: t('Name of the platform that sent the event'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.SDK_VERSION]: {
- desc: t('Version of the platform that sent the event'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.STACK_ABS_PATH]: {
- desc: t('Absolute path to the source file'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.STACK_COLNO]: {
- desc: t('Column number of the call starting at 1'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.NUMBER,
- },
- [FieldKey.STACK_FILENAME]: {
- desc: t('Relative path to the source file from the root directory'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.STACK_FUNCTION]: {
- desc: t('Name of function being called'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.STACK_IN_APP]: {
- desc: t('Indicates if frame is related to relevant code in stack trace'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.BOOLEAN,
- },
- [FieldKey.STACK_LINENO]: {
- desc: t('Line number of the call starting at 1'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.NUMBER,
- },
- [FieldKey.STACK_MODULE]: {
- desc: t('Platform specific module path'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.STACK_PACKAGE]: {
- desc: t('The package the frame is from'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.STACK_RESOURCE]: {
- desc: t('The package the frame is from'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.STACK_STACK_LEVEL]: {
- desc: t('Number of frames per stacktrace'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.NUMBER,
- },
- [FieldKey.TIMES_SEEN]: {
- desc: t('Total number of events'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.NUMBER,
- keywords: ['count'],
- },
- [FieldKey.TIMESTAMP]: {
- desc: t('The time an event finishes'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.DATE,
- },
- [FieldKey.TIMESTAMP_TO_HOUR]: {
- desc: t('Rounded down to the nearest hour'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.DATE,
- },
- [FieldKey.TIMESTAMP_TO_DAY]: {
- desc: t('Rounded down to the nearest day'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.DATE,
- },
- [FieldKey.TITLE]: {
- desc: t('Error or transaction name identifier'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.TRACE]: {
- desc: t('The trace identification number'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.TOTAL_COUNT]: {
- desc: t('The total number of events for the current query'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.NUMBER,
- },
- [FieldKey.TRACE_PARENT_SPAN]: {
- desc: t('Span identification number of the parent to the event'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.TRACE_SPAN]: {
- desc: t('Span identification number of the root span'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.TRANSACTION]: {
- desc: t('Error or transaction name identifier'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.TRANSACTION_OP]: {
- desc: t('Short code identifying the type of operation the span is measuring'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.TRANSACTION_DURATION]: {
- desc: t('Duration, in milliseconds, of the transaction'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.DURATION,
- },
- [FieldKey.TRANSACTION_STATUS]: {
- desc: t('Describes the status of the span/transaction'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.UNREAL_CRASH_TYPE]: {
- desc: t('Crash type of an Unreal event'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.USER]: {
- desc: t('User identification value'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.USER_DISPLAY]: {
- desc: t('The first user field available of email, username, ID, and IP'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.USER_EMAIL]: {
- desc: t('Email address of the user'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.USER_ID]: {
- desc: t('Application specific internal identifier of the user'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.USER_IP]: {
- desc: t('IP Address of the user'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.USER_USERNAME]: {
- desc: t('Username of the user'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [FieldKey.APP_IN_FOREGROUND]: {
- desc: t('Indicates if the app is in the foreground or background'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.BOOLEAN,
- },
- };
- export const ISSUE_FIELDS = [
- FieldKey.AGE,
- FieldKey.ASSIGNED,
- FieldKey.ASSIGNED_OR_SUGGESTED,
- FieldKey.BOOKMARKS,
- FieldKey.DEVICE_ARCH,
- FieldKey.DEVICE_BRAND,
- FieldKey.DEVICE_CLASS,
- FieldKey.DEVICE_FAMILY,
- FieldKey.DEVICE_LOCALE,
- FieldKey.DEVICE_LOCALE,
- FieldKey.DEVICE_MODEL_ID,
- FieldKey.DEVICE_ORIENTATION,
- FieldKey.DEVICE_UUID,
- FieldKey.DIST,
- FieldKey.ERROR_HANDLED,
- FieldKey.ERROR_MECHANISM,
- FieldKey.ERROR_TYPE,
- FieldKey.ERROR_UNHANDLED,
- FieldKey.ERROR_VALUE,
- FieldKey.EVENT_TIMESTAMP,
- FieldKey.EVENT_TYPE,
- FieldKey.FIRST_RELEASE,
- FieldKey.FIRST_SEEN,
- FieldKey.GEO_CITY,
- FieldKey.GEO_COUNTRY_CODE,
- FieldKey.GEO_REGION,
- FieldKey.HAS,
- FieldKey.HTTP_METHOD,
- FieldKey.HTTP_REFERER,
- FieldKey.HTTP_STATUS_CODE,
- FieldKey.HTTP_URL,
- FieldKey.ID,
- FieldKey.IS,
- FieldKey.ISSUE,
- FieldKey.ISSUE_CATEGORY,
- FieldKey.ISSUE_TYPE,
- FieldKey.LAST_SEEN,
- FieldKey.LOCATION,
- FieldKey.MESSAGE,
- FieldKey.OS_BUILD,
- FieldKey.OS_KERNEL_VERSION,
- FieldKey.PLATFORM,
- FieldKey.RELEASE,
- FieldKey.RELEASE_BUILD,
- FieldKey.RELEASE_PACKAGE,
- FieldKey.RELEASE_STAGE,
- FieldKey.RELEASE_VERSION,
- FieldKey.SDK_NAME,
- FieldKey.SDK_VERSION,
- FieldKey.STACK_ABS_PATH,
- FieldKey.STACK_FILENAME,
- FieldKey.STACK_FUNCTION,
- FieldKey.STACK_MODULE,
- FieldKey.STACK_PACKAGE,
- FieldKey.STACK_STACK_LEVEL,
- FieldKey.TIMESTAMP,
- FieldKey.TIMES_SEEN,
- FieldKey.TITLE,
- FieldKey.TRACE,
- FieldKey.TRANSACTION,
- FieldKey.UNREAL_CRASH_TYPE,
- FieldKey.USER_EMAIL,
- FieldKey.USER_ID,
- FieldKey.USER_IP,
- FieldKey.USER_USERNAME,
- FieldKey.APP_IN_FOREGROUND,
- ];
- /**
- * Refer to src/sentry/snuba/events.py, search for Columns
- */
- export const DISCOVER_FIELDS = [
- FieldKey.ID,
- // issue.id and project.id are omitted on purpose.
- // Customers should use `issue` and `project` instead.
- FieldKey.TIMESTAMP,
- // time is omitted on purpose.
- // Customers should use `timestamp` or `timestamp.to_hour`.
- FieldKey.TIMESTAMP_TO_HOUR,
- FieldKey.TIMESTAMP_TO_DAY,
- FieldKey.CULPRIT,
- FieldKey.LOCATION,
- FieldKey.MESSAGE,
- FieldKey.PLATFORM_NAME,
- FieldKey.ENVIRONMENT,
- FieldKey.RELEASE,
- FieldKey.DIST,
- FieldKey.TITLE,
- FieldKey.EVENT_TYPE,
- // tags.key and tags.value are omitted on purpose as well.
- FieldKey.TRANSACTION,
- FieldKey.UNREAL_CRASH_TYPE,
- FieldKey.USER,
- FieldKey.USER_ID,
- FieldKey.USER_EMAIL,
- FieldKey.USER_USERNAME,
- FieldKey.USER_IP,
- FieldKey.SDK_NAME,
- FieldKey.SDK_VERSION,
- FieldKey.HTTP_METHOD,
- FieldKey.HTTP_REFERER,
- FieldKey.HTTP_STATUS_CODE,
- FieldKey.HTTP_URL,
- FieldKey.OS_BUILD,
- FieldKey.OS_KERNEL_VERSION,
- FieldKey.DEVICE_NAME,
- FieldKey.DEVICE_BRAND,
- FieldKey.DEVICE_LOCALE,
- FieldKey.DEVICE_UUID,
- FieldKey.DEVICE_ARCH,
- FieldKey.DEVICE_FAMILY,
- FieldKey.DEVICE_BATTERY_LEVEL,
- FieldKey.DEVICE_ORIENTATION,
- FieldKey.DEVICE_SCREEN_DENSITY,
- FieldKey.DEVICE_SCREEN_DPI,
- FieldKey.DEVICE_SCREEN_HEIGHT_PIXELS,
- FieldKey.DEVICE_SCREEN_WIDTH_PIXELS,
- FieldKey.DEVICE_SIMULATOR,
- FieldKey.DEVICE_ONLINE,
- FieldKey.DEVICE_CHARGING,
- FieldKey.DEVICE_CLASS,
- FieldKey.GEO_COUNTRY_CODE,
- FieldKey.GEO_REGION,
- FieldKey.GEO_CITY,
- FieldKey.ERROR_TYPE,
- FieldKey.ERROR_VALUE,
- FieldKey.ERROR_MECHANISM,
- FieldKey.ERROR_HANDLED,
- FieldKey.ERROR_UNHANDLED,
- FieldKey.ERROR_RECEIVED,
- FieldKey.LEVEL,
- FieldKey.STACK_ABS_PATH,
- FieldKey.STACK_FILENAME,
- FieldKey.STACK_PACKAGE,
- FieldKey.STACK_MODULE,
- FieldKey.STACK_FUNCTION,
- FieldKey.STACK_IN_APP,
- FieldKey.STACK_COLNO,
- FieldKey.STACK_LINENO,
- FieldKey.STACK_STACK_LEVEL,
- // contexts.key and contexts.value omitted on purpose.
- // App context fields
- FieldKey.APP_IN_FOREGROUND,
- // Transaction event fields.
- FieldKey.TRANSACTION_DURATION,
- FieldKey.TRANSACTION_OP,
- FieldKey.TRANSACTION_STATUS,
- FieldKey.TRACE,
- FieldKey.TRACE_SPAN,
- FieldKey.TRACE_PARENT_SPAN,
- FieldKey.PROFILE_ID,
- // Meta field that returns total count, usually for equations
- FieldKey.TOTAL_COUNT,
- // Field alises defined in src/sentry/api/event_search.py
- FieldKey.PROJECT,
- FieldKey.ISSUE,
- FieldKey.USER_DISPLAY,
- // Span Op fields
- SpanOpBreakdown.SpansBrowser,
- SpanOpBreakdown.SpansDb,
- SpanOpBreakdown.SpansHttp,
- SpanOpBreakdown.SpansResource,
- SpanOpBreakdown.SpansUi,
- ];
- enum ReplayFieldKey {
- ACTIVITY = 'activity',
- BROWSER_NAME = 'browser.name',
- BROWSER_VERSION = 'browser.version',
- COUNT_ERRORS = 'count_errors',
- COUNT_SEGMENTS = 'count_segments',
- COUNT_URLS = 'count_urls',
- DURATION = 'duration',
- ERROR_IDS = 'error_ids',
- OS_NAME = 'os.name',
- OS_VERSION = 'os.version',
- URLS = 'urls',
- }
- enum ReplayClickFieldKey {
- CLICK_ALT = 'replay_click.alt',
- CLICK_CLASS = 'replay_click.class',
- CLICK_ID = 'replay_click.id',
- CLICK_LABEL = 'replay_click.label',
- CLICK_ROLE = 'replay_click.role',
- CLICK_TAG = 'replay_click.tag',
- CLICK_TESTID = 'replay_click.testid',
- CLICK_TEXT_CONTENT = 'replay_click.textContent',
- CLICK_TITLE = 'replay_click.title',
- }
- /**
- * Some fields inside the ReplayRecord type are intentionally omitted:
- * `environment` -> Not backend support, omitted because we have a dropdown for it
- * `finishedAt` -> No backend support, omitted because we StartDate dropdown and duration field support
- * `startedAt` -> No backend support, Omitted because we have StartDate dropdown
- * `longestTransaction` -> value is always zero
- * `title` -> value is always the empty string
- */
- export const REPLAY_FIELDS = [
- ReplayFieldKey.ACTIVITY,
- ReplayFieldKey.BROWSER_NAME,
- ReplayFieldKey.BROWSER_VERSION,
- ReplayFieldKey.COUNT_ERRORS,
- ReplayFieldKey.COUNT_SEGMENTS,
- ReplayFieldKey.COUNT_URLS,
- FieldKey.DEVICE_BRAND,
- FieldKey.DEVICE_FAMILY,
- FieldKey.DEVICE_MODEL_ID,
- FieldKey.DEVICE_NAME,
- FieldKey.DIST,
- ReplayFieldKey.DURATION,
- ReplayFieldKey.ERROR_IDS,
- FieldKey.ID,
- ReplayFieldKey.OS_NAME,
- ReplayFieldKey.OS_VERSION,
- FieldKey.PLATFORM,
- FieldKey.RELEASE,
- FieldKey.SDK_NAME,
- FieldKey.SDK_VERSION,
- FieldKey.TRACE,
- ReplayFieldKey.URLS,
- FieldKey.USER_EMAIL,
- FieldKey.USER_ID,
- FieldKey.USER_IP,
- FieldKey.USER_USERNAME,
- ];
- const REPLAY_FIELD_DEFINITIONS: Record<ReplayFieldKey, FieldDefinition> = {
- [ReplayFieldKey.ACTIVITY]: {
- desc: t('Amount of activity in the replay from 0 to 10'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.INTEGER,
- },
- [ReplayFieldKey.BROWSER_NAME]: {
- desc: t('Name of the browser'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [ReplayFieldKey.BROWSER_VERSION]: {
- desc: t('Version number of the browser'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [ReplayFieldKey.COUNT_ERRORS]: {
- desc: t('Number of errors in the replay'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.INTEGER,
- },
- [ReplayFieldKey.COUNT_SEGMENTS]: {
- desc: t('Number of segments in the replay'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.INTEGER,
- },
- [ReplayFieldKey.COUNT_URLS]: {
- desc: t('Number of urls visited within the replay'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.INTEGER,
- },
- [ReplayFieldKey.DURATION]: {
- desc: t('Duration of the replay, in seconds'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.DURATION,
- },
- [ReplayFieldKey.ERROR_IDS]: {
- desc: t('Error instance'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [ReplayFieldKey.OS_NAME]: {
- desc: t('Name of the Operating System'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [ReplayFieldKey.OS_VERSION]: {
- desc: t('Version number of the Operating System'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [ReplayFieldKey.URLS]: {
- desc: t('List of urls that were visited within the Replay'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- };
- export const REPLAY_CLICK_FIELDS = [
- ReplayClickFieldKey.CLICK_ALT,
- ReplayClickFieldKey.CLICK_CLASS,
- ReplayClickFieldKey.CLICK_ID,
- ReplayClickFieldKey.CLICK_LABEL,
- ReplayClickFieldKey.CLICK_ROLE,
- ReplayClickFieldKey.CLICK_TAG,
- ReplayClickFieldKey.CLICK_TEXT_CONTENT,
- ReplayClickFieldKey.CLICK_TITLE,
- ReplayClickFieldKey.CLICK_TESTID,
- ];
- // This is separated out from REPLAY_FIELD_DEFINITIONS so that it is feature-flaggable
- const REPLAY_CLICK_FIELD_DEFINITIONS: Record<ReplayClickFieldKey, FieldDefinition> = {
- [ReplayClickFieldKey.CLICK_ALT]: {
- desc: t('`alt` of an element that was clicked'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [ReplayClickFieldKey.CLICK_CLASS]: {
- desc: t('`class` of an element that was clicked'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [ReplayClickFieldKey.CLICK_ID]: {
- desc: t('`id` of an element that was clicked'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [ReplayClickFieldKey.CLICK_LABEL]: {
- desc: t('`aria-label` of an element that was clicked'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [ReplayClickFieldKey.CLICK_ROLE]: {
- desc: t('`role` of an element that was clicked'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [ReplayClickFieldKey.CLICK_TAG]: {
- desc: t('`tag` of an element that was clicked'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [ReplayClickFieldKey.CLICK_TESTID]: {
- desc: t('`data-testid` or `data-test-id` of an element that was clicked'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [ReplayClickFieldKey.CLICK_TEXT_CONTENT]: {
- desc: t('textContent of an element that was clicked'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- [ReplayClickFieldKey.CLICK_TITLE]: {
- desc: t('`title` of an element that was clicked'),
- kind: FieldKind.FIELD,
- valueType: FieldValueType.STRING,
- },
- };
- export const getFieldDefinition = (
- key: string,
- type: 'event' | 'replay' | 'replay_click' = 'event'
- ): FieldDefinition | null => {
- switch (type) {
- case 'replay':
- if (key in REPLAY_FIELD_DEFINITIONS) {
- return REPLAY_FIELD_DEFINITIONS[key];
- }
- if (key in REPLAY_CLICK_FIELD_DEFINITIONS) {
- return REPLAY_CLICK_FIELD_DEFINITIONS[key];
- }
- if (REPLAY_FIELDS.includes(key as FieldKey)) {
- return EVENT_FIELD_DEFINITIONS[key];
- }
- return null;
- case 'event':
- default:
- return EVENT_FIELD_DEFINITIONS[key] ?? null;
- }
- };
- export function makeTagCollection(fieldKeys: FieldKey[]): TagCollection {
- return Object.fromEntries(
- fieldKeys.map(fieldKey => [
- fieldKey,
- {
- key: fieldKey,
- name: fieldKey,
- kind: getFieldDefinition(fieldKey)?.kind,
- },
- ])
- );
- }
- export function isDeviceClass(key): boolean {
- return key === FieldKey.DEVICE_CLASS;
- }
- export const DEVICE_CLASS_TAG_VALUES = ['high', 'medium', 'low'];
|