index.ts 28 KB

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