mirror of
https://github.com/Unleash/unleash.git
synced 2025-08-04 13:48:56 +02:00
fix: project last seen at metrics (#7988)
Read `last_seen_at` from correct table `last_seen_at_metrics`, instead of deprecated `feature.last_seen_at`
This commit is contained in:
parent
fc86f5b2fe
commit
427c43e123
@ -4,6 +4,7 @@ import type { IFeatureToggleStore } from '../feature-toggle/types/feature-toggle
|
|||||||
import type {
|
import type {
|
||||||
IEventStore,
|
IEventStore,
|
||||||
IFlagResolver,
|
IFlagResolver,
|
||||||
|
ILastSeenStore,
|
||||||
IProjectReadModel,
|
IProjectReadModel,
|
||||||
IProjectStore,
|
IProjectStore,
|
||||||
} from '../../types';
|
} from '../../types';
|
||||||
@ -15,6 +16,7 @@ let flagStore: IFeatureToggleStore;
|
|||||||
let projectStore: IProjectStore;
|
let projectStore: IProjectStore;
|
||||||
let eventStore: IEventStore;
|
let eventStore: IEventStore;
|
||||||
let projectReadModel: IProjectReadModel;
|
let projectReadModel: IProjectReadModel;
|
||||||
|
let lastSeenStore: ILastSeenStore;
|
||||||
|
|
||||||
const alwaysOnFlagResolver = {
|
const alwaysOnFlagResolver = {
|
||||||
isEnabled() {
|
isEnabled() {
|
||||||
@ -32,6 +34,7 @@ beforeAll(async () => {
|
|||||||
projectStore = db.stores.projectStore;
|
projectStore = db.stores.projectStore;
|
||||||
eventStore = db.stores.eventStore;
|
eventStore = db.stores.eventStore;
|
||||||
flagStore = db.stores.featureToggleStore;
|
flagStore = db.stores.featureToggleStore;
|
||||||
|
lastSeenStore = db.stores.lastSeenStore;
|
||||||
});
|
});
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
@ -148,12 +151,10 @@ test('it uses the last flag metrics received for lastReportedFlagUsage', async (
|
|||||||
|
|
||||||
await flagStore.create(projectId, { name: flagName, createdByUserId: 1 });
|
await flagStore.create(projectId, { name: flagName, createdByUserId: 1 });
|
||||||
|
|
||||||
await flagStore.setLastSeen([
|
await lastSeenStore.setLastSeen([
|
||||||
{ featureName: flagName, environment: 'development' },
|
{ featureName: flagName, environment: 'development' },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const flag = await flagStore.get(flagName);
|
|
||||||
|
|
||||||
const result = await projectReadModel.getProjectsForAdminUi();
|
const result = await projectReadModel.getProjectsForAdminUi();
|
||||||
expect(result[0].lastReportedFlagUsage).toEqual(flag.lastSeenAt);
|
expect(result[0].lastReportedFlagUsage).not.toBeNull();
|
||||||
});
|
});
|
||||||
|
@ -69,6 +69,11 @@ export class ProjectReadModel implements IProjectReadModel {
|
|||||||
const projectTimer = this.timer('getProjectsForAdminUi');
|
const projectTimer = this.timer('getProjectsForAdminUi');
|
||||||
let projects = this.db(TABLE)
|
let projects = this.db(TABLE)
|
||||||
.leftJoin('features', 'features.project', 'projects.id')
|
.leftJoin('features', 'features.project', 'projects.id')
|
||||||
|
.leftJoin(
|
||||||
|
'last_seen_at_metrics',
|
||||||
|
'features.name',
|
||||||
|
'last_seen_at_metrics.feature_name',
|
||||||
|
)
|
||||||
.leftJoin(
|
.leftJoin(
|
||||||
'project_settings',
|
'project_settings',
|
||||||
'project_settings.project',
|
'project_settings.project',
|
||||||
@ -99,7 +104,7 @@ export class ProjectReadModel implements IProjectReadModel {
|
|||||||
this.db.raw(
|
this.db.raw(
|
||||||
'projects.id, projects.name, projects.description, projects.health, projects.created_at, ' +
|
'projects.id, projects.name, projects.description, projects.health, projects.created_at, ' +
|
||||||
'count(DISTINCT features.name) FILTER (WHERE features.archived_at is null) AS number_of_features, ' +
|
'count(DISTINCT features.name) FILTER (WHERE features.archived_at is null) AS number_of_features, ' +
|
||||||
'MAX(features.last_seen_at) AS last_usage,' +
|
'MAX(last_seen_at_metrics.last_seen_at) AS last_usage, ' +
|
||||||
'MAX(events.created_at) AS last_updated',
|
'MAX(events.created_at) AS last_updated',
|
||||||
),
|
),
|
||||||
'project_settings.project_mode',
|
'project_settings.project_mode',
|
||||||
|
Loading…
Reference in New Issue
Block a user