in core/base/metric_item.go [75:138]
func MetricItemFromFatString(line string) (*MetricItem, error) {
if len(line) == 0 {
return nil, errors.New("invalid metric line: empty string")
}
item := &MetricItem{}
arr := strings.Split(line, metricPartSeparator)
if len(arr) < 8 {
return nil, errors.New("invalid metric line: invalid format")
}
ts, err := strconv.ParseUint(arr[0], 10, 64)
if err != nil {
return nil, err
}
item.Timestamp = ts
item.Resource = arr[2]
p, err := strconv.ParseUint(arr[3], 10, 64)
if err != nil {
return nil, err
}
item.PassQps = p
b, err := strconv.ParseUint(arr[4], 10, 64)
if err != nil {
return nil, err
}
item.BlockQps = b
c, err := strconv.ParseUint(arr[5], 10, 64)
if err != nil {
return nil, err
}
item.CompleteQps = c
e, err := strconv.ParseUint(arr[6], 10, 64)
if err != nil {
return nil, err
}
item.ErrorQps = e
rt, err := strconv.ParseUint(arr[7], 10, 64)
if err != nil {
return nil, err
}
item.AvgRt = rt
if len(arr) >= 9 {
oc, err := strconv.ParseUint(arr[8], 10, 64)
if err != nil {
return nil, err
}
item.OccupiedPassQps = oc
}
if len(arr) >= 10 {
concurrency, err := strconv.ParseUint(arr[9], 10, 32)
if err != nil {
return nil, err
}
item.Concurrency = uint32(concurrency)
}
if len(arr) >= 11 {
cl, err := strconv.ParseInt(arr[10], 10, 32)
if err != nil {
return nil, err
}
item.Classification = int32(cl)
}
return item, nil
}