crowdsec/pkg/types/queue.go

42 lines
911 B
Go
Raw Normal View History

package types
2020-05-15 09:39:16 +00:00
import (
log "github.com/sirupsen/logrus"
)
// Queue holds a limited size queue
2020-05-15 09:39:16 +00:00
type Queue struct {
Queue []Event
2020-05-15 09:39:16 +00:00
L int //capacity
}
// NewQueue create a new queue with a size of l
func NewQueue(l int) *Queue {
if l == -1 {
return &Queue{
Queue: make([]Event, 0),
2020-05-15 09:39:16 +00:00
L: int(^uint(0) >> 1), // max integer value, architecture independent
}
}
q := &Queue{
Queue: make([]Event, 0, l),
2020-05-15 09:39:16 +00:00
L: l,
}
log.WithFields(log.Fields{"Capacity": q.L}).Debugf("Creating queue")
return q
}
// Add an event in the queue. If it has already l elements, the first
// element is dropped before adding the new m element
func (q *Queue) Add(m Event) {
2020-05-15 09:39:16 +00:00
for len(q.Queue) > q.L { //we allow to add one element more than the true capacity
q.Queue = q.Queue[1:]
}
q.Queue = append(q.Queue, m)
}
// GetQueue returns the entire queue
func (q *Queue) GetQueue() []Event {
2020-05-15 09:39:16 +00:00
return q.Queue
}