index.ts 29 KB

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