mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-22 16:36:27 +01:00
9817ecdcc9
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>
(cherry picked from commit 5f8b91186a
)
180 lines
3.7 KiB
Go
180 lines
3.7 KiB
Go
package utils
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestGetTime(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
s string
|
|
want func() time.Time
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "empty string",
|
|
s: "",
|
|
want: func() time.Time { return time.Time{} },
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "only year",
|
|
s: "2019",
|
|
want: func() time.Time {
|
|
t := time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC)
|
|
return t
|
|
},
|
|
},
|
|
{
|
|
name: "year and month",
|
|
s: "2019-01",
|
|
want: func() time.Time {
|
|
t := time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC)
|
|
return t
|
|
},
|
|
},
|
|
{
|
|
name: "year and not first month",
|
|
s: "2019-02",
|
|
want: func() time.Time {
|
|
t := time.Date(2019, 2, 1, 0, 0, 0, 0, time.UTC)
|
|
return t
|
|
},
|
|
},
|
|
{
|
|
name: "year, month and day",
|
|
s: "2019-02-01",
|
|
want: func() time.Time {
|
|
t := time.Date(2019, 2, 1, 0, 0, 0, 0, time.UTC)
|
|
return t
|
|
},
|
|
},
|
|
{
|
|
name: "year, month and not first day",
|
|
s: "2019-02-10",
|
|
want: func() time.Time {
|
|
t := time.Date(2019, 2, 10, 0, 0, 0, 0, time.UTC)
|
|
return t
|
|
},
|
|
},
|
|
{
|
|
name: "year, month, day and time",
|
|
s: "2019-02-02T00",
|
|
want: func() time.Time {
|
|
t := time.Date(2019, 2, 2, 0, 0, 0, 0, time.UTC)
|
|
return t
|
|
},
|
|
},
|
|
{
|
|
name: "year, month, day and one hour time",
|
|
s: "2019-02-02T01",
|
|
want: func() time.Time {
|
|
t := time.Date(2019, 2, 2, 1, 0, 0, 0, time.UTC)
|
|
return t
|
|
},
|
|
},
|
|
{
|
|
name: "time with zero minutes",
|
|
s: "2019-02-02T01:00",
|
|
want: func() time.Time {
|
|
t := time.Date(2019, 2, 2, 1, 0, 0, 0, time.UTC)
|
|
return t
|
|
},
|
|
},
|
|
{
|
|
name: "time with one minute",
|
|
s: "2019-02-02T01:01",
|
|
want: func() time.Time {
|
|
t := time.Date(2019, 2, 2, 1, 1, 0, 0, time.UTC)
|
|
return t
|
|
},
|
|
},
|
|
{
|
|
name: "time with zero seconds",
|
|
s: "2019-02-02T01:01:00",
|
|
want: func() time.Time {
|
|
t := time.Date(2019, 2, 2, 1, 1, 0, 0, time.UTC)
|
|
return t
|
|
},
|
|
},
|
|
{
|
|
name: "timezone with one second",
|
|
s: "2019-02-02T01:01:01",
|
|
want: func() time.Time {
|
|
t := time.Date(2019, 2, 2, 1, 1, 1, 0, time.UTC)
|
|
return t
|
|
},
|
|
},
|
|
{
|
|
name: "time with two second and timezone",
|
|
s: "2019-07-07T20:01:02Z",
|
|
want: func() time.Time {
|
|
t := time.Date(2019, 7, 7, 20, 1, 02, 0, time.UTC)
|
|
return t
|
|
},
|
|
},
|
|
{
|
|
name: "time with seconds and timezone",
|
|
s: "2019-07-07T20:47:40+03:00",
|
|
want: func() time.Time {
|
|
l, _ := time.LoadLocation("Europe/Kiev")
|
|
t := time.Date(2019, 7, 7, 20, 47, 40, 0, l)
|
|
return t
|
|
},
|
|
},
|
|
{
|
|
name: "negative time",
|
|
s: "-292273086-05-16T16:47:06Z",
|
|
want: func() time.Time { return time.Time{} },
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "float timestamp representation",
|
|
s: "1562529662.324",
|
|
want: func() time.Time {
|
|
t := time.Date(2019, 7, 7, 20, 01, 02, 324e6, time.UTC)
|
|
return t
|
|
},
|
|
},
|
|
{
|
|
name: "negative timestamp",
|
|
s: "-9223372036.855",
|
|
want: func() time.Time {
|
|
return time.Date(1970, 01, 01, 00, 00, 00, 00, time.UTC)
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "big timestamp",
|
|
s: "1223372036855",
|
|
want: func() time.Time {
|
|
t := time.Date(2008, 10, 7, 9, 33, 56, 855e6, time.UTC)
|
|
return t
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "duration time",
|
|
s: "1h5m",
|
|
want: func() time.Time {
|
|
t := time.Now().Add(-1 * time.Hour).Add(-5 * time.Minute)
|
|
return t
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := ParseTime(tt.s)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("ParseTime() error = %v, wantErr %v", err, tt.wantErr)
|
|
return
|
|
}
|
|
w := tt.want()
|
|
if got.Unix() != w.Unix() {
|
|
t.Errorf("ParseTime() got = %v, want %v", got, w)
|
|
}
|
|
})
|
|
}
|
|
}
|