logs-analyzer/signoz/pkg/query-service/converter/time.go

63 lines
1.2 KiB
Go
Raw Permalink Normal View History

2024-09-02 22:47:30 +03:00
package converter
type Duration float64
const (
Nanosecond = Second * 1e-9
Microsecond = Second * 1e-6
Millisecond = Second * 1e-3
Centisecond = Second * 1e-2
Decisecond = Second * 1e-1
Second Duration = 1e0
Minute = Second * 60
Hour = Minute * 60
Day = Hour * 24
Week = Day * 7
)
// durationConverter is an implementation of Converter for durations.
type durationConverter struct {
}
func NewDurationConverter() Converter {
return &durationConverter{}
}
func (*durationConverter) Name() string {
return "duration"
}
func FromTimeUnit(u Unit) Duration {
switch u {
case "ns":
return Nanosecond
case "us", "µs":
return Microsecond
case "ms":
return Millisecond
case "cs":
return Centisecond
case "ds":
return Decisecond
case "s":
return Second
case "m":
return Minute
case "h":
return Hour
case "d":
return Day
case "w":
return Week
default:
return Second
}
}
func (c *durationConverter) Convert(v Value, to Unit) Value {
return Value{
F: v.F * float64(FromTimeUnit(v.U)) / float64(FromTimeUnit(to)),
U: to,
}
}