eventEntry.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import * as React from 'react';
  2. import Breadcrumbs from 'app/components/events/interfaces/breadcrumbs';
  3. import Csp from 'app/components/events/interfaces/csp';
  4. import DebugMeta from 'app/components/events/interfaces/debugMeta';
  5. import DebugMetaV2 from 'app/components/events/interfaces/debugMeta-v2';
  6. import Exception from 'app/components/events/interfaces/exception';
  7. import Generic from 'app/components/events/interfaces/generic';
  8. import Message from 'app/components/events/interfaces/message';
  9. import Request from 'app/components/events/interfaces/request';
  10. import Spans from 'app/components/events/interfaces/spans';
  11. import Stacktrace from 'app/components/events/interfaces/stacktrace';
  12. import Template from 'app/components/events/interfaces/template';
  13. import Threads from 'app/components/events/interfaces/threads';
  14. import {Group, Organization, Project, SharedViewOrganization} from 'app/types';
  15. import {Entry, EntryType, Event, EventTransaction} from 'app/types/event';
  16. type Props = {
  17. entry: Entry;
  18. projectSlug: Project['slug'];
  19. event: Event;
  20. organization: SharedViewOrganization | Organization;
  21. group?: Group;
  22. };
  23. function EventEntry({entry, projectSlug, event, organization, group}: Props) {
  24. const hasHierarchicalGrouping =
  25. !!organization.features?.includes('grouping-stacktrace-ui') &&
  26. !!(event.metadata.current_tree_label || event.metadata.finest_tree_label);
  27. const groupingCurrentLevel = group?.metadata?.current_level;
  28. switch (entry.type) {
  29. case EntryType.EXCEPTION: {
  30. const {data, type} = entry;
  31. return (
  32. <Exception
  33. type={type}
  34. event={event}
  35. data={data}
  36. projectId={projectSlug}
  37. groupingCurrentLevel={groupingCurrentLevel}
  38. hasHierarchicalGrouping={hasHierarchicalGrouping}
  39. />
  40. );
  41. }
  42. case EntryType.MESSAGE: {
  43. const {data} = entry;
  44. return <Message data={data} />;
  45. }
  46. case EntryType.REQUEST: {
  47. const {data, type} = entry;
  48. return <Request type={type} event={event} data={data} />;
  49. }
  50. case EntryType.STACKTRACE: {
  51. const {data, type} = entry;
  52. return (
  53. <Stacktrace
  54. type={type}
  55. event={event}
  56. data={data}
  57. projectId={projectSlug}
  58. groupingCurrentLevel={groupingCurrentLevel}
  59. hasHierarchicalGrouping={hasHierarchicalGrouping}
  60. />
  61. );
  62. }
  63. case EntryType.TEMPLATE: {
  64. const {data, type} = entry;
  65. return <Template type={type} event={event} data={data} />;
  66. }
  67. case EntryType.CSP: {
  68. const {data} = entry;
  69. return <Csp event={event} data={data} />;
  70. }
  71. case EntryType.EXPECTCT:
  72. case EntryType.EXPECTSTAPLE:
  73. case EntryType.HPKP: {
  74. const {data, type} = entry;
  75. return <Generic type={type} data={data} />;
  76. }
  77. case EntryType.BREADCRUMBS: {
  78. const {data, type} = entry;
  79. return (
  80. <Breadcrumbs
  81. type={type}
  82. data={data}
  83. organization={organization as Organization}
  84. event={event}
  85. />
  86. );
  87. }
  88. case EntryType.THREADS: {
  89. const {data, type} = entry;
  90. return (
  91. <Threads
  92. type={type}
  93. event={event}
  94. data={data}
  95. projectId={projectSlug}
  96. groupingCurrentLevel={groupingCurrentLevel}
  97. hasHierarchicalGrouping={hasHierarchicalGrouping}
  98. />
  99. );
  100. }
  101. case EntryType.DEBUGMETA:
  102. const {data} = entry;
  103. const hasImagesLoadedV2Feature =
  104. !!organization.features?.includes('images-loaded-v2');
  105. if (hasImagesLoadedV2Feature) {
  106. return (
  107. <DebugMetaV2
  108. event={event}
  109. projectId={projectSlug}
  110. groupId={group?.id}
  111. organization={organization as Organization}
  112. data={data as React.ComponentProps<typeof DebugMetaV2>['data']}
  113. />
  114. );
  115. }
  116. return (
  117. <DebugMeta
  118. event={event}
  119. projectId={projectSlug}
  120. organization={organization as Organization}
  121. data={data}
  122. />
  123. );
  124. case EntryType.SPANS:
  125. return (
  126. <Spans
  127. event={event as EventTransaction}
  128. organization={organization as Organization}
  129. />
  130. );
  131. default:
  132. // this should not happen
  133. /* eslint no-console:0 */
  134. window.console &&
  135. console.error &&
  136. console.error('Unregistered interface: ' + (entry as any).type);
  137. return null;
  138. }
  139. }
  140. export default EventEntry;