Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

✨ [RUMF-626] use site configuration and deprecate suffixed bundle #476

Merged
merged 6 commits into from
Aug 12, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -168,10 +168,12 @@ deploy-staging:
image: $CI_IMAGE
script:
- yarn
- TARGET_DATACENTER=eu TARGET_ENV=staging BUILD_MODE=staging yarn build:bundle
- WITH_SUFFIX=true TARGET_DATACENTER=eu BUILD_MODE=staging yarn build:bundle
- ./scripts/deploy.sh staging eu
- TARGET_DATACENTER=us TARGET_ENV=staging BUILD_MODE=staging yarn build:bundle
- WITH_SUFFIX=true TARGET_DATACENTER=us BUILD_MODE=staging yarn build:bundle
- ./scripts/deploy.sh staging us
- TARGET_DATACENTER=us BUILD_MODE=staging yarn build:bundle
- ./scripts/deploy.sh staging

deploy-release:
only:
Expand All @@ -184,10 +186,12 @@ deploy-release:
image: $CI_IMAGE
script:
- yarn
- TARGET_DATACENTER=us TARGET_ENV=production BUILD_MODE=release yarn build:bundle
- WITH_SUFFIX=true TARGET_DATACENTER=us BUILD_MODE=release yarn build:bundle
- ./scripts/deploy.sh prod us
- TARGET_DATACENTER=eu TARGET_ENV=production BUILD_MODE=release yarn build:bundle
- WITH_SUFFIX=true TARGET_DATACENTER=eu BUILD_MODE=release yarn build:bundle
- ./scripts/deploy.sh prod eu
- TARGET_DATACENTER=us BUILD_MODE=release yarn build:bundle
- ./scripts/deploy.sh prod

########################################################################################################################
# Notify
Expand Down
16 changes: 7 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,26 @@ The browser SDK is used to collect logs and RUM data from the browser.

This repository contains several packages:

| Package | npm | size | cdn | doc |
| ------------ | ------------------------ | ------------------------ | ----------------- | ----------------------------------- |
| browser-logs | [![npm version][01]][02] | [![bundle size][03]][04] | [us][05] [eu][06] | [![API][1]][07] [![product][2]][08] |
| browser-rum | [![npm version][11]][12] | [![bundle size][13]][14] | [us][15] [eu][16] | [![API][1]][17] [![product][2]][18] |
| browser-core | [![npm version][21]][22] | [![bundle size][23]][24] | |
| Package | npm | size | cdn | doc |
| ------------ | ------------------------ | ------------------------ | ------------------ | ----------------------------------- |
| browser-logs | [![npm version][01]][02] | [![bundle size][03]][04] | [datadog-logs][05] | [![API][1]][07] [![product][2]][08] |
| browser-rum | [![npm version][11]][12] | [![bundle size][13]][14] | [datadog-rum][15] | [![API][1]][17] [![product][2]][18] |
| browser-core | [![npm version][21]][22] | [![bundle size][23]][24] | |

[1]: https://github.githubassets.com/favicons/favicon.png
[2]: https://imgix.datadoghq.com/img/favicons/favicon-32x32.png
[01]: https://badge.fury.io/js/%40datadog%2Fbrowser-logs.svg
[02]: https://badge.fury.io/js/%40datadog%2Fbrowser-logs
[03]: https://badgen.net/bundlephobia/minzip/@datadog/browser-logs
[04]: https://bundlephobia.com/result?p=@datadog/browser-logs
[05]: https://www.datadoghq-browser-agent.com/datadog-logs-us.js
[06]: https://www.datadoghq-browser-agent.com/datadog-logs-eu.js
[05]: https://www.datadoghq-browser-agent.com/datadog-logs.js
[07]: ./packages/logs/README.md
[08]: https://docs.datadoghq.com/logs/log_collection/javascript/?tab=npm
[11]: https://badge.fury.io/js/%40datadog%2Fbrowser-rum.svg
[12]: https://badge.fury.io/js/%40datadog%2Fbrowser-rum
[13]: https://badgen.net/bundlephobia/minzip/@datadog/browser-rum
[14]: https://bundlephobia.com/result?p=@datadog/browser-rum
[15]: https://www.datadoghq-browser-agent.com/datadog-rum-us.js
[16]: https://www.datadoghq-browser-agent.com/datadog-rum-eu.js
[15]: https://www.datadoghq-browser-agent.com/datadog-rum.js
[17]: ./packages/rum/README.md
[18]: https://docs.datadoghq.com/real_user_monitoring/
[21]: https://badge.fury.io/js/%40datadog%2Fbrowser-core.svg
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"dev": "ENV=development node test/server/server.js",
"release": "lerna version --exact",
"version": "node ./scripts/generate-changelog.js",
"publish:npm": "TARGET_DATACENTER=us TARGET_ENV=production BUILD_MODE=release yarn build && lerna publish from-package",
"publish:npm": "TARGET_DATACENTER=us BUILD_MODE=release yarn build && lerna publish from-package",
"fail": "./scripts/fail.sh",
"test": "yarn test:unit",
"test:unit": "karma start ./test/unit/karma.local.conf.js",
Expand Down
19 changes: 8 additions & 11 deletions packages/core/src/configuration.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { BuildEnv, BuildMode, Datacenter, SdkEnv } from './init'
import { BuildEnv, BuildMode, Datacenter, INTAKE_SITE } from './init'
import { includes, ONE_KILO_BYTE, ONE_SECOND } from './utils'

