UNPKG

@splunk/otel

Version:

The Splunk distribution of OpenTelemetry Node Instrumentation provides a Node agent that automatically instruments your Node application to capture and report distributed traces to Splunk APM.

53 lines 2.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProfilingContextManager = void 0; /* * Copyright Splunk Inc. * * 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 * * http://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. */ const opentelemetry = require("@opentelemetry/api"); const context_async_hooks_1 = require("@opentelemetry/context-async-hooks"); const _1 = require("."); class ProfilingContextManager extends context_async_hooks_1.AsyncHooksContextManager { constructor() { super(); let recorder = (0, _1.loadExtension)(); if (recorder === undefined) { recorder = { enterContext: () => { }, exitContext: () => { }, }; } this._recorder = recorder; this._enterContextOriginal = this['_enterContext']; this['_enterContext'] = this._enterContextOverride; this['_exitContext'] = this._exitContextOverride; } _enterContextOverride(context) { this._enterContextOriginal(context); const spanCtx = opentelemetry.trace.getSpanContext(context); if (!spanCtx) return; const { traceId, spanId } = spanCtx; this._recorder.enterContext(context, traceId, spanId); } _exitContextOverride() { const context = this['_stack'].pop(); if (context) { this._recorder.exitContext(context); } } } exports.ProfilingContextManager = ProfilingContextManager; //# sourceMappingURL=ProfilingContextManager.js.map