github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/pkg/compute/capacity/parser.go (about) 1 package capacity 2 3 import ( 4 "strconv" 5 "strings" 6 7 "github.com/BTBurke/k8sresource" 8 "github.com/c2h5oh/datasize" 9 "github.com/filecoin-project/bacalhau/pkg/model" 10 ) 11 12 func ParseResourceUsageConfig(usage model.ResourceUsageConfig) model.ResourceUsageData { 13 return model.ResourceUsageData{ 14 CPU: ConvertCPUString(usage.CPU), 15 Memory: ConvertBytesString(usage.Memory), 16 Disk: ConvertBytesString(usage.Disk), 17 GPU: ConvertGPUString(usage.GPU), 18 } 19 } 20 func ConvertCPUString(val string) float64 { 21 ret, err := convertCPUStringWithError(val) 22 if err != nil { 23 return 0 24 } 25 return ret 26 } 27 28 func ConvertBytesString(val string) uint64 { 29 ret, err := convertBytesStringWithError(val) 30 if err != nil { 31 return 0 32 } 33 return ret 34 } 35 36 func ConvertGPUString(val string) uint64 { 37 ret, err := strconv.ParseUint(val, 10, 64) //nolint:gomnd 38 if err != nil { 39 return 0 40 } 41 return ret 42 } 43 44 func convertCPUStringWithError(val string) (float64, error) { 45 if val == "" { 46 return 0, nil 47 } 48 cpu, err := k8sresource.NewCPUFromString(sanitizeBytesString(val)) 49 if err != nil { 50 return 0, err 51 } 52 return cpu.ToFloat64(), nil 53 } 54 55 func convertBytesStringWithError(val string) (uint64, error) { 56 if val == "" { 57 return 0, nil 58 } 59 mem, err := datasize.ParseString(sanitizeBytesString(val)) 60 if err != nil { 61 return 0, err 62 } 63 return mem.Bytes(), nil 64 } 65 66 // allow Mi, Gi to mean Mb, Gb 67 // remove spaces 68 // lowercase 69 func sanitizeBytesString(st string) string { 70 st = strings.ToLower(st) 71 st = strings.ReplaceAll(st, "i", "b") 72 st = strings.ReplaceAll(st, " ", "") 73 return st 74 }