Skip to content

Commit f77d7f8

Browse files
committed
Remove org member listing from frontend
1 parent 5f6494e commit f77d7f8

File tree

15 files changed

+1660
-338
lines changed

15 files changed

+1660
-338
lines changed

components/dashboard/src/Insights.tsx

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
* See License.AGPL.txt in the project root for license information.
55
*/
66

7-
import type { OrganizationMember } from "@gitpod/public-api/lib/gitpod/v1/organization_pb";
87
import { LoadingState } from "@podkit/loading/LoadingState";
98
import { Heading2, Subheading } from "@podkit/typography/Headings";
109
import classNames from "classnames";
@@ -14,7 +13,6 @@ import Alert from "./components/Alert";
1413
import Header from "./components/Header";
1514
import { Item, ItemField, ItemsList } from "./components/ItemsList";
1615
import { useWorkspaceSessions } from "./data/insights/list-workspace-sessions-query";
17-
import { useListOrganizationMembers } from "./data/organizations/members-query";
1816
import { WorkspaceSessionGroup } from "./insights/WorkspaceSessionGroup";
1917
import { gitpodHostUrl } from "./service/service";
2018
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@podkit/select/Select";
@@ -49,8 +47,6 @@ export const Insights = () => {
4947
from: upperBound,
5048
to: lowerBound,
5149
});
52-
const membersQuery = useListOrganizationMembers();
53-
const members: OrganizationMember[] = useMemo(() => membersQuery.data || [], [membersQuery.data]);
5450

5551
const hasMoreThanOnePage = (data?.pages.length ?? 0) > 1;
5652
const sessions = useMemo(() => data?.pages.flatMap((p) => p) ?? [], [data]);
@@ -123,13 +119,8 @@ export const Insights = () => {
123119
if (!sessions?.length) {
124120
return null;
125121
}
126-
const member = members.find(
127-
(m) => m.userId === sessions[0]?.workspace?.metadata?.ownerId,
128-
);
129122

130-
return (
131-
<WorkspaceSessionGroup key={id} id={id} sessions={sessions} member={member} />
132-
);
123+
return <WorkspaceSessionGroup key={id} id={id} sessions={sessions} />;
133124
})}
134125
</Accordion>
135126
)}

components/dashboard/src/insights/WorkspaceSession.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@ import { displayTime } from "./WorkspaceSessionGroup";
99

