in ext/datasource/hotspot_rule_converter.go [97:140]
func parseSpecificItems(source []SpecificValue) map[interface{}]int64 {
ret := make(map[interface{}]int64, len(source))
if len(source) == 0 {
return ret
}
for _, item := range source {
switch item.ValKind {
case KindInt:
realVal, err := strconv.Atoi(item.ValStr)
if err != nil {
logging.Error(errors.Wrap(err, "parseSpecificItems error"), "Failed to parse value for int specific item", "itemValKind", item.ValKind, "itemValStr", item.ValStr)
continue
}
ret[realVal] = item.Threshold
case KindString:
ret[item.ValStr] = item.Threshold
case KindBool:
realVal, err := strconv.ParseBool(item.ValStr)
if err != nil {
logging.Error(errors.Wrap(err, "parseSpecificItems error"), "Failed to parse value for bool specific item", "itemValStr", item.ValStr)
continue
}
ret[realVal] = item.Threshold
case KindFloat64:
realVal, err := strconv.ParseFloat(item.ValStr, 64)
if err != nil {
logging.Error(errors.Wrap(err, "parseSpecificItems error"), "Failed to parse value for float specific item", "itemValStr", item.ValStr)
continue
}
realVal, err = strconv.ParseFloat(fmt.Sprintf("%.5f", realVal), 64)
if err != nil {
logging.Error(errors.Wrap(err, "parseSpecificItems error"), "Failed to parse value for float specific item", "itemValStr", item.ValStr)
continue
}
ret[realVal] = item.Threshold
default:
logging.Error(errors.New("Unsupported kind for specific item"), "", item.ValKind)
}
}
return ret
}