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:
parent
4786bdca21
commit
43e418e40a
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ export const createClientFeatureToggleDelta = (
|
||||
|
||||
const segmentReadModel = new SegmentReadModel(db);
|
||||
|
||||
const clientFeatureToggleDelta = new ClientFeatureToggleDelta(
|
||||
const clientFeatureToggleDelta = ClientFeatureToggleDelta.getInstance(
|
||||
clientFeatureToggleDeltaReadModel,
|
||||
segmentReadModel,
|
||||
eventStore,
|
||||
|
Loading…
Reference in New Issue
Block a user