Skip to content

Commit 43e418e

Browse files
authored
feat: emit delta updated event (#9250)
Start emitting delta updated event and make delta cache service singleton.
1 parent 4786bdc commit 43e418e

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

src/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.ts

+27-6
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import type {
1414
IClientFeatureToggleDeltaReadModel,
1515
} from './client-feature-toggle-delta-read-model-type';
1616
import { CLIENT_DELTA_MEMORY } from '../../../metric-events';
17-
import type EventEmitter from 'events';
17+
import EventEmitter from 'events';
1818
import type { Logger } from '../../../logger';
1919
import type { ClientFeaturesDeltaSchema } from '../../../openapi';
2020
import {
@@ -28,6 +28,8 @@ import {
2828

2929
type EnvironmentRevisions = Record<string, DeltaCache>;
3030

31+
export const UPDATE_DELTA = 'UPDATE_DELTA';
32+
3133
export const filterEventsByQuery = (
3234
events: DeltaEvent[],
3335
requiredRevisionId: number,
@@ -86,7 +88,9 @@ export const filterHydrationEventByQuery = (
8688
};
8789
};
8890

89-
export class ClientFeatureToggleDelta {
91+
export class ClientFeatureToggleDelta extends EventEmitter {
92+
private static instance: ClientFeatureToggleDelta;
93+
9094
private clientFeatureToggleDeltaReadModel: IClientFeatureToggleDeltaReadModel;
9195

9296
private delta: EnvironmentRevisions = {};
@@ -113,6 +117,7 @@ export class ClientFeatureToggleDelta {
113117
flagResolver: IFlagResolver,
114118
config: IUnleashConfig,
115119
) {
120+
super();
116121
this.eventStore = eventStore;
117122
this.configurationRevisionService = configurationRevisionService;
118123
this.clientFeatureToggleDeltaReadModel =
@@ -124,16 +129,31 @@ export class ClientFeatureToggleDelta {
124129
this.onUpdateRevisionEvent = this.onUpdateRevisionEvent.bind(this);
125130
this.delta = {};
126131

127-
this.initRevisionId();
128132
this.configurationRevisionService.on(
129133
UPDATE_REVISION,
130134
this.onUpdateRevisionEvent,
131135
);
132136
}
133137

134-
private async initRevisionId() {
135-
this.currentRevisionId =
136-
await this.configurationRevisionService.getMaxRevisionId();
138+
static getInstance(
139+
clientFeatureToggleDeltaReadModel: IClientFeatureToggleDeltaReadModel,
140+
segmentReadModel: ISegmentReadModel,
141+
eventStore: IEventStore,
142+
configurationRevisionService: ConfigurationRevisionService,
143+
flagResolver: IFlagResolver,
144+
config: IUnleashConfig,
145+
) {
146+
if (!ClientFeatureToggleDelta.instance) {
147+
ClientFeatureToggleDelta.instance = new ClientFeatureToggleDelta(
148+
clientFeatureToggleDeltaReadModel,
149+
segmentReadModel,
150+
eventStore,
151+
configurationRevisionService,
152+
flagResolver,
153+
config,
154+
);
155+
}
156+
return ClientFeatureToggleDelta.instance;
137157
}
138158

139159
async getDelta(
@@ -198,6 +218,7 @@ export class ClientFeatureToggleDelta {
198218
if (this.flagResolver.isEnabled('deltaApi')) {
199219
await this.updateFeaturesDelta();
200220
this.storeFootprint();
221+
this.emit(UPDATE_DELTA);
201222
}
202223
}
203224

src/lib/features/client-feature-toggles/delta/createClientFeatureToggleDelta.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export const createClientFeatureToggleDelta = (
2222

2323
const segmentReadModel = new SegmentReadModel(db);
2424

25-
const clientFeatureToggleDelta = new ClientFeatureToggleDelta(
25+
const clientFeatureToggleDelta = ClientFeatureToggleDelta.getInstance(
2626
clientFeatureToggleDeltaReadModel,
2727
segmentReadModel,
2828
eventStore,

0 commit comments

Comments
 (0)