Compare commits

...

3 Commits

Author SHA1 Message Date
Prashant Shahi
389f22cf62 chore: return GoValuateFuncs as float64
Signed-off-by: Prashant Shahi <prashant@signoz.io>
2024-05-31 18:37:06 +05:30
Prashant Shahi
0b6894e12a Merge branch 'develop' into fix/toUnixTimestamp 2024-05-31 00:50:09 +05:30
Prashant Shahi
7ea1bca09d fix: parse both unix int and RFC3339 string in toUnixTimestamp
Signed-off-by: Prashant Shahi <prashant@signoz.io>
2024-05-29 18:22:12 +05:30

View File

@@ -266,20 +266,29 @@ func EvalFuncs() map[string]govaluate.ExpressionFunction {
GoValuateFuncs["radians"] = func(args ...interface{}) (interface{}, error) {
return args[0].(float64) * math.Pi / 180, nil
}
// Returns the current Unix timestamp in seconds.
GoValuateFuncs["now"] = func(args ...interface{}) (interface{}, error) {
return time.Now().Unix(), nil
return float64(time.Now().Unix()), nil
}
// Returns the given timestamp in seconds. The argument can be a string in RFC3339 format or an int in seconds since Unix epoch.
GoValuateFuncs["toUnixTimestamp"] = func(args ...interface{}) (interface{}, error) {
if len(args) != 1 {
return nil, fmt.Errorf("toUnixTimestamp requires exactly one argument")
}
t, err := time.Parse(time.RFC3339, args[0].(string))
if err != nil {
return nil, err
var t time.Time
var err error
switch toUnixTsArg := args[0].(type) {
case int:
t = time.Unix(int64(toUnixTsArg), 0)
case string:
t, err = time.Parse(time.RFC3339, toUnixTsArg)
if err != nil {
return nil, err
}
default:
return nil, fmt.Errorf("toUnixTimestamp requires either a string in RFC3339 format or an int in seconds since Unix epoch")
}
return t.Unix(), nil
return float64(t.Unix()), nil
}
return GoValuateFuncs