...

Source file src/edge-infra.dev/pkg/sds/ien/topology/ratelimit.go

Documentation: edge-infra.dev/pkg/sds/ien/topology

     1  package topology
     2  
     3  import (
     4  	"fmt"
     5  	"regexp"
     6  	"strconv"
     7  	"strings"
     8  )
     9  
    10  var (
    11  	kbitRate         uint64 = 1e+3 // bits per kbit
    12  	mbitRate         uint64 = 1e+6 // bits per mbit
    13  	kbit                    = regexp.MustCompile(`^[1-9][0-9]*([kK]bit$)`)
    14  	mbit                    = regexp.MustCompile(`^[1-9][0-9]*([mM]bit$)`)
    15  	defaultRateLimit        = 100 * mbitRate
    16  )
    17  
    18  // converts bits to mbits
    19  func convertBitsToMbits(bits uint64) string {
    20  	mbits := bits / mbitRate
    21  	return fmt.Sprintf("%dmbit", int(mbits)) /* #nosec G115 */
    22  }
    23  
    24  // convert the rate limiting mbit/kbit to bytes
    25  func convertRateLimitToBits(rateLimit string) uint64 {
    26  	var conversionRate uint64
    27  	var rateString string
    28  
    29  	switch {
    30  	case kbit.Match([]byte(rateLimit)):
    31  		rateString = strings.TrimSuffix(rateLimit, "kbit")
    32  		conversionRate = kbitRate
    33  	case mbit.Match([]byte(rateLimit)):
    34  		rateString = strings.TrimSuffix(rateLimit, "mbit")
    35  		conversionRate = mbitRate
    36  	default:
    37  		return defaultRateLimit
    38  	}
    39  
    40  	rate, err := strconv.ParseUint(rateString, 10, 64)
    41  	if err != nil {
    42  		return defaultRateLimit
    43  	}
    44  	return rate * conversionRate
    45  }
    46  

View as plain text