mirror of
https://github.com/grafana/grafana.git
synced 2024-11-28 03:34:15 -06:00
42 lines
1.3 KiB
Go
42 lines
1.3 KiB
Go
package azuremonitor
|
|
|
|
// setAutoTimeGrain tries to find the closest interval to the query's intervalMs value
|
|
// if the metric has a limited set of possible intervals/time grains then use those
|
|
// instead of the default list of intervals
|
|
func setAutoTimeGrain(intervalMs int64, timeGrains []int64) (string, error) {
|
|
autoInterval := findClosestAllowedIntervalMS(intervalMs, timeGrains)
|
|
tg := &TimeGrain{}
|
|
autoTimeGrain, err := tg.createISO8601DurationFromIntervalMS(autoInterval)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return autoTimeGrain, nil
|
|
}
|
|
|
|
// findClosestAllowedIntervalMs is used for the auto time grain setting.
|
|
// It finds the closest time grain from the list of allowed time grains for Azure Monitor
|
|
// using the Grafana interval in milliseconds
|
|
// Some metrics only allow a limited list of time grains. The allowedTimeGrains parameter
|
|
// allows overriding the default list of allowed time grains.
|
|
func findClosestAllowedIntervalMS(intervalMs int64, allowedTimeGrains []int64) int64 {
|
|
allowedIntervals := defaultAllowedIntervalsMS
|
|
|
|
if len(allowedTimeGrains) > 0 {
|
|
allowedIntervals = allowedTimeGrains
|
|
}
|
|
|
|
closest := allowedIntervals[0]
|
|
|
|
for i, allowed := range allowedIntervals {
|
|
if intervalMs > allowed {
|
|
if i+1 < len(allowedIntervals) {
|
|
closest = allowedIntervals[i+1]
|
|
} else {
|
|
closest = allowed
|
|
}
|
|
}
|
|
}
|
|
return closest
|
|
}
|