|
6 | 6 |
|
7 | 7 | import { DownloadUrlRequest, DownloadUrlResponse, UploadUrlRequest, UploadUrlResponse } from '@gitpod/content-service/lib/blobs_pb';
|
8 | 8 | import { AppInstallationDB, UserDB, UserMessageViewsDB, WorkspaceDB, DBWithTracing, TracedWorkspaceDB, DBGitpodToken, DBUser, UserStorageResourcesDB, TeamDB } from '@gitpod/gitpod-db/lib';
|
9 |
| -import { AuthProviderEntry, AuthProviderInfo, Branding, CommitContext, Configuration, CreateWorkspaceMode, DisposableCollection, GetWorkspaceTimeoutResult, GitpodClient as GitpodApiClient, GitpodServer, GitpodToken, GitpodTokenType, InstallPluginsParams, PermissionName, PortVisibility, PrebuiltWorkspace, PrebuiltWorkspaceContext, PreparePluginUploadParams, ResolvedPlugins, ResolvePluginsParams, SetWorkspaceTimeoutResult, StartPrebuildContext, StartWorkspaceResult, Terms, Token, UninstallPluginParams, User, UserEnvVar, UserEnvVarValue, UserInfo, WhitelistedRepository, Workspace, WorkspaceContext, WorkspaceCreationResult, WorkspaceImageBuild, WorkspaceInfo, WorkspaceInstance, WorkspaceInstancePort, WorkspaceInstanceUser, WorkspaceTimeoutDuration, GuessGitTokenScopesParams, GuessedGitTokenScopes, Team, TeamMemberInfo, TeamMembershipInvite, CreateProjectParams, Project, ProviderRepository, TeamMemberRole, WithDefaultConfig, FindPrebuildsParams, PrebuildWithStatus, StartPrebuildResult, ClientHeaderFields } from '@gitpod/gitpod-protocol'; |
| 9 | +import { AuthProviderEntry, AuthProviderInfo, Branding, CommitContext, Configuration, CreateWorkspaceMode, DisposableCollection, GetWorkspaceTimeoutResult, GitpodClient as GitpodApiClient, GitpodServer, GitpodToken, GitpodTokenType, InstallPluginsParams, PermissionName, PortVisibility, PrebuiltWorkspace, PrebuiltWorkspaceContext, PreparePluginUploadParams, ResolvedPlugins, ResolvePluginsParams, SetWorkspaceTimeoutResult, StartPrebuildContext, StartWorkspaceResult, Terms, Token, UninstallPluginParams, User, UserEnvVar, UserEnvVarValue, UserInfo, WhitelistedRepository, Workspace, WorkspaceContext, WorkspaceCreationResult, WorkspaceImageBuild, WorkspaceInfo, WorkspaceInstance, WorkspaceInstancePort, WorkspaceInstanceUser, WorkspaceTimeoutDuration, GuessGitTokenScopesParams, GuessedGitTokenScopes, Team, TeamMemberInfo, TeamMembershipInvite, CreateProjectParams, Project, ProviderRepository, TeamMemberRole, WithDefaultConfig, FindPrebuildsParams, PrebuildWithStatus, StartPrebuildResult, ClientHeaderFields, WorkspaceClusterPreference } from '@gitpod/gitpod-protocol'; |
10 | 10 | import { AccountStatement } from "@gitpod/gitpod-protocol/lib/accounting-protocol";
|
11 | 11 | import { AdminBlockUserRequest, AdminGetListRequest, AdminGetListResult, AdminGetWorkspacesRequest, AdminModifyPermanentWorkspaceFeatureFlagRequest, AdminModifyRoleOrPermissionRequest, WorkspaceAndInstance } from '@gitpod/gitpod-protocol/lib/admin-protocol';
|
12 | 12 | import { GetLicenseInfoResult, LicenseFeature, LicenseValidationResult } from '@gitpod/gitpod-protocol/lib/license-protocol';
|
@@ -56,6 +56,7 @@ import { IDEConfigService } from '../ide-config';
|
56 | 56 | import { PartialProject } from '@gitpod/gitpod-protocol/src/teams-projects-protocol';
|
57 | 57 | import { ClientMetadata } from '../websocket/websocket-connection-manager';
|
58 | 58 | import { ConfigurationService } from '../config/configuration-service';
|
| 59 | +import { AdmissionPreferenceRegion, WorkspaceClusterDB } from '@gitpod/gitpod-protocol/lib/workspace-cluster'; |
59 | 60 |
|
60 | 61 | // shortcut
|
61 | 62 | export const traceWI = (ctx: TraceContext, wi: Omit<LogContext, "userId">) => TraceContext.setOWI(ctx, wi); // userId is already taken care of in WebsocketConnectionManager
|
@@ -113,6 +114,8 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
|
113 | 114 |
|
114 | 115 | @inject(IDEConfigService) protected readonly ideConfigService: IDEConfigService;
|
115 | 116 |
|
| 117 | + @inject(WorkspaceClusterDB) protected readonly workspaceClusterDB: WorkspaceClusterDB; |
| 118 | + |
116 | 119 | /** Id the uniquely identifies this server instance */
|
117 | 120 | public readonly uuid: string = uuidv4();
|
118 | 121 | public readonly clientMetadata: ClientMetadata;
|
@@ -2182,6 +2185,34 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
|
2182 | 2185 | return ideConfig.ideOptions;
|
2183 | 2186 | }
|
2184 | 2187 |
|
| 2188 | + async listWorkspaceClusterRTTEndpoints(ctx: TraceContext): Promise<{ region: string; endpoint: string; }[]> { |
| 2189 | + const candidates = await this.workspaceClusterDB.findFiltered({state: 'available'}); |
| 2190 | + const allEndpoints = candidates.flatMap(c => (c.admissionPreferences || []).filter(ap => ap.type === 'region')).map(ap => { |
| 2191 | + const rap = ap as AdmissionPreferenceRegion; |
| 2192 | + return { |
| 2193 | + region: rap.name, |
| 2194 | + endpoint: rap.rttEndpoint, |
| 2195 | + }; |
| 2196 | + }); |
| 2197 | + |
| 2198 | + return [...new Set(allEndpoints)]; |
| 2199 | + } |
| 2200 | + |
| 2201 | + async setWorkspaceClusterPreferences(ctx: TraceContext, pref: WorkspaceClusterPreference): Promise<void> { |
| 2202 | + const user = this.checkUser("setWorkspaceClusterPreferences"); |
| 2203 | + |
| 2204 | + const data = user.additionalData || {}; |
| 2205 | + const clusterPref = data.clusterPreferences || {}; |
| 2206 | + |
| 2207 | + // don't just dump `pref` in here, we have no idea what it contains. |
| 2208 | + clusterPref.region = pref.region; |
| 2209 | + |
| 2210 | + data.clusterPreferences = clusterPref; |
| 2211 | + user.additionalData = data; |
| 2212 | + |
| 2213 | + await this.userDB.updateUserPartial(user); |
| 2214 | + } |
| 2215 | + |
2185 | 2216 | //#region gitpod.io concerns
|
2186 | 2217 | //
|
2187 | 2218 | async adminGetAccountStatement(ctx: TraceContext, userId: string): Promise<AccountStatement> {
|
|
0 commit comments