UNPKG

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