...
1 package topology
2
3 import (
4 "fmt"
5 "regexp"
6 "strconv"
7 "strings"
8 )
9
10 var (
11 kbitRate uint64 = 1e+3
12 mbitRate uint64 = 1e+6
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
19 func convertBitsToMbits(bits uint64) string {
20 mbits := bits / mbitRate
21 return fmt.Sprintf("%dmbit", int(mbits))
22 }
23
24
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