Skip to content

Commit

Permalink
Feat: remove last seen refactor flag (#5423)
Browse files Browse the repository at this point in the history
What it says on the box

---------

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
Co-authored-by: andreas-unleash <andreas@getunleash.ai>
  • Loading branch information
FredrikOseberg and andreas-unleash committed Nov 30, 2023
1 parent ef8edf9 commit e5760b5
Show file tree
Hide file tree
Showing 20 changed files with 188 additions and 435 deletions.
1 change: 0 additions & 1 deletion src/lib/__snapshots__/create-config.test.ts.snap
Expand Up @@ -102,7 +102,6 @@ exports[`should create default config 1`] = `
"responseTimeWithAppNameKillSwitch": false,
"scheduledConfigurationChanges": false,
"strictSchemaValidation": false,
"useLastSeenRefactor": false,
},
"externalResolver": {
"getVariant": [Function],
Expand Down
Expand Up @@ -189,9 +189,7 @@ export class FeatureToggleRowConverter {
feature.createdAt = r.created_at;
feature.favorite = r.favorite;

if (this.flagResolver.isEnabled('useLastSeenRefactor')) {
this.addLastSeenByEnvironment(feature, r);
}
this.addLastSeenByEnvironment(feature, r);

acc[r.name] = feature;
return acc;
Expand Down Expand Up @@ -246,9 +244,7 @@ export class FeatureToggleRowConverter {
feature.lastSeenAt = row.last_seen_at;
feature.archivedAt = row.archived_at;

if (this.flagResolver.isEnabled('useLastSeenRefactor')) {
this.addLastSeenByEnvironment(feature, row);
}
this.addLastSeenByEnvironment(feature, row);

acc[row.name] = feature;
return acc;
Expand Down
14 changes: 2 additions & 12 deletions src/lib/features/feature-toggle/feature-toggle-service.ts
Expand Up @@ -1970,13 +1970,7 @@ class FeatureToggleService {
archived: boolean,
userId: number,
): Promise<FeatureToggle[]> {
let features;

if (this.flagResolver.isEnabled('useLastSeenRefactor')) {
features = await this.featureToggleStore.getArchivedFeatures();
} else {
features = await this.featureToggleStore.getAll({ archived });
}
const features = await this.featureToggleStore.getArchivedFeatures();

if (this.flagResolver.isEnabled('privateProjects')) {
const projectAccess =
Expand All @@ -1998,11 +1992,7 @@ class FeatureToggleService {
archived: boolean,
project: string,
): Promise<FeatureToggle[]> {
if (this.flagResolver.isEnabled('useLastSeenRefactor')) {
return this.featureToggleStore.getArchivedFeatures(project);
} else {
return this.featureToggleStore.getAll({ archived, project });
}
return this.featureToggleStore.getArchivedFeatures(project);
}

async getProjectId(name: string): Promise<string | undefined> {
Expand Down
16 changes: 7 additions & 9 deletions src/lib/features/feature-toggle/feature-toggle-store.ts
Expand Up @@ -171,15 +171,13 @@ export default class FeatureToggleStore implements IFeatureToggleStore {
builder.addSelectColumn('ft.tag_value as tag_value');
builder.addSelectColumn('ft.tag_type as tag_type');

if (this.flagResolver.isEnabled('useLastSeenRefactor')) {
builder.withLastSeenByEnvironment(archived);
builder.addSelectColumn(
'last_seen_at_metrics.last_seen_at as env_last_seen_at',
);
builder.addSelectColumn(
'last_seen_at_metrics.environment as last_seen_at_env',
);
}
builder.withLastSeenByEnvironment(archived);
builder.addSelectColumn(
'last_seen_at_metrics.last_seen_at as env_last_seen_at',
);
builder.addSelectColumn(
'last_seen_at_metrics.environment as last_seen_at_env',
);

if (userId) {
builder.withFavorites(userId);
Expand Down
93 changes: 37 additions & 56 deletions src/lib/features/feature-toggle/feature-toggle-strategies-store.ts
Expand Up @@ -341,23 +341,21 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {

let selectColumns = ['features_view.*'] as (string | Raw<any>)[];

if (this.flagResolver.isEnabled('useLastSeenRefactor')) {
query.leftJoin('last_seen_at_metrics', function () {
this.on(
'last_seen_at_metrics.environment',
'=',
'features_view.environment_name',
).andOn(
'last_seen_at_metrics.feature_name',
'=',
'features_view.name',
);
});
// Override feature view for now
selectColumns.push(
'last_seen_at_metrics.last_seen_at as env_last_seen_at',
query.leftJoin('last_seen_at_metrics', function () {
this.on(
'last_seen_at_metrics.environment',
'=',
'features_view.environment_name',
).andOn(
'last_seen_at_metrics.feature_name',
'=',
'features_view.name',
);
}
});
// Override feature view for now
selectColumns.push(
'last_seen_at_metrics.last_seen_at as env_last_seen_at',
);

if (userId) {
query = query.leftJoin(`favorite_features`, function () {
Expand Down Expand Up @@ -631,19 +629,17 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {
'segments.id',
);

if (this.flagResolver.isEnabled('useLastSeenRefactor')) {
query.leftJoin('last_seen_at_metrics', function () {
this.on(
'last_seen_at_metrics.environment',
'=',
'environments.name',
).andOn(
'last_seen_at_metrics.feature_name',
'=',
'features.name',
);
});
}
query.leftJoin('last_seen_at_metrics', function () {
this.on(
'last_seen_at_metrics.environment',
'=',
'environments.name',
).andOn(
'last_seen_at_metrics.feature_name',
'=',
'features.name',
);
});

let selectColumns = [
'features.name as feature_name',
Expand All @@ -664,11 +660,8 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {
'segments.name as segment_name',
] as (string | Raw<any> | Knex.QueryBuilder)[];

let lastSeenQuery = 'feature_environments.last_seen_at';
if (this.flagResolver.isEnabled('useLastSeenRefactor')) {
lastSeenQuery = 'last_seen_at_metrics.last_seen_at';
selectColumns.push(`${lastSeenQuery} as env_last_seen_at`);
}
const lastSeenQuery = 'last_seen_at_metrics.last_seen_at';
selectColumns.push(`${lastSeenQuery} as env_last_seen_at`);

if (userId) {
query.leftJoin(`favorite_features`, function () {
Expand Down Expand Up @@ -802,19 +795,13 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {
)
.leftJoin('feature_tag as ft', 'ft.feature_name', 'features.name');

if (this.flagResolver.isEnabled('useLastSeenRefactor')) {
query.leftJoin('last_seen_at_metrics', function () {
this.on(
'last_seen_at_metrics.environment',
'=',
'environments.name',
).andOn(
'last_seen_at_metrics.feature_name',
'=',
'features.name',
);
});
}
query.leftJoin('last_seen_at_metrics', function () {
this.on(
'last_seen_at_metrics.environment',
'=',
'environments.name',
).andOn('last_seen_at_metrics.feature_name', '=', 'features.name');
});

let selectColumns = [
'features.name as feature_name',
Expand All @@ -833,15 +820,9 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {
'ft.tag_type as tag_type',
] as (string | Raw<any> | Knex.QueryBuilder)[];

if (this.flagResolver.isEnabled('useLastSeenRefactor')) {
selectColumns.push(
'last_seen_at_metrics.last_seen_at as env_last_seen_at',
);
} else {
selectColumns.push(
'feature_environments.last_seen_at as env_last_seen_at',
);
}
selectColumns.push(
'last_seen_at_metrics.last_seen_at as env_last_seen_at',
);

if (userId) {
query = query.leftJoin(`favorite_features`, function () {
Expand Down
Expand Up @@ -22,7 +22,6 @@ beforeAll(async () => {
experimental: {
flags: {
strictSchemaValidation: true,
useLastSeenRefactor: true,
},
},
};
Expand Down
Expand Up @@ -689,9 +689,7 @@ test('Should return last seen at per environment', async () => {
expect(environments[0].lastSeenAt).toEqual(new Date(date));

// Test with feature flag on
const config = createTestConfig({
experimental: { flags: { useLastSeenRefactor: true } },
});
const config = createTestConfig();

const featureService = createFeatureToggleService(db.rawDatabase, config);

Expand Down
1 change: 0 additions & 1 deletion src/lib/features/playground/advanced-playground.test.ts
Expand Up @@ -20,7 +20,6 @@ beforeAll(async () => {
strictSchemaValidation: true,
strategyVariant: true,
privateProjects: true,
useLastSeenRefactor: true,
},
},
},
Expand Down
28 changes: 0 additions & 28 deletions src/lib/routes/client-api/metrics.test.ts
Expand Up @@ -185,34 +185,6 @@ test('schema allow yes=<string nbr>', () => {
expect(value.bucket.toggles.Demo2.no).toBe(256);
});

test('should set lastSeen on toggle', async () => {
expect.assertions(1);
stores.featureToggleStore.create('default', {
name: 'toggleLastSeen',
});
await request
.post('/api/client/metrics')
.send({
appName: 'demo',
bucket: {
start: Date.now(),
stop: Date.now(),
toggles: {
toggleLastSeen: {
yes: 200,
no: 0,
},
},
},
})
.expect(202);

await services.lastSeenService.store();
const toggle = await stores.featureToggleStore.get('toggleLastSeen');

expect(toggle.lastSeenAt).toBeTruthy();
});

test('should return a 400 when required fields are missing', async () => {
stores.featureToggleStore.create('default', {
name: 'toggleLastSeen',
Expand Down
39 changes: 0 additions & 39 deletions src/lib/services/client-metrics/last-seen/last-seen-mapper.ts

This file was deleted.

10 changes: 2 additions & 8 deletions src/lib/services/client-metrics/last-seen/last-seen-service.ts
Expand Up @@ -51,11 +51,7 @@ export class LastSeenService {
`Updating last seen for ${lastSeenToggles.length} toggles`,
);

if (this.config.flagResolver.isEnabled('useLastSeenRefactor')) {
await this.lastSeenStore.setLastSeen(lastSeenToggles);
} else {
await this.featureToggleStore.setLastSeen(lastSeenToggles);
}
await this.lastSeenStore.setLastSeen(lastSeenToggles);
}
return count;
}
Expand All @@ -81,8 +77,6 @@ export class LastSeenService {
}

async cleanLastSeen() {
if (this.flagResolver.isEnabled('useLastSeenRefactor')) {
await this.lastSeenStore.cleanLastSeen();
}
await this.lastSeenStore.cleanLastSeen();
}
}

0 comments on commit e5760b5

Please sign in to comment.