...

Source file src/github.com/launchdarkly/go-sdk-events/v2/outbox.go

Documentation: github.com/launchdarkly/go-sdk-events/v2

     1  package ldevents
     2  
     3  import (
     4  	"github.com/launchdarkly/go-sdk-common/v3/ldlog"
     5  )
     6  
     7  type eventsOutbox struct {
     8  	events           []anyEventOutput
     9  	summarizer       eventSummarizer
    10  	capacity         int
    11  	capacityExceeded bool
    12  	droppedEvents    int
    13  	loggers          ldlog.Loggers
    14  }
    15  
    16  func newEventsOutbox(capacity int, loggers ldlog.Loggers) *eventsOutbox {
    17  	return &eventsOutbox{
    18  		events:     make([]anyEventOutput, 0, capacity),
    19  		summarizer: newEventSummarizer(),
    20  		capacity:   capacity,
    21  		loggers:    loggers,
    22  	}
    23  }
    24  
    25  func (b *eventsOutbox) addEvent(event anyEventInput) {
    26  	if len(b.events) >= b.capacity {
    27  		if !b.capacityExceeded {
    28  			b.capacityExceeded = true
    29  			b.loggers.Warn("Exceeded event queue capacity. Increase capacity to avoid dropping events.")
    30  		}
    31  		b.droppedEvents++
    32  		return
    33  	}
    34  	b.capacityExceeded = false
    35  	b.events = append(b.events, event)
    36  }
    37  
    38  func (b *eventsOutbox) addToSummary(ed EvaluationData) {
    39  	b.summarizer.summarizeEvent(ed)
    40  }
    41  
    42  func (b *eventsOutbox) getPayload() flushPayload {
    43  	var copied []anyEventOutput
    44  	if len(b.events) > 0 {
    45  		copied = make([]anyEventOutput, len(b.events))
    46  		copy(copied, b.events)
    47  	}
    48  	return flushPayload{
    49  		events:  copied,
    50  		summary: b.summarizer.snapshot(),
    51  	}
    52  }
    53  
    54  func (b *eventsOutbox) clear() {
    55  	for i := range b.events {
    56  		b.events[i] = nil
    57  	}
    58  	b.events = b.events[0:0]
    59  	b.summarizer.reset()
    60  }
    61  

View as plain text