code: func (queue *Queue) getCWStatsSet(f getUsageFunc) (*ecstcs.CWStatsSet, error) {
  	queue.lock.Lock()
  	defer queue.lock.Unlock()
  
  	queueLength := len(queue.buffer)
  	if queueLength < 2 {
  		// Need at least 2 data points to calculate this.
  		return nil, fmt.Errorf("No data in the queue")
  	}
  
  	var min, max, sum float64
  	var sampleCount int64
  	min = math.MaxFloat64
  	max = -math.MaxFloat64
  	sum = 0
  	sampleCount = 0
  
  	for _, stat := range queue.buffer {
  		perc := f(&stat)
  		if math.IsNaN(perc) {
  			continue
  		}
  
  		min = math.Min(min, perc)
  		max = math.Max(max, perc)
  		sampleCount++
  		sum += perc
  	}
  
  	return &ecstcs.CWStatsSet{
  		Max:         &max,
  		Min:         &min,
  		SampleCount: &sampleCount,
  		Sum:         &sum,
  	}, nil
  }
docs: // getCWStatsSet gets the stats set for either CPU or Memory based on the
  // function pointer.