Skip to content

Commit aefddbf

Browse files
polishing
1 parent 837101a commit aefddbf

3 files changed

Lines changed: 24 additions & 10 deletions

File tree

src/__tests__/testUtils/index.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const DEFAULT_ERROR_MARGIN = 50; // 0.05 secs if numbers are timestamps in milliseconds
2+
3+
/**
4+
* Assert if an `actual` and `expected` numeric values are nearly equal.
5+
*
6+
* @param {number} actual actual time lapse in millis
7+
* @param {number} expected expected time lapse in millis
8+
* @param {number} epsilon error margin in millis
9+
* @returns {boolean} whether the absolute difference is minor to epsilon value or not
10+
*/
11+
export function nearlyEqual(actual: number, expected: number, epsilon = DEFAULT_ERROR_MARGIN) {
12+
const diff = Math.abs(actual - expected);
13+
return diff <= epsilon;
14+
}

src/trackers/__tests__/telemetryTracker.spec.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { EXCEPTION, SDK_NOT_READY } from '../../utils/labels';
2+
import { nearlyEqual } from '../../__tests__/testUtils';
23
import { telemetryTrackerFactory } from '../telemetryTracker';
34

45
describe('Telemetry Tracker', () => {
@@ -9,7 +10,7 @@ describe('Telemetry Tracker', () => {
910
recordException: jest.fn(),
1011
recordNonReadyUsage: jest.fn(),
1112
};
12-
// @ts-ignore
13+
1314
const tracker = telemetryTrackerFactory(fakeTelemetryCache, fakeNow);
1415

1516
test('trackEval', async () => {
@@ -25,15 +26,15 @@ describe('Telemetry Tracker', () => {
2526

2627
stopTracker = tracker.trackEval('tcs');
2728

28-
await new Promise(res => setTimeout(res, 50));
29+
await new Promise(res => setTimeout(res, 100));
2930
stopTracker();
3031

3132
expect(fakeTelemetryCache.recordException).toBeCalledTimes(1);
3233
expect(fakeTelemetryCache.recordNonReadyUsage).toBeCalledTimes(1);
3334
expect(fakeTelemetryCache.recordLatency).toBeCalledTimes(3);
3435

3536
const latency = fakeTelemetryCache.recordLatency.mock.calls[2][1];
36-
expect(latency >= 50 && latency < 100).toBeTruthy(); // last tracked latency is around 200 ms
37+
expect(nearlyEqual(latency, 100)).toBeTruthy(); // last tracked latency is around 100 ms
3738
});
3839

3940
});

src/trackers/telemetryTracker.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { TelemetryCacheSync, TelemetryCacheAsync } from '../storages/types';
2-
import { Method } from '../sync/submitters/types';
32
import { EXCEPTION, SDK_NOT_READY } from '../utils/labels';
43
import { ITelemetryTracker } from './types';
54
import { timer } from '../utils/timeTracker/timer';
@@ -12,26 +11,26 @@ export function telemetryTrackerFactory(
1211
if (telemetryCache && now) {
1312

1413
return {
15-
trackEval(method: Method) {
16-
const stopTimer = timer(now);
14+
trackEval(method) {
15+
const evalTime = timer(now);
1716

18-
return (label?: string) => {
17+
return (label) => {
1918
switch (label) {
2019
case EXCEPTION:
2120
telemetryCache.recordException(method);
2221
return; // Don't track latency on exceptions
2322
case SDK_NOT_READY: // @ts-ignore. TelemetryCacheAsync doesn't implement the method
2423
telemetryCache?.recordNonReadyUsage();
2524
}
26-
telemetryCache.recordLatency(method, stopTimer());
25+
telemetryCache.recordLatency(method, evalTime());
2726
};
28-
}
27+
},
2928
};
3029

3130
} else { // If there is not `telemetryCache` or `now` time tracker, return a no-op telemetry tracker
3231
const noopTrack = () => () => { };
3332
return {
34-
trackEval: noopTrack
33+
trackEval: noopTrack,
3534
};
3635
}
3736
}

0 commit comments

Comments
 (0)