mirror of
https://github.com/grafana/grafana.git
synced 2025-01-08 23:23:45 -06:00
b7adf28501
This commit fixes the following golint warnings: pkg/api/avatar/avatar.go:229:12: should omit type *http.Client from declaration of var client; it will be inferred from the right-hand side pkg/login/brute_force_login_protection.go:13:26: should omit type time.Duration from declaration of var loginAttemptsWindow; it will be inferred from the right-hand side pkg/metrics/graphitebridge/graphite.go:58:26: should omit type []string from declaration of var metricCategoryPrefix; it will be inferred from the right-hand side pkg/metrics/graphitebridge/graphite.go:69:22: should omit type []string from declaration of var trimMetricPrefix; it will be inferred from the right-hand side pkg/models/alert.go:37:36: should omit type error from declaration of var ErrCannotChangeStateOnPausedAlert; it will be inferred from the right-hand side pkg/models/alert.go:38:36: should omit type error from declaration of var ErrRequiresNewState; it will be inferred from the right-hand side pkg/models/datasource.go:61:28: should omit type map[string]bool from declaration of var knownDatasourcePlugins; it will be inferred from the right-hand side pkg/plugins/update_checker.go:16:13: should omit type http.Client from declaration of var httpClient; it will be inferred from the right-hand side pkg/services/alerting/engine.go:103:24: should omit type time.Duration from declaration of var unfinishedWorkTimeout; it will be inferred from the right-hand side pkg/services/alerting/engine.go:105:19: should omit type time.Duration from declaration of var alertTimeout; it will be inferred from the right-hand side pkg/services/alerting/engine.go:106:19: should omit type int from declaration of var alertMaxAttempts; it will be inferred from the right-hand side pkg/services/alerting/notifier.go:143:23: should omit type map[string]*NotifierPlugin from declaration of var notifierFactories; it will be inferred from the right-hand side pkg/services/alerting/rule.go:136:24: should omit type map[string]ConditionFactory from declaration of var conditionFactories; it will be inferred from the right-hand side pkg/services/alerting/conditions/evaluator.go:12:15: should omit type []string from declaration of var defaultTypes; it will be inferred from the right-hand side pkg/services/alerting/conditions/evaluator.go:13:15: should omit type []string from declaration of var rangedTypes; it will be inferred from the right-hand side pkg/services/alerting/notifiers/opsgenie.go:44:19: should omit type string from declaration of var opsgenieAlertURL; it will be inferred from the right-hand side pkg/services/alerting/notifiers/pagerduty.go:43:23: should omit type string from declaration of var pagerdutyEventApiUrl; it will be inferred from the right-hand side pkg/services/alerting/notifiers/telegram.go:21:17: should omit type string from declaration of var telegramApiUrl; it will be inferred from the right-hand side pkg/services/provisioning/dashboards/config_reader_test.go:11:24: should omit type string from declaration of var simpleDashboardConfig; it will be inferred from the right-hand side pkg/services/provisioning/dashboards/config_reader_test.go:12:24: should omit type string from declaration of var oldVersion; it will be inferred from the right-hand side pkg/services/provisioning/dashboards/config_reader_test.go:13:24: should omit type string from declaration of var brokenConfigs; it will be inferred from the right-hand side pkg/services/provisioning/dashboards/file_reader.go:22:30: should omit type time.Duration from declaration of var checkDiskForChangesInterval; it will be inferred from the right-hand side pkg/services/provisioning/dashboards/file_reader.go:24:23: should omit type error from declaration of var ErrFolderNameMissing; it will be inferred from the right-hand side pkg/services/provisioning/datasources/config_reader_test.go:15:34: should omit type string from declaration of var twoDatasourcesConfig; it will be inferred from the right-hand side pkg/services/provisioning/datasources/config_reader_test.go:16:34: should omit type string from declaration of var twoDatasourcesConfigPurgeOthers; it will be inferred from the right-hand side pkg/services/provisioning/datasources/config_reader_test.go:17:34: should omit type string from declaration of var doubleDatasourcesConfig; it will be inferred from the right-hand side pkg/services/provisioning/datasources/config_reader_test.go:18:34: should omit type string from declaration of var allProperties; it will be inferred from the right-hand side pkg/services/provisioning/datasources/config_reader_test.go:19:34: should omit type string from declaration of var versionZero; it will be inferred from the right-hand side pkg/services/provisioning/datasources/config_reader_test.go:20:34: should omit type string from declaration of var brokenYaml; it will be inferred from the right-hand side pkg/services/sqlstore/stats.go:16:25: should omit type time.Duration from declaration of var activeUserTimeLimit; it will be inferred from the right-hand side pkg/services/sqlstore/migrator/mysql_dialect.go:69:14: should omit type bool from declaration of var hasLen1; it will be inferred from the right-hand side pkg/services/sqlstore/migrator/mysql_dialect.go:70:14: should omit type bool from declaration of var hasLen2; it will be inferred from the right-hand side pkg/services/sqlstore/migrator/postgres_dialect.go:95:14: should omit type bool from declaration of var hasLen1; it will be inferred from the right-hand side pkg/services/sqlstore/migrator/postgres_dialect.go:96:14: should omit type bool from declaration of var hasLen2; it will be inferred from the right-hand side pkg/setting/setting.go:42:15: should omit type string from declaration of var Env; it will be inferred from the right-hand side pkg/setting/setting.go:161:18: should omit type bool from declaration of var LdapAllowSignup; it will be inferred from the right-hand side pkg/setting/setting.go:473:30: should omit type bool from declaration of var skipStaticRootValidation; it will be inferred from the right-hand side pkg/tsdb/interval.go:14:21: should omit type time.Duration from declaration of var defaultMinInterval; it will be inferred from the right-hand side pkg/tsdb/interval.go:15:21: should omit type time.Duration from declaration of var year; it will be inferred from the right-hand side pkg/tsdb/interval.go:16:21: should omit type time.Duration from declaration of var day; it will be inferred from the right-hand side pkg/tsdb/cloudwatch/credentials.go:26:24: should omit type map[string]cache from declaration of var awsCredentialCache; it will be inferred from the right-hand side pkg/tsdb/influxdb/query.go:15:27: should omit type *regexp.Regexp from declaration of var regexpOperatorPattern; it will be inferred from the right-hand side pkg/tsdb/influxdb/query.go:16:27: should omit type *regexp.Regexp from declaration of var regexpMeasurementPattern; it will be inferred from the right-hand side pkg/tsdb/mssql/mssql_test.go:25:14: should omit type string from declaration of var serverIP; it will be inferred from the right-hand side
209 lines
5.2 KiB
Go
209 lines
5.2 KiB
Go
package tsdb
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/grafana/grafana/pkg/components/simplejson"
|
|
"github.com/grafana/grafana/pkg/models"
|
|
)
|
|
|
|
var (
|
|
defaultRes int64 = 1500
|
|
defaultMinInterval = time.Millisecond * 1
|
|
year = time.Hour * 24 * 365
|
|
day = time.Hour * 24
|
|
)
|
|
|
|
type Interval struct {
|
|
Text string
|
|
Value time.Duration
|
|
}
|
|
|
|
type intervalCalculator struct {
|
|
minInterval time.Duration
|
|
}
|
|
|
|
type IntervalCalculator interface {
|
|
Calculate(timeRange *TimeRange, minInterval time.Duration) Interval
|
|
}
|
|
|
|
type IntervalOptions struct {
|
|
MinInterval time.Duration
|
|
}
|
|
|
|
func NewIntervalCalculator(opt *IntervalOptions) *intervalCalculator {
|
|
if opt == nil {
|
|
opt = &IntervalOptions{}
|
|
}
|
|
|
|
calc := &intervalCalculator{}
|
|
|
|
if opt.MinInterval == 0 {
|
|
calc.minInterval = defaultMinInterval
|
|
} else {
|
|
calc.minInterval = opt.MinInterval
|
|
}
|
|
|
|
return calc
|
|
}
|
|
|
|
func (ic *intervalCalculator) Calculate(timerange *TimeRange, minInterval time.Duration) Interval {
|
|
to := timerange.MustGetTo().UnixNano()
|
|
from := timerange.MustGetFrom().UnixNano()
|
|
interval := time.Duration((to - from) / defaultRes)
|
|
|
|
if interval < minInterval {
|
|
return Interval{Text: formatDuration(minInterval), Value: minInterval}
|
|
}
|
|
|
|
rounded := roundInterval(interval)
|
|
return Interval{Text: formatDuration(rounded), Value: rounded}
|
|
}
|
|
|
|
func GetIntervalFrom(dsInfo *models.DataSource, queryModel *simplejson.Json, defaultInterval time.Duration) (time.Duration, error) {
|
|
interval := queryModel.Get("interval").MustString("")
|
|
|
|
if interval == "" && dsInfo.JsonData != nil {
|
|
dsInterval := dsInfo.JsonData.Get("timeInterval").MustString("")
|
|
if dsInterval != "" {
|
|
interval = dsInterval
|
|
}
|
|
}
|
|
|
|
if interval == "" {
|
|
return defaultInterval, nil
|
|
}
|
|
|
|
interval = strings.Replace(strings.Replace(interval, "<", "", 1), ">", "", 1)
|
|
parsedInterval, err := time.ParseDuration(interval)
|
|
if err != nil {
|
|
return time.Duration(0), err
|
|
}
|
|
|
|
return parsedInterval, nil
|
|
}
|
|
|
|
func formatDuration(inter time.Duration) string {
|
|
if inter >= year {
|
|
return fmt.Sprintf("%dy", inter/year)
|
|
}
|
|
|
|
if inter >= day {
|
|
return fmt.Sprintf("%dd", inter/day)
|
|
}
|
|
|
|
if inter >= time.Hour {
|
|
return fmt.Sprintf("%dh", inter/time.Hour)
|
|
}
|
|
|
|
if inter >= time.Minute {
|
|
return fmt.Sprintf("%dm", inter/time.Minute)
|
|
}
|
|
|
|
if inter >= time.Second {
|
|
return fmt.Sprintf("%ds", inter/time.Second)
|
|
}
|
|
|
|
if inter >= time.Millisecond {
|
|
return fmt.Sprintf("%dms", inter/time.Millisecond)
|
|
}
|
|
|
|
return "1ms"
|
|
}
|
|
|
|
func roundInterval(interval time.Duration) time.Duration {
|
|
switch true {
|
|
// 0.015s
|
|
case interval <= 15*time.Millisecond:
|
|
return time.Millisecond * 10 // 0.01s
|
|
// 0.035s
|
|
case interval <= 35*time.Millisecond:
|
|
return time.Millisecond * 20 // 0.02s
|
|
// 0.075s
|
|
case interval <= 75*time.Millisecond:
|
|
return time.Millisecond * 50 // 0.05s
|
|
// 0.15s
|
|
case interval <= 150*time.Millisecond:
|
|
return time.Millisecond * 100 // 0.1s
|
|
// 0.35s
|
|
case interval <= 350*time.Millisecond:
|
|
return time.Millisecond * 200 // 0.2s
|
|
// 0.75s
|
|
case interval <= 750*time.Millisecond:
|
|
return time.Millisecond * 500 // 0.5s
|
|
// 1.5s
|
|
case interval <= 1500*time.Millisecond:
|
|
return time.Millisecond * 1000 // 1s
|
|
// 3.5s
|
|
case interval <= 3500*time.Millisecond:
|
|
return time.Millisecond * 2000 // 2s
|
|
// 7.5s
|
|
case interval <= 7500*time.Millisecond:
|
|
return time.Millisecond * 5000 // 5s
|
|
// 12.5s
|
|
case interval <= 12500*time.Millisecond:
|
|
return time.Millisecond * 10000 // 10s
|
|
// 17.5s
|
|
case interval <= 17500*time.Millisecond:
|
|
return time.Millisecond * 15000 // 15s
|
|
// 25s
|
|
case interval <= 25000*time.Millisecond:
|
|
return time.Millisecond * 20000 // 20s
|
|
// 45s
|
|
case interval <= 45000*time.Millisecond:
|
|
return time.Millisecond * 30000 // 30s
|
|
// 1.5m
|
|
case interval <= 90000*time.Millisecond:
|
|
return time.Millisecond * 60000 // 1m
|
|
// 3.5m
|
|
case interval <= 210000*time.Millisecond:
|
|
return time.Millisecond * 120000 // 2m
|
|
// 7.5m
|
|
case interval <= 450000*time.Millisecond:
|
|
return time.Millisecond * 300000 // 5m
|
|
// 12.5m
|
|
case interval <= 750000*time.Millisecond:
|
|
return time.Millisecond * 600000 // 10m
|
|
// 12.5m
|
|
case interval <= 1050000*time.Millisecond:
|
|
return time.Millisecond * 900000 // 15m
|
|
// 25m
|
|
case interval <= 1500000*time.Millisecond:
|
|
return time.Millisecond * 1200000 // 20m
|
|
// 45m
|
|
case interval <= 2700000*time.Millisecond:
|
|
return time.Millisecond * 1800000 // 30m
|
|
// 1.5h
|
|
case interval <= 5400000*time.Millisecond:
|
|
return time.Millisecond * 3600000 // 1h
|
|
// 2.5h
|
|
case interval <= 9000000*time.Millisecond:
|
|
return time.Millisecond * 7200000 // 2h
|
|
// 4.5h
|
|
case interval <= 16200000*time.Millisecond:
|
|
return time.Millisecond * 10800000 // 3h
|
|
// 9h
|
|
case interval <= 32400000*time.Millisecond:
|
|
return time.Millisecond * 21600000 // 6h
|
|
// 24h
|
|
case interval <= 86400000*time.Millisecond:
|
|
return time.Millisecond * 43200000 // 12h
|
|
// 48h
|
|
case interval <= 172800000*time.Millisecond:
|
|
return time.Millisecond * 86400000 // 24h
|
|
// 1w
|
|
case interval <= 604800000*time.Millisecond:
|
|
return time.Millisecond * 86400000 // 24h
|
|
// 3w
|
|
case interval <= 1814400000*time.Millisecond:
|
|
return time.Millisecond * 604800000 // 1w
|
|
// 2y
|
|
case interval < 3628800000*time.Millisecond:
|
|
return time.Millisecond * 2592000000 // 30d
|
|
default:
|
|
return time.Millisecond * 31536000000 // 1y
|
|
}
|
|
}
|