Skip to content

Commit

Permalink
✨[RUMF-465] collect client service, env and version (#392)
Browse files Browse the repository at this point in the history
* ✨ add env, service and version

* fix the url tag concat

* 👌 rename clientXXX to XXX

* ✅ add the env, service and version endpoint tags test

* 👌 clarify the tag generation in getEndpoint

* ✅ add tests for default tags when env, version, service are not defined
  • Loading branch information
mquentin committed May 18, 2020
1 parent fb4197e commit 723100b
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 9 deletions.
23 changes: 19 additions & 4 deletions packages/core/src/configuration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -63,20 +67,27 @@ 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 {
const transportConfiguration: TransportConfiguration = {
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)
Expand Down Expand Up @@ -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}&` : ''
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export type BuildMode = 'release' | 'staging' | 'e2e-test'

export interface BuildEnv {
datacenter: Datacenter
env: Environment
sdkEnv: Environment
buildMode: BuildMode
sdkVersion: string
}
Expand Down
28 changes: 26 additions & 2 deletions packages/core/test/configuration.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
}

Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -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`
)
})
})
})
2 changes: 1 addition & 1 deletion packages/logs/src/buildEnv.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 >>>',
}
2 changes: 1 addition & 1 deletion packages/rum/src/buildEnv.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 >>>',
}

0 comments on commit 723100b

Please sign in to comment.