Skip to content

Commit faf69e7

Browse files
committed
[dashboard] Export metrics into CSV
Tool: gitpod/catfood.gitpod.cloud
1 parent 39068e0 commit faf69e7

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

components/dashboard/src/Insights.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export const Insights = () => {
6363
"md:flex-row md:items-center md:space-x-4 md:space-y-0",
6464
)}
6565
>
66-
<DownloadUsage to={toDate} disabled={isLackingPermissions} />
66+
<DownloadInsights to={toDate} disabled={isLackingPermissions} />
6767
</div>
6868

6969
<div
@@ -166,7 +166,7 @@ type DownloadUsageProps = {
166166
to: Timestamp;
167167
disabled?: boolean;
168168
};
169-
export const DownloadUsage = ({ to, disabled }: DownloadUsageProps) => {
169+
export const DownloadInsights = ({ to, disabled }: DownloadUsageProps) => {
170170
const { data: org } = useCurrentOrg();
171171
const { toast } = useToast();
172172
// When we start the download, we disable the button for a short time

components/dashboard/src/insights/download/download-sessions.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import dayjs from "dayjs";
1515
import { useQuery, useQueryClient } from "@tanstack/react-query";
1616
import { useCallback } from "react";
1717
import { noPersistence } from "../../data/setup";
18-
import { Timestamp } from "@bufbuild/protobuf";
18+
import { Duration, Timestamp } from "@bufbuild/protobuf";
1919

2020
const pageSize = 100;
2121
const maxPages = 100; // safety limit if something goes wrong with pagination
@@ -154,6 +154,16 @@ const displayTime = (timestamp?: Timestamp) => {
154154
return timestamp.toDate().toISOString();
155155
};
156156

157+
const renderDuration = (duration?: Duration): string => {
158+
if (!duration) {
159+
return "";
160+
}
161+
162+
let seconds = Number(duration.seconds);
163+
seconds += duration.nanos / 1_000_000_000;
164+
return seconds.toString(10);
165+
};
166+
157167
export const transformSessionRecord = (session: WorkspaceSession) => {
158168
const initializerType = session.workspace?.spec?.initializer?.specs;
159169
const prebuildInitializer = initializerType?.find((i) => i.spec.case === "prebuild")?.spec.value as
@@ -190,6 +200,20 @@ export const transformSessionRecord = (session: WorkspaceSession) => {
190200
timeout: session.workspace?.spec?.timeout?.inactivity?.seconds,
191201
editor: session.workspace?.spec?.editor?.name,
192202
editorVersion: session.workspace?.spec?.editor?.version, // indicates whether user selected the stable or latest editor release channel
203+
204+
// initializer metrics
205+
contentInitGitDuration: renderDuration(session.metrics?.initializerMetrics?.git?.duration),
206+
contentInitGitSize: session.metrics?.initializerMetrics?.git?.size,
207+
contentInitFileDownloadDuration: renderDuration(session.metrics?.initializerMetrics?.fileDownload?.duration),
208+
contentInitFileDownloadSize: session.metrics?.initializerMetrics?.fileDownload?.size,
209+
contentInitSnapshotDuration: renderDuration(session.metrics?.initializerMetrics?.snapshot?.duration),
210+
contentInitSnapshotSize: session.metrics?.initializerMetrics?.snapshot?.size,
211+
contentInitBackupDuration: renderDuration(session.metrics?.initializerMetrics?.backup?.duration),
212+
contentInitBackupSize: session.metrics?.initializerMetrics?.backup?.size,
213+
contentInitPrebuildDuration: renderDuration(session.metrics?.initializerMetrics?.prebuild?.duration),
214+
contentInitPrebuildSize: session.metrics?.initializerMetrics?.prebuild?.size,
215+
contentInitCompositeDuration: renderDuration(session.metrics?.initializerMetrics?.composite?.duration),
216+
contentInitCompositeSize: session.metrics?.initializerMetrics?.composite?.size,
193217
};
194218

195219
return row;

0 commit comments

Comments
 (0)