index.ts 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202
  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. },
  653. [FieldKey.ISSUE_TYPE]: {
  654. desc: t('Type of problem the issue represents (i.e. N+1 Query)'),
  655. kind: FieldKind.FIELD,
  656. valueType: FieldValueType.STRING,
  657. },
  658. [FieldKey.LAST_SEEN]: {
  659. desc: t('Issues last seen at a given time'),
  660. kind: FieldKind.FIELD,
  661. valueType: FieldValueType.DATE,
  662. },
  663. [FieldKey.LEVEL]: {
  664. kind: FieldKind.FIELD,
  665. valueType: FieldValueType.STRING,
  666. },
  667. [FieldKey.LOCATION]: {
  668. desc: t('Location of error'),
  669. kind: FieldKind.FIELD,
  670. valueType: FieldValueType.STRING,
  671. },
  672. [FieldKey.MESSAGE]: {
  673. desc: t('Error message or transaction name'),
  674. kind: FieldKind.FIELD,
  675. valueType: FieldValueType.STRING,
  676. },
  677. [FieldKey.OS]: {
  678. desc: t('Build and kernel version'),
  679. kind: FieldKind.FIELD,
  680. valueType: FieldValueType.STRING,
  681. },
  682. [FieldKey.OS_BUILD]: {
  683. desc: t('Name of the build'),
  684. kind: FieldKind.FIELD,
  685. valueType: FieldValueType.STRING,
  686. },
  687. [FieldKey.OS_KERNEL_VERSION]: {
  688. desc: t('Version number'),
  689. kind: FieldKind.FIELD,
  690. valueType: FieldValueType.STRING,
  691. },
  692. [FieldKey.PLATFORM]: {
  693. desc: t('Name of the platform'),
  694. kind: FieldKind.FIELD,
  695. valueType: FieldValueType.STRING,
  696. },
  697. [FieldKey.PLATFORM_NAME]: {
  698. desc: t('Name of the platform'),
  699. kind: FieldKind.FIELD,
  700. valueType: FieldValueType.STRING,
  701. },
  702. [FieldKey.PROJECT]: {
  703. kind: FieldKind.FIELD,
  704. valueType: FieldValueType.STRING,
  705. },
  706. [FieldKey.FIRST_RELEASE]: {
  707. desc: t('Issues first seen in a given release'),
  708. kind: FieldKind.FIELD,
  709. valueType: FieldValueType.STRING,
  710. },
  711. [FieldKey.FIRST_SEEN]: {
  712. desc: t('Issues first seen at a given time'),
  713. kind: FieldKind.FIELD,
  714. valueType: FieldValueType.DATE,
  715. },
  716. [FieldKey.HAS]: {
  717. desc: t('Determines if a tag or field exists in an event'),
  718. kind: FieldKind.FIELD,
  719. valueType: FieldValueType.STRING,
  720. },
  721. [FieldKey.RELEASE]: {
  722. desc: t('The version of your code deployed to an environment'),
  723. kind: FieldKind.FIELD,
  724. valueType: FieldValueType.STRING,
  725. },
  726. [FieldKey.RELEASE_BUILD]: {
  727. desc: t('The full version number that identifies the iteration'),
  728. kind: FieldKind.FIELD,
  729. valueType: FieldValueType.STRING,
  730. },
  731. [FieldKey.RELEASE_PACKAGE]: {
  732. desc: t('The identifier unique to the project or application'),
  733. kind: FieldKind.FIELD,
  734. valueType: FieldValueType.STRING,
  735. },
  736. [FieldKey.RELEASE_STAGE]: {
  737. desc: t('Stage of usage (i.e., adopted, replaced, low)'),
  738. kind: FieldKind.FIELD,
  739. valueType: FieldValueType.STRING,
  740. },
  741. [FieldKey.RELEASE_VERSION]: {
  742. desc: t('An abbreviated version number of the build'),
  743. kind: FieldKind.FIELD,
  744. valueType: FieldValueType.STRING,
  745. },
  746. [FieldKey.REPLAY_ID]: {
  747. desc: t('The ID of an associated Session Replay'),
  748. kind: FieldKind.TAG,
  749. valueType: FieldValueType.STRING,
  750. },
  751. [FieldKey.SDK_NAME]: {
  752. desc: t('Name of the platform that sent the event'),
  753. kind: FieldKind.FIELD,
  754. valueType: FieldValueType.STRING,
  755. },
  756. [FieldKey.SDK_VERSION]: {
  757. desc: t('Version of the platform that sent the event'),
  758. kind: FieldKind.FIELD,
  759. valueType: FieldValueType.STRING,
  760. },
  761. [FieldKey.STACK_ABS_PATH]: {
  762. desc: t('Absolute path to the source file'),
  763. kind: FieldKind.FIELD,
  764. valueType: FieldValueType.STRING,
  765. },
  766. [FieldKey.STACK_COLNO]: {
  767. desc: t('Column number of the call starting at 1'),
  768. kind: FieldKind.FIELD,
  769. valueType: FieldValueType.NUMBER,
  770. },
  771. [FieldKey.STACK_FILENAME]: {
  772. desc: t('Relative path to the source file from the root directory'),
  773. kind: FieldKind.FIELD,
  774. valueType: FieldValueType.STRING,
  775. },
  776. [FieldKey.STACK_FUNCTION]: {
  777. desc: t('Name of function being called'),
  778. kind: FieldKind.FIELD,
  779. valueType: FieldValueType.STRING,
  780. },
  781. [FieldKey.STACK_IN_APP]: {
  782. desc: t('Indicates if frame is related to relevant code in stack trace'),
  783. kind: FieldKind.FIELD,
  784. valueType: FieldValueType.BOOLEAN,
  785. },
  786. [FieldKey.STACK_LINENO]: {
  787. desc: t('Line number of the call starting at 1'),
  788. kind: FieldKind.FIELD,
  789. valueType: FieldValueType.NUMBER,
  790. },
  791. [FieldKey.STACK_MODULE]: {
  792. desc: t('Platform specific module path'),
  793. kind: FieldKind.FIELD,
  794. valueType: FieldValueType.STRING,
  795. },
  796. [FieldKey.STACK_PACKAGE]: {
  797. desc: t('The package the frame is from'),
  798. kind: FieldKind.FIELD,
  799. valueType: FieldValueType.STRING,
  800. },
  801. [FieldKey.STACK_RESOURCE]: {
  802. desc: t('The package the frame is from'),
  803. kind: FieldKind.FIELD,
  804. valueType: FieldValueType.STRING,
  805. },
  806. [FieldKey.STACK_STACK_LEVEL]: {
  807. desc: t('Number of frames per stacktrace'),
  808. kind: FieldKind.FIELD,
  809. valueType: FieldValueType.NUMBER,
  810. },
  811. [FieldKey.TIMES_SEEN]: {
  812. desc: t('Total number of events'),
  813. kind: FieldKind.FIELD,
  814. valueType: FieldValueType.NUMBER,
  815. keywords: ['count'],
  816. },
  817. [FieldKey.TIMESTAMP]: {
  818. desc: t('The time an event finishes'),
  819. kind: FieldKind.FIELD,
  820. valueType: FieldValueType.DATE,
  821. },
  822. [FieldKey.TIMESTAMP_TO_HOUR]: {
  823. desc: t('Rounded down to the nearest hour'),
  824. kind: FieldKind.FIELD,
  825. valueType: FieldValueType.DATE,
  826. },
  827. [FieldKey.TIMESTAMP_TO_DAY]: {
  828. desc: t('Rounded down to the nearest day'),
  829. kind: FieldKind.FIELD,
  830. valueType: FieldValueType.DATE,
  831. },
  832. [FieldKey.TITLE]: {
  833. desc: t('Error or transaction name identifier'),
  834. kind: FieldKind.FIELD,
  835. valueType: FieldValueType.STRING,
  836. },
  837. [FieldKey.TRACE]: {
  838. desc: t('The trace identification number'),
  839. kind: FieldKind.FIELD,
  840. valueType: FieldValueType.STRING,
  841. },
  842. [FieldKey.TRACE_PARENT_SPAN]: {
  843. desc: t('Span identification number of the parent to the event'),
  844. kind: FieldKind.FIELD,
  845. valueType: FieldValueType.STRING,
  846. },
  847. [FieldKey.TRACE_SPAN]: {
  848. desc: t('Span identification number of the root span'),
  849. kind: FieldKind.FIELD,
  850. valueType: FieldValueType.STRING,
  851. },
  852. [FieldKey.TRANSACTION]: {
  853. desc: t('Error or transaction name identifier'),
  854. kind: FieldKind.FIELD,
  855. valueType: FieldValueType.STRING,
  856. },
  857. [FieldKey.TRANSACTION_OP]: {
  858. desc: t('Short code identifying the type of operation the span is measuring'),
  859. kind: FieldKind.FIELD,
  860. valueType: FieldValueType.STRING,
  861. },
  862. [FieldKey.TRANSACTION_DURATION]: {
  863. desc: t('Duration, in milliseconds, of the transaction'),
  864. kind: FieldKind.FIELD,
  865. valueType: FieldValueType.DURATION,
  866. },
  867. [FieldKey.TRANSACTION_STATUS]: {
  868. desc: t('Describes the status of the span/transaction'),
  869. kind: FieldKind.FIELD,
  870. valueType: FieldValueType.STRING,
  871. },
  872. [FieldKey.USER]: {
  873. desc: t('User identification value'),
  874. kind: FieldKind.FIELD,
  875. valueType: FieldValueType.STRING,
  876. },
  877. [FieldKey.USER_DISPLAY]: {
  878. desc: t('The first user field available of email, username, ID, and IP'),
  879. kind: FieldKind.FIELD,
  880. valueType: FieldValueType.STRING,
  881. },
  882. [FieldKey.USER_EMAIL]: {
  883. desc: t('Email address of the user'),
  884. kind: FieldKind.FIELD,
  885. valueType: FieldValueType.STRING,
  886. },
  887. [FieldKey.USER_ID]: {
  888. desc: t('Application specific internal identifier of the user'),
  889. kind: FieldKind.FIELD,
  890. valueType: FieldValueType.STRING,
  891. },
  892. [FieldKey.USER_IP]: {
  893. desc: t('IP Address of the user'),
  894. kind: FieldKind.FIELD,
  895. valueType: FieldValueType.STRING,
  896. },
  897. [FieldKey.USER_USERNAME]: {
  898. desc: t('Username of the user'),
  899. kind: FieldKind.FIELD,
  900. valueType: FieldValueType.STRING,
  901. },
  902. };
  903. export const ISSUE_FIELDS = [
  904. FieldKey.AGE,
  905. FieldKey.ASSIGNED,
  906. FieldKey.ASSIGNED_OR_SUGGESTED,
  907. FieldKey.BOOKMARKS,
  908. FieldKey.DEVICE_ARCH,
  909. FieldKey.DEVICE_BRAND,
  910. FieldKey.DEVICE_FAMILY,
  911. FieldKey.DEVICE_LOCALE,
  912. FieldKey.DEVICE_LOCALE,
  913. FieldKey.DEVICE_MODEL_ID,
  914. FieldKey.DEVICE_ORIENTATION,
  915. FieldKey.DEVICE_UUID,
  916. FieldKey.DIST,
  917. FieldKey.ERROR_HANDLED,
  918. FieldKey.ERROR_MECHANISM,
  919. FieldKey.ERROR_TYPE,
  920. FieldKey.ERROR_UNHANDLED,
  921. FieldKey.ERROR_VALUE,
  922. FieldKey.EVENT_TIMESTAMP,
  923. FieldKey.EVENT_TYPE,
  924. FieldKey.FIRST_RELEASE,
  925. FieldKey.FIRST_SEEN,
  926. FieldKey.GEO_CITY,
  927. FieldKey.GEO_COUNTRY_CODE,
  928. FieldKey.GEO_REGION,
  929. FieldKey.HAS,
  930. FieldKey.HTTP_METHOD,
  931. FieldKey.HTTP_REFERER,
  932. FieldKey.HTTP_STATUS_CODE,
  933. FieldKey.HTTP_URL,
  934. FieldKey.ID,
  935. FieldKey.IS,
  936. FieldKey.ISSUE_CATEGORY,
  937. FieldKey.LAST_SEEN,
  938. FieldKey.LOCATION,
  939. FieldKey.MESSAGE,
  940. FieldKey.OS_BUILD,
  941. FieldKey.OS_KERNEL_VERSION,
  942. FieldKey.PLATFORM,
  943. FieldKey.RELEASE,
  944. FieldKey.RELEASE_BUILD,
  945. FieldKey.RELEASE_PACKAGE,
  946. FieldKey.RELEASE_STAGE,
  947. FieldKey.RELEASE_VERSION,
  948. FieldKey.SDK_NAME,
  949. FieldKey.SDK_VERSION,
  950. FieldKey.STACK_ABS_PATH,
  951. FieldKey.STACK_FILENAME,
  952. FieldKey.STACK_FUNCTION,
  953. FieldKey.STACK_MODULE,
  954. FieldKey.STACK_PACKAGE,
  955. FieldKey.STACK_STACK_LEVEL,
  956. FieldKey.TIMESTAMP,
  957. FieldKey.TIMES_SEEN,
  958. FieldKey.TITLE,
  959. FieldKey.TRACE,
  960. FieldKey.TRANSACTION,
  961. FieldKey.USER_EMAIL,
  962. FieldKey.USER_ID,
  963. FieldKey.USER_IP,
  964. FieldKey.USER_USERNAME,
  965. ];
  966. /**
  967. * Refer to src/sentry/snuba/events.py, search for Columns
  968. */
  969. export const DISCOVER_FIELDS = [
  970. FieldKey.ID,
  971. // issue.id and project.id are omitted on purpose.
  972. // Customers should use `issue` and `project` instead.
  973. FieldKey.TIMESTAMP,
  974. // time is omitted on purpose.
  975. // Customers should use `timestamp` or `timestamp.to_hour`.
  976. FieldKey.TIMESTAMP_TO_HOUR,
  977. FieldKey.TIMESTAMP_TO_DAY,
  978. FieldKey.CULPRIT,
  979. FieldKey.LOCATION,
  980. FieldKey.MESSAGE,
  981. FieldKey.PLATFORM_NAME,
  982. FieldKey.ENVIRONMENT,
  983. FieldKey.RELEASE,
  984. FieldKey.DIST,
  985. FieldKey.TITLE,
  986. FieldKey.EVENT_TYPE,
  987. // tags.key and tags.value are omitted on purpose as well.
  988. FieldKey.TRANSACTION,
  989. FieldKey.USER,
  990. FieldKey.USER_ID,
  991. FieldKey.USER_EMAIL,
  992. FieldKey.USER_USERNAME,
  993. FieldKey.USER_IP,
  994. FieldKey.SDK_NAME,
  995. FieldKey.SDK_VERSION,
  996. FieldKey.HTTP_METHOD,
  997. FieldKey.HTTP_REFERER,
  998. FieldKey.HTTP_STATUS_CODE,
  999. FieldKey.HTTP_URL,
  1000. FieldKey.OS_BUILD,
  1001. FieldKey.OS_KERNEL_VERSION,
  1002. FieldKey.DEVICE_NAME,
  1003. FieldKey.DEVICE_BRAND,
  1004. FieldKey.DEVICE_LOCALE,
  1005. FieldKey.DEVICE_UUID,
  1006. FieldKey.DEVICE_ARCH,
  1007. FieldKey.DEVICE_FAMILY,
  1008. FieldKey.DEVICE_BATTERY_LEVEL,
  1009. FieldKey.DEVICE_ORIENTATION,
  1010. FieldKey.DEVICE_SCREEN_DENSITY,
  1011. FieldKey.DEVICE_SCREEN_DPI,
  1012. FieldKey.DEVICE_SCREEN_HEIGHT_PIXELS,
  1013. FieldKey.DEVICE_SCREEN_WIDTH_PIXELS,
  1014. FieldKey.DEVICE_SIMULATOR,
  1015. FieldKey.DEVICE_ONLINE,
  1016. FieldKey.DEVICE_CHARGING,
  1017. FieldKey.GEO_COUNTRY_CODE,
  1018. FieldKey.GEO_REGION,
  1019. FieldKey.GEO_CITY,
  1020. FieldKey.ERROR_TYPE,
  1021. FieldKey.ERROR_VALUE,
  1022. FieldKey.ERROR_MECHANISM,
  1023. FieldKey.ERROR_HANDLED,
  1024. FieldKey.ERROR_UNHANDLED,
  1025. FieldKey.ERROR_RECEIVED,
  1026. FieldKey.LEVEL,
  1027. FieldKey.STACK_ABS_PATH,
  1028. FieldKey.STACK_FILENAME,
  1029. FieldKey.STACK_PACKAGE,
  1030. FieldKey.STACK_MODULE,
  1031. FieldKey.STACK_FUNCTION,
  1032. FieldKey.STACK_IN_APP,
  1033. FieldKey.STACK_COLNO,
  1034. FieldKey.STACK_LINENO,
  1035. FieldKey.STACK_STACK_LEVEL,
  1036. // contexts.key and contexts.value omitted on purpose.
  1037. // Transaction event fields.
  1038. FieldKey.TRANSACTION_DURATION,
  1039. FieldKey.TRANSACTION_OP,
  1040. FieldKey.TRANSACTION_STATUS,
  1041. FieldKey.TRACE,
  1042. FieldKey.TRACE_SPAN,
  1043. FieldKey.TRACE_PARENT_SPAN,
  1044. // Field alises defined in src/sentry/api/event_search.py
  1045. FieldKey.PROJECT,
  1046. FieldKey.ISSUE,
  1047. FieldKey.USER_DISPLAY,
  1048. // Span Op fields
  1049. SpanOpBreakdown.SpansBrowser,
  1050. SpanOpBreakdown.SpansDb,
  1051. SpanOpBreakdown.SpansHttp,
  1052. SpanOpBreakdown.SpansResource,
  1053. SpanOpBreakdown.SpansUi,
  1054. ];
  1055. enum ReplayFieldKey {
  1056. BROWSER_NAME = 'browser.name',
  1057. BROWSER_VERSION = 'browser.version',
  1058. COUNT_ERRORS = 'countErrors',
  1059. COUNT_SEGMENTS = 'countSegments',
  1060. // COUNT_URLS = 'countUrls',
  1061. DEVICE_MODEL = 'device.model',
  1062. DURATION = 'duration',
  1063. // ERROR_IDS = 'errorIds',
  1064. // LONGEST_TRANSACTION = 'longestTransaction',
  1065. OS_NAME = 'os.name',
  1066. OS_VERSION = 'os.version',
  1067. RELEASES = 'releases',
  1068. // TRACE_IDS = 'traceIds',
  1069. URLS = 'urls',
  1070. USER_IP_ADDRESS = 'user.ipAddress',
  1071. USER_NAME = 'user.name',
  1072. }
  1073. export const REPLAY_FIELDS = [
  1074. ReplayFieldKey.BROWSER_NAME,
  1075. ReplayFieldKey.BROWSER_VERSION,
  1076. ReplayFieldKey.COUNT_ERRORS,
  1077. ReplayFieldKey.COUNT_SEGMENTS,
  1078. FieldKey.DEVICE_BRAND,
  1079. FieldKey.DEVICE_FAMILY,
  1080. ReplayFieldKey.DEVICE_MODEL,
  1081. FieldKey.DEVICE_NAME,
  1082. FieldKey.DIST,
  1083. ReplayFieldKey.DURATION,
  1084. FieldKey.ID,
  1085. ReplayFieldKey.OS_NAME,
  1086. ReplayFieldKey.OS_VERSION,
  1087. FieldKey.PLATFORM,
  1088. ReplayFieldKey.RELEASES,
  1089. FieldKey.SDK_NAME,
  1090. FieldKey.SDK_VERSION,
  1091. ReplayFieldKey.URLS,
  1092. FieldKey.USER_EMAIL,
  1093. FieldKey.USER_ID,
  1094. ReplayFieldKey.USER_IP_ADDRESS,
  1095. ReplayFieldKey.USER_NAME,
  1096. ];
  1097. const REPLAY_FIELD_DEFINITIONS: Record<ReplayFieldKey, FieldDefinition> = {
  1098. [ReplayFieldKey.BROWSER_NAME]: {
  1099. desc: t('Name of the brower'),
  1100. kind: FieldKind.FIELD,
  1101. valueType: FieldValueType.STRING,
  1102. },
  1103. [ReplayFieldKey.BROWSER_VERSION]: {
  1104. desc: t('Version number of the Browser'),
  1105. kind: FieldKind.FIELD,
  1106. valueType: FieldValueType.STRING,
  1107. },
  1108. [ReplayFieldKey.COUNT_ERRORS]: {
  1109. desc: t('Number of errors in the replay'),
  1110. kind: FieldKind.FIELD,
  1111. valueType: FieldValueType.INTEGER,
  1112. },
  1113. [ReplayFieldKey.COUNT_SEGMENTS]: {
  1114. desc: t('Number of segments in the replay'),
  1115. kind: FieldKind.FIELD,
  1116. valueType: FieldValueType.INTEGER,
  1117. },
  1118. [ReplayFieldKey.DEVICE_MODEL]: {
  1119. desc: t('Model of device'),
  1120. kind: FieldKind.FIELD,
  1121. valueType: FieldValueType.STRING,
  1122. },
  1123. [ReplayFieldKey.DURATION]: {
  1124. desc: t('Duration of the replay, in seconds'),
  1125. kind: FieldKind.FIELD,
  1126. valueType: FieldValueType.DURATION,
  1127. },
  1128. [ReplayFieldKey.OS_NAME]: {
  1129. desc: t('Name of the Operating System'),
  1130. kind: FieldKind.FIELD,
  1131. valueType: FieldValueType.STRING,
  1132. },
  1133. [ReplayFieldKey.OS_VERSION]: {
  1134. desc: t('Version number of the Operating System'),
  1135. kind: FieldKind.FIELD,
  1136. valueType: FieldValueType.STRING,
  1137. },
  1138. [ReplayFieldKey.RELEASES]: {
  1139. desc: t('Releases this Replay spans across'),
  1140. kind: FieldKind.FIELD,
  1141. valueType: FieldValueType.STRING,
  1142. },
  1143. [ReplayFieldKey.URLS]: {
  1144. desc: t('List of urls that were visited within the Replay'),
  1145. kind: FieldKind.FIELD,
  1146. valueType: FieldValueType.STRING,
  1147. },
  1148. [ReplayFieldKey.USER_IP_ADDRESS]: {
  1149. desc: t('IP Address of the user'),
  1150. kind: FieldKind.FIELD,
  1151. valueType: FieldValueType.STRING,
  1152. },
  1153. [ReplayFieldKey.USER_NAME]: {
  1154. desc: t('Name of the user'),
  1155. kind: FieldKind.FIELD,
  1156. valueType: FieldValueType.STRING,
  1157. },
  1158. };
  1159. export const getFieldDefinition = (
  1160. key: string,
  1161. type: 'event' | 'replay' = 'event'
  1162. ): FieldDefinition | null => {
  1163. switch (type) {
  1164. case 'replay':
  1165. if (key in REPLAY_FIELD_DEFINITIONS) {
  1166. return REPLAY_FIELD_DEFINITIONS[key];
  1167. }
  1168. if (REPLAY_FIELDS.includes(key as FieldKey)) {
  1169. return EVENT_FIELD_DEFINITIONS[key];
  1170. }
  1171. return null;
  1172. case 'event':
  1173. default:
  1174. return EVENT_FIELD_DEFINITIONS[key] ?? null;
  1175. }
  1176. };