Skip to content

Commit 932f055

Browse files
committed
refactor MayStartWorkspaceResult
1 parent 2ec4486 commit 932f055

File tree

6 files changed

+33
-12
lines changed

6 files changed

+33
-12
lines changed

components/server/ee/src/billing/entitlement-service-chargebee.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,11 @@ export class EntitlementServiceChargebee implements EntitlementService {
5757
hasHitParallelWorkspaceLimit(),
5858
]);
5959

60+
const result = enoughCredits && !hitParallelWorkspaceLimit;
61+
6062
return {
61-
enoughCredits: !!enoughCredits,
63+
mayStart: result,
64+
oufOfCredits: !enoughCredits,
6265
hitParallelWorkspaceLimit,
6366
};
6467
}

components/server/ee/src/billing/entitlement-service-license.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export class EntitlementServiceLicense implements EntitlementService {
3030
runningInstances: Promise<WorkspaceInstance[]>,
3131
): Promise<MayStartWorkspaceResult> {
3232
// if payment is not enabled users can start as many parallel workspaces as they want
33-
return { enoughCredits: true };
33+
return { mayStart: true };
3434
}
3535

3636
async maySetTimeout(user: User, date: Date): Promise<boolean> {

components/server/ee/src/billing/entitlement-service-ubp.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,9 @@ export class EntitlementServiceUBP implements EntitlementService {
5757
this.checkSpendingLimitReached(user, date),
5858
hasHitParallelWorkspaceLimit(),
5959
]);
60-
60+
const result = !spendingLimitReachedOnCostCenter && !hitParallelWorkspaceLimit;
6161
return {
62+
mayStart: result,
6263
spendingLimitReachedOnCostCenter,
6364
hitParallelWorkspaceLimit,
6465
};

components/server/ee/src/billing/entitlement-service.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,22 @@ export class EntitlementServiceImpl implements EntitlementService {
3939
): Promise<MayStartWorkspaceResult> {
4040
try {
4141
const billingMode = await this.billingModes.getBillingModeForUser(user, date);
42+
let result;
4243
switch (billingMode.mode) {
4344
case "none":
44-
return this.license.mayStartWorkspace(user, date, runningInstances);
45+
result = await this.license.mayStartWorkspace(user, date, runningInstances);
46+
break;
4547
case "chargebee":
46-
return this.chargebee.mayStartWorkspace(user, date, runningInstances);
48+
result = await this.chargebee.mayStartWorkspace(user, date, runningInstances);
49+
break;
4750
case "usage-based":
48-
return this.ubp.mayStartWorkspace(user, date, runningInstances);
51+
result = await this.ubp.mayStartWorkspace(user, date, runningInstances);
52+
break;
4953
}
54+
return result;
5055
} catch (err) {
5156
log.error({ userId: user.id }, "EntitlementService error: mayStartWorkspace", err);
52-
return {};
57+
throw err;
5358
}
5459
}
5560

components/server/ee/src/workspace/gitpod-server-impl.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,14 +256,23 @@ export class GitpodServerEEImpl extends GitpodServerImpl {
256256
): Promise<void> {
257257
await super.mayStartWorkspace(ctx, user, runningInstances);
258258

259-
const result = await this.entitlementService.mayStartWorkspace(user, new Date(), runningInstances);
260-
if (!result.enoughCredits) {
259+
let result;
260+
try {
261+
result = await this.entitlementService.mayStartWorkspace(user, new Date(), runningInstances);
262+
} catch (error) {
263+
throw new ResponseError(ErrorCodes.INTERNAL_SERVER_ERROR, `Error in Entitlement Service.`);
264+
}
265+
log.info("mayStartWorkspace", { result });
266+
if (result.mayStart) {
267+
return; // green light from entitlement service
268+
}
269+
if (!!result.oufOfCredits) {
261270
throw new ResponseError(
262271
ErrorCodes.NOT_ENOUGH_CREDIT,
263272
`Not enough monthly workspace hours. Please upgrade your account to get more hours for your workspaces.`,
264273
);
265274
}
266-
if (result.spendingLimitReachedOnCostCenter) {
275+
if (!!result.spendingLimitReachedOnCostCenter) {
267276
throw new ResponseError(
268277
ErrorCodes.PAYMENT_SPENDING_LIMIT_REACHED,
269278
"Increase spending limit and try again.",

components/server/src/billing/entitlement-service.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,11 @@ import { AttributionId } from "@gitpod/gitpod-protocol/lib/attribution";
1414
import { injectable } from "inversify";
1515

1616
export interface MayStartWorkspaceResult {
17+
mayStart: boolean;
18+
1719
hitParallelWorkspaceLimit?: HitParallelWorkspaceLimit;
18-
enoughCredits?: boolean;
20+
21+
oufOfCredits?: boolean;
1922

2023
/** Usage-Based Pricing: AttributionId of the CostCenter that reached it's spending limit */
2124
spendingLimitReachedOnCostCenter?: AttributionId;
@@ -72,7 +75,7 @@ export class CommunityEntitlementService implements EntitlementService {
7275
date: Date,
7376
runningInstances: Promise<WorkspaceInstance[]>,
7477
): Promise<MayStartWorkspaceResult> {
75-
return { enoughCredits: true };
78+
return { mayStart: true };
7679
}
7780

7881
async maySetTimeout(user: User, date: Date): Promise<boolean> {

0 commit comments

Comments
 (0)