UNPKG

4.52 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.enable = exports.azureCoreTracing = exports.AzureMonitorSymbol = void 0;
4var diagnostic_channel_1 = require("diagnostic-channel");
5exports.AzureMonitorSymbol = "Azure_Monitor_Tracer";
6var isPatched = false;
7/**
8 * By default, @azure/core-tracing default tracer is a NoopTracer.
9 * This patching changes the default tracer to a patched BasicTracer
10 * which emits ended spans as diag-channel events.
11 *
12 * The @opentelemetry/tracing package must be installed to use these patches
13 * https://www.npmjs.com/package/@opentelemetry/tracing
14 * @param coreTracing
15 */
16var azureCoreTracingPatchFunction = function (coreTracing) {
17 if (isPatched) {
18 // tracer is already cached -- noop
19 return coreTracing;
20 }
21 try {
22 var tracing = require("@opentelemetry/tracing");
23 var api = require("@opentelemetry/api");
24 var defaultProvider = new tracing.BasicTracerProvider();
25 var defaultTracer = defaultProvider.getTracer("applicationinsights tracer");
26 // Patch Azure SDK setTracer, @azure/core-tracing <= 1.0.0-preview.12
27 if (coreTracing.setTracer) {
28 var setTracerOriginal_1 = coreTracing.setTracer;
29 coreTracing.setTracer = function (tracer) {
30 // Patch startSpan instead of using spanProcessor.onStart because parentSpan must be
31 // set while the span is constructed
32 var startSpanOriginal = tracer.startSpan;
33 tracer.startSpan = function (name, options, context) {
34 var span = startSpanOriginal.call(this, name, options, context);
35 var originalEnd = span.end;
36 span.end = function () {
37 var result = originalEnd.apply(this, arguments);
38 diagnostic_channel_1.channel.publish("azure-coretracing", span);
39 return result;
40 };
41 return span;
42 };
43 tracer[exports.AzureMonitorSymbol] = true;
44 setTracerOriginal_1.call(this, tracer);
45 };
46 api.trace.getSpan(api.context.active()); // seed OpenTelemetryScopeManagerWrapper with "active" symbol
47 coreTracing.setTracer(defaultTracer);
48 }
49 else { // Patch OpenTelemetry setGlobalTracerProvider @azure/core-tracing > 1.0.0-preview.13
50 var setGlobalTracerProviderOriginal_1 = api.trace.setGlobalTracerProvider;
51 api.trace.setGlobalTracerProvider = function (tracerProvider) {
52 var getTracerOriginal = tracerProvider.getTracer;
53 tracerProvider.getTracer = function (tracerName, version) {
54 var tracer = getTracerOriginal.call(this, tracerName, version);
55 if (!tracer[exports.AzureMonitorSymbol]) { // Avoid patching multiple times
56 var startSpanOriginal_1 = tracer.startSpan;
57 tracer.startSpan = function (spanName, options, context) {
58 var span = startSpanOriginal_1.call(this, spanName, options, context);
59 var originalEnd = span.end;
60 span.end = function () {
61 var result = originalEnd.apply(this, arguments);
62 diagnostic_channel_1.channel.publish("azure-coretracing", span);
63 return result;
64 };
65 return span;
66 };
67 tracer[exports.AzureMonitorSymbol] = true;
68 }
69 return tracer;
70 };
71 return setGlobalTracerProviderOriginal_1.call(this, tracerProvider);
72 };
73 defaultProvider.register();
74 api.trace.getSpan(api.context.active()); // seed OpenTelemetryScopeManagerWrapper with "active" symbol
75 }
76 isPatched = true;
77 }
78 catch (e) { /* squash errors */ }
79 return coreTracing;
80};
81exports.azureCoreTracing = {
82 versionSpecifier: ">= 1.0.0 < 2.0.0",
83 patch: azureCoreTracingPatchFunction,
84};
85function enable() {
86 diagnostic_channel_1.channel.registerMonkeyPatch("@azure/core-tracing", exports.azureCoreTracing);
87}
88exports.enable = enable;
89//# sourceMappingURL=azure-coretracing.pub.js.map
\No newline at end of file