grafana/pkg/setting/setting_k8s_dashboard_clean...

54 lines
1.8 KiB
Go

package setting
import (
"time"
)
type K8sDashboardCleanupSettings struct {
Interval time.Duration
Timeout time.Duration
BatchSize int64
}
const (
defaultK8sDashboardCleanupInterval = 30 * time.Second
defaultK8sDashboardCleanupBatchSize = int64(10)
minK8sDashboardCleanupInterval = 10 * time.Second
minK8sDashboardCleanupTimeout = 5 * time.Second
minK8sDashboardCleanupBatchSize = int64(5)
maxK8sDashboardCleanupBatchSize = int64(200)
)
func (cfg *Cfg) readK8sDashboardCleanupSettings() {
section := cfg.Raw.Section("dashboard_cleanup")
// Read interval setting with validation
cleanupInterval := section.Key("interval").MustDuration(defaultK8sDashboardCleanupInterval)
if cleanupInterval < minK8sDashboardCleanupInterval {
cfg.Logger.Warn("[dashboard_cleanup.interval] is too low; the minimum allowed (10s) is enforced")
cleanupInterval = minK8sDashboardCleanupInterval
}
// Calculate timeout as 5 seconds less than interval, with minimum validation
cleanupTimeout := cleanupInterval - (5 * time.Second)
if cleanupTimeout < minK8sDashboardCleanupTimeout {
cleanupTimeout = minK8sDashboardCleanupTimeout
}
// Read batch size with validation
batchSize := section.Key("batch_size").MustInt64(defaultK8sDashboardCleanupBatchSize)
if batchSize < minK8sDashboardCleanupBatchSize {
cfg.Logger.Warn("[dashboard_cleanup.batch_size] is too low; the minimum allowed (5) is enforced")
batchSize = minK8sDashboardCleanupBatchSize
} else if batchSize > maxK8sDashboardCleanupBatchSize {
cfg.Logger.Warn("[dashboard_cleanup.batch_size] is too high; the maximum allowed (1000) is enforced")
batchSize = maxK8sDashboardCleanupBatchSize
}
cfg.K8sDashboardCleanup = K8sDashboardCleanupSettings{
Interval: cleanupInterval,
Timeout: cleanupTimeout,
BatchSize: batchSize,
}
}