diff --git a/packages/opentelemetry-metrics/package.json b/packages/opentelemetry-metrics/package.json index b7c334edc8b..136d2fc1089 100644 --- a/packages/opentelemetry-metrics/package.json +++ b/packages/opentelemetry-metrics/package.json @@ -42,6 +42,7 @@ "access": "public" }, "devDependencies": { + "@types/lodash.merge": "^4.6.6", "@types/mocha": "8.0.4", "@types/node": "14.14.10", "@types/sinon": "9.0.9", @@ -58,6 +59,7 @@ "dependencies": { "@opentelemetry/api": "^0.13.0", "@opentelemetry/core": "^0.13.0", - "@opentelemetry/resources": "^0.13.0" + "@opentelemetry/resources": "^0.13.0", + "lodash.merge": "^4.6.2" } } diff --git a/packages/opentelemetry-metrics/src/Meter.ts b/packages/opentelemetry-metrics/src/Meter.ts index 7d5da2434f1..2e2258c071c 100644 --- a/packages/opentelemetry-metrics/src/Meter.ts +++ b/packages/opentelemetry-metrics/src/Meter.ts @@ -19,19 +19,19 @@ import { ConsoleLogger, InstrumentationLibrary } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; import { BatchObserverMetric } from './BatchObserverMetric'; import { BaseBoundInstrument } from './BoundInstrument'; -import { Processor } from './export/Processor'; +import { CounterMetric } from './CounterMetric'; +import { PushController } from './export/Controller'; +import { NoopExporter } from './export/NoopExporter'; +import { Processor, UngroupedProcessor } from './export/Processor'; import { MetricKind } from './export/types'; +import { Metric } from './Metric'; +import { SumObserverMetric } from './SumObserverMetric'; +import { DEFAULT_CONFIG, DEFAULT_METRIC_OPTIONS, MeterConfig } from './types'; import { UpDownCounterMetric } from './UpDownCounterMetric'; -import { CounterMetric } from './CounterMetric'; import { UpDownSumObserverMetric } from './UpDownSumObserverMetric'; -import { ValueRecorderMetric } from './ValueRecorderMetric'; -import { Metric } from './Metric'; import { ValueObserverMetric } from './ValueObserverMetric'; -import { SumObserverMetric } from './SumObserverMetric'; -import { DEFAULT_METRIC_OPTIONS, DEFAULT_CONFIG, MeterConfig } from './types'; -import { UngroupedProcessor } from './export/Processor'; -import { PushController } from './export/Controller'; -import { NoopExporter } from './export/NoopExporter'; +import { ValueRecorderMetric } from './ValueRecorderMetric'; +import merge = require('lodash.merge'); /** * Meter is an implementation of the {@link Meter} interface. @@ -51,15 +51,17 @@ export class Meter implements api.Meter { */ constructor( instrumentationLibrary: InstrumentationLibrary, - config: MeterConfig = DEFAULT_CONFIG + config: MeterConfig = {} ) { - this._logger = config.logger || new ConsoleLogger(config.logLevel); - this._processor = config.processor ?? new UngroupedProcessor(); - this._resource = config.resource || Resource.createTelemetrySDKResource(); + const mergedConfig = merge({}, DEFAULT_CONFIG, config); + this._logger = mergedConfig.logger || new ConsoleLogger(config.logLevel); + this._processor = mergedConfig.processor ?? new UngroupedProcessor(); + this._resource = + mergedConfig.resource || Resource.createTelemetrySDKResource(); this._instrumentationLibrary = instrumentationLibrary; // start the push controller - const exporter = config.exporter || new NoopExporter(); - const interval = config.interval; + const exporter = mergedConfig.exporter || new NoopExporter(); + const interval = mergedConfig.interval; this._controller = new PushController(this, exporter, interval); } diff --git a/packages/opentelemetry-metrics/src/MeterProvider.ts b/packages/opentelemetry-metrics/src/MeterProvider.ts index fe4661bbdde..e28135f31ed 100644 --- a/packages/opentelemetry-metrics/src/MeterProvider.ts +++ b/packages/opentelemetry-metrics/src/MeterProvider.ts @@ -14,11 +14,12 @@ * limitations under the License. */ -import { ConsoleLogger } from '@opentelemetry/core'; import * as api from '@opentelemetry/api'; +import { ConsoleLogger } from '@opentelemetry/core'; import { Resource } from '@opentelemetry/resources'; import { Meter } from '.'; import { DEFAULT_CONFIG, MeterConfig } from './types'; +import merge = require('lodash.merge'); /** * This class represents a meter provider which platform libraries can extend @@ -31,10 +32,13 @@ export class MeterProvider implements api.MeterProvider { readonly resource: Resource; readonly logger: api.Logger; - constructor(config: MeterConfig = DEFAULT_CONFIG) { - this.logger = config.logger ?? new ConsoleLogger(config.logLevel); - this.resource = config.resource ?? Resource.createTelemetrySDKResource(); - this._config = Object.assign({}, config, { + constructor(config: MeterConfig = {}) { + const mergedConfig = merge({}, DEFAULT_CONFIG, config); + this.logger = + mergedConfig.logger ?? new ConsoleLogger(mergedConfig.logLevel); + this.resource = + mergedConfig.resource ?? Resource.createTelemetrySDKResource(); + this._config = Object.assign({}, mergedConfig, { logger: this.logger, resource: this.resource, });