[CI] Preparation for APM tracking on CI (#80399) (#81694)

Signed-off-by: Tyler Smalley <tyler.smalley@elastic.co>
This commit is contained in:
Tyler Smalley 2020-10-26 22:51:06 -07:00 committed by GitHub
parent 226d7e9462
commit dd49b7ebf7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 71 additions and 23 deletions

View file

@ -28,6 +28,8 @@ import {
import { ApmConfiguration } from './config';
const initialEnv = { ...process.env };
describe('ApmConfiguration', () => {
beforeEach(() => {
packageMock.raw = {
@ -39,6 +41,7 @@ describe('ApmConfiguration', () => {
});
afterEach(() => {
process.env = { ...initialEnv };
resetAllMocks();
});
@ -90,13 +93,16 @@ describe('ApmConfiguration', () => {
let config = new ApmConfiguration(mockedRootDir, {}, false);
expect(config.getConfig('serviceName')).toEqual(
expect.objectContaining({
serverUrl: expect.any(String),
secretToken: expect.any(String),
breakdownMetrics: true,
})
);
config = new ApmConfiguration(mockedRootDir, {}, true);
expect(Object.keys(config.getConfig('serviceName'))).not.toContain('serverUrl');
expect(config.getConfig('serviceName')).toEqual(
expect.objectContaining({
breakdownMetrics: false,
})
);
});
it('loads the configuration from the kibana config file', () => {
@ -156,4 +162,32 @@ describe('ApmConfiguration', () => {
})
);
});
it('correctly sets environment', () => {
delete process.env.ELASTIC_APM_ENVIRONMENT;
delete process.env.NODE_ENV;
let config = new ApmConfiguration(mockedRootDir, {}, false);
expect(config.getConfig('serviceName')).toEqual(
expect.objectContaining({
environment: 'development',
})
);
process.env.NODE_ENV = 'production';
config = new ApmConfiguration(mockedRootDir, {}, false);
expect(config.getConfig('serviceName')).toEqual(
expect.objectContaining({
environment: 'production',
})
);
process.env.ELASTIC_APM_ENVIRONMENT = 'ci';
config = new ApmConfiguration(mockedRootDir, {}, false);
expect(config.getConfig('serviceName')).toEqual(
expect.objectContaining({
environment: 'ci',
})
);
});
});

View file

@ -26,32 +26,26 @@ import { readFileSync } from 'fs';
import { ApmAgentConfig } from './types';
const getDefaultConfig = (isDistributable: boolean): ApmAgentConfig => {
if (isDistributable) {
return {
active: false,
globalLabels: {},
// Do not use a centralized controlled config
centralConfig: false,
// Capture all exceptions that are not caught
logUncaughtExceptions: true,
// Can be performance intensive, disabling by default
breakdownMetrics: false,
};
}
// https://www.elastic.co/guide/en/apm/agent/nodejs/current/configuration.html
return {
active: false,
serverUrl: 'https://f1542b814f674090afd914960583265f.apm.us-central1.gcp.cloud.es.io:443',
active: process.env.ELASTIC_APM_ACTIVE || false,
environment: process.env.ELASTIC_APM_ENVIRONMENT || process.env.NODE_ENV || 'development',
serverUrl: 'https://b1e3b4b4233e44cdad468c127d0af8d8.apm.europe-west1.gcp.cloud.es.io:443',
// The secretToken below is intended to be hardcoded in this file even though
// it makes it public. This is not a security/privacy issue. Normally we'd
// instead disable the need for a secretToken in the APM Server config where
// the data is transmitted to, but due to how it's being hosted, it's easier,
// for now, to simply leave it in.
secretToken: 'R0Gjg46pE9K9wGestd',
globalLabels: {},
breakdownMetrics: true,
centralConfig: false,
secretToken: '2OyjjaI6RVkzx2O5CV',
logUncaughtExceptions: true,
globalLabels: {},
centralConfig: false,
// Can be performance intensive, disabling by default
breakdownMetrics: isDistributable ? false : true,
};
};
@ -84,7 +78,8 @@ export class ApmConfiguration {
getDefaultConfig(this.isDistributable),
this.getConfigFromKibanaConfig(),
this.getDevConfig(),
this.getDistConfig()
this.getDistConfig(),
this.getCIConfig()
);
const rev = this.getGitRev();
@ -146,6 +141,21 @@ export class ApmConfiguration {
};
}
private getCIConfig(): ApmAgentConfig {
if (process.env.ELASTIC_APM_ENVIRONMENT !== 'ci') {
return {};
}
return {
globalLabels: {
branch: process.env.ghprbSourceBranch || '',
targetBranch: process.env.ghprbTargetBranch || '',
ciJobName: process.env.JOB_NAME || '',
ciBuildNumber: process.env.BUILD_NUMBER || '',
},
};
}
private getGitRev() {
if (this.isDistributable) {
return this.pkgBuild.sha;

View file

@ -24,6 +24,10 @@ export NODE_OPTIONS="$NODE_OPTIONS --max-old-space-size=4096"
###
export FORCE_COLOR=1
### APM tracking
###
export ELASTIC_APM_ENVIRONMENT=ci
###
### check that we seem to be in a kibana project
###