Skip to content

Commit 330c1ef

Browse files
Removed unused poll logic for RUM Session ID
1 parent c9b4ac5 commit 330c1ef

4 files changed

Lines changed: 1 addition & 259 deletions

File tree

packages/core/android/src/newarch/kotlin/com/datadog/reactnative/DdSdk.kt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -155,15 +155,4 @@ class DdSdk(
155155
}
156156
})
157157
}
158-
159-
@MainThread
160-
private fun emitSessionId(reactContext: ReactApplicationContext, sessionId: String) {
161-
try {
162-
reactContext
163-
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
164-
.emit("RUMSessionStarted", sessionId)
165-
} catch(err: Exception) {
166-
return
167-
}
168-
}
169158
}

packages/core/src/DdSdkReactNative.tsx

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,9 @@ import { DdRum } from './rum/DdRum';
2929
import { DdRumErrorTracking } from './rum/instrumentation/DdRumErrorTracking';
3030
import { DdRumUserInteractionTracking } from './rum/instrumentation/interactionTracking/DdRumUserInteractionTracking';
3131
import { DdRumResourceTracking } from './rum/instrumentation/resourceTracking/DdRumResourceTracking';
32-
import {
33-
pollForSessionId,
34-
verifySessionId
35-
} from './rum/sessionId/sessionIdHelper';
3632
import { AttributesSingleton } from './sdk/AttributesSingleton/AttributesSingleton';
3733
import type { Attributes } from './sdk/AttributesSingleton/types';
38-
import {
39-
hasNativeBridge,
40-
registerNativeBridge
41-
} from './sdk/DatadogInternalBridge/DdSdkInternalNativeBridge';
34+
import { registerNativeBridge } from './sdk/DatadogInternalBridge/DdSdkInternalNativeBridge';
4235
import { BufferSingleton } from './sdk/DatadogProvider/Buffer/BufferSingleton';
4336
import { DdSdk } from './sdk/DdSdk';
4437
import { FileBasedConfiguration } from './sdk/FileBasedConfiguration/FileBasedConfiguration';
@@ -105,12 +98,6 @@ export class DdSdkReactNative {
10598
DdSdkReactNative.buildConfiguration(configuration, params)
10699
);
107100

108-
if (!hasNativeBridge()) {
109-
pollForSessionId();
110-
} else {
111-
verifySessionId();
112-
}
113-
114101
InternalLog.log('Datadog SDK was initialized', SdkVerbosity.INFO);
115102
GlobalState.instance.isInitialized = true;
116103
BufferSingleton.onInitialization();

