@opentelemetry/sdk-trace-web
Version:
76 lines • 2.67 kB
JavaScript
/*
* Copyright The OpenTelemetry Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { BasicTracerProvider, } from '@opentelemetry/sdk-trace-base';
import { StackContextManager } from './StackContextManager';
import { trace, context, propagation, } from '@opentelemetry/api';
import { CompositePropagator, W3CBaggagePropagator, W3CTraceContextPropagator, } from '@opentelemetry/core';
function setupContextManager(contextManager) {
// null means 'do not register'
if (contextManager === null) {
return;
}
// undefined means 'register default'
if (contextManager === undefined) {
const defaultContextManager = new StackContextManager();
defaultContextManager.enable();
context.setGlobalContextManager(defaultContextManager);
return;
}
contextManager.enable();
context.setGlobalContextManager(contextManager);
}
function setupPropagator(propagator) {
// null means 'do not register'
if (propagator === null) {
return;
}
// undefined means 'register default'
if (propagator === undefined) {
propagation.setGlobalPropagator(new CompositePropagator({
propagators: [
new W3CTraceContextPropagator(),
new W3CBaggagePropagator(),
],
}));
return;
}
propagation.setGlobalPropagator(propagator);
}
/**
* This class represents a web tracer with {@link StackContextManager}
*/
export class WebTracerProvider extends BasicTracerProvider {
/**
* Constructs a new Tracer instance.
* @param config Web Tracer config
*/
constructor(config = {}) {
super(config);
}
/**
* Register this TracerProvider for use with the OpenTelemetry API.
* Undefined values may be replaced with defaults, and
* null values will be skipped.
*
* @param config Configuration object for SDK registration
*/
register(config = {}) {
trace.setGlobalTracerProvider(this);
setupPropagator(config.propagator);
setupContextManager(config.contextManager);
}
}
//# sourceMappingURL=WebTracerProvider.js.map