index.tsx 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import styled from '@emotion/styled';
  2. import Breadcrumbs from 'sentry/components/breadcrumbs';
  3. import DatePageFilter from 'sentry/components/datePageFilter';
  4. import FeatureBadge from 'sentry/components/featureBadge';
  5. import * as Layout from 'sentry/components/layouts/thirds';
  6. import PageFilterBar from 'sentry/components/organizations/pageFilterBar';
  7. import {ProjectPageFilter} from 'sentry/components/organizations/projectPageFilter';
  8. import {t} from 'sentry/locale';
  9. import {RateUnits} from 'sentry/utils/discover/fields';
  10. import {useLocation} from 'sentry/utils/useLocation';
  11. import useOrganization from 'sentry/utils/useOrganization';
  12. import {useParams} from 'sentry/utils/useParams';
  13. import {normalizeUrl} from 'sentry/utils/withDomainRequired';
  14. import {PaddedContainer} from 'sentry/views/performance/browser/resources';
  15. import ResourceSummaryCharts from 'sentry/views/performance/browser/resources/resourceSummaryPage/resourceSummaryCharts';
  16. import ResourceSummaryTable from 'sentry/views/performance/browser/resources/resourceSummaryPage/resourceSummaryTable';
  17. import {ModulePageProviders} from 'sentry/views/performance/database/modulePageProviders';
  18. import {DurationCell} from 'sentry/views/starfish/components/tableCells/durationCell';
  19. import {ThroughputCell} from 'sentry/views/starfish/components/tableCells/throughputCell';
  20. import {useSpanMetrics} from 'sentry/views/starfish/queries/useSpanMetrics';
  21. import {SpanFunction, SpanMetricsField} from 'sentry/views/starfish/types';
  22. import {DataTitles, getThroughputTitle} from 'sentry/views/starfish/views/spans/types';
  23. import {Block, BlockContainer} from 'sentry/views/starfish/views/spanSummaryPage/block';
  24. import {SampleList} from 'sentry/views/starfish/views/spanSummaryPage/sampleList';
  25. const {SPAN_SELF_TIME, SPAN_OP, SPAN_DESCRIPTION} = SpanMetricsField;
  26. function ResourceSummary() {
  27. const organization = useOrganization();
  28. const {groupId} = useParams();
  29. const {
  30. query: {transaction},
  31. } = useLocation();
  32. const {data: spanMetrics} = useSpanMetrics(groupId, {}, [
  33. `avg(${SPAN_SELF_TIME})`,
  34. 'spm()',
  35. SPAN_OP,
  36. SPAN_DESCRIPTION,
  37. ]);
  38. return (
  39. <ModulePageProviders
  40. title={[t('Performance'), t('Resources'), t('Resource Summary')].join(' — ')}
  41. >
  42. <Layout.Header>
  43. <Layout.HeaderContent>
  44. <Breadcrumbs
  45. crumbs={[
  46. {
  47. label: 'Performance',
  48. to: normalizeUrl(`/organizations/${organization.slug}/performance/`),
  49. preservePageFilters: true,
  50. },
  51. {
  52. label: 'Resources',
  53. to: normalizeUrl(
  54. `/organizations/${organization.slug}/performance/browser/resources/`
  55. ),
  56. preservePageFilters: true,
  57. },
  58. {
  59. label: 'Resource Summary',
  60. },
  61. ]}
  62. />
  63. <Layout.Title>
  64. {spanMetrics[SpanMetricsField.SPAN_DESCRIPTION]}
  65. <FeatureBadge type="alpha" />
  66. </Layout.Title>
  67. </Layout.HeaderContent>
  68. </Layout.Header>
  69. <Layout.Body>
  70. <Layout.Main fullWidth>
  71. <HeaderContainer>
  72. <PaddedContainer>
  73. <PageFilterBar condensed>
  74. <ProjectPageFilter />
  75. <DatePageFilter alignDropdown="left" />
  76. </PageFilterBar>
  77. </PaddedContainer>
  78. <BlockContainer>
  79. <Block title={DataTitles.avg}>
  80. <DurationCell
  81. milliseconds={spanMetrics?.[`avg(${SpanMetricsField.SPAN_SELF_TIME})`]}
  82. />
  83. </Block>
  84. <Block title={getThroughputTitle('http')}>
  85. <ThroughputCell
  86. rate={spanMetrics?.[`${SpanFunction.SPM}()`] * 60}
  87. unit={RateUnits.PER_SECOND}
  88. />
  89. </Block>
  90. </BlockContainer>
  91. </HeaderContainer>
  92. <ResourceSummaryCharts groupId={groupId} />
  93. <ResourceSummaryTable />
  94. <SampleList groupId={groupId} transactionName={transaction as string} />
  95. </Layout.Main>
  96. </Layout.Body>
  97. </ModulePageProviders>
  98. );
  99. }
  100. const HeaderContainer = styled('div')`
  101. display: flex;
  102. justify-content: space-between;
  103. flex-wrap: wrap;
  104. `;
  105. export default ResourceSummary;