81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
|
package metrics
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"reflect"
|
||
|
"strings"
|
||
|
|
||
|
"go.uber.org/zap"
|
||
|
)
|
||
|
|
||
|
// FormattedValue formats the value to be used in clickhouse query
|
||
|
func FormattedValue(v interface{}) string {
|
||
|
switch x := v.(type) {
|
||
|
case int:
|
||
|
return fmt.Sprintf("%d", x)
|
||
|
case float32, float64:
|
||
|
return fmt.Sprintf("%f", x)
|
||
|
case string:
|
||
|
return fmt.Sprintf("'%s'", x)
|
||
|
case bool:
|
||
|
return fmt.Sprintf("%v", x)
|
||
|
case []interface{}:
|
||
|
if len(x) == 0 {
|
||
|
return ""
|
||
|
}
|
||
|
switch x[0].(type) {
|
||
|
case string:
|
||
|
str := "["
|
||
|
for idx, sVal := range x {
|
||
|
str += fmt.Sprintf("'%s'", sVal)
|
||
|
if idx != len(x)-1 {
|
||
|
str += ","
|
||
|
}
|
||
|
}
|
||
|
str += "]"
|
||
|
return str
|
||
|
case int, float32, float64, bool:
|
||
|
return strings.Join(strings.Fields(fmt.Sprint(x)), ",")
|
||
|
default:
|
||
|
zap.L().Error("invalid type for formatted value", zap.Any("type", reflect.TypeOf(x[0])))
|
||
|
return ""
|
||
|
}
|
||
|
default:
|
||
|
zap.L().Error("invalid type for formatted value", zap.Any("type", reflect.TypeOf(x)))
|
||
|
return ""
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// PromFormattedValue formats the value to be used in promql
|
||
|
func PromFormattedValue(v interface{}) string {
|
||
|
switch x := v.(type) {
|
||
|
case int:
|
||
|
return fmt.Sprintf("%d", x)
|
||
|
case float32, float64:
|
||
|
return fmt.Sprintf("%f", x)
|
||
|
case string:
|
||
|
return x
|
||
|
case bool:
|
||
|
return fmt.Sprintf("%v", x)
|
||
|
case []interface{}:
|
||
|
if len(x) == 0 {
|
||
|
return ""
|
||
|
}
|
||
|
switch x[0].(type) {
|
||
|
case string, int, float32, float64, bool:
|
||
|
// list of values joined by | for promql - a value can contain whitespace
|
||
|
var str []string
|
||
|
for _, sVal := range x {
|
||
|
str = append(str, fmt.Sprintf("%v", sVal))
|
||
|
}
|
||
|
return strings.Join(str, "|")
|
||
|
default:
|
||
|
zap.L().Error("invalid type for prom formatted value", zap.Any("type", reflect.TypeOf(x[0])))
|
||
|
return ""
|
||
|
}
|
||
|
default:
|
||
|
zap.L().Error("invalid type for prom formatted value", zap.Any("type", reflect.TypeOf(x)))
|
||
|
return ""
|
||
|
}
|
||
|
}
|