app/vmselect: use time value rounded to seconds if it isnt passed to /api/v1/query

Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/720
This commit is contained in:
Aliaksandr Valialkin 2020-09-21 21:23:43 +03:00
parent d32c3f747c
commit 07c6226334

View File

@ -26,11 +26,19 @@ var (
"see also -search.maxQueryDuration and -search.denyPartialResponse command-line flags") "see also -search.maxQueryDuration and -search.denyPartialResponse command-line flags")
) )
func roundToSeconds(ms int64) int64 {
return ms - ms%1000
}
// GetTime returns time from the given argKey query arg. // GetTime returns time from the given argKey query arg.
func GetTime(r *http.Request, argKey string, defaultValue int64) (int64, error) { //
// If argKey is missing in r, then defaultMs rounded to seconds is returned.
// The rounding is needed in order to align query results in Grafana
// executed at different times. See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/720
func GetTime(r *http.Request, argKey string, defaultMs int64) (int64, error) {
argValue := r.FormValue(argKey) argValue := r.FormValue(argKey)
if len(argValue) == 0 { if len(argValue) == 0 {
return defaultValue, nil return roundToSeconds(defaultMs), nil
} }
secs, err := strconv.ParseFloat(argValue, 64) secs, err := strconv.ParseFloat(argValue, 64)
if err != nil { if err != nil {