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  }