diff --git a/components/dashboard/src/admin/ProjectsSearch.tsx b/components/dashboard/src/admin/ProjectsSearch.tsx
index df6da0c64946b4..3cd993119b3455 100644
--- a/components/dashboard/src/admin/ProjectsSearch.tsx
+++ b/components/dashboard/src/admin/ProjectsSearch.tsx
@@ -97,7 +97,7 @@ export function ProjectsSearch() {
- k.key === 'Enter' && search()} onChange={(v) => { setSearchTerm(v.target.value) }} />
+ k.key === 'Enter' && search()} onChange={(v) => { setSearchTerm((v.target.value).trim()) }} />
diff --git a/components/dashboard/src/admin/TeamsSearch.tsx b/components/dashboard/src/admin/TeamsSearch.tsx
index 464f40e9461e78..105c40e5471074 100644
--- a/components/dashboard/src/admin/TeamsSearch.tsx
+++ b/components/dashboard/src/admin/TeamsSearch.tsx
@@ -81,7 +81,7 @@ export function TeamsSearch() {
- k.key === 'Enter' && search()} onChange={(v) => { setSearchTerm(v.target.value) }} />
+ k.key === 'Enter' && search()} onChange={(v) => { setSearchTerm((v.target.value).trim()) }} />
diff --git a/components/dashboard/src/admin/UserSearch.tsx b/components/dashboard/src/admin/UserSearch.tsx
index 6158f34c98309b..b15fb2ff3486a9 100644
--- a/components/dashboard/src/admin/UserSearch.tsx
+++ b/components/dashboard/src/admin/UserSearch.tsx
@@ -72,7 +72,7 @@ export default function UserSearch() {
- ke.key === 'Enter' && search() } onChange={(v) => { setSearchTerm(v.target.value) }} />
+ ke.key === 'Enter' && search() } onChange={(v) => { setSearchTerm((v.target.value).trim()) }} />
diff --git a/components/dashboard/src/admin/WorkspacesSearch.tsx b/components/dashboard/src/admin/WorkspacesSearch.tsx
index a13c58fee4a889..612f3ae743b1be 100644
--- a/components/dashboard/src/admin/WorkspacesSearch.tsx
+++ b/components/dashboard/src/admin/WorkspacesSearch.tsx
@@ -68,27 +68,19 @@ export function WorkspaceSearch(props: Props) {
const search = async () => {
setSearching(true);
try {
- let searchTerm: string | undefined = queryTerm;
- const query: AdminGetWorkspacesQuery = {
- ownerId: props?.user?.id,
- };
- if (matchesInstanceIdOrLegacyWorkspaceIdExactly(searchTerm)) {
- query.instanceIdOrWorkspaceId = searchTerm;
- } else if (matchesNewWorkspaceIdExactly(searchTerm)) {
- query.workspaceId = searchTerm;
- }
- if (query.workspaceId || query.instanceId || query.instanceIdOrWorkspaceId) {
- searchTerm = undefined;
+ const query: AdminGetWorkspacesQuery = {};
+ if (matchesInstanceIdOrLegacyWorkspaceIdExactly(queryTerm)) {
+ query.instanceIdOrWorkspaceId = queryTerm;
+ } else if (matchesNewWorkspaceIdExactly(queryTerm)) {
+ query.workspaceId = queryTerm;
}
- // const searchTerm = searchTerm;
const result = await getGitpodService().server.adminGetWorkspaces({
limit: 100,
orderBy: 'instanceCreationTime',
offset: 0,
orderDir: "desc",
...query,
- searchTerm,
});
setSearchResult(result);
} finally {
@@ -104,7 +96,9 @@ export function WorkspaceSearch(props: Props) {
- ke.key === 'Enter' && search() } onChange={(v) => { setQueryTerm(v.target.value) }} />
+ ke.key === 'Enter' && search() }
+ onChange={(v) => { setQueryTerm((v.target.value).trim()) }} />
diff --git a/components/gitpod-db/src/typeorm/workspace-db-impl.ts b/components/gitpod-db/src/typeorm/workspace-db-impl.ts
index 19a33e760aa1c6..c5c2c42ebd30ef 100644
--- a/components/gitpod-db/src/typeorm/workspace-db-impl.ts
+++ b/components/gitpod-db/src/typeorm/workspace-db-impl.ts
@@ -754,7 +754,7 @@ export abstract class AbstractTypeORMWorkspaceDBImpl implements WorkspaceDB {
return await queryBuilder.getCount();
}
- public async findAllWorkspaceAndInstances(offset: number, limit: number, orderBy: keyof WorkspaceAndInstance, orderDir: "ASC" | "DESC", query?: AdminGetWorkspacesQuery, searchTerm?: string): Promise<{ total: number, rows: WorkspaceAndInstance[] }> {
+ public async findAllWorkspaceAndInstances(offset: number, limit: number, orderBy: keyof WorkspaceAndInstance, orderDir: "ASC" | "DESC", query?: AdminGetWorkspacesQuery): Promise<{ total: number, rows: WorkspaceAndInstance[] }> {
let whereConditions = [];
let whereConditionParams: any = {};
let instanceIdQuery: boolean = false;
@@ -765,6 +765,9 @@ export abstract class AbstractTypeORMWorkspaceDBImpl implements WorkspaceDB {
whereConditions.push("(wsi.id = :instanceId OR ws.id = :workspaceId)");
whereConditionParams.instanceId = query.instanceIdOrWorkspaceId;
whereConditionParams.workspaceId = query.instanceIdOrWorkspaceId;
+ } else if (query.workspaceId) {
+ whereConditions.push("ws.id = :workspaceId");
+ whereConditionParams.workspaceId = query.workspaceId;
} else if (query.instanceId) {
// in addition to adding "instanceId" to the "WHERE" clause like for the other workspace-guided queries,
// we modify the JOIN condition below to a) select the correct instance and b) make the query faster
@@ -772,21 +775,9 @@ export abstract class AbstractTypeORMWorkspaceDBImpl implements WorkspaceDB {
whereConditions.push("wsi.id = :instanceId");
whereConditionParams.instanceId = query.instanceId;
- } else if (query.workspaceId) {
- whereConditions.push("ws.id = :workspaceId");
- whereConditionParams.workspaceId = query.workspaceId;
- } else if (query.ownerId) {
- // If an owner id is provided only search for workspaces belonging to that user.
- whereConditions.push("ws.ownerId = :ownerId");
- whereConditionParams.ownerId = query.ownerId;
}
}
- if (searchTerm) {
- // If a search term is provided perform a wildcard search in the context url or exact match on the workspace id (aka workspace name) or the instance id.
- whereConditions.push(`ws.contextURL LIKE '%${searchTerm}%'`);
- }
-
let orderField: string = orderBy;
switch (orderField) {
case "workspaceId": orderField = "ws.id"; break;
diff --git a/components/gitpod-db/src/workspace-db.spec.db.ts b/components/gitpod-db/src/workspace-db.spec.db.ts
index a1c516c048416f..79b4ec676c15ec 100644
--- a/components/gitpod-db/src/workspace-db.spec.db.ts
+++ b/components/gitpod-db/src/workspace-db.spec.db.ts
@@ -314,28 +314,6 @@ import { DBWorkspaceInstance } from './typeorm/entity/db-workspace-instance';
expect(dbResult.total).to.eq(1);
}
- @test(timeout(10000))
- public async testFindAllWorkspaceAndInstances_contextUrl() {
- await Promise.all([
- this.db.store(this.ws),
- this.db.storeInstance(this.wsi1),
- this.db.storeInstance(this.wsi2),
- this.db.store(this.ws2),
- this.db.storeInstance(this.ws2i1),
- ]);
- const dbResult = await this.db.findAllWorkspaceAndInstances(0, 10, "contextURL", "DESC", undefined, this.ws.contextURL);
- // It should only find one workspace instance
- expect(dbResult.total).to.eq(1);
-
- const workspaceAndInstance = dbResult.rows[0]
-
- // It should find the workspace that uses the queried context url
- expect(workspaceAndInstance.workspaceId).to.eq(this.ws.id)
-
- // It should select the workspace instance that was most recently created
- expect(workspaceAndInstance.instanceId).to.eq(this.wsi2.id)
- }
-
@test(timeout(10000))
public async testFindAllWorkspaceAndInstances_workspaceId() {
await Promise.all([
@@ -344,7 +322,7 @@ import { DBWorkspaceInstance } from './typeorm/entity/db-workspace-instance';
this.db.store(this.ws2),
this.db.storeInstance(this.ws2i1),
]);
- const dbResult = await this.db.findAllWorkspaceAndInstances(0, 10, "workspaceId", "DESC", { workspaceId: this.ws2.id }, undefined);
+ const dbResult = await this.db.findAllWorkspaceAndInstances(0, 10, "workspaceId", "DESC", { workspaceId: this.ws2.id });
// It should only find one workspace instance
expect(dbResult.total).to.eq(1);
@@ -361,7 +339,7 @@ import { DBWorkspaceInstance } from './typeorm/entity/db-workspace-instance';
this.db.store(this.ws2),
this.db.storeInstance(this.ws2i1),
]);
- const dbResult = await this.db.findAllWorkspaceAndInstances(0, 10, "workspaceId", "DESC", { instanceIdOrWorkspaceId: this.ws2.id }, undefined);
+ const dbResult = await this.db.findAllWorkspaceAndInstances(0, 10, "workspaceId", "DESC", { instanceIdOrWorkspaceId: this.ws2.id });
// It should only find one workspace instance
expect(dbResult.total).to.eq(1);
@@ -379,7 +357,7 @@ import { DBWorkspaceInstance } from './typeorm/entity/db-workspace-instance';
this.db.store(this.ws2),
this.db.storeInstance(this.ws2i1),
]);
- const dbResult = await this.db.findAllWorkspaceAndInstances(0, 10, "instanceId", "DESC", { instanceId: this.wsi1.id }, undefined);
+ const dbResult = await this.db.findAllWorkspaceAndInstances(0, 10, "instanceId", "DESC", { instanceId: this.wsi1.id });
// It should only find one workspace instance
expect(dbResult.total).to.eq(1);
diff --git a/components/gitpod-db/src/workspace-db.ts b/components/gitpod-db/src/workspace-db.ts
index 9cc719d8ad7ec6..3dca3d2cbb813f 100644
--- a/components/gitpod-db/src/workspace-db.ts
+++ b/components/gitpod-db/src/workspace-db.ts
@@ -81,7 +81,7 @@ export interface WorkspaceDB {
findWorkspacesForContentDeletion(minSoftDeletedTimeInDays: number, limit: number): Promise;
findPrebuiltWorkspacesForGC(daysUnused: number, limit: number): Promise;
findAllWorkspaces(offset: number, limit: number, orderBy: keyof Workspace, orderDir: "ASC" | "DESC", ownerId?: string, searchTerm?: string, minCreationTime?: Date, maxCreationDateTime?: Date, type?: WorkspaceType): Promise<{ total: number, rows: Workspace[] }>;
- findAllWorkspaceAndInstances(offset: number, limit: number, orderBy: keyof WorkspaceAndInstance, orderDir: "ASC" | "DESC", query?: AdminGetWorkspacesQuery, searchTerm?: string): Promise<{ total: number, rows: WorkspaceAndInstance[] }>;
+ findAllWorkspaceAndInstances(offset: number, limit: number, orderBy: keyof WorkspaceAndInstance, orderDir: "ASC" | "DESC", query?: AdminGetWorkspacesQuery): Promise<{ total: number, rows: WorkspaceAndInstance[] }>;
findWorkspaceAndInstance(id: string): Promise;
findInstancesByPhaseAndRegion(phase: string, region: string): Promise;
diff --git a/components/gitpod-protocol/src/admin-protocol.ts b/components/gitpod-protocol/src/admin-protocol.ts
index 5c23f40691ea29..391b7166b802c6 100644
--- a/components/gitpod-protocol/src/admin-protocol.ts
+++ b/components/gitpod-protocol/src/admin-protocol.ts
@@ -116,5 +116,4 @@ export type AdminGetWorkspacesQuery = {
instanceIdOrWorkspaceId?: string;
instanceId?: string;
workspaceId?: string;
- ownerId?: string;
};
diff --git a/components/server/ee/src/workspace/gitpod-server-impl.ts b/components/server/ee/src/workspace/gitpod-server-impl.ts
index 4de1bf1c3195c9..defe22809fa153 100644
--- a/components/server/ee/src/workspace/gitpod-server-impl.ts
+++ b/components/server/ee/src/workspace/gitpod-server-impl.ts
@@ -586,7 +586,7 @@ export class GitpodServerEEImpl extends GitpodServerImpl {
await this.guardAdminAccess("adminGetWorkspaces", { req }, Permission.ADMIN_WORKSPACES);
- return await this.workspaceDb.trace(ctx).findAllWorkspaceAndInstances(req.offset, req.limit, req.orderBy, req.orderDir === "asc" ? "ASC" : "DESC", req, req.searchTerm);
+ return await this.workspaceDb.trace(ctx).findAllWorkspaceAndInstances(req.offset, req.limit, req.orderBy, req.orderDir === "asc" ? "ASC" : "DESC", req);
}
async adminGetWorkspace(ctx: TraceContext, workspaceId: string): Promise {