Skip to content

Commit 334ec45

Browse files
Merge branch 'impressions_toggle_storage_refactors' into impressions_toggle_strategy_refactors
2 parents 77f8dee + 6b36f0d commit 334ec45

File tree

5 files changed

+23
-25
lines changed

5 files changed

+23
-25
lines changed

src/sdkClient/client.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ export function clientFactory(params: ISdkFactoryContext): SplitIO.IClient | Spl
3434
const stopTelemetryTracker = telemetryTracker.trackEval(withConfig ? TREATMENT_WITH_CONFIG : TREATMENT);
3535

3636
const wrapUp = (evaluationResult: IEvaluationResult) => {
37-
const queue: SplitIO.ImpressionDTO[] = [];
37+
const queue: [impression: SplitIO.ImpressionDTO, track?: boolean][] = [];
3838
const treatment = processEvaluation(evaluationResult, featureFlagName, key, attributes, withConfig, methodName, queue);
3939
impressionsTracker.track(queue, attributes);
4040

41-
stopTelemetryTracker(queue[0] && queue[0].label);
41+
stopTelemetryTracker(queue[0] && queue[0][0].label);
4242
return treatment;
4343
};
4444

@@ -59,14 +59,14 @@ export function clientFactory(params: ISdkFactoryContext): SplitIO.IClient | Spl
5959
const stopTelemetryTracker = telemetryTracker.trackEval(withConfig ? TREATMENTS_WITH_CONFIG : TREATMENTS);
6060

6161
const wrapUp = (evaluationResults: Record<string, IEvaluationResult>) => {
62-
const queue: SplitIO.ImpressionDTO[] = [];
62+
const queue: [impression: SplitIO.ImpressionDTO, track?: boolean][] = [];
6363
const treatments: Record<string, SplitIO.Treatment | SplitIO.TreatmentWithConfig> = {};
6464
Object.keys(evaluationResults).forEach(featureFlagName => {
6565
treatments[featureFlagName] = processEvaluation(evaluationResults[featureFlagName], featureFlagName, key, attributes, withConfig, methodName, queue);
6666
});
6767
impressionsTracker.track(queue, attributes);
6868

69-
stopTelemetryTracker(queue[0] && queue[0].label);
69+
stopTelemetryTracker(queue[0] && queue[0][0].label);
7070
return treatments;
7171
};
7272

@@ -87,15 +87,15 @@ export function clientFactory(params: ISdkFactoryContext): SplitIO.IClient | Spl
8787
const stopTelemetryTracker = telemetryTracker.trackEval(method);
8888

8989
const wrapUp = (evaluationResults: Record<string, IEvaluationResult>) => {
90-
const queue: SplitIO.ImpressionDTO[] = [];
90+
const queue: [impression: SplitIO.ImpressionDTO, track?: boolean][] = [];
9191
const treatments: Record<string, SplitIO.Treatment | SplitIO.TreatmentWithConfig> = {};
9292
const evaluations = evaluationResults;
9393
Object.keys(evaluations).forEach(featureFlagName => {
9494
treatments[featureFlagName] = processEvaluation(evaluations[featureFlagName], featureFlagName, key, attributes, withConfig, methodName, queue);
9595
});
9696
impressionsTracker.track(queue, attributes);
9797

98-
stopTelemetryTracker(queue[0] && queue[0].label);
98+
stopTelemetryTracker(queue[0] && queue[0][0].label);
9999
return treatments;
100100
};
101101

