...
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