github.com/crowdsecurity/crowdsec@v1.6.1/pkg/types/queue.go (about) 1 package types 2 3 import ( 4 log "github.com/sirupsen/logrus" 5 ) 6 7 // Queue holds a limited size queue 8 type Queue struct { 9 Queue []Event 10 L int //capacity 11 } 12 13 // NewQueue create a new queue with a size of l 14 func NewQueue(l int) *Queue { 15 if l == -1 { 16 return &Queue{ 17 Queue: make([]Event, 0), 18 L: int(^uint(0) >> 1), // max integer value, architecture independent 19 } 20 } 21 q := &Queue{ 22 Queue: make([]Event, 0, l), 23 L: l, 24 } 25 log.WithFields(log.Fields{"Capacity": q.L}).Debugf("Creating queue") 26 return q 27 } 28 29 // Add an event in the queue. If it has already l elements, the first 30 // element is dropped before adding the new m element 31 func (q *Queue) Add(m Event) { 32 for len(q.Queue) > q.L { //we allow to add one element more than the true capacity 33 q.Queue = q.Queue[1:] 34 } 35 q.Queue = append(q.Queue, m) 36 } 37 38 // GetQueue returns the entire queue 39 func (q *Queue) GetQueue() []Event { 40 return q.Queue 41 }