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  }