Skip to content

Commit a9ec85f

Browse files
committed
[server] Inject process.env.HOST_URL into feature flag attributes
1 parent 57c33a4 commit a9ec85f

File tree

6 files changed

+15
-34
lines changed

6 files changed

+15
-34
lines changed

components/gitpod-protocol/src/experiments/configcat-server.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ import { newAlwaysReturningDefaultValueClient } from "./always-default";
1212

1313
let client: Client | undefined;
1414

15-
export type ConfigCatClientFactory = () => Client;
16-
export const ConfigCatClientFactory = Symbol("ConfigCatClientFactory");
1715
export namespace Experiments {
1816
export function configureTestingClient(config: Record<string, any>): void {
1917
client = {
@@ -54,6 +52,6 @@ export function getExperimentsClientForBackend(): Client {
5452
baseUrl: process.env.CONFIGCAT_BASE_URL,
5553
});
5654

57-
client = new ConfigCatClient(configCatClient);
55+
client = new ConfigCatClient(configCatClient, process.env.HOST_URL);
5856
return client;
5957
}

components/gitpod-protocol/src/experiments/configcat.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,17 @@ export const BILLING_TIER_ATTRIBUTE = "billing_tier";
1717
export const GITPOD_HOST = "gitpod_host";
1818

1919
export class ConfigCatClient implements Client {
20-
private client: IConfigCatClient;
21-
22-
constructor(cc: IConfigCatClient) {
23-
this.client = cc;
24-
}
20+
constructor(private readonly client: IConfigCatClient, private readonly gitpodHost?: string) {}
2521

2622
getValueAsync<T>(experimentName: string, defaultValue: T, attributes: Attributes): Promise<T> {
27-
return this.client.getValueAsync(experimentName, defaultValue, attributesToUser(attributes));
23+
return this.client.getValueAsync(
24+
experimentName,
25+
defaultValue,
26+
attributesToUser({
27+
gitpodHost: this.gitpodHost,
28+
...attributes,
29+
}),
30+
);
2831
}
2932

3033
dispose(): void {

components/server/src/auth/verification-service.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,17 @@ import { Config } from "../config";
1111
import { Twilio } from "twilio";
1212
import { ServiceContext } from "twilio/lib/rest/verify/v2/service";
1313
import { TeamDB, UserDB, WorkspaceDB } from "@gitpod/gitpod-db/lib";
14-
import { ConfigCatClientFactory } from "@gitpod/gitpod-protocol/lib/experiments/configcat-server";
1514
import { ErrorCodes, ApplicationError } from "@gitpod/gitpod-protocol/lib/messaging/error";
1615
import { VerificationInstance } from "twilio/lib/rest/verify/v2/service/verification";
1716
import { v4 as uuidv4, validate as uuidValidate } from "uuid";
17+
import { getExperimentsClientForBackend } from "@gitpod/gitpod-protocol/lib/experiments/configcat-server";
1818

1919
@injectable()
2020
export class VerificationService {
2121
@inject(Config) protected config: Config;
2222
@inject(WorkspaceDB) protected workspaceDB: WorkspaceDB;
2323
@inject(UserDB) protected userDB: UserDB;
2424
@inject(TeamDB) protected teamDB: TeamDB;
25-
@inject(ConfigCatClientFactory) protected readonly configCatClientFactory: ConfigCatClientFactory;
2625

2726
protected verifyService: ServiceContext;
2827

@@ -45,7 +44,7 @@ export class VerificationService {
4544
if (user.creationDate < "2022-08-22") {
4645
return false;
4746
}
48-
const isPhoneVerificationEnabled = await this.configCatClientFactory().getValueAsync(
47+
const isPhoneVerificationEnabled = await getExperimentsClientForBackend().getValueAsync(
4948
"isPhoneVerificationEnabled",
5049
false,
5150
{

components/server/src/container-module.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,6 @@
77
import { ContainerModule } from "inversify";
88

99
import { IAnalyticsWriter } from "@gitpod/gitpod-protocol/lib/analytics";
10-
import {
11-
ConfigCatClientFactory,
12-
getExperimentsClientForBackend,
13-
} from "@gitpod/gitpod-protocol/lib/experiments/configcat-server";
1410
import { GitpodFileParser } from "@gitpod/gitpod-protocol/lib/gitpod-file-parser";
1511
import { PrometheusClientCallMetrics } from "@gitpod/gitpod-protocol/lib/messaging/client-call-metrics";
1612
import { newAnalyticsWriterFromEnv } from "@gitpod/gitpod-protocol/lib/util/analytics";
@@ -296,12 +292,6 @@ export const productionContainerModule = new ContainerModule(
296292
})
297293
.inSingletonScope();
298294

299-
bind(ConfigCatClientFactory)
300-
.toDynamicValue((ctx) => {
301-
return () => getExperimentsClientForBackend();
302-
})
303-
.inSingletonScope();
304-
305295
bind(VerificationService).toSelf().inSingletonScope();
306296

307297
bind(UsageService).toSelf().inSingletonScope();

components/server/src/ide-service.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
*/
66

77
import { IDESettings, TaskConfig, User, Workspace } from "@gitpod/gitpod-protocol";
8-
import { ConfigCatClientFactory } from "@gitpod/gitpod-protocol/lib/experiments/configcat-server";
98
import { IDEClient, IDEOptions } from "@gitpod/gitpod-protocol/lib/ide-protocol";
109
import * as IdeServiceApi from "@gitpod/ide-service-api/lib/ide.pb";
1110
import {
@@ -29,9 +28,6 @@ export class IDEService {
2928
@inject(AuthorizationService)
3029
protected readonly authService: AuthorizationService;
3130

32-
@inject(ConfigCatClientFactory)
33-
protected readonly configCatClientFactory: ConfigCatClientFactory;
34-
3531
private cacheConfig?: IDEConfig;
3632

3733
async getIDEConfig(request: { user: { id: string; email?: string } }): Promise<IDEConfig> {

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

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,7 @@ import { IDEService } from "../ide-service";
141141
import { AttributionId } from "@gitpod/gitpod-protocol/lib/attribution";
142142
import { CostCenterJSON } from "@gitpod/gitpod-protocol/lib/usage";
143143
import { createCookielessId, maskIp } from "../analytics";
144-
import {
145-
ConfigCatClientFactory,
146-
getExperimentsClientForBackend,
147-
} from "@gitpod/gitpod-protocol/lib/experiments/configcat-server";
144+
import { getExperimentsClientForBackend } from "@gitpod/gitpod-protocol/lib/experiments/configcat-server";
148145
import { increaseDashboardErrorBoundaryCounter } from "../prometheus-metrics";
149146
import { LinkedInService } from "../linkedin-service";
150147
import { SnapshotService, WaitForSnapshotOptions } from "./snapshot-service";
@@ -235,8 +232,6 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
235232
@inject(VerificationService) private readonly verificationService: VerificationService,
236233
@inject(EntitlementService) private readonly entitlementService: EntitlementService,
237234

238-
@inject(ConfigCatClientFactory) private readonly configCatClientFactory: ConfigCatClientFactory,
239-
240235
@inject(Authorizer) private readonly auth: Authorizer,
241236

242237
@inject(BillingModes) private readonly billingModes: BillingModes,
@@ -672,7 +667,7 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
672667
const user = await this.checkUser("sendPhoneNumberVerificationToken");
673668

674669
// Check if verify via call is enabled
675-
const phoneVerificationByCall = await this.configCatClientFactory().getValueAsync(
670+
const phoneVerificationByCall = await getExperimentsClientForBackend().getValueAsync(
676671
"phoneVerificationByCall",
677672
false,
678673
{
@@ -3178,7 +3173,7 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
31783173

31793174
private async guardWithFeatureFlag(flagName: string, user: User, teamId: string) {
31803175
// Guard method w/ a feature flag check
3181-
const isEnabled = await this.configCatClientFactory().getValueAsync(flagName, false, {
3176+
const isEnabled = await getExperimentsClientForBackend().getValueAsync(flagName, false, {
31823177
user: user,
31833178
teamId,
31843179
});

0 commit comments

Comments
 (0)