Skip to content

Commit c570bd6

Browse files
committed
Frontend to show watch app size metrics
1 parent df2e561 commit c570bd6

File tree

2 files changed

+102
-24
lines changed

2 files changed

+102
-24
lines changed

static/app/views/preprod/buildDetails/sidebar/buildDetailsSidebarAppInfo.tsx

Lines changed: 84 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import styled from '@emotion/styled';
22
import {PlatformIcon} from 'platformicons';
33

44
import {CodeBlock} from '@sentry/scraps/code';
5-
import {Flex} from '@sentry/scraps/layout';
5+
import {Flex, Stack} from '@sentry/scraps/layout';
66
import {Heading, Text} from '@sentry/scraps/text';
77
import {Tooltip} from '@sentry/scraps/tooltip';
88

@@ -12,8 +12,10 @@ import {t} from 'sentry/locale';
1212
import {formatBytesBase10} from 'sentry/utils/bytes/formatBytesBase10';
1313
import {getFormat, getFormattedDate, getUtcToSystem} from 'sentry/utils/dates';
1414
import {openInstallModal} from 'sentry/views/preprod/components/installModal';
15+
import {MetricsArtifactType} from 'sentry/views/preprod/types/appSizeTypes';
1516
import {
1617
BuildDetailsSizeAnalysisState,
18+
getPrimarySizeMetric,
1719
type BuildDetailsAppInfo,
1820
type BuildDetailsSizeInfo,
1921
} from 'sentry/views/preprod/types/buildDetailsTypes';
@@ -40,6 +42,86 @@ export function BuildDetailsSidebarAppInfo(props: BuildDetailsSidebarAppInfoProp
4042
timeZone: true,
4143
});
4244

