@@ -17,7 +17,13 @@ import { NonErrorPrefix } from '../error/error.types'
1717import type { StackTrace } from '../../tools/stackTrace/computeStackTrace'
1818import { computeStackTrace } from '../../tools/stackTrace/computeStackTrace'
1919import { getConnectivity } from '../connectivity'
20- import { canUseEventBridge , getEventBridge , startBatchWithReplica } from '../../transport'
20+ import {
21+ canUseEventBridge ,
22+ createFlushController ,
23+ createHttpRequest ,
24+ getEventBridge ,
25+ createBatch ,
26+ } from '../../transport'
2127import type { Encoder } from '../../tools/encoder'
2228import type { PageMayExitEvent } from '../../browser/pageMayExitObservable'
2329import { DeflateEncoderStreamId } from '../deflate'
@@ -190,30 +196,30 @@ function startTelemetryTransport(
190196 if ( canUseEventBridge ( ) ) {
191197 const bridge = getEventBridge < 'internal_telemetry' , TelemetryEvent > ( ) !
192198 const telemetrySubscription = telemetryObservable . subscribe ( ( event ) => bridge . send ( 'internal_telemetry' , event ) )
193- cleanupTasks . push ( ( ) => telemetrySubscription . unsubscribe ( ) )
199+ cleanupTasks . push ( telemetrySubscription . unsubscribe )
194200 } else {
195- const telemetryBatch = startBatchWithReplica (
196- configuration ,
197- {
198- endpoint : configuration . rumEndpointBuilder ,
199- encoder : createEncoder ( DeflateEncoderStreamId . TELEMETRY ) ,
200- } ,
201- configuration . replica && {
202- endpoint : configuration . replica . rumEndpointBuilder ,
203- encoder : createEncoder ( DeflateEncoderStreamId . TELEMETRY_REPLICA ) ,
204- } ,
205- reportError ,
206- pageMayExitObservable ,
207-
208- // We don't use an actual session expire observable here, to make telemetry collection
209- // independent of the session. This allows to start and send telemetry events ealier.
210- new Observable ( )
211- )
212- cleanupTasks . push ( ( ) => telemetryBatch . stop ( ) )
213- const telemetrySubscription = telemetryObservable . subscribe ( ( event ) => {
214- telemetryBatch . add ( event , isTelemetryReplicationAllowed ( configuration ) )
201+ const endpoints = [ configuration . rumEndpointBuilder ]
202+ if ( configuration . replica && isTelemetryReplicationAllowed ( configuration ) ) {
203+ endpoints . push ( configuration . replica . rumEndpointBuilder )
204+ }
205+ const telemetryBatch = createBatch ( {
206+ encoder : createEncoder ( DeflateEncoderStreamId . TELEMETRY ) ,
207+ request : createHttpRequest ( endpoints , configuration . batchBytesLimit , reportError ) ,
208+ flushController : createFlushController ( {
209+ messagesLimit : configuration . batchMessagesLimit ,
210+ bytesLimit : configuration . batchBytesLimit ,
211+ durationLimit : configuration . flushTimeout ,
212+ pageMayExitObservable,
213+
214+ // We don't use an actual session expire observable here, to make telemetry collection
215+ // independent of the session. This allows to start and send telemetry events earlier.
216+ sessionExpireObservable : new Observable ( ) ,
217+ } ) ,
218+ messageBytesLimit : configuration . messageBytesLimit ,
215219 } )
216- cleanupTasks . push ( ( ) => telemetrySubscription . unsubscribe ( ) )
220+ cleanupTasks . push ( telemetryBatch . stop )
221+ const telemetrySubscription = telemetryObservable . subscribe ( telemetryBatch . add )
222+ cleanupTasks . push ( telemetrySubscription . unsubscribe )
217223 }
218224
219225 return {
@@ -236,7 +242,7 @@ export function resetTelemetry() {
236242 * Avoid mixing telemetry events from different data centers
237243 * but keep replicating staging events for reliability
238244 */
239- export function isTelemetryReplicationAllowed ( configuration : Configuration ) {
245+ function isTelemetryReplicationAllowed ( configuration : Configuration ) {
240246 return configuration . site === INTAKE_SITE_STAGING
241247}
242248
0 commit comments