code: func (observer *Observer) fetchStat(keyName string, seconds int64) int64 {
  	now := time.Now().UTC().Unix() - 2 // we can only look for already written stats
  	keys := make([]string, 0)
  
  	for i := int64(0); i < seconds; i++ {
  		key := fmt.Sprintf("%s::%d", keyName, now)
  		keys = append(keys, key)
  		now--
  	}
  	vals, err := observer.redisClient.MGet(keys...).Result()
  	if err != nil {
  		return 0
  	}
  	nilVal := 0
  	sum := int64(0)
  	for _, val := range vals {
  		if val == nil {
  			nilVal++
  			continue
  		}
  		num, _ := strconv.ParseInt(val.(string), 10, 64)
  		sum += num
  	}
  	return sum / seconds
  }
docs: // TODO the current implementation does not handle gaps for queue size
  // which appear for queues with little or no traffic