@@ -9,12 +9,13 @@ import {
99 WorkspaceSession ,
1010 WorkspaceSpec_WorkspaceType ,
1111} from "@gitpod/public-api/lib/gitpod/v1/workspace_pb" ;
12- import { workspaceClient } from "../../service/public-api" ;
12+ import { organizationClient , workspaceClient } from "../../service/public-api" ;
1313import dayjs from "dayjs" ;
1414import { useQuery , useQueryClient } from "@tanstack/react-query" ;
1515import { useCallback } from "react" ;
1616import { noPersistence } from "../../data/setup" ;
1717import { Timestamp } from "@bufbuild/protobuf" ;
18+ import type { OrganizationMember } from "@gitpod/public-api/lib/gitpod/v1/organization_pb" ;
1819
1920const pageSize = 100 ;
2021const maxPages = 100 ; // safety limit if something goes wrong with pagination
@@ -100,7 +101,19 @@ const downloadUsageCSV = async ({
100101 } ;
101102 }
102103
103- const rows = records . map ( transformSessionRecord ) . filter ( ( r ) => ! ! r ) ;
104+ const orgMembers = await organizationClient . listOrganizationMembers ( {
105+ organizationId,
106+ } ) ;
107+
108+ const rows = records
109+ . map ( ( record ) => {
110+ const member = orgMembers . members . find ( ( m ) => m . userId === record . workspace ?. metadata ?. ownerId ) ;
111+ if ( ! member ) {
112+ return null ;
113+ }
114+ return transformSessionRecord ( record , member ) ;
115+ } )
116+ . filter ( ( r ) => ! ! r ) ;
104117 const fields = Object . keys ( rows [ 0 ] ) as ( keyof ReturnType < typeof transformSessionRecord > ) [ ] ;
105118
106119 // TODO: look into a lib to handle this more robustly
@@ -123,6 +136,8 @@ const downloadUsageCSV = async ({
123136 // Prepend Header
124137 csvRows . unshift ( fields . join ( "," ) ) ;
125138
139+ console . log ( csvRows ) ;
140+
126141 const blob = new Blob ( [ `\ufeff${ csvRows . join ( "\n" ) } ` ] , {
127142 type : "text/csv;charset=utf-8" ,
128143 } ) ;
@@ -157,7 +172,7 @@ const displayTime = (timestamp?: Timestamp) => {
157172 return timestamp . toDate ( ) . toISOString ( ) ;
158173} ;
159174
160- export const transformSessionRecord = ( session : WorkspaceSession ) => {
175+ export const transformSessionRecord = ( session : WorkspaceSession , member : OrganizationMember ) => {
161176 const row = {
162177 // id: session.id, // although it's defined in the proto, it doesn't actually ever get applied
163178
@@ -171,8 +186,8 @@ export const transformSessionRecord = (session: WorkspaceSession) => {
171186 workspaceId : session ?. workspace ?. id ,
172187 instanceId : session . workspace ?. status ?. instanceId ,
173188 configurationId : session . workspace ?. metadata ?. configurationId ,
174- userId : session . workspace ?. metadata ?. ownerId ,
175- userName : session . workspace ?. metadata ?. ownerId , // todo(ft): add actual name somehow
189+ userId : member . userId ,
190+ userName : member . fullName , // todo(ft): add actual name somehow
176191 // userAvatarURL: metadata.userAvatarURL, // maybe?, probably not
177192
178193 contextURL : session . workspace ?. metadata ?. originalContextUrl ,
0 commit comments