1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-05-08 01:15:49 +02:00

feat: emit delta updated event (#9250)

Start emitting delta updated event and make delta cache service
singleton.
This commit is contained in:
Jaanus Sellin 2025-02-07 10:52:11 +02:00 committed by GitHub
parent 4786bdca21
commit 43e418e40a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 28 additions and 7 deletions

View File

@ -14,7 +14,7 @@ import type {
IClientFeatureToggleDeltaReadModel,
} from './client-feature-toggle-delta-read-model-type';
import { CLIENT_DELTA_MEMORY } from '../../../metric-events';
import type EventEmitter from 'events';
import EventEmitter from 'events';
import type { Logger } from '../../../logger';
import type { ClientFeaturesDeltaSchema } from '../../../openapi';
import {
@ -28,6 +28,8 @@ import {
type EnvironmentRevisions = Record<string, DeltaCache>;
export const UPDATE_DELTA = 'UPDATE_DELTA';
export const filterEventsByQuery = (
events: DeltaEvent[],
requiredRevisionId: number,
@ -86,7 +88,9 @@ export const filterHydrationEventByQuery = (
};
};
export class ClientFeatureToggleDelta {
export class ClientFeatureToggleDelta extends EventEmitter {
private static instance: ClientFeatureToggleDelta;
private clientFeatureToggleDeltaReadModel: IClientFeatureToggleDeltaReadModel;
private delta: EnvironmentRevisions = {};
@ -113,6 +117,7 @@ export class ClientFeatureToggleDelta {
flagResolver: IFlagResolver,
config: IUnleashConfig,
) {
super();
this.eventStore = eventStore;
this.configurationRevisionService = configurationRevisionService;
this.clientFeatureToggleDeltaReadModel =
@ -124,16 +129,31 @@ export class ClientFeatureToggleDelta {
this.onUpdateRevisionEvent = this.onUpdateRevisionEvent.bind(this);
this.delta = {};
this.initRevisionId();
this.configurationRevisionService.on(
UPDATE_REVISION,
this.onUpdateRevisionEvent,
);
}
private async initRevisionId() {
this.currentRevisionId =
await this.configurationRevisionService.getMaxRevisionId();
static getInstance(
clientFeatureToggleDeltaReadModel: IClientFeatureToggleDeltaReadModel,
segmentReadModel: ISegmentReadModel,
eventStore: IEventStore,
configurationRevisionService: ConfigurationRevisionService,
flagResolver: IFlagResolver,
config: IUnleashConfig,
) {
if (!ClientFeatureToggleDelta.instance) {
ClientFeatureToggleDelta.instance = new ClientFeatureToggleDelta(
clientFeatureToggleDeltaReadModel,
segmentReadModel,
eventStore,
configurationRevisionService,
flagResolver,
config,
);
}
return ClientFeatureToggleDelta.instance;
}
async getDelta(
@ -198,6 +218,7 @@ export class ClientFeatureToggleDelta {
if (this.flagResolver.isEnabled('deltaApi')) {
await this.updateFeaturesDelta();
this.storeFootprint();
this.emit(UPDATE_DELTA);
}
}

View File

@ -22,7 +22,7 @@ export const createClientFeatureToggleDelta = (
const segmentReadModel = new SegmentReadModel(db);
const clientFeatureToggleDelta = new ClientFeatureToggleDelta(
const clientFeatureToggleDelta = ClientFeatureToggleDelta.getInstance(
clientFeatureToggleDeltaReadModel,
segmentReadModel,
eventStore,