mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
44 lines
951 B
Go
44 lines
951 B
Go
|
package utils
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
|
||
|
"github.com/VictoriaMetrics/metricsql"
|
||
|
)
|
||
|
|
||
|
// PromDuration is Prometheus duration.
|
||
|
type PromDuration struct {
|
||
|
milliseconds int64
|
||
|
}
|
||
|
|
||
|
// NewPromDuration returns PromDuration for given d.
|
||
|
func NewPromDuration(d time.Duration) PromDuration {
|
||
|
return PromDuration{
|
||
|
milliseconds: d.Milliseconds(),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// MarshalYAML implements yaml.Marshaler interface.
|
||
|
func (pd PromDuration) MarshalYAML() (interface{}, error) {
|
||
|
return pd.Duration().String(), nil
|
||
|
}
|
||
|
|
||
|
// UnmarshalYAML implements yaml.Unmarshaler interface.
|
||
|
func (pd *PromDuration) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||
|
var s string
|
||
|
if err := unmarshal(&s); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
ms, err := metricsql.DurationValue(s, 0)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
pd.milliseconds = ms
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// Duration returns duration for pd.
|
||
|
func (pd *PromDuration) Duration() time.Duration {
|
||
|
return time.Duration(pd.milliseconds) * time.Millisecond
|
||
|
}
|