index.ts 28 KB

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