|
|
|
@@ -2,6 +2,8 @@ package models |
|
|
|
|
|
|
|
import ( |
|
|
|
"code.gitea.io/gitea/modules/timeutil" |
|
|
|
"errors" |
|
|
|
"strconv" |
|
|
|
"strings" |
|
|
|
"xorm.io/builder" |
|
|
|
) |
|
|
|
@@ -197,9 +199,74 @@ func ParseComputeResourceFormGrampus(grampusDeviceKind string) string { |
|
|
|
return strings.ToUpper(t[1]) |
|
|
|
} |
|
|
|
|
|
|
|
func ParseMemSizeFromGrampus(grampusMemSize string) float32 { |
|
|
|
type MemSize struct { |
|
|
|
Sizes []string |
|
|
|
Hex int |
|
|
|
} |
|
|
|
|
|
|
|
var memSize = MemSize{Sizes: []string{"K", "M", "G", "T", "P", "E"}, Hex: 1000} |
|
|
|
var iMemSize = MemSize{Sizes: []string{"Ki", "Mi", "Gi", "Ti", "Pi", "Ei"}, Hex: 1024} |
|
|
|
|
|
|
|
func MatchMemSize(memSize MemSize, val string) (int, float32, error) { |
|
|
|
for i, v := range memSize.Sizes { |
|
|
|
if strings.HasSuffix(val, v) { |
|
|
|
s := strings.TrimSuffix(val, v) |
|
|
|
f, err := strconv.ParseFloat(s, 32) |
|
|
|
if err != nil { |
|
|
|
return 0, 0, err |
|
|
|
} |
|
|
|
return i, float32(f), nil |
|
|
|
} |
|
|
|
} |
|
|
|
return -1, 0, nil |
|
|
|
} |
|
|
|
|
|
|
|
//TransferMemSize transfer oldValue format from old index to new index |
|
|
|
//eg: memSize.Sizes = []string{"M", "G", "T", "P", "E"}, oldValue = 10 , oldIndex = 1 , newIndex = 0. it means transfer 10G to 10000M |
|
|
|
//so it returns 10000 |
|
|
|
func TransferMemSize(memSize MemSize, oldValue float32, oldIndex int, newIndex int) float32 { |
|
|
|
diff := oldIndex - newIndex |
|
|
|
r := oldValue |
|
|
|
if diff > 0 { |
|
|
|
r = oldValue * float32(diff) * float32(memSize.Hex) |
|
|
|
} else if diff < 0 { |
|
|
|
r = oldValue / float32(-1*diff) / float32(memSize.Hex) |
|
|
|
} |
|
|
|
return r |
|
|
|
} |
|
|
|
|
|
|
|
return 0 |
|
|
|
//ParseMemSize find the memSize which matches value's format,and parse the number from value |
|
|
|
func ParseMemSize(value string, memSize MemSize, newIndex int) (bool, float32, error) { |
|
|
|
index, r, err := MatchMemSize(memSize, value) |
|
|
|
if err != nil { |
|
|
|
return false, 0, err |
|
|
|
} |
|
|
|
if index < 0 { |
|
|
|
return false, 0, nil |
|
|
|
} |
|
|
|
return true, TransferMemSize(memSize, r, index, newIndex), nil |
|
|
|
} |
|
|
|
|
|
|
|
func ParseMemSizeFromGrampus(grampusMemSize string) (float32, error) { |
|
|
|
if grampusMemSize == "" { |
|
|
|
return 0, nil |
|
|
|
} |
|
|
|
memflag, memResult, err := ParseMemSize(grampusMemSize, memSize, 2) |
|
|
|
if err != nil { |
|
|
|
return 0, err |
|
|
|
} |
|
|
|
if memflag { |
|
|
|
return memResult, nil |
|
|
|
} |
|
|
|
|
|
|
|
iMemFlag, imemResult, err := ParseMemSize(grampusMemSize, iMemSize, 2) |
|
|
|
if err != nil { |
|
|
|
return 0, err |
|
|
|
} |
|
|
|
if iMemFlag { |
|
|
|
return imemResult, nil |
|
|
|
} |
|
|
|
return 0, errors.New("grampus memSize format error") |
|
|
|
} |
|
|
|
|
|
|
|
func SyncGrampusQueues(updateList []ResourceQueue, insertList []ResourceQueue, existIds []int64) error { |
|
|
|
|