45+
let sizeInfoGroup = null;
46+
if (
47+
props.sizeInfo &&
48+
props.sizeInfo.state === BuildDetailsSizeAnalysisState.COMPLETED
49+
) {
50+
const primarySizeMetric = getPrimarySizeMetric(props.sizeInfo);
51+
const watchAppMetrics = props.sizeInfo.size_metrics.find(
52+
metric => metric.metrics_artifact_type === MetricsArtifactType.WATCH_ARTIFACT
53+
);
54+
55+
let installSizeContent = (
56+
<Text size="md">
57+
{formatBytesBase10(primarySizeMetric?.install_size_bytes ?? 0)}
58+
</Text>
59+
);
60+
let downloadSizeContent = (
61+
<Text size="md">
62+
{formatBytesBase10(primarySizeMetric?.download_size_bytes ?? 0)}
63+
</Text>
64+
);
65+
if (watchAppMetrics) {
66+
installSizeContent = (
67+
<Tooltip
68+
title={
69+
<Stack>
70+
<Text size="md">
71+
{t('App')}: {formatBytesBase10(watchAppMetrics.install_size_bytes)}
72+
</Text>
73+
<Text size="md">
74+
{t('Watch app')}: {formatBytesBase10(watchAppMetrics.install_size_bytes)}
75+
</Text>
76+
</Stack>
77+
}
78+
position="left"
79+
>
80+
<Text size="md" underline="dotted">
81+
{formatBytesBase10(watchAppMetrics.install_size_bytes)}
82+
</Text>
83+
</Tooltip>
84+
);
85+
downloadSizeContent = (
86+
<Tooltip
87+
title={
88+
<Stack>
89+
<Text size="md">
90+
{t('App')}:{' '}
91+
{formatBytesBase10(primarySizeMetric?.download_size_bytes ?? 0)}
92+
</Text>
93+
<Text size="md">
94+
{t('Watch app')}: {formatBytesBase10(watchAppMetrics.download_size_bytes)}
95+
</Text>
96+
</Stack>
97+
}
98+
position="left"
99+
>
100+
<Text size="md" underline="dotted">
101+
{formatBytesBase10(primarySizeMetric?.download_size_bytes ?? 0)}
102+
</Text>
103+
</Tooltip>
104+
);
105+
}
106+
107+
sizeInfoGroup = (
108+
<Flex gap="sm">
109+
<Flex direction="column" gap="xs" flex={1}>
110+
<Tooltip title={labels.installSizeDescription} position="left">
111+
<Heading as="h4">{labels.installSizeLabel}</Heading>
112+
</Tooltip>
113+
{installSizeContent}
114+
</Flex>
115+
<Flex direction="column" gap="xs" flex={1}>
116+
<Tooltip title={labels.downloadSizeDescription} position="left">
117+
<Heading as="h4">{labels.downloadSizeLabel}</Heading>
118+
</Tooltip>
119+
{downloadSizeContent}
120+
</Flex>
121+
</Flex>
122+
);
123+
}
124+
43125
return (
44126
<Flex direction="column" gap="xl">
45127
<Flex align="center" gap="sm">
@@ -49,27 +131,7 @@ export function BuildDetailsSidebarAppInfo(props: BuildDetailsSidebarAppInfoProp
49131
{props.appInfo.name && <Heading as="h3">{props.appInfo.name}</Heading>}
50132
</Flex>
51133

52-
{props.sizeInfo &&
53-
props.sizeInfo.state === BuildDetailsSizeAnalysisState.COMPLETED && (
54-
<Flex gap="sm">
55-
<Flex direction="column" gap="xs" flex={1}>
56-
<Tooltip title={labels.installSizeDescription} position="left">
57-
<Heading as="h4">{labels.installSizeLabel}</Heading>
58-
</Tooltip>
59-
<Text size="md">
60-
{formatBytesBase10(props.sizeInfo.install_size_bytes)}
61-
</Text>
62-
</Flex>
63-
<Flex direction="column" gap="xs" flex={1}>
64-
<Tooltip title={labels.downloadSizeDescription} position="left">
65-
<Heading as="h4">{labels.downloadSizeLabel}</Heading>
66-
</Tooltip>
67-
<Text size="md">
68-
{formatBytesBase10(props.sizeInfo.download_size_bytes)}
69-
</Text>
70-
</Flex>
71-
</Flex>
72-
)}
134+
{sizeInfoGroup}
73135

74136
<Flex wrap="wrap" gap="md">
75137
<Flex gap="2xs" align="center">

static/app/views/preprod/types/buildDetailsTypes.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
/* eslint-disable typescript-sort-keys/interface */
2+
import {MetricsArtifactType} from 'sentry/views/preprod/types/appSizeTypes';
3+
14
import type {Platform} from './sharedTypes';
25

36
export interface BuildDetailsApiResponse {
@@ -42,6 +45,12 @@ export interface BuildDetailsVcsInfo {
4245
provider?: string | null;
4346
}
4447

48+
interface BuildDetailsSizeInfoSizeMetric {
49+
metrics_artifact_type: MetricsArtifactType;
50+
install_size_bytes: number;
51+
download_size_bytes: number;
52+
}
53+
4554
interface BuildDetailsSizeInfoPending {
4655
state: BuildDetailsSizeAnalysisState.PENDING;
4756
}
@@ -51,9 +60,8 @@ interface BuildDetailsSizeInfoProcessing {
5160
}
5261

5362
interface BuildDetailsSizeInfoCompleted {
54-
download_size_bytes: number;
55-
install_size_bytes: number;
5663
state: BuildDetailsSizeAnalysisState.COMPLETED;
64+
size_metrics: BuildDetailsSizeInfoSizeMetric[];
5765
}
5866

5967
interface BuildDetailsSizeInfoFailed {
@@ -83,6 +91,14 @@ export function isSizeInfoProcessing(
8391
);
8492
}
8593

94+
export function getPrimarySizeMetric(
95+
sizeInfo: BuildDetailsSizeInfoCompleted
96+
): BuildDetailsSizeInfoSizeMetric | undefined {
97+
return sizeInfo.size_metrics.find(
98+
metric => metric.metrics_artifact_type === MetricsArtifactType.MAIN_ARTIFACT
99+
);
100+
}
101+
86102
export enum BuildDetailsState {
87103
UPLOADING = 0,
88104
UPLOADED = 1,

0 commit comments

Comments
 (0)