1010
type Props = {
1111
session: WorkspaceSession;
12-
index: number;
1312
};
14-
export const WorkspaceSessionEntry = ({ session, index }: Props) => {
13+
export const WorkspaceSessionEntry = ({ session }: Props) => {
1514
const isRunning = session?.workspace?.status?.phase?.name === WorkspacePhase_Phase.RUNNING;
1615

1716
return (
18-
<li key={index} className="text-sm text-gray-600 dark:text-gray-300">
17+
<li className="text-sm text-gray-600 dark:text-gray-300">
1918
{session.creationTime ? displayTime(session.creationTime) : "n/a"} (
2019
{session.id.slice(0, 7) || "No instance ID"}){isRunning ? " - running" : ""}
2120
</li>

components/dashboard/src/insights/WorkspaceSessionGroup.tsx

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66

77
import { Timestamp } from "@bufbuild/protobuf";
8-
import { OrganizationMember } from "@gitpod/public-api/lib/gitpod/v1/organization_pb";
98
import { WorkspaceSession, WorkspaceSpec_WorkspaceType } from "@gitpod/public-api/lib/gitpod/v1/workspace_pb";
109
import { AccordionContent, AccordionItem, AccordionTrigger } from "../components/accordion/Accordion";
1110
import { ReactComponent as UsageIcon } from "../images/usage-default.svg";
@@ -17,36 +16,35 @@ import { displayWorkspaceType } from "./download/download-sessions";
1716
type Props = {
1817
id: string;
1918
sessions: WorkspaceSession[];
20-
member?: OrganizationMember;
2119
};
22-
export const WorkspaceSessionGroup = ({ id, sessions, member }: Props) => {
20+
export const WorkspaceSessionGroup = ({ id, sessions }: Props) => {
2321
if (!sessions?.length) {
2422
return null;
2523
}
26-
const workspace = sessions[0].workspace!;
24+
const { workspace, owner } = sessions[0];
2725

2826
return (
2927
<AccordionItem key={id} value={id}>
3028
<div className="w-full p-3 grid grid-cols-12 gap-x-3 justify-between transition ease-in-out rounded-xl">
3129
<div className="flex flex-col col-span-2 my-auto">
3230
<span className="text-pk-content-primary text-md font-medium capitalize">
33-
{displayWorkspaceType(workspace.spec?.type)}
31+
{displayWorkspaceType(workspace?.spec?.type)}
3432
</span>
3533
<span className="text-sm text-pk-content-tertiary">
36-
{workspace.spec?.class ? <DisplayName workspaceClass={workspace?.spec?.class} /> : "n/a"}
34+
{workspace?.spec?.class ? <DisplayName workspaceClass={workspace?.spec?.class} /> : "n/a"}
3735
</span>
3836
</div>
3937
<div className="flex flex-col col-span-5 my-auto">
4038
<div className="flex">
41-
<span className="truncate text-pk-content-primary text-md font-medium">{workspace.id}</span>
39+
<span className="truncate text-pk-content-primary text-md font-medium">{workspace?.id}</span>
4240
</div>
4341
<span className="text-sm truncate text-pk-content-secondary">
44-
{workspace.metadata?.originalContextUrl && toRemoteURL(workspace.metadata?.originalContextUrl)}
42+
{workspace?.metadata?.originalContextUrl && toRemoteURL(workspace.metadata.originalContextUrl)}
4543
</span>
4644
</div>
4745
<div className="flex flex-col col-span-3 my-auto">
4846
<span className="text-right text-pk-content-secondary font-medium">
49-
{workspace.spec?.type === WorkspaceSpec_WorkspaceType.PREBUILD ? (
47+
{workspace?.spec?.type === WorkspaceSpec_WorkspaceType.PREBUILD ? (
5048
<div className="flex">
5149
<UsageIcon className="my-auto w-4 h-4 mr-1" />
5250
<span className="text-sm">Gitpod</span>
@@ -55,10 +53,10 @@ export const WorkspaceSessionGroup = ({ id, sessions, member }: Props) => {
5553
<div className="flex">
5654
<img
5755
className="my-auto rounded-full w-4 h-4 inline-block align-text-bottom mr-1 overflow-hidden"
58-
src={member?.avatarUrl ?? ""}
56+
src={owner?.avatarUrl ?? ""}
5957
alt=""
6058
/>
61-
<span className="text-sm">{member?.fullName}</span>
59+
<span className="text-sm">{owner?.name}</span>
6260
</div>
6361
)}
6462
</span>
@@ -73,8 +71,8 @@ export const WorkspaceSessionGroup = ({ id, sessions, member }: Props) => {
7371
<div className="px-3 py-2 space-y-2">
7472
<h4 className="text-sm font-medium text-pk-content-primary">Workspace starts:</h4>
7573
<ul className="space-y-1">
76-
{sessions.map((session, index) => (
77-
<WorkspaceSessionEntry key={session.id || index} session={session} index={index} />
74+
{sessions.map((session) => (
75+
<WorkspaceSessionEntry key={session.id} session={session} />
7876
))}
7977
</ul>
8078
</div>

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

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,12 @@ import {
1010
WorkspaceSession,
1111
WorkspaceSpec_WorkspaceType,
1212
} from "@gitpod/public-api/lib/gitpod/v1/workspace_pb";
13-
import { organizationClient, workspaceClient } from "../../service/public-api";
13+
import { workspaceClient } from "../../service/public-api";
1414
import dayjs from "dayjs";
1515
import { useQuery, useQueryClient } from "@tanstack/react-query";
1616
import { useCallback } from "react";
1717
import { noPersistence } from "../../data/setup";
1818
import { Timestamp } from "@bufbuild/protobuf";
19-
import type { OrganizationMember } from "@gitpod/public-api/lib/gitpod/v1/organization_pb";
2019

2120
const pageSize = 100;
2221
const maxPages = 100; // safety limit if something goes wrong with pagination
@@ -102,17 +101,9 @@ const downloadUsageCSV = async ({
102101
};
103102
}
104103

105-
const orgMembers = await organizationClient.listOrganizationMembers({
106-
organizationId,
107-
});
108-
109104
const rows = records
110105
.map((record) => {
111-
const member = orgMembers.members.find((m) => m.userId === record.workspace?.metadata?.ownerId);
112-
if (!member) {
113-
return null;
114-
}
115-
return transformSessionRecord(record, member);
106+
return transformSessionRecord(record);
116107
})
117108
.filter((r) => !!r);
118109
const fields = Object.keys(rows[0]) as (keyof ReturnType<typeof transformSessionRecord>)[];
@@ -167,7 +158,7 @@ const displayTime = (timestamp?: Timestamp) => {
167158
return timestamp.toDate().toISOString();
168159
};
169160

170-
export const transformSessionRecord = (session: WorkspaceSession, member: OrganizationMember) => {
161+
export const transformSessionRecord = (session: WorkspaceSession) => {
171162
const initializerType = session.workspace?.spec?.initializer?.specs;
172163
const prebuildInitializer = initializerType?.find((i) => i.spec.case === "prebuild")?.spec.value as
173164
| PrebuildInitializer
@@ -186,8 +177,8 @@ export const transformSessionRecord = (session: WorkspaceSession, member: Organi
186177
workspaceID: session?.workspace?.id,
187178
configurationID: session.workspace?.metadata?.configurationId,
188179
prebuildID: prebuildInitializer?.prebuildId,
189-
userID: member.userId,
190-
userName: member.fullName,
180+
userID: session.owner?.id,
181+
userName: session.owner?.name,
191182

192183
contextURL: session.workspace?.metadata?.originalContextUrl,
193184
contextURL_cloneURL: session.workspace?.metadata?.context?.repository?.cloneUrl,

components/public-api/gitpod/v1/workspace.proto

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -931,6 +931,17 @@ message WorkspaceSnapshot {
931931
}
932932

933933
message WorkspaceSession {
934+
message Owner {
935+
// id is the ID of the user who created the workspace
936+
string id = 1;
937+
938+
// name is the full name of the user who created the workspace
939+
string name = 2;
940+
941+
// avatar_url is the URL of the user's avatar
942+
string avatar_url = 3;
943+
}
944+
934945
message Metrics {
935946
// workspace_image_size is the size of the workspace image in bytes
936947
int64 workspace_image_size = 1;
@@ -950,4 +961,5 @@ message WorkspaceSession {
950961
google.protobuf.Timestamp stopped_time = 7;
951962

952963
Metrics metrics = 8;
964+
Owner owner = 9;
953965
}

0 commit comments

Comments
 (0)