mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-01 14:47:38 +00:00
5f8b91186a
When `--vm-native-step-interval` is specified, explore phase will be executed within specified intervals. Discovered metric names will be associated with time intervals at which they were discovered. This suppose to reduce number of requests vmctl makes per metric name since it will skip time intervals when metric name didn't exist. This should also reduce probability of exceeding complexity limits for number of selected series in one request during explore phase. https://github.com/VictoriaMetrics/VictoriaMetrics/issues/5369 Signed-off-by: hagen1778 <roman@victoriametrics.com>
31 lines
796 B
Go
31 lines
796 B
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promutils"
|
|
)
|
|
|
|
const (
|
|
// These values prevent from overflow when storing msec-precision time in int64.
|
|
minTimeMsecs = 0 // use 0 instead of `int64(-1<<63) / 1e6` because the storage engine doesn't actually support negative time
|
|
maxTimeMsecs = int64(1<<63-1) / 1e6
|
|
)
|
|
|
|
// ParseTime parses time in s string and returns time.Time object
|
|
// if parse correctly or error if not
|
|
func ParseTime(s string) (time.Time, error) {
|
|
msecs, err := promutils.ParseTimeMsec(s)
|
|
if err != nil {
|
|
return time.Time{}, fmt.Errorf("cannot parse %s: %w", s, err)
|
|
}
|
|
if msecs < minTimeMsecs {
|
|
msecs = 0
|
|
}
|
|
if msecs > maxTimeMsecs {
|
|
msecs = maxTimeMsecs
|
|
}
|
|
|
|
return time.Unix(0, msecs*int64(time.Millisecond)).UTC(), nil
|
|
}
|