export const DEFAULT_CONFIGURATION = {
Expand Down Expand Up @@ -42,7 +42,8 @@ export interface UserConfiguration {
isCollectingError?: boolean
sampleRate?: number
resourceSampleRate?: number
datacenter?: Datacenter
datacenter?: Datacenter // deprecated
site?: string
enableExperimentalFeatures?: string[]
silentMultipleInit?: boolean
trackInteractions?: boolean
Expand Down Expand Up @@ -87,8 +88,7 @@ interface ReplicaConfiguration {

interface TransportConfiguration {
clientToken: string
datacenter: Datacenter
sdkEnv: SdkEnv
site: string
buildMode: BuildMode
sdkVersion: string
applicationId?: string
Expand All @@ -104,12 +104,11 @@ export function buildConfiguration(userConfiguration: UserConfiguration, buildEn
applicationId: userConfiguration.applicationId,
buildMode: buildEnv.buildMode,
clientToken: userConfiguration.clientToken,
datacenter: userConfiguration.datacenter || buildEnv.datacenter,
env: userConfiguration.env,
proxyHost: userConfiguration.proxyHost,
sdkEnv: buildEnv.sdkEnv,
sdkVersion: buildEnv.sdkVersion,
service: userConfiguration.service,
site: userConfiguration.site || INTAKE_SITE[userConfiguration.datacenter || buildEnv.datacenter],
version: userConfiguration.version,
}

Expand Down Expand Up @@ -164,11 +163,11 @@ export function buildConfiguration(userConfiguration: UserConfiguration, buildEn

if (transportConfiguration.buildMode === BuildMode.STAGING) {
if (userConfiguration.replica !== undefined) {
const replicaTransportConfiguration = {
const replicaTransportConfiguration: TransportConfiguration = {
...transportConfiguration,
applicationId: userConfiguration.replica.applicationId,
clientToken: userConfiguration.replica.clientToken,
sdkEnv: SdkEnv.PRODUCTION,
site: INTAKE_SITE[Datacenter.US],
}
configuration.replica = {
applicationId: userConfiguration.replica.applicationId,
Expand All @@ -187,14 +186,12 @@ export function buildConfiguration(userConfiguration: UserConfiguration, buildEn
}

function getEndpoint(type: string, conf: TransportConfiguration, source?: string) {
const tld = conf.datacenter === Datacenter.US ? 'com' : 'eu'
const domain = conf.sdkEnv === 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 datadogHost = `${type}-http-intake.logs.${conf.site}`
const host = conf.proxyHost ? conf.proxyHost : datadogHost
const proxyParameter = conf.proxyHost ? `ddhost=${datadogHost}&` : ''
const applicationIdParameter = conf.applicationId ? `_dd.application_id=${conf.applicationId}&` : ''
Expand Down
1 change: 0 additions & 1 deletion packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ export {
BuildEnv,
BuildMode,
Datacenter,
SdkEnv,
makeStub,
makeGlobal,
commonInit,
Expand Down
9 changes: 5 additions & 4 deletions packages/core/src/init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,12 @@ export enum Datacenter {
US = 'us',
EU = 'eu',
}
export enum SdkEnv {
PRODUCTION = 'production',
STAGING = 'staging',

export const INTAKE_SITE = {
[Datacenter.EU]: 'datadoghq.eu',
[Datacenter.US]: 'datadoghq.com',
}

export enum BuildMode {
RELEASE = 'release',
STAGING = 'staging',
Expand All @@ -38,7 +40,6 @@ export enum BuildMode {

export interface BuildEnv {
datacenter: Datacenter
sdkEnv: SdkEnv
buildMode: BuildMode
sdkVersion: string
}
Expand Down
41 changes: 22 additions & 19 deletions packages/core/test/configuration.spec.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
import { BuildMode, Datacenter, SdkEnv } from '../src'
import { BuildEnv, BuildMode, Datacenter } from '../src'
import { buildConfiguration } from '../src/configuration'

describe('configuration', () => {
const clientToken = 'some_client_token'
const prodEnv = {
const usEnv: BuildEnv = {
buildMode: BuildMode.RELEASE,
datacenter: Datacenter.US,
sdkEnv: SdkEnv.PRODUCTION,
sdkVersion: 'some_version',
}

describe('internal monitoring endpoint', () => {
it('should only be defined when api key is provided', () => {
let configuration = buildConfiguration({ clientToken }, prodEnv)
let configuration = buildConfiguration({ clientToken }, usEnv)
expect(configuration.internalMonitoringEndpoint).toBeUndefined()

configuration = buildConfiguration({ clientToken, internalMonitoringApiKey: clientToken }, prodEnv)
configuration = buildConfiguration({ clientToken, internalMonitoringApiKey: clientToken }, usEnv)
expect(configuration.internalMonitoringEndpoint).toContain(clientToken)
})
})
Expand All @@ -25,7 +24,7 @@ describe('configuration', () => {
const endpoint = 'bbbbbbbbbbbbbbb'
const configuration = buildConfiguration(
{ clientToken, rumEndpoint: endpoint, logsEndpoint: endpoint, internalMonitoringEndpoint: endpoint },
prodEnv
usEnv
)
expect(configuration.rumEndpoint).not.toEqual(endpoint)
expect(configuration.logsEndpoint).not.toEqual(endpoint)
Expand All @@ -37,7 +36,6 @@ describe('configuration', () => {
const e2eEnv = {
buildMode: BuildMode.E2E_TEST,
datacenter: Datacenter.US,
sdkEnv: SdkEnv.STAGING,
sdkVersion: 'some_version',
}
const configuration = buildConfiguration(
Expand All @@ -52,40 +50,45 @@ describe('configuration', () => {

describe('isCollectingError', () => {
it('should be enabled by default', () => {
const configuration = buildConfiguration({ clientToken }, prodEnv)
const configuration = buildConfiguration({ clientToken }, usEnv)
expect(configuration.isCollectingError).toEqual(true)
})

it('should be disabled when defined to false', () => {
const configuration = buildConfiguration({ clientToken, isCollectingError: false }, prodEnv)
const configuration = buildConfiguration({ clientToken, isCollectingError: false }, usEnv)
expect(configuration.isCollectingError).toEqual(false)
})
})

describe('datacenter', () => {
describe('site', () => {
it('should use buildEnv value by default', () => {
const configuration = buildConfiguration({ clientToken }, prodEnv)
const configuration = buildConfiguration({ clientToken }, usEnv)
expect(configuration.rumEndpoint).toContain('datadoghq.com')
})

it('should use user value when set', () => {
const configuration = buildConfiguration({ clientToken, datacenter: Datacenter.EU }, prodEnv)
it('should use datacenter value when set', () => {
const configuration = buildConfiguration({ clientToken, datacenter: Datacenter.EU }, usEnv)
expect(configuration.rumEndpoint).toContain('datadoghq.eu')
})

it('should use site value when set', () => {
const configuration = buildConfiguration({ clientToken, datacenter: Datacenter.EU, site: 'foo.com' }, usEnv)
expect(configuration.rumEndpoint).toContain('foo.com')
})
})

describe('proxyHost', () => {
it('should replace endpoint host add set it as a query parameter', () => {
const configuration = buildConfiguration({ clientToken, proxyHost: 'proxy.io' }, prodEnv)
const configuration = buildConfiguration({ clientToken, proxyHost: 'proxy.io' }, usEnv)
expect(configuration.rumEndpoint).toMatch(/^https:\/\/proxy\.io\//)
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}`)
const configuration = buildConfiguration({ clientToken }, usEnv)
expect(configuration.rumEndpoint).toContain(`&ddtags=sdk_version:${usEnv.sdkVersion}`)

expect(configuration.rumEndpoint).not.toContain(',env:')
expect(configuration.rumEndpoint).not.toContain(',service:')
Expand All @@ -96,12 +99,12 @@ describe('configuration', () => {
})

it('should be set as tags in the logs and rum endpoints', () => {
const configuration = buildConfiguration({ clientToken, env: 'foo', service: 'bar', version: 'baz' }, prodEnv)
const configuration = buildConfiguration({ clientToken, env: 'foo', service: 'bar', version: 'baz' }, usEnv)
expect(configuration.rumEndpoint).toContain(
`&ddtags=sdk_version:${prodEnv.sdkVersion},env:foo,service:bar,version:baz`
`&ddtags=sdk_version:${usEnv.sdkVersion},env:foo,service:bar,version:baz`
)
expect(configuration.logsEndpoint).toContain(
`&ddtags=sdk_version:${prodEnv.sdkVersion},env:foo,service:bar,version:baz`
`&ddtags=sdk_version:${usEnv.sdkVersion},env:foo,service:bar,version:baz`
)
})
})
Expand Down
16 changes: 8 additions & 8 deletions packages/logs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ Datadog browser logs library.
### NPM

```
import { Datacenter, datadogLogs } from '@datadog/browser-logs'
import { datadogLogs } from '@datadog/browser-logs'
datadogLogs.init({
clientToken: 'XXX',
datacenter: Datacenter.US,
site: 'datadoghq.com',
forwardErrorsToLogs: true,
sampleRate: 100
})
Expand All @@ -21,11 +21,11 @@ datadogLogs.init({
### Bundle

```
<script src = 'https://www.datadoghq-browser-agent.com/datadog-logs-us.js'>
<script src = 'https://www.datadoghq-browser-agent.com/datadog-logs.js'>
<script>
window.DD_LOGS.init({
clientToken: 'XXX',
datacenter: 'us',
site: 'datadoghq.com',
forwardErrorsToLogs: true,
sampleRate: 100
});
Expand All @@ -40,7 +40,7 @@ What we call `Context` is a map `{key: value}` that will be added to the message

- `isCollectingError`: when truthy, we'll automatically forward `console.error` logs, uncaught exceptions and network errors.
- `sampleRate`: percentage of sessions to track. Only tracked sessions send logs.
- `datacenter`: defined to which datacenter we'll send collected data ('us' | 'eu')
- `site`: The site of the Datadog intake to send SDK data to (default: 'datadoghq.com', set to 'datadoghq.eu' to send data to the EU site)
- `silentMultipleInit`: prevent logging errors while having multiple Init
- `service`: name of the corresponding service
- `env`: environment of the service
Expand All @@ -49,7 +49,7 @@ What we call `Context` is a map `{key: value}` that will be added to the message
```
init(configuration: {
clientToken: string,
datacenter?: string,
site?: string,
isCollectingError?: boolean,
sampleRate?: number,
silentMultipleInit?: boolean,
Expand Down Expand Up @@ -96,11 +96,11 @@ Types are compatible with TypeScript >= 3.0.
For earlier version, you can import js sources and use global variable to avoid any compilation issue:

```
import '@datadog/browser-logs/bundle/datadog-logs-us';
import '@datadog/browser-logs/bundle/datadog-logs';

window.DD_LOGS.init({
clientToken: 'XXX',
datacenter: 'us',
site: 'datadoghq.com',
forwardErrorsToLogs: true,
sampleRate: 100
});
Expand Down
3 changes: 1 addition & 2 deletions packages/logs/src/buildEnv.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { BuildEnv, BuildMode, Datacenter, SdkEnv } from '@datadog/browser-core'
import { BuildEnv, BuildMode, Datacenter } from '@datadog/browser-core'

export const buildEnv: BuildEnv = {
buildMode: '<<< BUILD_MODE >>>' as BuildMode,
datacenter: '<<< TARGET_DATACENTER >>>' as Datacenter,
sdkEnv: '<<< TARGET_ENV >>>' as SdkEnv,
sdkVersion: '<<< SDK_VERSION >>>',
}
5 changes: 4 additions & 1 deletion packages/logs/webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@ const path = require('path')
const webpackBase = require('../../webpack.base')

const datacenter = process.env.TARGET_DATACENTER || 'us'
const withSuffix = process.env.WITH_SUFFIX || false

const suffix = withSuffix ? `-${datacenter}` : ''

module.exports = (env, argv) => ({
entry: {
logs: path.resolve(__dirname, 'src/logs.entry.ts'),
},
...webpackBase(argv.mode),
output: {
filename: `datadog-logs-${datacenter}.js`,
filename: `datadog-logs${suffix}.js`,
path: path.resolve(__dirname, 'bundle'),
},
})
Loading