diff --git a/packages/opentelemetry-node/package.json b/packages/opentelemetry-node/package.json index e2eb356c3da..2cc60af0691 100644 --- a/packages/opentelemetry-node/package.json +++ b/packages/opentelemetry-node/package.json @@ -42,6 +42,7 @@ }, "devDependencies": { "@opentelemetry/context-base": "^0.7.0", + "@opentelemetry/plugin-http": "^0.7.0", "@opentelemetry/resources": "^0.7.0", "@types/mocha": "^7.0.0", "@types/node": "^12.6.8", diff --git a/packages/opentelemetry-node/src/NodeTracerProvider.ts b/packages/opentelemetry-node/src/NodeTracerProvider.ts index 11a0874e5e8..29eb6edad04 100644 --- a/packages/opentelemetry-node/src/NodeTracerProvider.ts +++ b/packages/opentelemetry-node/src/NodeTracerProvider.ts @@ -39,7 +39,12 @@ export class NodeTracerProvider extends BasicTracerProvider { super(config); this._pluginLoader = new PluginLoader(this, this.logger); - this._pluginLoader.load(config.plugins || DEFAULT_INSTRUMENTATION_PLUGINS); + + // Shallow-merge default plugins with user supplied config + this._pluginLoader.load({ + ...DEFAULT_INSTRUMENTATION_PLUGINS, + ...config.plugins, + }); } stop() { diff --git a/packages/opentelemetry-node/test/NodeTracerProvider.test.ts b/packages/opentelemetry-node/test/NodeTracerProvider.test.ts index 1cd0298e622..397b423e12f 100644 --- a/packages/opentelemetry-node/test/NodeTracerProvider.test.ts +++ b/packages/opentelemetry-node/test/NodeTracerProvider.test.ts @@ -80,7 +80,7 @@ describe('NodeTracerProvider', () => { assert.ok(provider instanceof NodeTracerProvider); }); - it('should load user configured plugins', () => { + it('should load user configured and default plugins that have been shallowly merged', () => { provider = new NodeTracerProvider({ logger: new NoopLogger(), plugins: { @@ -103,6 +103,8 @@ describe('NodeTracerProvider', () => { assert.strictEqual(pluginLoader['_plugins'].length, 1); require('supported-module'); assert.strictEqual(pluginLoader['_plugins'].length, 2); + require('http'); + assert.strictEqual(pluginLoader['_plugins'].length, 3); }); it('should construct an instance with default attributes', () => {