Skip to content

Commit 3893059

Browse files
committed
fix: warn if tracePolicy conflicting options are specified
1 parent fcfad8b commit 3893059

4 files changed

Lines changed: 42 additions & 3 deletions

File tree

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ function initConfig(userConfig: Forceable<Config>): Forceable<TopLevelConfig> {
8383
return {
8484
[FORCE_NEW]: forceNew,
8585
enabled: mergedConfig.enabled,
86+
original: userConfig,
8687
logLevel: lastOf(
8788
mergedConfig.logLevel, Number(process.env.GCLOUD_TRACE_LOGLEVEL)),
8889
clsConfig: {

src/tracing.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import * as path from 'path';
1818

1919
import {cls, TraceCLSConfig} from './cls';
20-
import {TracePolicy} from './config';
20+
import {Config, TracePolicy} from './config';
2121
import {LEVELS, Logger} from './logger';
2222
import {StackdriverTracer} from './trace-api';
2323
import {pluginLoader, PluginLoaderConfig} from './trace-plugin-loader';
@@ -26,7 +26,8 @@ import {BuiltinTracePolicy, TracePolicyConfig} from './tracing-policy';
2626
import {Component, Forceable, packageNameFromPath, Singleton} from './util';
2727

2828
export type TopLevelConfig = {
29-
enabled: boolean; logLevel: number; clsConfig: TraceCLSConfig;
29+
original: Config; enabled: boolean; logLevel: number;
30+
clsConfig: TraceCLSConfig;
3031
writerConfig: TraceWriterConfig;
3132
pluginLoaderConfig: PluginLoaderConfig;
3233
tracePolicyConfig: TracePolicyConfig;
@@ -120,6 +121,18 @@ export class Tracing implements Component {
120121

121122
const tracePolicy = this.config.overrides.tracePolicy ||
122123
new BuiltinTracePolicy(this.config.tracePolicyConfig);
124+
if (this.config.overrides.tracePolicy) {
125+
const unusedOptions = Object.keys(this.config.tracePolicyConfig);
126+
const optionsToWarn =
127+
Object.keys(this.config.original)
128+
.filter(key => unusedOptions.indexOf(key) !== -1)
129+
.map(key => `config.${key}`);
130+
if (optionsToWarn.length > 0) {
131+
this.logger.warn(
132+
'StackdriverTracer#start: config.tracePolicy was specified;',
133+
`ignoring user-set values for: [${optionsToWarn.join(', ')}]`);
134+
}
135+
}
123136

124137
this.traceAgent.enable(
125138
this.config.pluginLoaderConfig.tracerConfig, tracePolicy, this.logger);

test/test-config.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,3 +154,14 @@ describe('Behavior set by config for Tracer', () => {
154154
});
155155
});
156156
});
157+
158+
describe('Warnings for improper config', () => {
159+
it('should indicate that some options can\'t be specified with a tracePolicy', () => {
160+
testTraceModule.start({
161+
samplingRate: 100,
162+
tracePolicy: { shouldTrace: () => true }
163+
});
164+
const expectedWarnMsg = /config.tracePolicy.*ignoring.*\[config.samplingRate\]/;
165+
assert.strictEqual(testTraceModule.getLogger().getNumLogsWith('warn', expectedWarnMsg), 1);
166+
});
167+
});

test/trace.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,27 @@ import {TraceWriter, traceWriter, TraceWriterConfig} from '../src/trace-writer';
4747
import {tracing, Tracing} from '../src/tracing';
4848
import {FORCE_NEW} from '../src/util';
4949

50-
import {TestLogger} from './logger';
50+
import * as testLogger from './logger';
5151

5252
export {Config, PluginTypes};
5353

5454
const traces: Trace[] = [];
5555
const spans: TraceSpan[] = [];
56+
let capturedLogger: testLogger.TestLogger|null = null;
5657

5758
export class TestCLS extends TraceCLS {
5859
constructor(config: {}, logger: logger.Logger) {
5960
super({mechanism: TraceCLSMechanism.NONE}, logger);
6061
}
6162
}
6263

64+
export class TestLogger extends testLogger.TestLogger {
65+
constructor(options?: Partial<logger.LoggerConfig>) {
66+
super(options);
67+
capturedLogger = this;
68+
}
69+
}
70+
6371
export class TestTraceWriter extends TraceWriter {
6472
constructor(config: TraceWriterConfig, logger: logger.Logger) {
6573
super(config, logger);
@@ -98,6 +106,7 @@ setTracingForTest(TestTracing);
98106
export type Predicate<T> = (value: T) => boolean;
99107

100108
export function start(projectConfig?: Config): PluginTypes.Tracer {
109+
capturedLogger = null;
101110
const agent = trace.start(Object.assign(
102111
{samplingRate: 0, logLevel: 4, [FORCE_NEW]: true}, projectConfig));
103112
return agent;
@@ -133,6 +142,11 @@ export function setTracingForTest(impl?: typeof Tracing) {
133142
tracing['implementation'] = impl || Tracing;
134143
}
135144

145+
export function getLogger(): testLogger.TestLogger {
146+
assert.ok(capturedLogger);
147+
return capturedLogger!;
148+
}
149+
136150
export function getTraces(predicate?: Predicate<Trace>): Trace[] {
137151
if (!predicate) {
138152
predicate = () => true;

0 commit comments

Comments
 (0)