Prometheus: Add interpolation for built-in-time variables to backend (#39051)

* Add grafana variable interpolation to backend

* Remove newlines
This commit is contained in:
Ivana Huckova
2021-09-10 16:56:15 -04:00
committed by GitHub
parent a30f560b35
commit 4952f6fc58
3 changed files with 280 additions and 74 deletions

View File

@@ -82,31 +82,40 @@ func (ic *intervalCalculator) CalculateSafeInterval(timerange backend.TimeRange,
// queryIntervalMS is a pre-calculated numeric representation of the query interval in milliseconds.
func GetIntervalFrom(dsInterval, queryInterval string, queryIntervalMS int64, defaultInterval time.Duration) (time.Duration, error) {
// Apparently we are setting default value of queryInterval to 0s now
if queryInterval == "0s" {
queryInterval = ""
interval := queryInterval
if interval == "0s" {
interval = ""
}
if queryInterval == "" {
if interval == "" {
if queryIntervalMS != 0 {
return time.Duration(queryIntervalMS) * time.Millisecond, nil
}
}
interval := queryInterval
if queryInterval == "" && dsInterval != "" {
if interval == "" && dsInterval != "" {
interval = dsInterval
}
if interval == "" {
return defaultInterval, nil
}
interval = strings.Replace(strings.Replace(interval, "<", "", 1), ">", "", 1)
isPureNum, err := regexp.MatchString(`^\d+$`, interval)
parsedInterval, err := ParseIntervalStringToTimeDuration(interval)
if err != nil {
return time.Duration(0), err
}
return parsedInterval, nil
}
func ParseIntervalStringToTimeDuration(interval string) (time.Duration, error) {
formattedInterval := strings.Replace(strings.Replace(interval, "<", "", 1), ">", "", 1)
isPureNum, err := regexp.MatchString(`^\d+$`, formattedInterval)
if err != nil {
return time.Duration(0), err
}
if isPureNum {
interval += "s"
formattedInterval += "s"
}
parsedInterval, err := time.ParseDuration(interval)
parsedInterval, err := time.ParseDuration(formattedInterval)
if err != nil {
return time.Duration(0), err
}