diff --git a/internal/newtelemetry/client_config.go b/internal/newtelemetry/client_config.go index f4d6751c0a..c13ac0b7c8 100644 --- a/internal/newtelemetry/client_config.go +++ b/internal/newtelemetry/client_config.go @@ -83,7 +83,7 @@ var ( agentlessURL = "https://instrumentation-telemetry-intake.datadoghq.com/api/v2/apmtelemetry" // defaultHeartbeatInterval is the default interval at which the agent sends a heartbeat. - defaultHeartbeatInterval = time.Minute // seconds + defaultHeartbeatInterval = time.Minute // defaultExtendedHeartbeatInterval is the default interval at which the agent sends an extended heartbeat. defaultExtendedHeartbeatInterval = 24 * time.Hour @@ -162,12 +162,6 @@ func defaultConfig(config ClientConfig) ClientConfig { } } - if config.HeartbeatInterval == 0 { - config.HeartbeatInterval = globalinternal.DurationEnv("DD_TELEMETRY_HEARTBEAT_INTERVAL", defaultHeartbeatInterval) - } else { - config.HeartbeatInterval = defaultAuthorizedHearbeatRange.Clamp(config.HeartbeatInterval) - } - if config.FlushInterval.Min == 0 { config.FlushInterval.Min = defaultFlushIntervalRange.Min } else { @@ -180,6 +174,16 @@ func defaultConfig(config ClientConfig) ClientConfig { config.FlushInterval.Max = defaultAuthorizedHearbeatRange.Clamp(config.FlushInterval.Max) } + heartBeatInterval := defaultHeartbeatInterval + if config.HeartbeatInterval != 0 { + heartBeatInterval = config.HeartbeatInterval + } + + envVal := globalinternal.FloatEnv("DD_TELEMETRY_HEARTBEAT_INTERVAL", heartBeatInterval.Seconds()) + config.HeartbeatInterval = defaultAuthorizedHearbeatRange.Clamp(time.Duration(envVal * float64(time.Second))) + // Make sure we flush at least at each heartbeat interval + config.FlushInterval = config.FlushInterval.ReduceMax(config.HeartbeatInterval) + if config.DependencyLoader == nil && globalinternal.BoolEnv("DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED", true) { config.DependencyLoader = debug.ReadBuildInfo } diff --git a/internal/newtelemetry/internal/range.go b/internal/newtelemetry/internal/range.go index c084dc51de..c2e1e1852f 100644 --- a/internal/newtelemetry/internal/range.go +++ b/internal/newtelemetry/internal/range.go @@ -29,3 +29,11 @@ func (r Range[T]) Contains(value T) bool { func (r Range[T]) Clamp(value T) T { return max(min(r.Max, value), r.Min) } + +// ReduceMax returns a new range where value is the new max and min is either the current min or the new value to make sure the range is ordered. +func (r Range[T]) ReduceMax(value T) Range[T] { + return Range[T]{ + Min: min(r.Min, value), + Max: value, + } +}