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  }