Skip to content

Commit b40cc92

Browse files
sagor999roboquat
authored andcommitted
allow to enable PVC feature flag for user via ConfigCat
1 parent 6fd0a19 commit b40cc92

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

components/server/ee/src/workspace/workspace-factory.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,15 @@ import { UserDB } from "@gitpod/gitpod-db/lib";
3232
import { UserCounter } from "../user/user-counter";
3333
import { increasePrebuildsStartedCounter } from "../../../src/prometheus-metrics";
3434
import { DeepPartial } from "@gitpod/gitpod-protocol/lib/util/deep-partial";
35+
import { EntitlementService } from "../../../src/billing/entitlement-service";
36+
import { getExperimentsClientForBackend } from "@gitpod/gitpod-protocol/lib/experiments/configcat-server";
3537

3638
@injectable()
3739
export class WorkspaceFactoryEE extends WorkspaceFactory {
3840
@inject(LicenseEvaluator) protected readonly licenseEvaluator: LicenseEvaluator;
3941
@inject(HostContextProvider) protected readonly hostContextProvider: HostContextProvider;
4042
@inject(UserCounter) protected readonly userCounter: UserCounter;
43+
@inject(EntitlementService) protected readonly entitlementService: EntitlementService;
4144

4245
@inject(UserDB) protected readonly userDB: UserDB;
4346

@@ -357,6 +360,18 @@ export class WorkspaceFactoryEE extends WorkspaceFactory {
357360
if (user.featureFlags?.permanentWSFeatureFlags?.includes("persistent_volume_claim")) {
358361
config._featureFlags = (config._featureFlags || []).concat(["persistent_volume_claim"]);
359362
}
363+
const billingTier = await this.entitlementService.getBillingTier(user);
364+
const userTeams = await this.teamDB.findTeamsByUser(user.id);
365+
// this allows to control user`s PVC feature flag via ConfigCat
366+
if (
367+
await getExperimentsClientForBackend().getValueAsync("user_pvc", false, {
368+
user,
369+
teams: userTeams,
370+
billingTier,
371+
})
372+
) {
373+
config._featureFlags = (config._featureFlags || []).concat(["persistent_volume_claim"]);
374+
}
360375

361376
const id = await this.generateWorkspaceID(context);
362377
const newWs: Workspace = {

components/server/src/workspace/config-provider.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ import { HostContextProvider } from "../auth/host-context-provider";
3131
import { AuthorizationService } from "../user/authorization-service";
3232
import { TraceContext } from "@gitpod/gitpod-protocol/lib/util/tracing";
3333
import { Config } from "../config";
34+
import { EntitlementService } from "../billing/entitlement-service";
35+
import { getExperimentsClientForBackend } from "@gitpod/gitpod-protocol/lib/experiments/configcat-server";
36+
import { TeamDB } from "@gitpod/gitpod-db/lib";
3437

3538
const POD_PATH_WORKSPACE_BASE = "/workspace";
3639

@@ -48,6 +51,8 @@ export class ConfigProvider {
4851
@inject(AuthorizationService) protected readonly authService: AuthorizationService;
4952
@inject(Config) protected readonly config: Config;
5053
@inject(ConfigurationService) protected readonly configurationService: ConfigurationService;
54+
@inject(EntitlementService) protected readonly entitlementService: EntitlementService;
55+
@inject(TeamDB) protected readonly teamDB: TeamDB;
5156

5257
public async fetchConfig(
5358
ctx: TraceContext,
@@ -129,6 +134,18 @@ export class ConfigProvider {
129134
NamedWorkspaceFeatureFlag.isWorkspacePersisted,
130135
);
131136
}
137+
const billingTier = await this.entitlementService.getBillingTier(user);
138+
const userTeams = await this.teamDB.findTeamsByUser(user.id);
139+
// this allows to control user`s PVC feature flag via ConfigCat
140+
if (
141+
await getExperimentsClientForBackend().getValueAsync("user_pvc", false, {
142+
user,
143+
teams: userTeams,
144+
billingTier,
145+
})
146+
) {
147+
config._featureFlags = (config._featureFlags || []).concat(["persistent_volume_claim"]);
148+
}
132149

133150
return { config, literalConfig };
134151
} catch (e) {

0 commit comments

Comments
 (0)