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