@@ -12,7 +12,6 @@ import {
12
12
TracedWorkspaceDB ,
13
13
EmailDomainFilterDB ,
14
14
TeamDB ,
15
- RedisPublisher ,
16
15
DBGitpodToken ,
17
16
} from "@gitpod/gitpod-db/lib" ;
18
17
import { BlockedRepositoryDB } from "@gitpod/gitpod-db/lib/blocked-repository-db" ;
@@ -67,7 +66,6 @@ import {
67
66
UserSSHPublicKeyValue ,
68
67
PrebuildEvent ,
69
68
RoleOrPermission ,
70
- WORKSPACE_TIMEOUT_DEFAULT_SHORT ,
71
69
WorkspaceInstanceRepoStatus ,
72
70
} from "@gitpod/gitpod-protocol" ;
73
71
import { BlockedRepository } from "@gitpod/gitpod-protocol/lib/blocked-repositories-protocol" ;
@@ -99,9 +97,7 @@ import { WorkspaceManagerClientProvider } from "@gitpod/ws-manager/lib/client-pr
99
97
import {
100
98
AdmissionLevel ,
101
99
ControlAdmissionRequest ,
102
- DescribeWorkspaceRequest ,
103
100
MarkActiveRequest ,
104
- SetTimeoutRequest ,
105
101
StopWorkspacePolicy ,
106
102
TakeSnapshotRequest ,
107
103
} from "@gitpod/ws-manager/lib/core_pb" ;
@@ -174,7 +170,6 @@ import {
174
170
} from "@gitpod/usage-api/lib/usage/v1/billing.pb" ;
175
171
import { ClientError } from "nice-grpc-common" ;
176
172
import { BillingModes } from "../billing/billing-mode" ;
177
- import { goDurationToHumanReadable } from "@gitpod/gitpod-protocol/lib/util/timeutil" ;
178
173
import { Authorizer , SYSTEM_USER } from "../authorization/authorizer" ;
179
174
import { OrganizationService } from "../orgs/organization-service" ;
180
175
import { RedisSubscriber } from "../messaging/redis-subscriber" ;
@@ -260,8 +255,6 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
260
255
@inject ( EmailDomainFilterDB ) private emailDomainFilterdb : EmailDomainFilterDB ,
261
256
262
257
@inject ( RedisSubscriber ) private readonly subscriber : RedisSubscriber ,
263
- @inject ( RedisPublisher ) private readonly publisher : RedisPublisher ,
264
- @inject ( TracedWorkspaceDB ) private readonly workspaceDB : DBWithTracing < WorkspaceDB > ,
265
258
) { }
266
259
267
260
/** Id the uniquely identifies this server instance */
@@ -1771,36 +1764,9 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
1771
1764
1772
1765
const user = await this . checkUser ( "setWorkspaceTimeout" ) ;
1773
1766
1774
- let validatedDuration ;
1775
- try {
1776
- validatedDuration = WorkspaceTimeoutDuration . validate ( duration ) ;
1777
- } catch ( err ) {
1778
- throw new ApplicationError ( ErrorCodes . INVALID_VALUE , "Invalid duration : " + err . message ) ;
1779
- }
1780
-
1781
- const workspace = await this . workspaceService . getWorkspace ( user . id , workspaceId ) ;
1782
- if ( ! ( await this . entitlementService . maySetTimeout ( user . id , workspace . organizationId ) ) ) {
1783
- throw new ApplicationError ( ErrorCodes . PLAN_PROFESSIONAL_REQUIRED , "Plan upgrade is required" ) ;
1784
- }
1785
-
1786
- const runningInstances = await this . workspaceDb . trace ( ctx ) . findRegularRunningInstances ( user . id ) ;
1787
- const runningInstance = runningInstances . find ( ( i ) => i . workspaceId === workspaceId ) ;
1788
- if ( ! runningInstance ) {
1789
- throw new ApplicationError ( ErrorCodes . NOT_FOUND , "Can only set keep-alive for running workspaces" ) ;
1790
- }
1791
- await this . guardAccess ( { kind : "workspaceInstance" , subject : runningInstance , workspace : workspace } , "update" ) ;
1792
-
1793
- const client = await this . workspaceManagerClientProvider . get ( runningInstance . region ) ;
1794
-
1795
- const req = new SetTimeoutRequest ( ) ;
1796
- req . setId ( runningInstance . id ) ;
1797
- req . setDuration ( validatedDuration ) ;
1798
- await client . setTimeout ( ctx , req ) ;
1799
-
1800
- return {
1801
- resetTimeoutOnWorkspaces : [ workspace . id ] ,
1802
- humanReadableDuration : goDurationToHumanReadable ( validatedDuration ) ,
1803
- } ;
1767
+ return this . workspaceService . setWorkspaceTimeout ( user . id , workspaceId , duration , ( instance , workspace ) =>
1768
+ this . guardAccess ( { kind : "workspaceInstance" , subject : instance , workspace : workspace } , "update" ) ,
1769
+ ) ;
1804
1770
}
1805
1771
1806
1772
public async getWorkspaceTimeout ( ctx : TraceContext , workspaceId : string ) : Promise < GetWorkspaceTimeoutResult > {
@@ -1809,25 +1775,9 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
1809
1775
1810
1776
const user = await this . checkUser ( "getWorkspaceTimeout" ) ;
1811
1777
1812
- const workspace = await this . workspaceService . getWorkspace ( user . id , workspaceId ) ;
1813
- const canChange = await this . entitlementService . maySetTimeout ( user . id , workspace . organizationId ) ;
1814
-
1815
- const runningInstance = await this . workspaceDb . trace ( ctx ) . findRunningInstance ( workspaceId ) ;
1816
- if ( ! runningInstance ) {
1817
- log . warn ( { userId : user . id , workspaceId } , "Can only get keep-alive for running workspaces" ) ;
1818
- const duration = WORKSPACE_TIMEOUT_DEFAULT_SHORT ;
1819
- return { duration, canChange, humanReadableDuration : goDurationToHumanReadable ( duration ) } ;
1820
- }
1821
- await this . guardAccess ( { kind : "workspaceInstance" , subject : runningInstance , workspace : workspace } , "get" ) ;
1822
-
1823
- const req = new DescribeWorkspaceRequest ( ) ;
1824
- req . setId ( runningInstance . id ) ;
1825
-
1826
- const client = await this . workspaceManagerClientProvider . get ( runningInstance . region ) ;
1827
- const desc = await client . describeWorkspace ( ctx , req ) ;
1828
- const duration = desc . getStatus ( ) ! . getSpec ( ) ! . getTimeout ( ) ;
1829
-
1830
- return { duration, canChange, humanReadableDuration : goDurationToHumanReadable ( duration ) } ;
1778
+ return this . workspaceService . getWorkspaceTimeout ( user . id , workspaceId , ( instance , workspace ) =>
1779
+ this . guardAccess ( { kind : "workspaceInstance" , subject : instance , workspace } , "get" ) ,
1780
+ ) ;
1831
1781
}
1832
1782
1833
1783
public async getOpenPorts ( ctx : TraceContext , workspaceId : string ) : Promise < WorkspaceInstancePort [ ] > {
@@ -1858,23 +1808,11 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
1858
1808
const user = await this . checkAndBlockUser ( "updateGitStatus" ) ;
1859
1809
1860
1810
const workspace = await this . workspaceService . getWorkspace ( user . id , workspaceId ) ;
1861
- let instance = await this . workspaceDb . trace ( ctx ) . findCurrentInstance ( workspaceId ) ;
1862
- if ( ! instance ) {
1863
- throw new ApplicationError ( ErrorCodes . NOT_FOUND , `workspace ${ workspaceId } has no instance` ) ;
1864
- }
1811
+ const instance = await this . workspaceService . getCurrentInstance ( user . id , workspaceId ) ;
1865
1812
traceWI ( ctx , { instanceId : instance . id } ) ;
1866
1813
await this . guardAccess ( { kind : "workspaceInstance" , subject : instance , workspace } , "update" ) ;
1867
1814
1868
- if ( WorkspaceInstanceRepoStatus . equals ( instance . gitStatus , gitStatus ) ) {
1869
- return ;
1870
- }
1871
-
1872
- instance = await this . workspaceDB . trace ( ctx ) . updateInstancePartial ( instance . id , { gitStatus } ) ;
1873
- await this . publisher . publishInstanceUpdate ( {
1874
- instanceID : instance . id ,
1875
- ownerID : workspace . ownerId ,
1876
- workspaceID : workspace . id ,
1877
- } ) ;
1815
+ await this . workspaceService . updateGitStatus ( user . id , workspaceId , gitStatus ) ;
1878
1816
}
1879
1817
1880
1818
public async openPort (
@@ -3389,16 +3327,8 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
3389
3327
}
3390
3328
3391
3329
async getSupportedWorkspaceClasses ( ctx : TraceContext ) : Promise < SupportedWorkspaceClass [ ] > {
3392
- await this . checkAndBlockUser ( "getSupportedWorkspaceClasses" ) ;
3393
- const classes = this . config . workspaceClasses . map ( ( c ) => ( {
3394
- id : c . id ,
3395
- category : c . category ,
3396
- displayName : c . displayName ,
3397
- description : c . description ,
3398
- powerups : c . powerups ,
3399
- isDefault : c . isDefault ,
3400
- } ) ) ;
3401
- return classes ;
3330
+ const user = await this . checkAndBlockUser ( "getSupportedWorkspaceClasses" ) ;
3331
+ return this . workspaceService . getSupportedWorkspaceClasses ( user . id ) ;
3402
3332
}
3403
3333
3404
3334
//#region gitpod.io concerns
0 commit comments