index.ts 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204
  1. import {t} from 'sentry/locale';
  2. // Don't forget to update https://docs.sentry.io/product/sentry-basics/search/searchable-properties/ for any changes made here
  3. export enum FieldKind {
  4. TAG = 'tag',
  5. MEASUREMENT = 'measurement',
  6. BREAKDOWN = 'breakdown',
  7. FIELD = 'field',
  8. FUNCTION = 'function',
  9. EQUATION = 'equation',
  10. METRICS = 'metric',
  11. NUMERIC_METRICS = 'numeric_metric',
  12. }
  13. export enum FieldKey {
  14. AGE = 'age',
  15. ASSIGNED = 'assigned',
  16. ASSIGNED_OR_SUGGESTED = 'assigned_or_suggested',
  17. BOOKMARKS = 'bookmarks',
  18. CULPRIT = 'culprit',
  19. DEVICE_ARCH = 'device.arch',
  20. DEVICE_BATTERY_LEVEL = 'device.battery_level',
  21. DEVICE_BRAND = 'device.brand',
  22. DEVICE_CHARGING = 'device.charging',
  23. DEVICE_FAMILY = 'device.family',
  24. DEVICE_LOCALE = 'device.locale',
  25. DEVICE_MODEL_ID = 'device.model_id',
  26. DEVICE_NAME = 'device.name',
  27. DEVICE_ONLINE = 'device.online',
  28. DEVICE_ORIENTATION = 'device.orientation',
  29. DEVICE_SCREEN_DENSITY = 'device.screen_density',
  30. DEVICE_SCREEN_DPI = 'device.screen_dpi',
  31. DEVICE_SCREEN_HEIGHT_PIXELS = 'device.screen_height_pixels',
  32. DEVICE_SCREEN_WIDTH_PIXELS = 'device.screen_width_pixels',
  33. DEVICE_SIMULATOR = 'device.simulator',
  34. DEVICE_UUID = 'device.uuid',
  35. DIST = 'dist',
  36. ENVIRONMENT = 'environment',
  37. ERROR_HANDLED = 'error.handled',
  38. ERROR_MECHANISM = 'error.mechanism',
  39. ERROR_TYPE = 'error.type',
  40. ERROR_UNHANDLED = 'error.unhandled',
  41. ERROR_VALUE = 'error.value',
  42. ERROR_RECEIVED = 'error.received',
  43. EVENT_TIMESTAMP = 'event.timestamp',
  44. EVENT_TYPE = 'event.type',
  45. FIRST_RELEASE = 'firstRelease',
  46. FIRST_SEEN = 'firstSeen',
  47. GEO_CITY = 'geo.city',
  48. GEO_COUNTRY_CODE = 'geo.country_code',
  49. GEO_REGION = 'geo.region',
  50. HAS = 'has',
  51. HTTP_METHOD = 'http.method',
  52. HTTP_REFERER = 'http.referer',
  53. HTTP_STATUS_CODE = 'http.status_code',
  54. HTTP_URL = 'http.url',
  55. ID = 'id',
  56. IS = 'is',
  57. ISSUE = 'issue',
  58. ISSUE_CATEGORY = 'issue.category',
  59. ISSUE_TYPE = 'issue.type',
  60. LAST_SEEN = 'lastSeen',
  61. LEVEL = 'level',
  62. LOCATION = 'location',
  63. MESSAGE = 'message',
  64. OS = 'os',
  65. OS_BUILD = 'os.build',
  66. OS_KERNEL_VERSION = 'os.kernel_version',
  67. PLATFORM = 'platform',
  68. PLATFORM_NAME = 'platform.name',
  69. PROJECT = 'project',
  70. RELEASE = 'release',
  71. RELEASE_BUILD = 'release.build',
  72. RELEASE_PACKAGE = 'release.package',
  73. RELEASE_STAGE = 'release.stage',
  74. RELEASE_VERSION = 'release.version',
  75. REPLAY_ID = 'replayId',
  76. SDK_NAME = 'sdk.name',
  77. SDK_VERSION = 'sdk.version',
  78. STACK_ABS_PATH = 'stack.abs_path',
  79. STACK_COLNO = 'stack.colno',
  80. STACK_FILENAME = 'stack.filename',
  81. STACK_FUNCTION = 'stack.function',
  82. STACK_IN_APP = 'stack.in_app',
  83. STACK_LINENO = 'stack.lineno',
  84. STACK_MODULE = 'stack.module',
  85. STACK_PACKAGE = 'stack.package',
  86. STACK_RESOURCE = 'stack.resource',
  87. STACK_STACK_LEVEL = 'stack.stack_level',
  88. TIMESTAMP = 'timestamp',
  89. TIMESTAMP_TO_DAY = 'timestamp.to_day',
  90. TIMESTAMP_TO_HOUR = 'timestamp.to_hour',
  91. TIMES_SEEN = 'timesSeen',
  92. TITLE = 'title',
  93. TRACE = 'trace',
  94. TRACE_PARENT_SPAN = 'trace.parent_span',
  95. TRACE_SPAN = 'trace.span',
  96. TRANSACTION = 'transaction',
  97. TRANSACTION_DURATION = 'transaction.duration',
  98. TRANSACTION_OP = 'transaction.op',
  99. TRANSACTION_STATUS = 'transaction.status',
  100. USER = 'user',
  101. USER_DISPLAY = 'user.display',
  102. USER_EMAIL = 'user.email',
  103. USER_ID = 'user.id',
  104. USER_IP = 'user.ip',
  105. USER_USERNAME = 'user.username',
  106. }
  107. export enum FieldValueType {
  108. BOOLEAN = 'boolean',
  109. DATE = 'date',
  110. DURATION = 'duration',
  111. INTEGER = 'integer',
  112. NUMBER = 'number',
  113. PERCENTAGE = 'percentage',
  114. STRING = 'string',
  115. NEVER = 'never',
  116. SIZE = 'size',
  117. }
  118. export enum WebVital {
  119. FP = 'measurements.fp',
  120. FCP = 'measurements.fcp',
  121. LCP = 'measurements.lcp',
  122. FID = 'measurements.fid',
  123. CLS = 'measurements.cls',
  124. TTFB = 'measurements.ttfb',
  125. RequestTime = 'measurements.ttfb.requesttime',
  126. }
  127. export enum MobileVital {
  128. AppStartCold = 'measurements.app_start_cold',
  129. AppStartWarm = 'measurements.app_start_warm',
  130. FramesTotal = 'measurements.frames_total',
  131. FramesSlow = 'measurements.frames_slow',
  132. FramesFrozen = 'measurements.frames_frozen',
  133. FramesSlowRate = 'measurements.frames_slow_rate',
  134. FramesFrozenRate = 'measurements.frames_frozen_rate',
  135. StallCount = 'measurements.stall_count',
  136. StallTotalTime = 'measurements.stall_total_time',
  137. StallLongestTime = 'measurements.stall_longest_time',
  138. StallPercentage = 'measurements.stall_percentage',
  139. }
  140. export enum SpanOpBreakdown {
  141. SpansBrowser = 'spans.browser',
  142. SpansDb = 'spans.db',
  143. SpansHttp = 'spans.http',
  144. SpansResource = 'spans.resource',
  145. SpansUi = 'spans.ui',
  146. }
  147. export enum AggregationKey {
  148. Count = 'count',
  149. CountUnique = 'count_unique',
  150. CountMiserable = 'count_miserable',
  151. CountIf = 'count_if',
  152. CountWebVitals = 'count_web_vitals',
  153. Eps = 'eps',
  154. Epm = 'epm',
  155. FailureCount = 'failure_count',
  156. Min = 'min',
  157. Max = 'max',
  158. Sum = 'sum',
  159. Any = 'any',
  160. P50 = 'p50',
  161. P75 = 'p75',
  162. P95 = 'p95',
  163. P99 = 'p99',
  164. P100 = 'p100',
  165. Percentile = 'percentile',
  166. Avg = 'avg',
  167. Apdex = 'apdex',
  168. UserMisery = 'user_misery',
  169. FailureRate = 'failure_rate',
  170. LastSeen = 'last_seen',
  171. }
  172. export interface FieldDefinition {
  173. kind: FieldKind;
  174. valueType: FieldValueType | null;
  175. /**
  176. * Is this field being deprecated
  177. */
  178. deprecated?: boolean;
  179. /**
  180. * Description of the field
  181. */
  182. desc?: string;
  183. /**
  184. * Feature flag that indicates gating of the field from use
  185. */
  186. featureFlag?: string;
  187. /**
  188. * Additional keywords used when filtering via autocomplete
  189. */
  190. keywords?: string[];
  191. }
  192. export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
  193. [AggregationKey.Count]: {
  194. desc: t('count of events'),
  195. kind: FieldKind.FUNCTION,
  196. valueType: FieldValueType.NUMBER,
  197. },
  198. [AggregationKey.CountUnique]: {
  199. desc: t('Unique count of the field values'),
  200. kind: FieldKind.FUNCTION,
  201. valueType: FieldValueType.INTEGER,
  202. },
  203. [AggregationKey.CountMiserable]: {
  204. desc: t('Count of unique miserable users'),
  205. kind: FieldKind.FUNCTION,
  206. valueType: FieldValueType.NUMBER,
  207. },
  208. [AggregationKey.CountIf]: {
  209. desc: t('Count of events matching the parameter conditions'),
  210. kind: FieldKind.FUNCTION,
  211. valueType: FieldValueType.NUMBER,
  212. },
  213. [AggregationKey.CountWebVitals]: {
  214. desc: t('Count of web vitals with a specific status'),
  215. kind: FieldKind.FUNCTION,
  216. valueType: FieldValueType.NUMBER,
  217. },
  218. [AggregationKey.Eps]: {
  219. desc: t('Events per second'),
  220. kind: FieldKind.FUNCTION,
  221. valueType: FieldValueType.NUMBER,
  222. },
  223. [AggregationKey.Epm]: {
  224. desc: t('Events per minute'),
  225. kind: FieldKind.FUNCTION,
  226. valueType: FieldValueType.NUMBER,
  227. },
  228. [AggregationKey.FailureRate]: {
  229. desc: t('Failed event percentage based on transaction.status'),
  230. kind: FieldKind.FUNCTION,
  231. valueType: FieldValueType.PERCENTAGE,
  232. },
  233. [AggregationKey.FailureCount]: {
  234. desc: t('Failed event count based on transaction.status'),
  235. kind: FieldKind.FUNCTION,
  236. valueType: FieldValueType.NUMBER,
  237. },
  238. [AggregationKey.Min]: {
  239. desc: t('Returns the minimum value of the selected field'),
  240. kind: FieldKind.FUNCTION,
  241. valueType: null,
  242. },
  243. [AggregationKey.Max]: {
  244. desc: t('Returns maximum value of the selected field'),
  245. kind: FieldKind.FUNCTION,
  246. valueType: null,
  247. },
  248. [AggregationKey.Sum]: {
  249. desc: t('Returns the total value for the selected field'),
  250. kind: FieldKind.FUNCTION,
  251. valueType: null,
  252. },
  253. [AggregationKey.Any]: {
  254. desc: t('Not Recommended, a random field value'),
  255. kind: FieldKind.FUNCTION,
  256. valueType: null,
  257. },
  258. [AggregationKey.P50]: {
  259. desc: t('Returns the 50th percentile of the selected field'),
  260. kind: FieldKind.FUNCTION,
  261. valueType: null,
  262. },
  263. [AggregationKey.P75]: {
  264. desc: t('Returns the 75th percentile of the selected field'),
  265. kind: FieldKind.FUNCTION,
  266. valueType: null,
  267. },
  268. [AggregationKey.P95]: {
  269. desc: t('Returns the 95th percentile of the selected field'),
  270. kind: FieldKind.FUNCTION,
  271. valueType: null,
  272. },
  273. [AggregationKey.P99]: {
  274. desc: t('Returns the 99th percentile of the selected field'),
  275. kind: FieldKind.FUNCTION,
  276. valueType: null,
  277. },
  278. [AggregationKey.P100]: {
  279. desc: t('Returns the 100th percentile of the selected field'),
  280. kind: FieldKind.FUNCTION,
  281. valueType: null,
  282. },
  283. [AggregationKey.Percentile]: {
  284. desc: t('Returns the percentile of the selected field'),
  285. kind: FieldKind.FUNCTION,
  286. valueType: null,
  287. },
  288. [AggregationKey.Avg]: {
  289. desc: t('Returns averages for a selected field'),
  290. kind: FieldKind.FUNCTION,
  291. valueType: null,
  292. },
  293. [AggregationKey.Apdex]: {
  294. desc: t('Performance score based on a duration threshold'),
  295. kind: FieldKind.FUNCTION,
  296. valueType: FieldValueType.NUMBER,
  297. },
  298. [AggregationKey.UserMisery]: {
  299. desc: t(
  300. 'User-weighted performance metric that counts the number of unique users who were frustrated'
  301. ),
  302. kind: FieldKind.FUNCTION,
  303. valueType: null,
  304. },
  305. [AggregationKey.LastSeen]: {
  306. desc: t('Issues last seen at a date and time'),
  307. kind: FieldKind.FUNCTION,
  308. valueType: FieldValueType.DATE,
  309. },
  310. };
  311. export const MEASUREMENT_FIELDS: Record<WebVital | MobileVital, FieldDefinition> = {
  312. [WebVital.FP]: {
  313. desc: t('Web Vital First Paint'),
  314. kind: FieldKind.METRICS,
  315. valueType: FieldValueType.DURATION,
  316. },
  317. [WebVital.FCP]: {
  318. desc: t('Web Vital First Contentful Paint'),
  319. kind: FieldKind.METRICS,
  320. valueType: FieldValueType.DURATION,
  321. },
  322. [WebVital.LCP]: {
  323. desc: t('Web Vital Largest Contentful Paint'),
  324. kind: FieldKind.METRICS,
  325. valueType: FieldValueType.DURATION,
  326. },
  327. [WebVital.FID]: {
  328. desc: t('Web Vital First Input Delay'),
  329. kind: FieldKind.METRICS,
  330. valueType: FieldValueType.DURATION,
  331. },
  332. [WebVital.CLS]: {
  333. desc: t('Web Vital Cumulative Layout Shift'),
  334. kind: FieldKind.METRICS,
  335. valueType: FieldValueType.NUMBER,
  336. },
  337. [WebVital.TTFB]: {
  338. desc: t('Web Vital Time To First Byte'),
  339. kind: FieldKind.METRICS,
  340. valueType: FieldValueType.DURATION,
  341. },
  342. [WebVital.RequestTime]: {
  343. desc: t('Time between start of request to start of response'),
  344. kind: FieldKind.METRICS,
  345. valueType: FieldValueType.DURATION,
  346. },
  347. [MobileVital.AppStartCold]: {
  348. desc: t('First launch (not in memory and no process exists)'),
  349. kind: FieldKind.METRICS,
  350. valueType: FieldValueType.DURATION,
  351. },
  352. [MobileVital.AppStartWarm]: {
  353. desc: t('Already launched (partial memory and process may exist)'),
  354. kind: FieldKind.METRICS,
  355. valueType: FieldValueType.DURATION,
  356. },
  357. [MobileVital.FramesTotal]: {
  358. desc: t('Total number of frames'),
  359. kind: FieldKind.METRICS,
  360. valueType: FieldValueType.INTEGER,
  361. },
  362. [MobileVital.FramesSlow]: {
  363. desc: t('Number of slow frames'),
  364. kind: FieldKind.METRICS,
  365. valueType: FieldValueType.INTEGER,
  366. },
  367. [MobileVital.FramesFrozen]: {
  368. desc: t('Number of frozen frames'),
  369. kind: FieldKind.METRICS,
  370. valueType: FieldValueType.INTEGER,
  371. },
  372. [MobileVital.FramesSlowRate]: {
  373. desc: t('Number of slow frames out of the total'),
  374. kind: FieldKind.METRICS,
  375. valueType: FieldValueType.PERCENTAGE,
  376. },
  377. [MobileVital.FramesFrozenRate]: {
  378. desc: t('Number of frozen frames out of the total'),
  379. kind: FieldKind.METRICS,
  380. valueType: FieldValueType.PERCENTAGE,
  381. },
  382. [MobileVital.StallCount]: {
  383. desc: t('Count of slow Javascript event loops (React Native)'),
  384. kind: FieldKind.METRICS,
  385. valueType: FieldValueType.INTEGER,
  386. },
  387. [MobileVital.StallTotalTime]: {
  388. desc: t('Total stall duration (React Native)'),
  389. kind: FieldKind.METRICS,
  390. valueType: FieldValueType.PERCENTAGE,
  391. },
  392. [MobileVital.StallLongestTime]: {
  393. desc: t('Duration of slowest Javascript event loop (React Native)'),
  394. kind: FieldKind.METRICS,
  395. valueType: FieldValueType.INTEGER,
  396. },
  397. [MobileVital.StallPercentage]: {
  398. desc: t('Total stall duration out of the total transaction duration (React Native)'),
  399. kind: FieldKind.METRICS,
  400. valueType: FieldValueType.PERCENTAGE,
  401. },
  402. };
  403. export const SPAN_OP_FIELDS: Record<SpanOpBreakdown, FieldDefinition> = {
  404. [SpanOpBreakdown.SpansBrowser]: {
  405. desc: t('Cumulative time based on the browser operation'),
  406. kind: FieldKind.METRICS,
  407. valueType: FieldValueType.DURATION,
  408. },
  409. [SpanOpBreakdown.SpansDb]: {
  410. desc: t('Cumulative time based on the database operation'),
  411. kind: FieldKind.METRICS,
  412. valueType: FieldValueType.DURATION,
  413. },
  414. [SpanOpBreakdown.SpansHttp]: {
  415. desc: t('Cumulative time based on the http operation'),
  416. kind: FieldKind.METRICS,
  417. valueType: FieldValueType.DURATION,
  418. },
  419. [SpanOpBreakdown.SpansResource]: {
  420. desc: t('Cumulative time based on the resource operation'),
  421. kind: FieldKind.METRICS,
  422. valueType: FieldValueType.DURATION,
  423. },
  424. [SpanOpBreakdown.SpansUi]: {
  425. desc: t('Cumulative time based on the ui operation'),
  426. kind: FieldKind.METRICS,
  427. valueType: FieldValueType.DURATION,
  428. },
  429. };
  430. type AllEventFieldKeys =
  431. | keyof typeof AGGREGATION_FIELDS
  432. | keyof typeof MEASUREMENT_FIELDS
  433. | keyof typeof SPAN_OP_FIELDS
  434. | FieldKey;
  435. const EVENT_FIELD_DEFINITIONS: Record<AllEventFieldKeys, FieldDefinition> = {
  436. ...AGGREGATION_FIELDS,
  437. ...MEASUREMENT_FIELDS,
  438. ...SPAN_OP_FIELDS,
  439. [FieldKey.AGE]: {
  440. desc: t('The age of the issue in relative time'),
  441. kind: FieldKind.FIELD,
  442. valueType: FieldValueType.DURATION,
  443. },
  444. [FieldKey.ASSIGNED]: {
  445. desc: t('Assignee of the issue as a user ID'),
  446. kind: FieldKind.FIELD,
  447. valueType: FieldValueType.STRING,
  448. },
  449. [FieldKey.ASSIGNED_OR_SUGGESTED]: {
  450. desc: t('Assignee or suggestee of the issue as a user ID'),
  451. kind: FieldKind.FIELD,
  452. valueType: FieldValueType.STRING,
  453. },
  454. [FieldKey.CULPRIT]: {
  455. deprecated: true,
  456. kind: FieldKind.FIELD,
  457. valueType: FieldValueType.STRING,
  458. },
  459. [FieldKey.BOOKMARKS]: {
  460. desc: t('The issues bookmarked by a user ID'),
  461. kind: FieldKind.FIELD,
  462. valueType: FieldValueType.STRING,
  463. },
  464. [FieldKey.DEVICE_ARCH]: {
  465. desc: t('CPU architecture'),
  466. kind: FieldKind.FIELD,
  467. valueType: FieldValueType.STRING,
  468. },
  469. [FieldKey.DEVICE_BATTERY_LEVEL]: {
  470. desc: t('Indicates remaining battery life'),
  471. kind: FieldKind.FIELD,
  472. valueType: FieldValueType.STRING,
  473. },
  474. [FieldKey.DEVICE_BRAND]: {
  475. desc: t('Brand of device'),
  476. kind: FieldKind.FIELD,
  477. valueType: FieldValueType.STRING,
  478. },
  479. [FieldKey.DEVICE_CHARGING]: {
  480. desc: t('Charging at the time of the event'),
  481. kind: FieldKind.FIELD,
  482. valueType: FieldValueType.BOOLEAN,
  483. },
  484. [FieldKey.DEVICE_FAMILY]: {
  485. desc: t('Model name across generations'),
  486. kind: FieldKind.FIELD,
  487. valueType: FieldValueType.STRING,
  488. },
  489. [FieldKey.DEVICE_LOCALE]: {
  490. desc: t("The locale of the user's device"),
  491. kind: FieldKind.FIELD,
  492. valueType: FieldValueType.STRING,
  493. },
  494. [FieldKey.DEVICE_MODEL_ID]: {
  495. desc: t('Internal hardware revision'),
  496. kind: FieldKind.FIELD,
  497. valueType: FieldValueType.STRING,
  498. },
  499. [FieldKey.DEVICE_NAME]: {
  500. desc: t('Descriptor details'),
  501. kind: FieldKind.FIELD,
  502. valueType: FieldValueType.STRING,
  503. },
  504. [FieldKey.DEVICE_ONLINE]: {
  505. desc: t('Online at the time of the event'),
  506. kind: FieldKind.FIELD,
  507. valueType: FieldValueType.BOOLEAN,
  508. },
  509. [FieldKey.DEVICE_ORIENTATION]: {
  510. desc: t('Portrait or landscape view '),
  511. kind: FieldKind.FIELD,
  512. valueType: FieldValueType.STRING,
  513. },
  514. [FieldKey.DEVICE_SCREEN_DENSITY]: {
  515. desc: t('Pixel density of the device screen'),
  516. kind: FieldKind.FIELD,
  517. valueType: FieldValueType.STRING,
  518. },
  519. [FieldKey.DEVICE_SCREEN_DPI]: {
  520. desc: t('Dots per inch of the device screen'),
  521. kind: FieldKind.FIELD,
  522. valueType: FieldValueType.STRING,
  523. },
  524. [FieldKey.DEVICE_SCREEN_HEIGHT_PIXELS]: {
  525. desc: t('Height of the device screen in pixels'),
  526. kind: FieldKind.FIELD,
  527. valueType: FieldValueType.STRING,
  528. },
  529. [FieldKey.DEVICE_SCREEN_WIDTH_PIXELS]: {
  530. desc: t('Width of the device screen in pixels'),
  531. kind: FieldKind.FIELD,
  532. valueType: FieldValueType.STRING,
  533. },
  534. [FieldKey.DEVICE_SIMULATOR]: {
  535. desc: t('Indicates if it occured on a simulator'),
  536. kind: FieldKind.FIELD,
  537. valueType: FieldValueType.BOOLEAN,
  538. },
  539. [FieldKey.DEVICE_UUID]: {
  540. desc: t('Unique device identifier'),
  541. kind: FieldKind.FIELD,
  542. valueType: FieldValueType.STRING,
  543. },
  544. [FieldKey.DIST]: {
  545. desc: t(
  546. 'Distinguishes between build or deployment variants of the same release of an application.'
  547. ),
  548. kind: FieldKind.FIELD,
  549. valueType: FieldValueType.STRING,
  550. },
  551. [FieldKey.ENVIRONMENT]: {
  552. desc: t('The environment the event was seen in'),
  553. kind: FieldKind.FIELD,
  554. valueType: FieldValueType.STRING,
  555. },
  556. [FieldKey.ERROR_HANDLED]: {
  557. desc: t('Determines handling status of the error'),
  558. kind: FieldKind.FIELD,
  559. valueType: FieldValueType.BOOLEAN,
  560. },
  561. [FieldKey.ERROR_MECHANISM]: {
  562. desc: t('The mechanism that created the error'),
  563. kind: FieldKind.FIELD,
  564. valueType: FieldValueType.STRING,
  565. },
  566. [FieldKey.ERROR_TYPE]: {
  567. desc: t('The type of exception'),
  568. kind: FieldKind.FIELD,
  569. valueType: FieldValueType.STRING,
  570. },
  571. [FieldKey.ERROR_UNHANDLED]: {
  572. desc: t('Determines unhandling status of the error'),
  573. kind: FieldKind.FIELD,
  574. valueType: FieldValueType.BOOLEAN,
  575. },
  576. [FieldKey.ERROR_VALUE]: {
  577. desc: t('Original value that exhibits error'),
  578. kind: FieldKind.FIELD,
  579. valueType: FieldValueType.STRING,
  580. },
  581. [FieldKey.ERROR_RECEIVED]: {
  582. desc: t('The datetime that the error was received'),
  583. kind: FieldKind.FIELD,
  584. valueType: FieldValueType.DATE,
  585. },
  586. [FieldKey.EVENT_TIMESTAMP]: {
  587. desc: t('Date and time of the event'),
  588. kind: FieldKind.FIELD,
  589. valueType: FieldValueType.DATE,
  590. },
  591. [FieldKey.EVENT_TYPE]: {
  592. desc: t('Type of event (Errors, transactions, csp and default)'),
  593. kind: FieldKind.FIELD,
  594. valueType: FieldValueType.STRING,
  595. },
  596. [FieldKey.GEO_CITY]: {
  597. desc: t('Full name of the city'),
  598. kind: FieldKind.FIELD,
  599. valueType: FieldValueType.STRING,
  600. },
  601. [FieldKey.GEO_COUNTRY_CODE]: {
  602. desc: t('Country code based on ISO 3166-1'),
  603. kind: FieldKind.FIELD,
  604. valueType: FieldValueType.STRING,
  605. },
  606. [FieldKey.GEO_REGION]: {
  607. desc: t('Full name of the country'),
  608. kind: FieldKind.FIELD,
  609. valueType: FieldValueType.STRING,
  610. },
  611. [FieldKey.HTTP_METHOD]: {
  612. desc: t('Method of the request that created the event'),
  613. kind: FieldKind.FIELD,
  614. valueType: FieldValueType.STRING,
  615. },
  616. [FieldKey.HTTP_REFERER]: {
  617. desc: t('The web page the resource was requested from'),
  618. kind: FieldKind.FIELD,
  619. valueType: FieldValueType.STRING,
  620. },
  621. [FieldKey.HTTP_STATUS_CODE]: {
  622. desc: t('Type of response (i.e., 200, 404)'),
  623. kind: FieldKind.FIELD,
  624. valueType: FieldValueType.STRING,
  625. },
  626. [FieldKey.HTTP_URL]: {
  627. desc: t('Full URL of the request without parameters'),
  628. kind: FieldKind.FIELD,
  629. valueType: FieldValueType.STRING,
  630. },
  631. [FieldKey.ID]: {
  632. desc: t('The event identification number'),
  633. kind: FieldKind.FIELD,
  634. valueType: FieldValueType.STRING,
  635. },
  636. [FieldKey.IS]: {
  637. desc: t('The properties of an issue (i.e. Resolved, unresolved)'),
  638. kind: FieldKind.FIELD,
  639. valueType: FieldValueType.STRING,
  640. keywords: ['ignored', 'assigned', 'for_review', 'unassigned', 'linked', 'unlinked'],
  641. },
  642. [FieldKey.ISSUE]: {
  643. desc: t('The issue identification code'),
  644. kind: FieldKind.FIELD,
  645. valueType: FieldValueType.STRING,
  646. },
  647. [FieldKey.ISSUE_CATEGORY]: {
  648. desc: t('Category of issue (error or performance)'),
  649. kind: FieldKind.FIELD,
  650. valueType: FieldValueType.STRING,
  651. keywords: ['error', 'performance'],
  652. featureFlag: 'performance-issues',
  653. },
  654. [FieldKey.ISSUE_TYPE]: {
  655. desc: t('Type of problem the issue represents (i.e. N+1 Query)'),
  656. kind: FieldKind.FIELD,
  657. valueType: FieldValueType.STRING,
  658. featureFlag: 'performance-issues',
  659. },
  660. [FieldKey.LAST_SEEN]: {
  661. desc: t('Issues last seen at a given time'),
  662. kind: FieldKind.FIELD,
  663. valueType: FieldValueType.DATE,
  664. },
  665. [FieldKey.LEVEL]: {
  666. kind: FieldKind.FIELD,
  667. valueType: FieldValueType.STRING,
  668. },
  669. [FieldKey.LOCATION]: {
  670. desc: t('Location of error'),
  671. kind: FieldKind.FIELD,
  672. valueType: FieldValueType.STRING,
  673. },
  674. [FieldKey.MESSAGE]: {
  675. desc: t('Error message or transaction name'),
  676. kind: FieldKind.FIELD,
  677. valueType: FieldValueType.STRING,
  678. },
  679. [FieldKey.OS]: {
  680. desc: t('Build and kernel version'),
  681. kind: FieldKind.FIELD,
  682. valueType: FieldValueType.STRING,
  683. },
  684. [FieldKey.OS_BUILD]: {
  685. desc: t('Name of the build'),
  686. kind: FieldKind.FIELD,
  687. valueType: FieldValueType.STRING,
  688. },
  689. [FieldKey.OS_KERNEL_VERSION]: {
  690. desc: t('Version number'),
  691. kind: FieldKind.FIELD,
  692. valueType: FieldValueType.STRING,
  693. },
  694. [FieldKey.PLATFORM]: {
  695. desc: t('Name of the platform'),
  696. kind: FieldKind.FIELD,
  697. valueType: FieldValueType.STRING,
  698. },
  699. [FieldKey.PLATFORM_NAME]: {
  700. desc: t('Name of the platform'),
  701. kind: FieldKind.FIELD,
  702. valueType: FieldValueType.STRING,
  703. },
  704. [FieldKey.PROJECT]: {
  705. kind: FieldKind.FIELD,
  706. valueType: FieldValueType.STRING,
  707. },
  708. [FieldKey.FIRST_RELEASE]: {
  709. desc: t('Issues first seen in a given release'),
  710. kind: FieldKind.FIELD,
  711. valueType: FieldValueType.STRING,
  712. },
  713. [FieldKey.FIRST_SEEN]: {
  714. desc: t('Issues first seen at a given time'),
  715. kind: FieldKind.FIELD,
  716. valueType: FieldValueType.DATE,
  717. },
  718. [FieldKey.HAS]: {
  719. desc: t('Determines if a tag or field exists in an event'),
  720. kind: FieldKind.FIELD,
  721. valueType: FieldValueType.STRING,
  722. },
  723. [FieldKey.RELEASE]: {
  724. desc: t('The version of your code deployed to an environment'),
  725. kind: FieldKind.FIELD,
  726. valueType: FieldValueType.STRING,
  727. },
  728. [FieldKey.RELEASE_BUILD]: {
  729. desc: t('The full version number that identifies the iteration'),
  730. kind: FieldKind.FIELD,
  731. valueType: FieldValueType.STRING,
  732. },
  733. [FieldKey.RELEASE_PACKAGE]: {
  734. desc: t('The identifier unique to the project or application'),
  735. kind: FieldKind.FIELD,
  736. valueType: FieldValueType.STRING,
  737. },
  738. [FieldKey.RELEASE_STAGE]: {
  739. desc: t('Stage of usage (i.e., adopted, replaced, low)'),
  740. kind: FieldKind.FIELD,
  741. valueType: FieldValueType.STRING,
  742. },
  743. [FieldKey.RELEASE_VERSION]: {
  744. desc: t('An abbreviated version number of the build'),
  745. kind: FieldKind.FIELD,
  746. valueType: FieldValueType.STRING,
  747. },
  748. [FieldKey.REPLAY_ID]: {
  749. desc: t('The ID of an associated Session Replay'),
  750. kind: FieldKind.TAG,
  751. valueType: FieldValueType.STRING,
  752. },
  753. [FieldKey.SDK_NAME]: {
  754. desc: t('Name of the platform that sent the event'),
  755. kind: FieldKind.FIELD,
  756. valueType: FieldValueType.STRING,
  757. },
  758. [FieldKey.SDK_VERSION]: {
  759. desc: t('Version of the platform that sent the event'),
  760. kind: FieldKind.FIELD,
  761. valueType: FieldValueType.STRING,
  762. },
  763. [FieldKey.STACK_ABS_PATH]: {
  764. desc: t('Absolute path to the source file'),
  765. kind: FieldKind.FIELD,
  766. valueType: FieldValueType.STRING,
  767. },
  768. [FieldKey.STACK_COLNO]: {
  769. desc: t('Column number of the call starting at 1'),
  770. kind: FieldKind.FIELD,
  771. valueType: FieldValueType.NUMBER,
  772. },
  773. [FieldKey.STACK_FILENAME]: {
  774. desc: t('Relative path to the source file from the root directory'),
  775. kind: FieldKind.FIELD,
  776. valueType: FieldValueType.STRING,
  777. },
  778. [FieldKey.STACK_FUNCTION]: {
  779. desc: t('Name of function being called'),
  780. kind: FieldKind.FIELD,
  781. valueType: FieldValueType.STRING,
  782. },
  783. [FieldKey.STACK_IN_APP]: {
  784. desc: t('Indicates if frame is related to relevant code in stack trace'),
  785. kind: FieldKind.FIELD,
  786. valueType: FieldValueType.BOOLEAN,
  787. },
  788. [FieldKey.STACK_LINENO]: {
  789. desc: t('Line number of the call starting at 1'),
  790. kind: FieldKind.FIELD,
  791. valueType: FieldValueType.NUMBER,
  792. },
  793. [FieldKey.STACK_MODULE]: {
  794. desc: t('Platform specific module path'),
  795. kind: FieldKind.FIELD,
  796. valueType: FieldValueType.STRING,
  797. },
  798. [FieldKey.STACK_PACKAGE]: {
  799. desc: t('The package the frame is from'),
  800. kind: FieldKind.FIELD,
  801. valueType: FieldValueType.STRING,
  802. },
  803. [FieldKey.STACK_RESOURCE]: {
  804. desc: t('The package the frame is from'),
  805. kind: FieldKind.FIELD,
  806. valueType: FieldValueType.STRING,
  807. },
  808. [FieldKey.STACK_STACK_LEVEL]: {
  809. desc: t('Number of frames per stacktrace'),
  810. kind: FieldKind.FIELD,
  811. valueType: FieldValueType.NUMBER,
  812. },
  813. [FieldKey.TIMES_SEEN]: {
  814. desc: t('Total number of events'),
  815. kind: FieldKind.FIELD,
  816. valueType: FieldValueType.NUMBER,
  817. keywords: ['count'],
  818. },
  819. [FieldKey.TIMESTAMP]: {
  820. desc: t('The time an event finishes'),
  821. kind: FieldKind.FIELD,
  822. valueType: FieldValueType.DATE,
  823. },
  824. [FieldKey.TIMESTAMP_TO_HOUR]: {
  825. desc: t('Rounded down to the nearest hour'),
  826. kind: FieldKind.FIELD,
  827. valueType: FieldValueType.DATE,
  828. },
  829. [FieldKey.TIMESTAMP_TO_DAY]: {
  830. desc: t('Rounded down to the nearest day'),
  831. kind: FieldKind.FIELD,
  832. valueType: FieldValueType.DATE,
  833. },
  834. [FieldKey.TITLE]: {
  835. desc: t('Error or transaction name identifier'),
  836. kind: FieldKind.FIELD,
  837. valueType: FieldValueType.STRING,
  838. },
  839. [FieldKey.TRACE]: {
  840. desc: t('The trace identification number'),
  841. kind: FieldKind.FIELD,
  842. valueType: FieldValueType.STRING,
  843. },
  844. [FieldKey.TRACE_PARENT_SPAN]: {
  845. desc: t('Span identification number of the parent to the event'),
  846. kind: FieldKind.FIELD,
  847. valueType: FieldValueType.STRING,
  848. },
  849. [FieldKey.TRACE_SPAN]: {
  850. desc: t('Span identification number of the root span'),
  851. kind: FieldKind.FIELD,
  852. valueType: FieldValueType.STRING,
  853. },
  854. [FieldKey.TRANSACTION]: {
  855. desc: t('Error or transaction name identifier'),
  856. kind: FieldKind.FIELD,
  857. valueType: FieldValueType.STRING,
  858. },
  859. [FieldKey.TRANSACTION_OP]: {
  860. desc: t('Short code identifying the type of operation the span is measuring'),
  861. kind: FieldKind.FIELD,
  862. valueType: FieldValueType.STRING,
  863. },
  864. [FieldKey.TRANSACTION_DURATION]: {
  865. desc: t('Duration, in milliseconds, of the transaction'),
  866. kind: FieldKind.FIELD,
  867. valueType: FieldValueType.DURATION,
  868. },
  869. [FieldKey.TRANSACTION_STATUS]: {
  870. desc: t('Describes the status of the span/transaction'),
  871. kind: FieldKind.FIELD,
  872. valueType: FieldValueType.STRING,
  873. },
  874. [FieldKey.USER]: {
  875. desc: t('User identification value'),
  876. kind: FieldKind.FIELD,
  877. valueType: FieldValueType.STRING,
  878. },
  879. [FieldKey.USER_DISPLAY]: {
  880. desc: t('The first user field available of email, username, ID, and IP'),
  881. kind: FieldKind.FIELD,
  882. valueType: FieldValueType.STRING,
  883. },
  884. [FieldKey.USER_EMAIL]: {
  885. desc: t('Email address of the user'),
  886. kind: FieldKind.FIELD,
  887. valueType: FieldValueType.STRING,
  888. },
  889. [FieldKey.USER_ID]: {
  890. desc: t('Application specific internal identifier of the user'),
  891. kind: FieldKind.FIELD,
  892. valueType: FieldValueType.STRING,
  893. },
  894. [FieldKey.USER_IP]: {
  895. desc: t('IP Address of the user'),
  896. kind: FieldKind.FIELD,
  897. valueType: FieldValueType.STRING,
  898. },
  899. [FieldKey.USER_USERNAME]: {
  900. desc: t('Username of the user'),
  901. kind: FieldKind.FIELD,
  902. valueType: FieldValueType.STRING,
  903. },
  904. };
  905. export const ISSUE_FIELDS = [
  906. FieldKey.AGE,
  907. FieldKey.ASSIGNED,
  908. FieldKey.ASSIGNED_OR_SUGGESTED,
  909. FieldKey.BOOKMARKS,
  910. FieldKey.DEVICE_ARCH,
  911. FieldKey.DEVICE_BRAND,
  912. FieldKey.DEVICE_FAMILY,
  913. FieldKey.DEVICE_LOCALE,
  914. FieldKey.DEVICE_LOCALE,
  915. FieldKey.DEVICE_MODEL_ID,
  916. FieldKey.DEVICE_ORIENTATION,
  917. FieldKey.DEVICE_UUID,
  918. FieldKey.DIST,
  919. FieldKey.ERROR_HANDLED,
  920. FieldKey.ERROR_MECHANISM,
  921. FieldKey.ERROR_TYPE,
  922. FieldKey.ERROR_UNHANDLED,
  923. FieldKey.ERROR_VALUE,
  924. FieldKey.EVENT_TIMESTAMP,
  925. FieldKey.EVENT_TYPE,
  926. FieldKey.FIRST_RELEASE,
  927. FieldKey.FIRST_SEEN,
  928. FieldKey.GEO_CITY,
  929. FieldKey.GEO_COUNTRY_CODE,
  930. FieldKey.GEO_REGION,
  931. FieldKey.HAS,
  932. FieldKey.HTTP_METHOD,
  933. FieldKey.HTTP_REFERER,
  934. FieldKey.HTTP_STATUS_CODE,
  935. FieldKey.HTTP_URL,
  936. FieldKey.ID,
  937. FieldKey.IS,
  938. FieldKey.ISSUE_CATEGORY,
  939. FieldKey.LAST_SEEN,
  940. FieldKey.LOCATION,
  941. FieldKey.MESSAGE,
  942. FieldKey.OS_BUILD,
  943. FieldKey.OS_KERNEL_VERSION,
  944. FieldKey.PLATFORM,
  945. FieldKey.RELEASE,
  946. FieldKey.RELEASE_BUILD,
  947. FieldKey.RELEASE_PACKAGE,
  948. FieldKey.RELEASE_STAGE,
  949. FieldKey.RELEASE_VERSION,
  950. FieldKey.SDK_NAME,
  951. FieldKey.SDK_VERSION,
  952. FieldKey.STACK_ABS_PATH,
  953. FieldKey.STACK_FILENAME,
  954. FieldKey.STACK_FUNCTION,
  955. FieldKey.STACK_MODULE,
  956. FieldKey.STACK_PACKAGE,
  957. FieldKey.STACK_STACK_LEVEL,
  958. FieldKey.TIMESTAMP,
  959. FieldKey.TIMES_SEEN,
  960. FieldKey.TITLE,
  961. FieldKey.TRACE,
  962. FieldKey.TRANSACTION,
  963. FieldKey.USER_EMAIL,
  964. FieldKey.USER_ID,
  965. FieldKey.USER_IP,
  966. FieldKey.USER_USERNAME,
  967. ];
  968. /**
  969. * Refer to src/sentry/snuba/events.py, search for Columns
  970. */
  971. export const DISCOVER_FIELDS = [
  972. FieldKey.ID,
  973. // issue.id and project.id are omitted on purpose.
  974. // Customers should use `issue` and `project` instead.
  975. FieldKey.TIMESTAMP,
  976. // time is omitted on purpose.
  977. // Customers should use `timestamp` or `timestamp.to_hour`.
  978. FieldKey.TIMESTAMP_TO_HOUR,
  979. FieldKey.TIMESTAMP_TO_DAY,
  980. FieldKey.CULPRIT,
  981. FieldKey.LOCATION,
  982. FieldKey.MESSAGE,
  983. FieldKey.PLATFORM_NAME,
  984. FieldKey.ENVIRONMENT,
  985. FieldKey.RELEASE,
  986. FieldKey.DIST,
  987. FieldKey.TITLE,
  988. FieldKey.EVENT_TYPE,
  989. // tags.key and tags.value are omitted on purpose as well.
  990. FieldKey.TRANSACTION,
  991. FieldKey.USER,
  992. FieldKey.USER_ID,
  993. FieldKey.USER_EMAIL,
  994. FieldKey.USER_USERNAME,
  995. FieldKey.USER_IP,
  996. FieldKey.SDK_NAME,
  997. FieldKey.SDK_VERSION,
  998. FieldKey.HTTP_METHOD,
  999. FieldKey.HTTP_REFERER,
  1000. FieldKey.HTTP_STATUS_CODE,
  1001. FieldKey.HTTP_URL,
  1002. FieldKey.OS_BUILD,
  1003. FieldKey.OS_KERNEL_VERSION,
  1004. FieldKey.DEVICE_NAME,
  1005. FieldKey.DEVICE_BRAND,
  1006. FieldKey.DEVICE_LOCALE,
  1007. FieldKey.DEVICE_UUID,
  1008. FieldKey.DEVICE_ARCH,
  1009. FieldKey.DEVICE_FAMILY,
  1010. FieldKey.DEVICE_BATTERY_LEVEL,
  1011. FieldKey.DEVICE_ORIENTATION,
  1012. FieldKey.DEVICE_SCREEN_DENSITY,
  1013. FieldKey.DEVICE_SCREEN_DPI,
  1014. FieldKey.DEVICE_SCREEN_HEIGHT_PIXELS,
  1015. FieldKey.DEVICE_SCREEN_WIDTH_PIXELS,
  1016. FieldKey.DEVICE_SIMULATOR,
  1017. FieldKey.DEVICE_ONLINE,
  1018. FieldKey.DEVICE_CHARGING,
  1019. FieldKey.GEO_COUNTRY_CODE,
  1020. FieldKey.GEO_REGION,
  1021. FieldKey.GEO_CITY,
  1022. FieldKey.ERROR_TYPE,
  1023. FieldKey.ERROR_VALUE,
  1024. FieldKey.ERROR_MECHANISM,
  1025. FieldKey.ERROR_HANDLED,
  1026. FieldKey.ERROR_UNHANDLED,
  1027. FieldKey.ERROR_RECEIVED,
  1028. FieldKey.LEVEL,
  1029. FieldKey.STACK_ABS_PATH,
  1030. FieldKey.STACK_FILENAME,
  1031. FieldKey.STACK_PACKAGE,
  1032. FieldKey.STACK_MODULE,
  1033. FieldKey.STACK_FUNCTION,
  1034. FieldKey.STACK_IN_APP,
  1035. FieldKey.STACK_COLNO,
  1036. FieldKey.STACK_LINENO,
  1037. FieldKey.STACK_STACK_LEVEL,
  1038. // contexts.key and contexts.value omitted on purpose.
  1039. // Transaction event fields.
  1040. FieldKey.TRANSACTION_DURATION,
  1041. FieldKey.TRANSACTION_OP,
  1042. FieldKey.TRANSACTION_STATUS,
  1043. FieldKey.TRACE,
  1044. FieldKey.TRACE_SPAN,
  1045. FieldKey.TRACE_PARENT_SPAN,
  1046. // Field alises defined in src/sentry/api/event_search.py
  1047. FieldKey.PROJECT,
  1048. FieldKey.ISSUE,
  1049. FieldKey.USER_DISPLAY,
  1050. // Span Op fields
  1051. SpanOpBreakdown.SpansBrowser,
  1052. SpanOpBreakdown.SpansDb,
  1053. SpanOpBreakdown.SpansHttp,
  1054. SpanOpBreakdown.SpansResource,
  1055. SpanOpBreakdown.SpansUi,
  1056. ];
  1057. enum ReplayFieldKey {
  1058. BROWSER_NAME = 'browser.name',
  1059. BROWSER_VERSION = 'browser.version',
  1060. COUNT_ERRORS = 'countErrors',
  1061. COUNT_SEGMENTS = 'countSegments',
  1062. // COUNT_URLS = 'countUrls',
  1063. DEVICE_MODEL = 'device.model',
  1064. DURATION = 'duration',
  1065. // ERROR_IDS = 'errorIds',
  1066. // LONGEST_TRANSACTION = 'longestTransaction',
  1067. OS_NAME = 'os.name',
  1068. OS_VERSION = 'os.version',
  1069. RELEASES = 'releases',
  1070. // TRACE_IDS = 'traceIds',
  1071. URLS = 'urls',
  1072. USER_IP_ADDRESS = 'user.ipAddress',
  1073. USER_NAME = 'user.name',
  1074. }
  1075. export const REPLAY_FIELDS = [
  1076. ReplayFieldKey.BROWSER_NAME,
  1077. ReplayFieldKey.BROWSER_VERSION,
  1078. ReplayFieldKey.COUNT_ERRORS,
  1079. ReplayFieldKey.COUNT_SEGMENTS,
  1080. FieldKey.DEVICE_BRAND,
  1081. FieldKey.DEVICE_FAMILY,
  1082. ReplayFieldKey.DEVICE_MODEL,
  1083. FieldKey.DEVICE_NAME,
  1084. FieldKey.DIST,
  1085. ReplayFieldKey.DURATION,
  1086. FieldKey.ID,
  1087. ReplayFieldKey.OS_NAME,
  1088. ReplayFieldKey.OS_VERSION,
  1089. FieldKey.PLATFORM,
  1090. ReplayFieldKey.RELEASES,
  1091. FieldKey.SDK_NAME,
  1092. FieldKey.SDK_VERSION,
  1093. ReplayFieldKey.URLS,
  1094. FieldKey.USER_EMAIL,
  1095. FieldKey.USER_ID,
  1096. ReplayFieldKey.USER_IP_ADDRESS,
  1097. ReplayFieldKey.USER_NAME,
  1098. ];
  1099. const REPLAY_FIELD_DEFINITIONS: Record<ReplayFieldKey, FieldDefinition> = {
  1100. [ReplayFieldKey.BROWSER_NAME]: {
  1101. desc: t('Name of the brower'),
  1102. kind: FieldKind.FIELD,
  1103. valueType: FieldValueType.STRING,
  1104. },
  1105. [ReplayFieldKey.BROWSER_VERSION]: {
  1106. desc: t('Version number of the Browser'),
  1107. kind: FieldKind.FIELD,
  1108. valueType: FieldValueType.STRING,
  1109. },
  1110. [ReplayFieldKey.COUNT_ERRORS]: {
  1111. desc: t('Number of errors in the replay'),
  1112. kind: FieldKind.FIELD,
  1113. valueType: FieldValueType.INTEGER,
  1114. },
  1115. [ReplayFieldKey.COUNT_SEGMENTS]: {
  1116. desc: t('Number of segments in the replay'),
  1117. kind: FieldKind.FIELD,
  1118. valueType: FieldValueType.INTEGER,
  1119. },
  1120. [ReplayFieldKey.DEVICE_MODEL]: {
  1121. desc: t('Model of device'),
  1122. kind: FieldKind.FIELD,
  1123. valueType: FieldValueType.STRING,
  1124. },
  1125. [ReplayFieldKey.DURATION]: {
  1126. desc: t('Duration of the replay, in seconds'),
  1127. kind: FieldKind.FIELD,
  1128. valueType: FieldValueType.DURATION,
  1129. },
  1130. [ReplayFieldKey.OS_NAME]: {
  1131. desc: t('Name of the Operating System'),
  1132. kind: FieldKind.FIELD,
  1133. valueType: FieldValueType.STRING,
  1134. },
  1135. [ReplayFieldKey.OS_VERSION]: {
  1136. desc: t('Version number of the Operating System'),
  1137. kind: FieldKind.FIELD,
  1138. valueType: FieldValueType.STRING,
  1139. },
  1140. [ReplayFieldKey.RELEASES]: {
  1141. desc: t('Releases this Replay spans across'),
  1142. kind: FieldKind.FIELD,
  1143. valueType: FieldValueType.STRING,
  1144. },
  1145. [ReplayFieldKey.URLS]: {
  1146. desc: t('List of urls that were visited within the Replay'),
  1147. kind: FieldKind.FIELD,
  1148. valueType: FieldValueType.STRING,
  1149. },
  1150. [ReplayFieldKey.USER_IP_ADDRESS]: {
  1151. desc: t('IP Address of the user'),
  1152. kind: FieldKind.FIELD,
  1153. valueType: FieldValueType.STRING,
  1154. },
  1155. [ReplayFieldKey.USER_NAME]: {
  1156. desc: t('Name of the user'),
  1157. kind: FieldKind.FIELD,
  1158. valueType: FieldValueType.STRING,
  1159. },
  1160. };
  1161. export const getFieldDefinition = (
  1162. key: string,
  1163. type: 'event' | 'replay' = 'event'
  1164. ): FieldDefinition | null => {
  1165. switch (type) {
  1166. case 'replay':
  1167. if (key in REPLAY_FIELD_DEFINITIONS) {
  1168. return REPLAY_FIELD_DEFINITIONS[key];
  1169. }
  1170. if (REPLAY_FIELDS.includes(key as FieldKey)) {
  1171. return EVENT_FIELD_DEFINITIONS[key];
  1172. }
  1173. return null;
  1174. case 'event':
  1175. default:
  1176. return EVENT_FIELD_DEFINITIONS[key] ?? null;
  1177. }
  1178. };