@@ -128,7 +128,7 @@ export function clientFactory(params: ISdkFactoryContext): SplitIO.IClient | Spl
128128
attributes: SplitIO.Attributes | undefined,
129129
withConfig: boolean,
130130
invokingMethodName: string,
131-
queue: SplitIO.ImpressionDTO[]
131+
queue: [impression: SplitIO.ImpressionDTO, track?: boolean][]
132132
): SplitIO.Treatment | SplitIO.TreatmentWithConfig {
133133
const matchingKey = getMatching(key);
134134
const bucketingKey = getBucketing(key);
@@ -138,16 +138,15 @@ export function clientFactory(params: ISdkFactoryContext): SplitIO.IClient | Spl
138138

139139
if (validateSplitExistence(log, readinessManager, featureFlagName, label, invokingMethodName)) {
140140
log.info(IMPRESSION_QUEUEING);
141-
queue.push({
141+
queue.push([{
142142
feature: featureFlagName,
143143
keyName: matchingKey,
144144
treatment,
145145
time: Date.now(),
146146
bucketingKey,
147147
label,
148148
changeNumber: changeNumber as number,
149-
track
150-
});
149+
}, track]);
151150
}
152151

153152
if (withConfig) {

src/trackers/__tests__/impressionsTracker.spec.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ describe('Impressions Tracker', () => {
7575

7676
expect(fakeImpressionsCache.track).not.toBeCalled(); // cache method should not be called by just creating a tracker
7777

78-
tracker.track([imp1, imp2, imp3]);
78+
tracker.track([[imp1], [imp2], [imp3]]);
7979

8080
expect(fakeImpressionsCache.track.mock.calls[0][0]).toEqual([imp1, imp2, imp3]); // Should call the storage track method once we invoke .track() method, passing queued params in a sequence.
8181
});
@@ -98,7 +98,7 @@ describe('Impressions Tracker', () => {
9898
expect(fakeIntegrationsManager.handleImpression).not.toBeCalled(); // The integrations manager handleImpression method should not be invoked if we haven't tracked impressions.
9999

100100
// We signal that we actually want to track the queued impressions.
101-
tracker.track([fakeImpression, fakeImpression2], fakeAttributes);
101+
tracker.track([[fakeImpression], [fakeImpression2]], fakeAttributes);
102102

103103
expect(fakeImpressionsCache.track.mock.calls[0][0]).toEqual([fakeImpression, fakeImpression2]); // Even with a listener, impression should be sent to the cache
104104
expect(fakeListener.logImpression).not.toBeCalled(); // The listener should not be executed synchronously.
@@ -162,7 +162,7 @@ describe('Impressions Tracker', () => {
162162
expect(fakeImpressionsCache.track).not.toBeCalled(); // storage method should not be called until impressions are tracked.
163163

164164
trackers.forEach(tracker => {
165-
tracker.track([impression, impression2, impression3]);
165+
tracker.track([[impression], [impression2], [impression3]]);
166166

167167
const lastArgs = fakeImpressionsCache.track.mock.calls[fakeImpressionsCache.track.mock.calls.length - 1];
168168

@@ -187,7 +187,7 @@ describe('Impressions Tracker', () => {
187187

188188
expect(fakeImpressionsCache.track).not.toBeCalled(); // cache method should not be called by just creating a tracker
189189

190-
tracker.track([impression, impression2, impression3]);
190+
tracker.track([[impression], [impression2], [impression3]]);
191191

192192
const lastArgs = fakeImpressionsCache.track.mock.calls[fakeImpressionsCache.track.mock.calls.length - 1];
193193

@@ -208,19 +208,19 @@ describe('Impressions Tracker', () => {
208208

209209
const tracker = impressionsTrackerFactory(settings, fakeImpressionsCache, fakeNoneStrategy, strategy, fakeWhenInit);
210210

211-
tracker.track([impression]);
211+
tracker.track([[impression]]);
212212
expect(fakeImpressionsCache.track).toBeCalledTimes(1); // impression should be tracked if userConsent is undefined
213213

214214
settings.userConsent = 'UNKNOWN';
215-
tracker.track([impression]);
215+
tracker.track([[impression]]);
216216
expect(fakeImpressionsCache.track).toBeCalledTimes(2); // impression should be tracked if userConsent is unknown
217217

218218
settings.userConsent = 'GRANTED';
219-
tracker.track([impression]);
219+
tracker.track([[impression]]);
220220
expect(fakeImpressionsCache.track).toBeCalledTimes(3); // impression should be tracked if userConsent is granted
221221

222222
settings.userConsent = 'DECLINED';
223-
tracker.track([impression]);
223+
tracker.track([[impression]]);
224224
expect(fakeImpressionsCache.track).toBeCalledTimes(3); // impression should not be tracked if userConsent is declined
225225
});
226226

src/trackers/impressionsTracker.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ export function impressionsTrackerFactory(
2323
const { log, impressionListener, runtime: { ip, hostname }, version } = settings;
2424

2525
return {
26-
track(impressions: SplitIO.ImpressionDTO[], attributes?: SplitIO.Attributes) {
26+
track(impressions: [impression: SplitIO.ImpressionDTO, track?: boolean][], attributes?: SplitIO.Attributes) {
2727
if (settings.userConsent === CONSENT_DECLINED) return;
2828

29-
const impressionsToStore = impressions.filter((impression) => {
30-
return impression.track === false ?
29+
const impressionsToStore = impressions.filter(([impression, track]) => {
30+
return track === false ?
3131
noneStrategy.process(impression) :
3232
strategy.process(impression);
3333
});
@@ -36,7 +36,7 @@ export function impressionsTrackerFactory(
3636
const impressionsToStoreLength = impressionsToStore.length;
3737

3838
if (impressionsToStoreLength) {
39-
const res = impressionsCache.track(impressionsToStore);
39+
const res = impressionsCache.track(impressionsToStore.map((item) => item[0]));
4040

4141
// If we're on an async storage, handle error and log it.
4242
if (thenable(res)) {
@@ -60,7 +60,7 @@ export function impressionsTrackerFactory(
6060
for (let i = 0; i < impressionsLength; i++) {
6161
const impressionData: SplitIO.ImpressionData = {
6262
// copy of impression, to avoid unexpected behaviour if modified by integrations or impressionListener
63-
impression: objectAssign({}, impressions[i]),
63+
impression: objectAssign({}, impressions[i][0]),
6464
attributes,
6565
ip,
6666
hostname,

src/trackers/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export interface IImpressionsHandler {
1818
}
1919

2020
export interface IImpressionsTracker {
21-
track(impressions: SplitIO.ImpressionDTO[], attributes?: SplitIO.Attributes): void
21+
track(impressions: [impression: SplitIO.ImpressionDTO, track?: boolean][], attributes?: SplitIO.Attributes): void
2222
}
2323

2424
/** Telemetry tracker */

types/splitio.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -811,7 +811,6 @@ declare namespace SplitIO {
811811
label: string;
812812
changeNumber: number;
813813
pt?: number;
814-
track?: boolean;
815814
}
816815
/**
817816
* Object with information about an impression. It contains the generated impression DTO as well as

0 commit comments

Comments
 (0)