@@ -269,10 +269,9 @@ type Client struct {
269269 sdkVersion string
270270 // Transport is read-only. Replacing the transport of an existing client is
271271 // not supported, create a new client instead.
272- Transport Transport
273- batchLogger * BatchLogger
274- telemetryBuffers map [ratelimit.Category ]telemetry.BufferInterface [protocol.EnvelopeItemConvertible ]
275- telemetryScheduler * telemetry.Scheduler
272+ Transport Transport
273+ batchLogger * BatchLogger
274+ telemetryBuffer * telemetry.Buffer
276275}
277276
278277// NewClient creates and returns an instance of Client configured using
@@ -422,20 +421,19 @@ func (client *Client) setupTelemetryBuffer() {
422421 })
423422 client .Transport = & internalAsyncTransportAdapter {transport : transport }
424423
425- client . telemetryBuffers = map [ratelimit.Category ]telemetry.BufferInterface [protocol.EnvelopeItemConvertible ]{
426- ratelimit .CategoryError : telemetry .NewBuffer [protocol.EnvelopeItemConvertible ](ratelimit .CategoryError , 100 , telemetry .OverflowPolicyDropOldest , 1 , 0 ),
427- ratelimit .CategoryTransaction : telemetry .NewBuffer [protocol.EnvelopeItemConvertible ](ratelimit .CategoryTransaction , 1000 , telemetry .OverflowPolicyDropOldest , 1 , 0 ),
428- ratelimit .CategoryLog : telemetry .NewBuffer [protocol.EnvelopeItemConvertible ](ratelimit .CategoryLog , 100 , telemetry .OverflowPolicyDropOldest , 100 , 5 * time .Second ),
429- ratelimit .CategoryMonitor : telemetry .NewBuffer [protocol.EnvelopeItemConvertible ](ratelimit .CategoryMonitor , 100 , telemetry .OverflowPolicyDropOldest , 1 , 0 ),
424+ storage : = map [ratelimit.Category ]telemetry.Storage [protocol.EnvelopeItemConvertible ]{
425+ ratelimit .CategoryError : telemetry .NewRingBuffer [protocol.EnvelopeItemConvertible ](ratelimit .CategoryError , 100 , telemetry .OverflowPolicyDropOldest , 1 , 0 ),
426+ ratelimit .CategoryTransaction : telemetry .NewRingBuffer [protocol.EnvelopeItemConvertible ](ratelimit .CategoryTransaction , 1000 , telemetry .OverflowPolicyDropOldest , 1 , 0 ),
427+ ratelimit .CategoryLog : telemetry .NewRingBuffer [protocol.EnvelopeItemConvertible ](ratelimit .CategoryLog , 100 , telemetry .OverflowPolicyDropOldest , 100 , 5 * time .Second ),
428+ ratelimit .CategoryMonitor : telemetry .NewRingBuffer [protocol.EnvelopeItemConvertible ](ratelimit .CategoryMonitor , 100 , telemetry .OverflowPolicyDropOldest , 1 , 0 ),
430429 }
431430
432431 sdkInfo := & protocol.SdkInfo {
433432 Name : client .sdkIdentifier ,
434433 Version : client .sdkVersion ,
435434 }
436435
437- client .telemetryScheduler = telemetry .NewScheduler (client .telemetryBuffers , transport , & client .dsn .Dsn , sdkInfo )
438- client .telemetryScheduler .Start ()
436+ client .telemetryBuffer = telemetry .NewBuffer (storage , transport , & client .dsn .Dsn , sdkInfo )
439437}
440438
441439func (client * Client ) setupIntegrations () {
@@ -578,7 +576,7 @@ func (client *Client) RecoverWithContext(
578576// the network synchronously, configure it to use the HTTPSyncTransport in the
579577// call to Init.
580578func (client * Client ) Flush (timeout time.Duration ) bool {
581- if client .batchLogger != nil || client .telemetryScheduler != nil {
579+ if client .batchLogger != nil || client .telemetryBuffer != nil {
582580 ctx , cancel := context .WithTimeout (context .Background (), timeout )
583581 defer cancel ()
584582 return client .FlushWithContext (ctx )
@@ -602,8 +600,8 @@ func (client *Client) FlushWithContext(ctx context.Context) bool {
602600 if client .batchLogger != nil {
603601 client .batchLogger .Flush (ctx .Done ())
604602 }
605- if client .telemetryScheduler != nil {
606- return client .telemetryScheduler .FlushWithContext (ctx )
603+ if client .telemetryBuffer != nil {
604+ return client .telemetryBuffer .FlushWithContext (ctx )
607605 }
608606 return client .Transport .FlushWithContext (ctx )
609607}
@@ -613,8 +611,8 @@ func (client *Client) FlushWithContext(ctx context.Context) bool {
613611// Close should be called after Flush and before terminating the program
614612// otherwise some events may be lost.
615613func (client * Client ) Close () {
616- if client .telemetryScheduler != nil {
617- client .telemetryScheduler . Stop (5 * time .Second )
614+ if client .telemetryBuffer != nil {
615+ client .telemetryBuffer . Close (5 * time .Second )
618616 }
619617 client .Transport .Close ()
620618}
@@ -736,7 +734,13 @@ func (client *Client) processEvent(event *Event, hint *EventHint, scope EventMod
736734 }
737735 }
738736
739- client .Transport .SendEvent (event )
737+ if client .telemetryBuffer != nil {
738+ if ! client .telemetryBuffer .Add (event ) {
739+ debuglog .Println ("Event dropped: telemetry buffer full or unavailable" )
740+ }
741+ } else {
742+ client .Transport .SendEvent (event )
743+ }
740744
741745 return & event .EventID
742746}
0 commit comments