mirror of
https://github.com/grafana/grafana.git
synced 2025-01-24 15:27:01 -06:00
8d37d8f60b
* metrics schematize * metrics now use schemas * logs schema * remove unused code * fix tests
46 lines
1.5 KiB
Go
46 lines
1.5 KiB
Go
package time
|
|
|
|
var (
|
|
// 1m, 5m, 15m, 30m, 1h, 6h, 12h, 1d in milliseconds
|
|
defaultAllowedIntervalsMS = []int64{60000, 300000, 900000, 1800000, 3600000, 21600000, 43200000, 86400000}
|
|
)
|
|
|
|
// 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)
|
|
autoTimeGrain, err := CreateISO8601DurationFromIntervalMS(autoInterval)
|
|
if err != nil {
|
|
return nil, 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
|
|
}
|