diff --git a/packages/core/src/configuration.ts b/packages/core/src/configuration.ts index b2e3bb96b2..a485bc77b9 100644 --- a/packages/core/src/configuration.ts +++ b/packages/core/src/configuration.ts @@ -45,6 +45,10 @@ export interface UserConfiguration { silentMultipleInit?: boolean proxyHost?: string + service?: string + env?: string + version?: string + // Below is only taken into account for e2e-test build mode. internalMonitoringEndpoint?: string logsEndpoint?: string @@ -63,10 +67,14 @@ export type Configuration = typeof DEFAULT_CONFIGURATION & { interface TransportConfiguration { clientToken: string datacenter: Datacenter - env: Environment + sdkEnv: Environment buildMode: BuildMode sdkVersion: string proxyHost?: string + + service?: string + env?: string + version?: string } export function buildConfiguration(userConfiguration: UserConfiguration, buildEnv: BuildEnv): Configuration { @@ -74,9 +82,12 @@ export function buildConfiguration(userConfiguration: UserConfiguration, buildEn buildMode: buildEnv.buildMode, clientToken: userConfiguration.clientToken, datacenter: userConfiguration.datacenter || buildEnv.datacenter, - env: buildEnv.env, + env: userConfiguration.env, proxyHost: userConfiguration.proxyHost, + sdkEnv: buildEnv.sdkEnv, sdkVersion: buildEnv.sdkVersion, + service: userConfiguration.service, + version: userConfiguration.version, } const enableExperimentalFeatures = Array.isArray(userConfiguration.enableExperimentalFeatures) @@ -129,8 +140,12 @@ export function buildConfiguration(userConfiguration: UserConfiguration, buildEn function getEndpoint(type: string, conf: TransportConfiguration, source?: string) { const tld = conf.datacenter === 'us' ? 'com' : 'eu' - const domain = conf.env === 'production' ? `datadoghq.${tld}` : `datad0g.${tld}` - const tags = `sdk_version:${conf.sdkVersion}` + const domain = conf.sdkEnv === 'production' ? `datadoghq.${tld}` : `datad0g.${tld}` + const tags = + `sdk_version:${conf.sdkVersion}` + + `${conf.env ? `,env:${conf.env}` : ''}` + + `${conf.service ? `,service:${conf.service}` : ''}` + + `${conf.version ? `,version:${conf.version}` : ''}` const datadogHost = `${type}-http-intake.logs.${domain}` const host = conf.proxyHost ? conf.proxyHost : datadogHost const proxyParameter = conf.proxyHost ? `ddhost=${datadogHost}&` : '' diff --git a/packages/core/src/init.ts b/packages/core/src/init.ts index 640297d81e..2beaf98607 100644 --- a/packages/core/src/init.ts +++ b/packages/core/src/init.ts @@ -28,7 +28,7 @@ export type BuildMode = 'release' | 'staging' | 'e2e-test' export interface BuildEnv { datacenter: Datacenter - env: Environment + sdkEnv: Environment buildMode: BuildMode sdkVersion: string } diff --git a/packages/core/test/configuration.spec.ts b/packages/core/test/configuration.spec.ts index e3e6dbbb14..b6f62836ee 100644 --- a/packages/core/test/configuration.spec.ts +++ b/packages/core/test/configuration.spec.ts @@ -5,7 +5,7 @@ describe('configuration', () => { const prodEnv = { buildMode: 'release' as 'release', datacenter: 'us' as 'us', - env: 'production' as 'production', + sdkEnv: 'production' as 'production', sdkVersion: 'some_version', } @@ -36,7 +36,7 @@ describe('configuration', () => { const e2eEnv = { buildMode: 'e2e-test' as 'e2e-test', datacenter: 'us' as 'us', - env: 'staging' as 'staging', + sdkEnv: 'staging' as 'staging', sdkVersion: 'some_version', } const configuration = buildConfiguration( @@ -80,4 +80,28 @@ describe('configuration', () => { expect(configuration.rumEndpoint).toContain('?ddhost=rum-http-intake.logs.datadoghq.com&') }) }) + + describe('sdk_version, env, version and service', () => { + it('should not modify the logs and rum endpoints tags when not defined', () => { + const configuration = buildConfiguration({ clientToken }, prodEnv) + expect(configuration.rumEndpoint).toContain(`&ddtags=sdk_version:${prodEnv.sdkVersion}`) + + expect(configuration.rumEndpoint).not.toContain(',env:') + expect(configuration.rumEndpoint).not.toContain(',service:') + expect(configuration.rumEndpoint).not.toContain(',version:') + expect(configuration.logsEndpoint).not.toContain(',env:') + expect(configuration.logsEndpoint).not.toContain(',service:') + expect(configuration.logsEndpoint).not.toContain(',version:') + }) + + it('should be set as tags in the logs and rum endpoints', () => { + const configuration = buildConfiguration({ clientToken, env: 'foo', service: 'bar', version: 'baz' }, prodEnv) + expect(configuration.rumEndpoint).toContain( + `&ddtags=sdk_version:${prodEnv.sdkVersion},env:foo,service:bar,version:baz` + ) + expect(configuration.logsEndpoint).toContain( + `&ddtags=sdk_version:${prodEnv.sdkVersion},env:foo,service:bar,version:baz` + ) + }) + }) }) diff --git a/packages/logs/src/buildEnv.ts b/packages/logs/src/buildEnv.ts index c3d3f459d0..bf1aceb951 100644 --- a/packages/logs/src/buildEnv.ts +++ b/packages/logs/src/buildEnv.ts @@ -3,6 +3,6 @@ import { BuildEnv, Datacenter, Environment } from '@datadog/browser-core' export const buildEnv: BuildEnv = { buildMode: '<<< BUILD_MODE >>>' as BuildEnv['buildMode'], datacenter: '<<< TARGET_DATACENTER >>>' as Datacenter, - env: '<<< TARGET_ENV >>>' as Environment, + sdkEnv: '<<< TARGET_ENV >>>' as Environment, sdkVersion: '<<< SDK_VERSION >>>', } diff --git a/packages/rum/src/buildEnv.ts b/packages/rum/src/buildEnv.ts index e418fa57c7..c1c5c002a8 100644 --- a/packages/rum/src/buildEnv.ts +++ b/packages/rum/src/buildEnv.ts @@ -3,6 +3,6 @@ import { BuildEnv } from '@datadog/browser-core' export const buildEnv: BuildEnv = { buildMode: '<<< BUILD_MODE >>>' as BuildEnv['buildMode'], datacenter: '<<< TARGET_DATACENTER >>>' as BuildEnv['datacenter'], - env: '<<< TARGET_ENV >>>' as BuildEnv['env'], + sdkEnv: '<<< TARGET_ENV >>>' as BuildEnv['sdkEnv'], sdkVersion: '<<< SDK_VERSION >>>', }