profileEventEvidence.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import {Button} from 'sentry/components/button';
  2. import {EventDataSection} from 'sentry/components/events/eventDataSection';
  3. import KeyValueList from 'sentry/components/events/interfaces/keyValueList';
  4. import {IconProfiling} from 'sentry/icons';
  5. import {t} from 'sentry/locale';
  6. import {Event} from 'sentry/types';
  7. import {generateEventSlug} from 'sentry/utils/discover/urls';
  8. import {getTransactionDetailsUrl} from 'sentry/utils/performance/urls';
  9. import {generateProfileFlamechartRouteWithHighlightFrame} from 'sentry/utils/profiling/routes';
  10. import useOrganization from 'sentry/utils/useOrganization';
  11. type ProfileEvidenceProps = {event: Event; projectSlug: string};
  12. export function ProfileEventEvidence({event, projectSlug}: ProfileEvidenceProps) {
  13. const organization = useOrganization();
  14. const evidenceData = event.occurrence?.evidenceData ?? {};
  15. const evidenceDisplay = event.occurrence?.evidenceDisplay ?? [];
  16. const keyValueListData = [
  17. ...(evidenceData.transactionId && evidenceData.transactionName
  18. ? [
  19. {
  20. subject: 'Transaction Name',
  21. key: 'Transaction Name',
  22. value: evidenceData.transactionName,
  23. actionButton: (
  24. <Button
  25. size="xs"
  26. to={getTransactionDetailsUrl(
  27. organization.slug,
  28. generateEventSlug({
  29. id: evidenceData.transactionId,
  30. project: projectSlug,
  31. }),
  32. undefined,
  33. {referrer: 'issue'}
  34. )}
  35. >
  36. {t('View Transaction')}
  37. </Button>
  38. ),
  39. },
  40. ]
  41. : []),
  42. ...(evidenceData.profileId
  43. ? [
  44. {
  45. subject: 'Profile ID',
  46. key: 'Profile ID',
  47. value: evidenceData.profileId,
  48. actionButton: (
  49. <Button
  50. size="xs"
  51. to={generateProfileFlamechartRouteWithHighlightFrame({
  52. profileId: evidenceData.profileId,
  53. projectSlug,
  54. orgSlug: organization.slug,
  55. frameName: evidenceData.frameName,
  56. framePackage: evidenceData.framePackage,
  57. query: {
  58. referrer: 'issue',
  59. },
  60. })}
  61. icon={<IconProfiling size="xs" />}
  62. >
  63. {t('View Profile')}
  64. </Button>
  65. ),
  66. },
  67. ]
  68. : []),
  69. ...evidenceDisplay.map(item => ({
  70. subject: item.name,
  71. key: item.name,
  72. value: item.value,
  73. })),
  74. ];
  75. return (
  76. <EventDataSection title="Function Evidence" type="evidence">
  77. <KeyValueList data={keyValueListData} shouldSort={false} />
  78. </EventDataSection>
  79. );
  80. }