siblingAutogroup.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import {useMemo} from 'react';
  2. import {useTheme} from '@emotion/react';
  3. import {IconGroup} from 'sentry/icons';
  4. import {t, tct} from 'sentry/locale';
  5. import type {TraceTreeNodeDetailsProps} from 'sentry/views/performance/newTraceDetails/traceDrawer/tabs/traceTreeNodeDetails';
  6. import {getTraceTabTitle} from 'sentry/views/performance/newTraceDetails/traceState/traceTabs';
  7. import {Row} from 'sentry/views/performance/traceDetails/styles';
  8. import {
  9. makeTraceNodeBarColor,
  10. type SiblingAutogroupNode,
  11. } from '../../traceModels/traceTree';
  12. import {IssueList} from './issues/issues';
  13. import {TraceDrawerComponents} from './styles';
  14. export function SiblingAutogroupNodeDetails({
  15. node,
  16. organization,
  17. onParentClick,
  18. onTabScrollToNode,
  19. }: TraceTreeNodeDetailsProps<SiblingAutogroupNode>) {
  20. const theme = useTheme();
  21. const issues = useMemo(() => {
  22. return [...node.errors, ...node.performance_issues];
  23. }, [node.errors, node.performance_issues]);
  24. const parentTransaction = node.parent_transaction;
  25. return (
  26. <TraceDrawerComponents.DetailContainer>
  27. <TraceDrawerComponents.HeaderContainer>
  28. <TraceDrawerComponents.Title>
  29. <TraceDrawerComponents.IconTitleWrapper>
  30. <TraceDrawerComponents.IconBorder
  31. backgroundColor={makeTraceNodeBarColor(theme, node)}
  32. >
  33. <IconGroup />
  34. </TraceDrawerComponents.IconBorder>
  35. <div style={{fontWeight: 'bold'}}>{t('Autogroup')}</div>
  36. </TraceDrawerComponents.IconTitleWrapper>
  37. </TraceDrawerComponents.Title>
  38. <TraceDrawerComponents.NodeActions
  39. organization={organization}
  40. node={node}
  41. onTabScrollToNode={onTabScrollToNode}
  42. />
  43. </TraceDrawerComponents.HeaderContainer>
  44. <IssueList issues={issues} node={node} organization={organization} />
  45. <TraceDrawerComponents.Table className="table key-value">
  46. <tbody>
  47. {parentTransaction ? (
  48. <Row title="Parent Transaction">
  49. <td className="value">
  50. <a onClick={() => onParentClick(parentTransaction)}>
  51. {getTraceTabTitle(parentTransaction)}
  52. </a>
  53. </td>
  54. </Row>
  55. ) : null}
  56. <Row title={t('Grouping Logic')}>
  57. {t('5 or more sibling spans with the same operation and description.')}
  58. </Row>
  59. <Row title={t('Group Count')}>{node.groupCount}</Row>
  60. <Row title={t('Grouping Key')}>
  61. {tct('Span operation: [operation] and description: [description]', {
  62. operation: node.value.op,
  63. description: node.value.description,
  64. })}
  65. </Row>
  66. </tbody>
  67. </TraceDrawerComponents.Table>
  68. </TraceDrawerComponents.DetailContainer>
  69. );
  70. }