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,
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user