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

View File

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