packages/core/src/rum/sessionId/sessionIdHelper.ts

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -3,67 +3,7 @@
33
* This product includes software developed at Datadog (https://www.datadoghq.com/).
44
* Copyright 2016-Present Datadog, Inc.
55
*/
6-
7-
import { InternalLog } from '../../InternalLog';
8-
import { SdkVerbosity } from '../../SdkVerbosity';
9-
import { DdRum } from '../DdRum';
10-
11-
const SESSION_ID_POLL_INTERVAL = 500;
12-
const SESSION_ID_POLL_MAX_ATTEMPTS = 10;
13-
const SESSION_ID_VERIFY_DELAY = 1500;
14-
156
let _cachedSessionId: string | undefined;
16-
let _pollForSessionIdTimeout: NodeJS.Timeout | undefined;
17-
let _verifySessionIdTimeout: NodeJS.Timeout | undefined;
18-
19-
export const pollForSessionId = (
20-
intervalMs = SESSION_ID_POLL_INTERVAL,
21-
maxAttempts = SESSION_ID_POLL_MAX_ATTEMPTS
22-
): void => {
23-
let attempts = 0;
24-
25-
const poll = async () => {
26-
if (_pollForSessionIdTimeout) {
27-
clearTimeout(_pollForSessionIdTimeout);
28-
}
29-
attempts++;
30-
try {
31-
const id = await DdRum.getCurrentSessionId();
32-
if (id) {
33-
_cachedSessionId = id;
34-
InternalLog.log(
35-
`Retrieved RUM Session ID after ${attempts} attempts: ${id}`,
36-
SdkVerbosity.DEBUG
37-
);
38-
return;
39-
}
40-
} catch (e) {
41-
/* empty */
42-
}
43-
44-
if (attempts < maxAttempts) {
45-
_pollForSessionIdTimeout = setTimeout(poll, intervalMs);
46-
} else {
47-
InternalLog.log(
48-
`Cannot retrieve RUM Session ID after ${attempts} attempts.`,
49-
SdkVerbosity.DEBUG
50-
);
51-
}
52-
};
53-
54-
poll();
55-
};
56-
57-
export const verifySessionId = () => {
58-
if (_verifySessionIdTimeout) {
59-
clearTimeout(_verifySessionIdTimeout);
60-
}
61-
_verifySessionIdTimeout = setTimeout(() => {
62-
if (!_cachedSessionId) {
63-
pollForSessionId();
64-
}
65-
}, SESSION_ID_VERIFY_DELAY);
66-
};
677

688
export const getCachedSessionId = () => {
699
return _cachedSessionId;

packages/core/src/sdk/DatadogInternalBridge/__tests__/DdSdkNativeBridge.test.tsx

Lines changed: 0 additions & 174 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,10 @@
77
/* eslint-disable @typescript-eslint/no-var-requires */
88
/* eslint-disable global-require */
99

10-
import { NativeModules } from 'react-native';
11-
12-
import { DdSdkReactNativeConfiguration } from '../../../DdSdkReactNativeConfiguration';
13-
1410
const mockBatchedBridge = {
1511
registerCallableModule: jest.fn()
1612
};
1713

18-
const mockSessionIdHelper = {
19-
pollForSessionId: jest.fn(),
20-
verifySessionId: jest.fn()
21-
};
22-
2314
const mockNativeDdSdkSpec = {
2415
onRUMSessionStarted: jest.fn()
2516
};
@@ -57,11 +48,6 @@ describe('DdSdkNativeBridge', () => {
5748
() => mockBatchedBridge
5849
);
5950

60-
jest.mock(
61-
'../../../rum/sessionId/sessionIdHelper.ts',
62-
() => mockSessionIdHelper
63-
);
64-
6551
jest.mock(
6652
'../../DatadogEventEmitter/DatadogNativeEventEmitter',
6753
() => ({
@@ -128,86 +114,6 @@ describe('DdSdkNativeBridge', () => {
128114
'ERROR: Native Bridge initialization failed.'
129115
);
130116
});
131-
132-
it('session ID is polled when event listener setup failed', async () => {
133-
jest.mock(
134-
'react-native/Libraries/BatchedBridge/BatchedBridge',
135-
() => {
136-
throw new Error('Import failed');
137-
}
138-
);
139-
jest.mock('../../../specs/NativeDdSdk', () => undefined);
140-
141-
const ddBridge = require('../DdSdkInternalNativeBridge');
142-
const defaultEventEmitter = require('../../DatadogEventEmitter/DatadogDefaultEventEmitter');
143-
const ddSdkRn = require('../../../DdSdkReactNative');
144-
145-
mockNativeEventEmitter.initialize.mockReturnValueOnce(false);
146-
147-
ddBridge.registerNativeBridge(
148-
new defaultEventEmitter.DatadogDefaultEventEmitter(
149-
mockErrorHandler
150-
),
151-
mockErrorHandler
152-
);
153-
154-
// GIVEN
155-
const fakeAppId = '1';
156-
const fakeClientToken = '2';
157-
const fakeEnvName = 'env';
158-
const configuration = new DdSdkReactNativeConfiguration(
159-
fakeClientToken,
160-
fakeEnvName,
161-
fakeAppId
162-
);
163-
164-
NativeModules.DdSdk.initialize.mockResolvedValue(null);
165-
166-
// WHEN
167-
await ddSdkRn.DdSdkReactNative.initialize(configuration);
168-
169-
// THEN
170-
expect(ddBridge.hasNativeBridge()).toBe(false);
171-
expect(mockSessionIdHelper.pollForSessionId).toHaveBeenCalled();
172-
expect(mockSessionIdHelper.verifySessionId).not.toHaveBeenCalled();
173-
expect(mockErrorHandler).toHaveBeenCalled();
174-
});
175-
176-
it('session ID is verified when event listener setup succeeds', async () => {
177-
const ddBridge = require('../DdSdkInternalNativeBridge');
178-
const defaultEventEmitter = require('../../DatadogEventEmitter/DatadogDefaultEventEmitter');
179-
const ddSdkRn = require('../../../DdSdkReactNative');
180-
181-
mockNativeEventEmitter.initialize.mockReturnValueOnce(true);
182-
183-
ddBridge.registerNativeBridge(
184-
new defaultEventEmitter.DatadogDefaultEventEmitter(
185-
mockErrorHandler
186-
),
187-
mockErrorHandler
188-
);
189-
190-
// GIVEN
191-
const fakeAppId = '1';
192-
const fakeClientToken = '2';
193-
const fakeEnvName = 'env';
194-
const configuration = new DdSdkReactNativeConfiguration(
195-
fakeClientToken,
196-
fakeEnvName,
197-
fakeAppId
198-
);
199-
200-
NativeModules.DdSdk.initialize.mockResolvedValue(null);
201-
202-
// WHEN
203-
await ddSdkRn.DdSdkReactNative.initialize(configuration);
204-
205-
// THEN
206-
expect(ddBridge.hasNativeBridge()).toBe(true);
207-
expect(mockSessionIdHelper.verifySessionId).toHaveBeenCalled();
208-
expect(mockSessionIdHelper.pollForSessionId).not.toHaveBeenCalled();
209-
expect(mockErrorHandler).not.toHaveBeenCalled();
210-
});
211117
});
212118

213119
describe('old architecture implementation', () => {
@@ -249,85 +155,5 @@ describe('DdSdkNativeBridge', () => {
249155
'ERROR: Native Bridge initialization failed.'
250156
);
251157
});
252-
253-
it('session ID is polled when batched bridge setup failed', async () => {
254-
jest.mock(
255-
'react-native/Libraries/BatchedBridge/BatchedBridge',
256-
() => {
257-
throw new Error('Import failed');
258-
}
259-
);
260-
jest.mock('../../../specs/NativeDdSdk', () => undefined);
261-
262-
const ddBridge = require('../DdSdkInternalNativeBridge');
263-
const defaultEventEmitter = require('../../DatadogEventEmitter/DatadogDefaultEventEmitter');
264-
const ddSdkRn = require('../../../DdSdkReactNative');
265-
266-
mockBatchedBridgeEventEmitter.initialize.mockReturnValueOnce(false);
267-
268-
ddBridge.registerNativeBridge(
269-
new defaultEventEmitter.DatadogDefaultEventEmitter(
270-
mockErrorHandler
271-
),
272-
mockErrorHandler
273-
);
274-
275-
// GIVEN
276-
const fakeAppId = '1';
277-
const fakeClientToken = '2';
278-
const fakeEnvName = 'env';
279-
const configuration = new DdSdkReactNativeConfiguration(
280-
fakeClientToken,
281-
fakeEnvName,
282-
fakeAppId
283-
);
284-
285-
NativeModules.DdSdk.initialize.mockResolvedValue(null);
286-
287-
// WHEN
288-
await ddSdkRn.DdSdkReactNative.initialize(configuration);
289-
290-
// THEN
291-
expect(ddBridge.hasNativeBridge()).toBe(false);
292-
expect(mockSessionIdHelper.pollForSessionId).toHaveBeenCalled();
293-
expect(mockSessionIdHelper.verifySessionId).not.toHaveBeenCalled();
294-
expect(mockErrorHandler).toHaveBeenCalled();
295-
});
296-
297-
it('session ID is verified when batched bridge setup succeeds', async () => {
298-
const ddBridge = require('../DdSdkInternalNativeBridge');
299-
const defaultEventEmitter = require('../../DatadogEventEmitter/DatadogDefaultEventEmitter');
300-
const ddSdkRn = require('../../../DdSdkReactNative');
301-
302-
mockBatchedBridgeEventEmitter.initialize.mockReturnValueOnce(true);
303-
304-
ddBridge.registerNativeBridge(
305-
new defaultEventEmitter.DatadogDefaultEventEmitter(
306-
mockErrorHandler
307-
),
308-
mockErrorHandler
309-
);
310-
311-
// GIVEN
312-
const fakeAppId = '1';
313-
const fakeClientToken = '2';
314-
const fakeEnvName = 'env';
315-
const configuration = new DdSdkReactNativeConfiguration(
316-
fakeClientToken,
317-
fakeEnvName,
318-
fakeAppId
319-
);
320-
321-
NativeModules.DdSdk.initialize.mockResolvedValue(null);
322-
323-
// WHEN
324-
await ddSdkRn.DdSdkReactNative.initialize(configuration);
325-
326-
// THEN
327-
expect(ddBridge.hasNativeBridge()).toBe(true);
328-
expect(mockSessionIdHelper.verifySessionId).toHaveBeenCalled();
329-
expect(mockSessionIdHelper.pollForSessionId).not.toHaveBeenCalled();
330-
expect(mockErrorHandler).not.toHaveBeenCalled();
331-
});
332158
});
333159
});

0 commit comments

Comments
 (0)