diff --git a/packages/dd-trace/src/config/index.js b/packages/dd-trace/src/config/index.js index 797d983e644..2f1a27195c6 100644 --- a/packages/dd-trace/src/config/index.js +++ b/packages/dd-trace/src/config/index.js @@ -353,6 +353,7 @@ class Config { DD_TAGS, DD_TELEMETRY_DEBUG, DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED, + DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL, DD_TELEMETRY_HEARTBEAT_INTERVAL, DD_TELEMETRY_LOG_COLLECTION_ENABLED, DD_TELEMETRY_METRICS_ENABLED, @@ -761,6 +762,9 @@ class Config { setString(target, 'instrumentation_config_id', DD_INSTRUMENTATION_CONFIG_ID) setBoolean(target, 'telemetry.debug', DD_TELEMETRY_DEBUG) setBoolean(target, 'telemetry.dependencyCollection', DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED) + target['telemetry.extendedHeartbeatInterval'] = + maybeInt(Number.parseInt(DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL) * 1000) + unprocessedTarget['telemetry.extendedHeartbeatInterval'] = DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL target['telemetry.heartbeatInterval'] = maybeInt(Math.floor(DD_TELEMETRY_HEARTBEAT_INTERVAL * 1000)) unprocessedTarget['telemetry.heartbeatInterval'] = DD_TELEMETRY_HEARTBEAT_INTERVAL setBoolean(target, 'telemetry.logCollection', DD_TELEMETRY_LOG_COLLECTION_ENABLED) @@ -1165,6 +1169,8 @@ class Config { calc.otelLogsUrl = `http://${agentHostname}:${DEFAULT_OTLP_PORT}` calc.otelMetricsUrl = `http://${agentHostname}:${DEFAULT_OTLP_PORT}/v1/metrics` calc.otelUrl = `http://${agentHostname}:${DEFAULT_OTLP_PORT}` + calc['telemetry.extendedHeartbeatInterval'] = + maybeInt(Math.floor(this.#defaults['telemetry.extendedHeartbeatInterval'] * 1000)) calc['telemetry.heartbeatInterval'] = maybeInt(Math.floor(this.#defaults['telemetry.heartbeatInterval'] * 1000)) setBoolean(calc, 'isGitUploadEnabled', diff --git a/packages/dd-trace/src/config/supported-configurations.json b/packages/dd-trace/src/config/supported-configurations.json index 5bca7736dc9..e0abdf19c5a 100644 --- a/packages/dd-trace/src/config/supported-configurations.json +++ b/packages/dd-trace/src/config/supported-configurations.json @@ -1696,6 +1696,16 @@ "default": null } ], + "DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL": [ + { + "implementation": "A", + "type": "int", + "default": "86400", + "configurationNames": [ + "telemetry.extendedHeartbeatInterval" + ] + } + ], "DD_TELEMETRY_HEARTBEAT_INTERVAL": [ { "implementation": "B", diff --git a/packages/dd-trace/src/telemetry/telemetry.js b/packages/dd-trace/src/telemetry/telemetry.js index e113bb9e077..c5d02ca7945 100644 --- a/packages/dd-trace/src/telemetry/telemetry.js +++ b/packages/dd-trace/src/telemetry/telemetry.js @@ -60,6 +60,7 @@ const sessionPropagation = require('./session-propagation') * @typedef {{ * telemetry: { * enabled: boolean, + * extendedHeartbeatInterval: number, * heartbeatInterval: number, * debug?: boolean, * dependencyCollection?: boolean, @@ -348,7 +349,7 @@ function extendedHeartbeat (config) { heartbeatFailedDependencies = [] } sendData(config, application, host, 'app-extended-heartbeat', appPayload) - }, 1000 * 60 * 60 * 24).unref() + }, config.telemetry.extendedHeartbeatInterval).unref() } /** diff --git a/packages/dd-trace/test/telemetry/index.spec.js b/packages/dd-trace/test/telemetry/index.spec.js index 697a6b9583e..9b2a536eec7 100644 --- a/packages/dd-trace/test/telemetry/index.spec.js +++ b/packages/dd-trace/test/telemetry/index.spec.js @@ -123,7 +123,7 @@ describe('telemetry', () => { circularObject.child.parent = circularObject telemetry.start({ - telemetry: { enabled: true, heartbeatInterval: DEFAULT_HEARTBEAT_INTERVAL }, + telemetry: { enabled: true, heartbeatInterval: DEFAULT_HEARTBEAT_INTERVAL, extendedHeartbeatInterval: 86400000 }, hostname: 'localhost', port: traceAgent.address().port, service: 'test service', @@ -324,7 +324,7 @@ describe('telemetry app-heartbeat', () => { }) telemetry.start({ - telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL }, + telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL, extendedHeartbeatInterval: 86400000 }, hostname: 'localhost', port: 0, service: 'test service', @@ -391,7 +391,7 @@ describe('Telemetry extended heartbeat', () => { }) telemetry.start({ - telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL }, + telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL, extendedHeartbeatInterval: 86400000 }, hostname: 'localhost', port: 0, service: 'test service', @@ -434,7 +434,7 @@ describe('Telemetry extended heartbeat', () => { }) const config = { - telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL }, + telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL, extendedHeartbeatInterval: 86400000 }, hostname: 'localhost', port: 0, service: 'test service', @@ -579,7 +579,7 @@ describe('Telemetry retry', () => { }) telemetry.start({ - telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL }, + telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL, extendedHeartbeatInterval: 86400000 }, hostname: 'localhost', port: 0, service: 'test service', @@ -668,7 +668,7 @@ describe('Telemetry retry', () => { }) telemetry.start({ - telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL }, + telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL, extendedHeartbeatInterval: 86400000 }, hostname: 'localhost', port: 0, service: 'test service', @@ -739,7 +739,7 @@ describe('Telemetry retry', () => { }) telemetry.start({ - telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL }, + telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL, extendedHeartbeatInterval: 86400000 }, hostname: 'localhost', port: 0, service: 'test service', @@ -801,7 +801,7 @@ describe('Telemetry retry', () => { // Start function sends 2 messages app-started & app-integrations-change telemetry.start({ - telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL }, + telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL, extendedHeartbeatInterval: 86400000 }, hostname: 'localhost', port: 0, service: 'test service', @@ -885,7 +885,7 @@ describe('Telemetry retry', () => { // Start function sends 2 messages app-started & app-integrations-change telemetry.start({ - telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL }, + telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL, extendedHeartbeatInterval: 86400000 }, hostname: 'localhost', port: 0, service: 'test service', @@ -979,7 +979,7 @@ describe('AVM OSS', () => { telemetry = require('../../src/telemetry/telemetry') telemetryConfig = { - telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL }, + telemetry: { enabled: true, heartbeatInterval: HEARTBEAT_INTERVAL, extendedHeartbeatInterval: 86400000 }, hostname: 'localhost', port: traceAgent.address().port, service: 'test service',