From 19bd6c379d9f2b5bc0c19043eede467f162775cd Mon Sep 17 00:00:00 2001 From: Naseem Date: Tue, 28 Apr 2020 13:32:23 -0400 Subject: [PATCH] feat: 2 level merge of user supplied and default plugin configs Signed-off-by: Naseem --- .../src/NodeTracerProvider.ts | 24 ++++++++++++++++--- .../test/NodeTracerProvider.test.ts | 5 +++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/opentelemetry-node/src/NodeTracerProvider.ts b/packages/opentelemetry-node/src/NodeTracerProvider.ts index 29eb6edad04..c58e7e962b9 100644 --- a/packages/opentelemetry-node/src/NodeTracerProvider.ts +++ b/packages/opentelemetry-node/src/NodeTracerProvider.ts @@ -20,7 +20,7 @@ import { SDKRegistrationConfig, } from '@opentelemetry/tracing'; import { DEFAULT_INSTRUMENTATION_PLUGINS, NodeTracerConfig } from './config'; -import { PluginLoader } from './instrumentation/PluginLoader'; +import { PluginLoader, Plugins } from './instrumentation/PluginLoader'; /** * Register this TracerProvider for use with the OpenTelemetry API. @@ -40,10 +40,28 @@ export class NodeTracerProvider extends BasicTracerProvider { this._pluginLoader = new PluginLoader(this, this.logger); - // Shallow-merge default plugins with user supplied config + /** + * For user supplied config of plugin(s) that are loaded by default, + * merge the user supplied and default configs of said plugin(s) + */ + let mergedUserSuppliedPlugins: Plugins = {}; + + for (const plugin in config.plugins) { + if (DEFAULT_INSTRUMENTATION_PLUGINS.hasOwnProperty(plugin)) { + mergedUserSuppliedPlugins[plugin] = { + ...DEFAULT_INSTRUMENTATION_PLUGINS[plugin], + ...config.plugins[plugin], + }; + } else { + // TODO: enable non-default but user-configured plugins unless + // explicitly disabled + mergedUserSuppliedPlugins[plugin] = config.plugins[plugin]; + } + } + this._pluginLoader.load({ ...DEFAULT_INSTRUMENTATION_PLUGINS, - ...config.plugins, + ...mergedUserSuppliedPlugins, }); } diff --git a/packages/opentelemetry-node/test/NodeTracerProvider.test.ts b/packages/opentelemetry-node/test/NodeTracerProvider.test.ts index 397b423e12f..cacda25131a 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 and default plugins that have been shallowly merged', () => { + it('should load a merge of user configured and default plugins', () => { provider = new NodeTracerProvider({ logger: new NoopLogger(), plugins: { @@ -95,6 +95,9 @@ describe('NodeTracerProvider', () => { ignoreMethods: [], ignoreUrls: [], }, + http: { + path: '@opentelemetry/plugin-http-module', + }, }, }); const pluginLoader = provider['_pluginLoader'];