miniAggregateWaterfall.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import {useTheme} from '@emotion/react';
  2. import styled from '@emotion/styled';
  3. import type {Location} from 'history';
  4. import {noFilter} from 'sentry/components/events/interfaces/spans/filter';
  5. import {ActualMinimap} from 'sentry/components/events/interfaces/spans/header';
  6. import {useSpanWaterfallModelFromTransaction} from 'sentry/components/events/interfaces/spans/useSpanWaterfallModelFromTransaction';
  7. import OpsBreakdown from 'sentry/components/events/opsBreakdown';
  8. import LoadingIndicator from 'sentry/components/loadingIndicator';
  9. import {space} from 'sentry/styles/space';
  10. type Props = {
  11. transaction: string;
  12. aggregateSpansLocation?: Location;
  13. };
  14. export function MiniAggregateWaterfall({transaction}: Props) {
  15. const theme = useTheme();
  16. // Pageload transactions don't seem to store http.method, so don't include one here
  17. const {waterfallModel, event, isLoading} =
  18. useSpanWaterfallModelFromTransaction(transaction);
  19. if (isLoading) {
  20. return <LoadingIndicator />;
  21. }
  22. const minimap = (
  23. <ActualMinimap
  24. theme={theme}
  25. spans={waterfallModel.getWaterfall({
  26. viewStart: 0,
  27. viewEnd: 1,
  28. })}
  29. generateBounds={waterfallModel.generateBounds({
  30. viewStart: 0,
  31. viewEnd: 1,
  32. })}
  33. dividerPosition={0}
  34. rootSpan={waterfallModel.rootSpan.span}
  35. />
  36. );
  37. const opsBreakdown = (
  38. <OpsBreakdown operationNameFilters={noFilter} event={event} topN={3} hideHeader />
  39. );
  40. return (
  41. <span>
  42. <MinimapContainer>{minimap}</MinimapContainer>
  43. <BreakdownContainer>{opsBreakdown}</BreakdownContainer>
  44. </span>
  45. );
  46. }
  47. const MinimapContainer = styled('div')`
  48. position: relative;
  49. height: 120px;
  50. `;
  51. // Not ideal, but OpsBreakdown has margins in nested components. Easiest way to update them for now.
  52. const BreakdownContainer = styled('div')`
  53. > div {
  54. margin: 0;
  55. }
  56. margin: ${space(2)} 0;
  57. `;