@azure/monitor-opentelemetry 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/index.js +87 -23
- package/dist-esm/src/browserSdkLoader/browserSdkLoader.js +2 -1
- package/dist-esm/src/browserSdkLoader/browserSdkLoader.js.map +1 -1
- package/dist-esm/src/index.js +3 -0
- package/dist-esm/src/index.js.map +1 -1
- package/dist-esm/src/metrics/utils.js +21 -18
- package/dist-esm/src/metrics/utils.js.map +1 -1
- package/dist-esm/src/shared/config.js +3 -2
- package/dist-esm/src/shared/config.js.map +1 -1
- package/dist-esm/src/traces/sampler.js +7 -2
- package/dist-esm/src/traces/sampler.js.map +1 -1
- package/dist-esm/src/types.js +2 -1
- package/dist-esm/src/types.js.map +1 -1
- package/dist-esm/src/utils/common.js +42 -0
- package/dist-esm/src/utils/common.js.map +1 -1
- package/dist-esm/src/utils/statsbeat.js +14 -0
- package/dist-esm/src/utils/statsbeat.js.map +1 -1
- package/package.json +23 -23
package/README.md
CHANGED
|
@@ -97,7 +97,7 @@ useAzureMonitor(options);
|
|
|
97
97
|
| browserSdkLoaderOptions| Allow configuration of Web Instrumentations. | { enabled: false, connectionString: "" } |
|
|
98
98
|
| resource | Opentelemetry Resource. [More info here](https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-resources) ||
|
|
99
99
|
| samplingRatio | Sampling ratio must take a value in the range [0,1], 1 meaning all data will sampled and 0 all Tracing data will be sampled out. |1|
|
|
100
|
-
| enableLiveMetrics | Enable/Disable Live Metrics. |
|
|
100
|
+
| enableLiveMetrics | Enable/Disable Live Metrics. |true|
|
|
101
101
|
| enableStandardMetrics | Enable/Disable Standard Metrics. |true|
|
|
102
102
|
| logRecordProcessors | Array of log record processors to register to the global logger provider. ||
|
|
103
103
|
| spanProcessors | Array of span processors to register to the global tracer provider. ||
|
|
@@ -377,7 +377,7 @@ and thus draw attention to them in relevant experiences including the failures b
|
|
|
377
377
|
|
|
378
378
|
```typescript
|
|
379
379
|
import { useAzureMonitor } from "@azure/monitor-opentelemetry";
|
|
380
|
-
import { trace } from "@opentelemetry/api";
|
|
380
|
+
import { trace, Exception } from "@opentelemetry/api";
|
|
381
381
|
|
|
382
382
|
useAzureMonitor();
|
|
383
383
|
const tracer = trace.getTracer("testMeter");
|
|
@@ -387,7 +387,7 @@ try{
|
|
|
387
387
|
throw new Error("Test Error");
|
|
388
388
|
}
|
|
389
389
|
catch(error){
|
|
390
|
-
span.recordException(error);
|
|
390
|
+
span.recordException(error as Exception);
|
|
391
391
|
}
|
|
392
392
|
```
|
|
393
393
|
|
package/dist/index.js
CHANGED
|
@@ -168,6 +168,46 @@ const getResourceProvider = () => {
|
|
|
168
168
|
}
|
|
169
169
|
return "u";
|
|
170
170
|
};
|
|
171
|
+
// This function is a slight modification of an upstream otel util function -
|
|
172
|
+
// mainly for prioritizing the resource detectors customer may specify over
|
|
173
|
+
// env var & not enabling process detector by default.
|
|
174
|
+
function parseResourceDetectorsFromEnvVar() {
|
|
175
|
+
var _a, _b;
|
|
176
|
+
const resourceDetectors = new Map([
|
|
177
|
+
["env", resources.envDetectorSync],
|
|
178
|
+
["host", resources.hostDetectorSync],
|
|
179
|
+
["os", resources.osDetectorSync],
|
|
180
|
+
["process", resources.processDetectorSync],
|
|
181
|
+
["serviceinstance", resources.serviceInstanceIdDetectorSync],
|
|
182
|
+
]);
|
|
183
|
+
if (process.env.OTEL_NODE_RESOURCE_DETECTORS != null) {
|
|
184
|
+
const resourceDetectorsFromEnv = (_b = (_a = process.env.OTEL_NODE_RESOURCE_DETECTORS) === null || _a === void 0 ? void 0 : _a.split(",")) !== null && _b !== void 0 ? _b : [
|
|
185
|
+
"env",
|
|
186
|
+
"host",
|
|
187
|
+
"os",
|
|
188
|
+
];
|
|
189
|
+
if (resourceDetectorsFromEnv.includes("all")) {
|
|
190
|
+
return [...resourceDetectors.values()];
|
|
191
|
+
}
|
|
192
|
+
if (resourceDetectorsFromEnv.includes("none")) {
|
|
193
|
+
return [];
|
|
194
|
+
}
|
|
195
|
+
return resourceDetectorsFromEnv.flatMap((detector) => {
|
|
196
|
+
const resourceDetector = resourceDetectors.get(detector);
|
|
197
|
+
if (!resourceDetector) {
|
|
198
|
+
api.diag.error(`Invalid resource detector "${detector}" specified in the environment variable OTEL_NODE_RESOURCE_DETECTORS`);
|
|
199
|
+
return [];
|
|
200
|
+
}
|
|
201
|
+
return [resourceDetector];
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
// leaving out the process detector as that can add many resource attributes
|
|
206
|
+
// with large values. Also not enabling service instance attributes by default
|
|
207
|
+
// as this is still experimental.
|
|
208
|
+
return [resources.envDetectorSync, resources.hostDetectorSync, resources.osDetectorSync];
|
|
209
|
+
}
|
|
210
|
+
}
|
|
171
211
|
|
|
172
212
|
// Copyright (c) Microsoft Corporation.
|
|
173
213
|
// Licensed under the MIT license.
|
|
@@ -529,7 +569,7 @@ class InternalConfig {
|
|
|
529
569
|
// Default values
|
|
530
570
|
this.azureMonitorExporterOptions = {};
|
|
531
571
|
this.samplingRatio = 1;
|
|
532
|
-
this.enableLiveMetrics =
|
|
572
|
+
this.enableLiveMetrics = true;
|
|
533
573
|
this.enableStandardMetrics = true;
|
|
534
574
|
this.enableTraceBasedSamplingForLogs = true;
|
|
535
575
|
this.instrumentationOptions = {
|
|
@@ -551,7 +591,8 @@ class InternalConfig {
|
|
|
551
591
|
this.azureMonitorExporterOptions = Object.assign(this.azureMonitorExporterOptions, options.azureMonitorExporterOptions);
|
|
552
592
|
this.instrumentationOptions = Object.assign(this.instrumentationOptions, options.instrumentationOptions);
|
|
553
593
|
this.resource = Object.assign(this.resource, options.resource);
|
|
554
|
-
this.samplingRatio =
|
|
594
|
+
this.samplingRatio =
|
|
595
|
+
options.samplingRatio !== undefined ? options.samplingRatio : this.samplingRatio;
|
|
555
596
|
this.browserSdkLoaderOptions = Object.assign(this.browserSdkLoaderOptions, options.browserSdkLoaderOptions);
|
|
556
597
|
this.enableLiveMetrics =
|
|
557
598
|
options.enableLiveMetrics != undefined ? options.enableLiveMetrics : this.enableLiveMetrics;
|
|
@@ -659,9 +700,11 @@ var StandardMetricIds;
|
|
|
659
700
|
function getRequestDimensions(span) {
|
|
660
701
|
const dimensions = getBaseDimensions(span.resource);
|
|
661
702
|
dimensions.metricId = StandardMetricIds.REQUEST_DURATION;
|
|
662
|
-
const statusCode = String(span.attributes[
|
|
703
|
+
const statusCode = String(span.attributes[semanticConventions.SEMATTRS_HTTP_STATUS_CODE]);
|
|
663
704
|
dimensions.requestResultCode = statusCode;
|
|
664
|
-
|
|
705
|
+
// OTel treats 4xx request responses as UNSET SpanStatusCode, but we should count them as failed
|
|
706
|
+
dimensions.requestSuccess =
|
|
707
|
+
span.status.code !== api.SpanStatusCode.ERROR && (Number(statusCode) || 0) < 400 ? "True" : "False";
|
|
665
708
|
if (isSyntheticLoad(span)) {
|
|
666
709
|
dimensions.operationSynthetic = "True";
|
|
667
710
|
}
|
|
@@ -670,11 +713,11 @@ function getRequestDimensions(span) {
|
|
|
670
713
|
function getDependencyDimensions(span) {
|
|
671
714
|
const dimensions = getBaseDimensions(span.resource);
|
|
672
715
|
dimensions.metricId = StandardMetricIds.DEPENDENCIES_DURATION;
|
|
673
|
-
const statusCode = String(span.attributes[
|
|
716
|
+
const statusCode = String(span.attributes[semanticConventions.SEMATTRS_HTTP_STATUS_CODE]);
|
|
674
717
|
dimensions.dependencyTarget = getDependencyTarget(span.attributes);
|
|
675
718
|
dimensions.dependencyResultCode = statusCode;
|
|
676
719
|
dimensions.dependencyType = "http";
|
|
677
|
-
dimensions.dependencySuccess =
|
|
720
|
+
dimensions.dependencySuccess = span.status.code !== api.SpanStatusCode.ERROR ? "True" : "False";
|
|
678
721
|
if (isSyntheticLoad(span)) {
|
|
679
722
|
dimensions.operationSynthetic = "True";
|
|
680
723
|
}
|
|
@@ -695,8 +738,8 @@ function getBaseDimensions(resource) {
|
|
|
695
738
|
dimensions.IsAutocollected = "True";
|
|
696
739
|
if (resource) {
|
|
697
740
|
const spanResourceAttributes = resource.attributes;
|
|
698
|
-
const serviceName = spanResourceAttributes[semanticConventions.
|
|
699
|
-
const serviceNamespace = spanResourceAttributes[semanticConventions.
|
|
741
|
+
const serviceName = spanResourceAttributes[semanticConventions.SEMRESATTRS_SERVICE_NAME];
|
|
742
|
+
const serviceNamespace = spanResourceAttributes[semanticConventions.SEMRESATTRS_SERVICE_NAMESPACE];
|
|
700
743
|
if (serviceName) {
|
|
701
744
|
if (serviceNamespace) {
|
|
702
745
|
dimensions.cloudRoleName = `${serviceNamespace}.${serviceName}`;
|
|
@@ -705,7 +748,7 @@ function getBaseDimensions(resource) {
|
|
|
705
748
|
dimensions.cloudRoleName = String(serviceName);
|
|
706
749
|
}
|
|
707
750
|
}
|
|
708
|
-
const serviceInstanceId = spanResourceAttributes[semanticConventions.
|
|
751
|
+
const serviceInstanceId = spanResourceAttributes[semanticConventions.SEMRESATTRS_SERVICE_INSTANCE_ID];
|
|
709
752
|
dimensions.cloudRoleInstance = String(serviceInstanceId);
|
|
710
753
|
}
|
|
711
754
|
return dimensions;
|
|
@@ -714,11 +757,11 @@ function getDependencyTarget(attributes) {
|
|
|
714
757
|
if (!attributes) {
|
|
715
758
|
return "";
|
|
716
759
|
}
|
|
717
|
-
const peerService = attributes[semanticConventions.
|
|
718
|
-
const httpHost = attributes[semanticConventions.
|
|
719
|
-
const httpUrl = attributes[semanticConventions.
|
|
720
|
-
const netPeerName = attributes[semanticConventions.
|
|
721
|
-
const netPeerIp = attributes[semanticConventions.
|
|
760
|
+
const peerService = attributes[semanticConventions.SEMATTRS_PEER_SERVICE];
|
|
761
|
+
const httpHost = attributes[semanticConventions.SEMATTRS_HTTP_HOST];
|
|
762
|
+
const httpUrl = attributes[semanticConventions.SEMATTRS_HTTP_URL];
|
|
763
|
+
const netPeerName = attributes[semanticConventions.SEMATTRS_NET_PEER_NAME];
|
|
764
|
+
const netPeerIp = attributes[semanticConventions.SEMATTRS_NET_PEER_IP];
|
|
722
765
|
if (peerService) {
|
|
723
766
|
return String(peerService);
|
|
724
767
|
}
|
|
@@ -742,8 +785,8 @@ function isExceptionTelemetry(logRecord) {
|
|
|
742
785
|
if (baseType && baseType === "ExceptionData") {
|
|
743
786
|
return true;
|
|
744
787
|
}
|
|
745
|
-
else if (logRecord.attributes[semanticConventions.
|
|
746
|
-
logRecord.attributes[semanticConventions.
|
|
788
|
+
else if (logRecord.attributes[semanticConventions.SEMATTRS_EXCEPTION_MESSAGE] ||
|
|
789
|
+
logRecord.attributes[semanticConventions.SEMATTRS_EXCEPTION_TYPE]) {
|
|
747
790
|
return true;
|
|
748
791
|
}
|
|
749
792
|
return false;
|
|
@@ -754,14 +797,14 @@ function isTraceTelemetry(logRecord) {
|
|
|
754
797
|
if (baseType && baseType === "MessageData") {
|
|
755
798
|
return true;
|
|
756
799
|
}
|
|
757
|
-
else if (!logRecord.attributes[semanticConventions.
|
|
758
|
-
!logRecord.attributes[semanticConventions.
|
|
800
|
+
else if (!logRecord.attributes[semanticConventions.SEMATTRS_EXCEPTION_MESSAGE] &&
|
|
801
|
+
!logRecord.attributes[semanticConventions.SEMATTRS_EXCEPTION_TYPE]) {
|
|
759
802
|
return true;
|
|
760
803
|
}
|
|
761
804
|
return false;
|
|
762
805
|
}
|
|
763
806
|
function isSyntheticLoad(record) {
|
|
764
|
-
const userAgent = String(record.attributes[semanticConventions.
|
|
807
|
+
const userAgent = String(record.attributes[semanticConventions.SEMATTRS_HTTP_USER_AGENT]);
|
|
765
808
|
return userAgent !== null && userAgent.includes("AlwaysOn") ? true : false;
|
|
766
809
|
}
|
|
767
810
|
function convertDimensions(dimensions) {
|
|
@@ -2070,7 +2113,7 @@ const publishOperationSpec = {
|
|
|
2070
2113
|
// Licensed under the MIT license.
|
|
2071
2114
|
// Copyright (c) Microsoft Corporation.
|
|
2072
2115
|
// Licensed under the MIT license.
|
|
2073
|
-
const AZURE_MONITOR_OPENTELEMETRY_VERSION = "1.
|
|
2116
|
+
const AZURE_MONITOR_OPENTELEMETRY_VERSION = "1.6.0";
|
|
2074
2117
|
const AZURE_MONITOR_STATSBEAT_FEATURES = "AZURE_MONITOR_STATSBEAT_FEATURES";
|
|
2075
2118
|
const AZURE_MONITOR_PREFIX = "AZURE_MONITOR_PREFIX";
|
|
2076
2119
|
const AZURE_MONITOR_AUTO_ATTACH = "AZURE_MONITOR_AUTO_ATTACH";
|
|
@@ -2102,6 +2145,7 @@ var StatsbeatFeature;
|
|
|
2102
2145
|
StatsbeatFeature[StatsbeatFeature["BROWSER_SDK_LOADER"] = 4] = "BROWSER_SDK_LOADER";
|
|
2103
2146
|
StatsbeatFeature[StatsbeatFeature["DISTRO"] = 8] = "DISTRO";
|
|
2104
2147
|
StatsbeatFeature[StatsbeatFeature["LIVE_METRICS"] = 16] = "LIVE_METRICS";
|
|
2148
|
+
StatsbeatFeature[StatsbeatFeature["SHIM"] = 32] = "SHIM";
|
|
2105
2149
|
})(StatsbeatFeature || (StatsbeatFeature = {}));
|
|
2106
2150
|
var StatsbeatInstrumentation;
|
|
2107
2151
|
(function (StatsbeatInstrumentation) {
|
|
@@ -2662,6 +2706,7 @@ class StatsbeatConfiguration {
|
|
|
2662
2706
|
constructor() {
|
|
2663
2707
|
// Initial Statsbeat options
|
|
2664
2708
|
this.currentStatsbeatOptions = {};
|
|
2709
|
+
this.initializedByShim = false;
|
|
2665
2710
|
this.setStatsbeatFeatures = (statsbeatOptions) => {
|
|
2666
2711
|
// Merge old statsbeat options with new statsbeat options overriding any common properties
|
|
2667
2712
|
this.currentStatsbeatOptions = Object.assign(Object.assign({}, this.currentStatsbeatOptions), statsbeatOptions);
|
|
@@ -2696,6 +2741,9 @@ class StatsbeatConfiguration {
|
|
|
2696
2741
|
if (statsbeatOptions.liveMetrics === true) {
|
|
2697
2742
|
featureBitMap |= StatsbeatFeature.LIVE_METRICS;
|
|
2698
2743
|
}
|
|
2744
|
+
if (this.initializedByShim) {
|
|
2745
|
+
featureBitMap |= StatsbeatFeature.SHIM;
|
|
2746
|
+
}
|
|
2699
2747
|
try {
|
|
2700
2748
|
const currentFeaturesBitMap = Number(process.env[AZURE_MONITOR_STATSBEAT_FEATURES]);
|
|
2701
2749
|
if (!isNaN(currentFeaturesBitMap)) {
|
|
@@ -2710,6 +2758,16 @@ class StatsbeatConfiguration {
|
|
|
2710
2758
|
Logger.getInstance().error("Failed call to JSON.stringify.", error);
|
|
2711
2759
|
}
|
|
2712
2760
|
};
|
|
2761
|
+
// Check for shim initialization upon construction
|
|
2762
|
+
try {
|
|
2763
|
+
if (JSON.parse(process.env[AZURE_MONITOR_STATSBEAT_FEATURES] || "{}").feature &
|
|
2764
|
+
StatsbeatFeature.SHIM) {
|
|
2765
|
+
this.initializedByShim = true;
|
|
2766
|
+
}
|
|
2767
|
+
}
|
|
2768
|
+
catch (error) {
|
|
2769
|
+
Logger.getInstance().error("Failed to parse statsbeat config environment variable.", error);
|
|
2770
|
+
}
|
|
2713
2771
|
}
|
|
2714
2772
|
}
|
|
2715
2773
|
/**
|
|
@@ -3331,6 +3389,8 @@ class AzureFunctionsHook {
|
|
|
3331
3389
|
}
|
|
3332
3390
|
}
|
|
3333
3391
|
|
|
3392
|
+
// Copyright (c) Microsoft Corporation.
|
|
3393
|
+
// Licensed under the MIT license.
|
|
3334
3394
|
/**
|
|
3335
3395
|
* ApplicationInsightsSampler is responsible for the following:
|
|
3336
3396
|
* Implements same trace id hashing algorithm so that traces are sampled the same across multiple nodes
|
|
@@ -3344,8 +3404,10 @@ class ApplicationInsightsSampler {
|
|
|
3344
3404
|
*/
|
|
3345
3405
|
constructor(samplingRatio = 1) {
|
|
3346
3406
|
this._samplingRatio = samplingRatio;
|
|
3347
|
-
if (this._samplingRatio > 1
|
|
3348
|
-
|
|
3407
|
+
if (this._samplingRatio > 1 ||
|
|
3408
|
+
this._samplingRatio < 0 ||
|
|
3409
|
+
!Number.isFinite(this._samplingRatio)) {
|
|
3410
|
+
api.diag.warn("Invalid sampling rate, sampling rate must be a value in the range [0,1].");
|
|
3349
3411
|
}
|
|
3350
3412
|
this._sampleRate = Math.round(this._samplingRatio * 100);
|
|
3351
3413
|
}
|
|
@@ -3731,7 +3793,7 @@ class BrowserSdkLoader {
|
|
|
3731
3793
|
this._isIkeyValid = true;
|
|
3732
3794
|
this._isInitialized = false;
|
|
3733
3795
|
if (!!BrowserSdkLoader._instance) {
|
|
3734
|
-
|
|
3796
|
+
api.diag.warn("Browser SDK Loader should be configured from the applicationInsights object");
|
|
3735
3797
|
}
|
|
3736
3798
|
BrowserSdkLoader._instance = this;
|
|
3737
3799
|
// AI URL used to validate if sdk loader already included
|
|
@@ -4070,6 +4132,7 @@ function useAzureMonitor(options) {
|
|
|
4070
4132
|
const instrumentations = traceHandler
|
|
4071
4133
|
.getInstrumentations()
|
|
4072
4134
|
.concat(logHandler.getInstrumentations());
|
|
4135
|
+
const resourceDetectorsList = parseResourceDetectorsFromEnvVar();
|
|
4073
4136
|
// Initialize OpenTelemetry SDK
|
|
4074
4137
|
const sdkConfig = {
|
|
4075
4138
|
autoDetectResources: true,
|
|
@@ -4080,6 +4143,7 @@ function useAzureMonitor(options) {
|
|
|
4080
4143
|
resource: config.resource,
|
|
4081
4144
|
sampler: traceHandler.getSampler(),
|
|
4082
4145
|
spanProcessors: [traceHandler.getAzureMonitorSpanProcessor()],
|
|
4146
|
+
resourceDetectors: resourceDetectorsList,
|
|
4083
4147
|
};
|
|
4084
4148
|
sdk = new sdkNode.NodeSDK(sdkConfig);
|
|
4085
4149
|
setSdkPrefix();
|
|
@@ -7,13 +7,14 @@ import * as zlib from "zlib";
|
|
|
7
7
|
import { ConnectionStringParser } from "../utils/connectionStringParser";
|
|
8
8
|
import { Logger } from "../shared/logging/logger";
|
|
9
9
|
import { BROWSER_SDK_LOADER_DEFAULT_SOURCE } from "../types";
|
|
10
|
+
import { diag } from "@opentelemetry/api";
|
|
10
11
|
export class BrowserSdkLoader {
|
|
11
12
|
constructor(config) {
|
|
12
13
|
var _a, _b;
|
|
13
14
|
this._isIkeyValid = true;
|
|
14
15
|
this._isInitialized = false;
|
|
15
16
|
if (!!BrowserSdkLoader._instance) {
|
|
16
|
-
|
|
17
|
+
diag.warn("Browser SDK Loader should be configured from the applicationInsights object");
|
|
17
18
|
}
|
|
18
19
|
BrowserSdkLoader._instance = this;
|
|
19
20
|
// AI URL used to validate if sdk loader already included
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browserSdkLoader.js","sourceRoot":"","sources":["../../../src/browserSdkLoader/browserSdkLoader.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,IAAI,SAAS,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,KAAK,sBAAsB,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,iCAAiC,EAAE,MAAM,UAAU,CAAC;AAE7D,MAAM,OAAO,gBAAgB;IAS3B,YAAY,MAAsB;;QAJ1B,iBAAY,GAAY,IAAI,CAAC;QAC7B,mBAAc,GAAY,KAAK,CAAC;QAItC,IAAI,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;QACJ,CAAC;QAED,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC;QAClC,yDAAyD;QACzD,gBAAgB,CAAC,MAAM,GAAG,iCAAiC,CAAC;QAC5D,IAAI,aAAa,CAAC;QAClB,IAAI,MAAA,MAAM,CAAC,uBAAuB,0CAAE,gBAAgB,EAAE,CAAC;YACrD,aAAa,GAAG,IAAI,CAAC,wBAAwB,CAC3C,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,uBAAuB,0CAAE,gBAAgB,CAClD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,qBAAqB;YACxB,aAAa;gBACb,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,gBAAgB,CAAC;qBAC9E,kBAAkB,CAAC;QAExB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAEM,aAAa;QAClB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEM,MAAM,CAAC,WAAW;QACvB,OAAO,gBAAgB,CAAC,SAAU,CAAC;IACrC,CAAC;IAEO,wBAAwB,CAAC,gBAAwB;QACvD,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,IAAI,EAAE,CAAC;YACjD,IAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CACvB,kFAAkF,CACnF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,IAAI,GAAG,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,qCAAqC,GAAG,GAAG,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,+BAA+B;QACrC,IAAI,KAAK,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,KAAK,GAAG,YAAY,CAAC,mBAAmB,EAAE,CAAC;QAC/C,IAAI,oBAAoB,GAAG,GAAG,IAAI,CAAC,qBAAqB,oEAAoE,KAAK,GAAG,KAAK,MAAM,CAAC;QAChJ,IAAI,iBAAiB,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,CAAC;QACvF,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAAC,+BAA+B,EAAE,CAAC;QACrE,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC;QAC7C,MAAM,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAAC;QAE9C,IAAI,CAAC,YAAoB,GAAG,CAC3B,eAA8E,EAC9E,EAAE;YACF,MAAM,uBAAuB,GAAG,eAAe,CAAC;YAChD,IAAI,uBAAuB,EAAE,CAAC;gBAC5B,eAAe,GAAG,CAAC,OAAwB,EAAE,QAAwB,EAAE,EAAE;oBACvE,8BAA8B;oBAC9B,IAAI,qBAAqB,GAAG,QAAQ,CAAC,KAAK,CAAC;oBAC3C,IAAI,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;oBAC3C,QAAQ,CAAC,KAAK,GAAG,SAAS,IAAI,CAAC,CAAkB,EAAE,CAAqB;;wBACtE,wBAAwB;wBACxB,IAAI,CAAC;4BACH,IAAI,YAAY,EAAE,CAAC;gCACjB,IAAI,OAAO,GAAG,sBAAsB,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;gCAC7E,IAAI,eAAe,GAAG,SAAS,CAAC;gCAChC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;oCAC1B,eAAe,GAAG,CAAC,CAAC;gCACtB,CAAC;gCACD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oCAC9C,IAAI,MAAA,gBAAgB,CAAC,SAAS,0CAAE,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC;wCAC/D,SAAS,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,SAAS,CAAC,eAAe,CACvD,QAAQ,EACR,CAAC,EACD,SAAS,EACT,eAAe,CAChB,CAAC;oCACJ,CAAC;gCACH,CAAC;qCAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oCAC1B,IAAI,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oCAC5B,SAAS,CAAC,CAAC,CAAC,GAAG,MAAA,gBAAgB,CAAC,SAAS,0CAAE,eAAe,CACxD,QAAQ,EACR,CAAC,EACD,UAAU,CACX,CAAC;gCACJ,CAAC;4BACH,CAAC;wBACH,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,mCAAmC,GAAG,GAAG,CAAC,CAAC;wBACvE,CAAC;wBACD,OAAO,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAgB,CAAC,CAAC;oBACjE,CAAC,CAAC;oBAEF,+DAA+D;oBAC/D,IAAI,mBAAmB,GAAG,QAAQ,CAAC,GAAG,CAAC;oBAEtC,QAAQ,CAAC,GAAW,GAAG,SAAS,IAAI,CAAC,CAAyB,EAAE,CAAY;;wBAC3E,IAAI,YAAY,EAAE,CAAC;4BACjB,IAAI,CAAC;gCACH,IAAI,YAAY,EAAE,CAAC;oCACjB,IAAI,OAAO,GAAG,sBAAsB,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;oCAC7E,IAAI,aAAa,GAAG,SAAS,CAAC;oCAC9B,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;wCAC1B,aAAa,GAAG,CAAC,CAAC;oCACpB,CAAC;oCACD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;wCAC9C,IAAI,MAAA,gBAAgB,CAAC,SAAS,0CAAE,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC;4CAC/D,SAAS,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,SAAS,CAAC,eAAe,CACvD,QAAQ,EACR,CAAC,EACD,SAAS,EACT,aAAa,CACd,CAAC;wCACJ,CAAC;oCACH,CAAC;yCAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;wCAC1B,IAAI,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;wCAC5B,SAAS,CAAC,CAAC,CAAC,GAAG,MAAA,gBAAgB,CAAC,SAAS,0CAAE,eAAe,CACxD,QAAQ,EACR,CAAC,EACD,UAAU,CACX,CAAC;oCACJ,CAAC;gCACH,CAAC;4BACH,CAAC;4BAAC,OAAO,GAAG,EAAE,CAAC;gCACb,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,mCAAmC,GAAG,GAAG,CAAC,CAAC;4BACvE,CAAC;wBACH,CAAC;wBACD,OAAO,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAgB,CAAC,CAAC;oBAC/D,CAAC,CAAC;oBAEF,OAAO,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACpD,CAAC,CAAC;YACJ,CAAC;YACD,OAAO,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAC7C,CAAC,CAAC;QAED,KAAK,CAAC,YAAoB,GAAG,UAAU,OAAY,EAAE,oBAAyB;YAC7E,MAAM,4BAA4B,GAAG,oBAAoB,CAAC;YAC1D,IAAI,4BAA4B,EAAE,CAAC;gBACjC,oBAAoB,GAAG,UAAU,GAAQ,EAAE,GAAQ;oBACjD,IAAI,iBAAiB,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;oBAC5C,IAAI,0BAA0B,GAAG,GAAG,CAAC,KAAK,CAAC;oBAC3C,IAAI,wBAAwB,GAAG,GAAG,CAAC,GAAG,CAAC;oBACvC,GAAG,CAAC,KAAK,GAAG,SAAS,IAAI,CAAC,CAAwB,EAAE,CAAqB;;wBACvE,IAAI,CAAC;4BACH,IAAI,iBAAiB,EAAE,CAAC;gCACtB,IAAI,OAAO,GAAG,sBAAsB,CAAC,6BAA6B,CAAC,GAAG,CAAC,CAAC;gCACxE,IAAI,eAAe,GAAG,SAAS,CAAC;gCAChC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;oCAC1B,eAAe,GAAG,CAAC,CAAC;gCACtB,CAAC;gCACD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oCAC9C,IAAI,MAAA,gBAAgB,CAAC,SAAS,0CAAE,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;wCAC1D,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;oCAC1E,CAAC;gCACH,CAAC;qCAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oCAC1B,IAAI,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oCAC5B,SAAS,CAAC,CAAC,CAAC,GAAG,MAAA,gBAAgB,CAAC,SAAS,0CAAE,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;gCACjF,CAAC;4BACH,CAAC;wBACH,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,2BAA2B,GAAG,GAAG,CAAC,CAAC;wBAC/D,CAAC;wBACD,OAAO,0BAA0B,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBAC1D,CAAC,CAAC;oBAEF,GAAG,CAAC,GAAG,GAAG,SAAS,IAAI,CAAC,CAAwB,EAAE,CAAqB;;wBACrE,IAAI,CAAC;4BACH,IAAI,iBAAiB,EAAE,CAAC;gCACtB,IAAI,OAAO,GAAG,sBAAsB,CAAC,6BAA6B,CAAC,GAAG,CAAC,CAAC;gCACxE,IAAI,aAAa,GAAG,SAAS,CAAC;gCAC9B,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;oCAC1B,aAAa,GAAG,CAAC,CAAC;gCACpB,CAAC;gCACD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oCAC9C,IAAI,MAAA,gBAAgB,CAAC,SAAS,0CAAE,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;wCAC1D,SAAS,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,SAAS,CAAC,eAAe,CACvD,GAAG,EACH,CAAC,EACD,SAAS,EACT,aAAa,CACd,CAAC;oCACJ,CAAC;gCACH,CAAC;qCAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oCAC1B,IAAI,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oCAC5B,SAAS,CAAC,CAAC,CAAC,GAAG,MAAA,gBAAgB,CAAC,SAAS,0CAAE,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;gCACjF,CAAC;4BACH,CAAC;wBACH,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,2BAA2B,GAAG,GAAG,CAAC,CAAC;wBAC/D,CAAC;wBACD,OAAO,wBAAwB,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBACxD,CAAC,CAAC;oBACF,OAAO,4BAA4B,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAChD,CAAC,CAAC;gBACF,OAAO,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,iBAAiB,CAAC,QAAa,EAAE,KAAsB;QAC5D,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG;gBAAE,OAAO,KAAK,CAAC;YACpE,IAAI,aAAa,GAAG,sBAAsB,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YAC7E,IAAI,CAAC,aAAa;gBAAE,OAAO,KAAK,CAAC;YACjC,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC;YACxC,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxE,qEAAqE;gBACrE,IAAI,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClD,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,6BAA6B,GAAG,GAAG,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACI,eAAe,CACpB,QAAa,EACb,KAAsB,EACtB,UAAyD,EACzD,gBAAyB;QAEzB,IAAI,CAAC;YACH,IAAI,kBAAkB,GAAG,CAAC,CAAC,UAAU,CAAC;YACtC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC5B,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACpC,IAAI,KAAK,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAE5B,IAAI,OAAO,GAAG,sBAAsB,CAAC,6BAA6B,CAChE,KAAK,EACL,IAAI,EACJ,gBAAgB,CAAC,UAAU,CAC5B,CAAC;gBACF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;oBACxC,IAAI,OAAO,EAAE,CAAC;wBACZ,KAAK,GAAG,OAAO,CAAC;oBAClB,CAAC;oBACD,QAAQ,CAAC,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjE,CAAC;qBAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClC,IAAI,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC9D,IAAI,iBAAiB,GAAG,sBAAsB,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;oBAC/E,IAAI,iBAAiB,IAAI,OAAO,EAAE,CAAC;wBACjC,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;wBACxC,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,UAA4B,CAAC,CAAC;wBAChF,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,UAA4B,CAAC,CAAC;wBACjE,QAAQ,CAAC,SAAS,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBACrD,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;gBACxC,KAAK,GAAG,IAAI,CAAC,0BAA0B,CACrC,QAAQ,EACR,KAAe,EACf,UAA0D,CAC3D,CAAC;gBACF,QAAQ,CAAC,SAAS,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CACvB,mFAAmF,GAAG,EAAE,CACzF,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yBAAyB;IACzB,uFAAuF;IACvF,uCAAuC;IACvC,oEAAoE;IACpE,0BAA0B;IAClB,0BAA0B,CAChC,QAAa,EACb,KAAa,EACb,UAAwD;QAExD,IAAI,CAAC;YACH,QAAQ,UAAU,EAAE,CAAC;gBACnB,KAAK,sBAAsB,CAAC,qBAAqB,CAAC,IAAI;oBACpD,IAAI,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBAC1C,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC;wBACnD,IAAI,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;wBACxE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;oBAC9C,CAAC;oBACD,MAAM;gBACR,KAAK,sBAAsB,CAAC,qBAAqB,CAAC,OAAO;oBACvD,IAAI,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;oBAC5C,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC;wBACpD,IAAI,qBAAqB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;wBAC1E,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;oBAClD,CAAC;oBACD,MAAM;gBACR,KAAK,sBAAsB,CAAC,qBAAqB,CAAC,EAAE;oBAClD,IAAI,oBAAoB,GAAG,sBAAsB,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;oBAChF,IAAI,kBAAkB,GAAG,sBAAsB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;oBAC5E,IAAI,oBAAoB,IAAI,kBAAkB,EAAE,CAAC;wBAC/C,IAAI,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;wBACnD,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,CAAC;4BACvD,IAAI,wBAAwB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;4BAChF,KAAK,GAAG,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;wBACvD,CAAC;wBACD,MAAM;oBACR,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,gDAAgD,GAAG,GAAG,CAAC,CAAC;QACpF,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,OAAO;QACZ,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;CACF","sourcesContent":["import http from \"http\";\nimport https from \"https\";\nimport { webSnippet as sdkLoader } from \"@microsoft/applicationinsights-web-snippet\";\nimport * as browserSdkLoaderHelper from \"./browserSdkLoaderHelper\";\nimport * as prefixHelper from \"../utils/common\";\nimport * as zlib from \"zlib\";\nimport { InternalConfig } from \"../shared\";\nimport { ConnectionStringParser } from \"../utils/connectionStringParser\";\nimport { IncomingMessage, ServerResponse } from \"http\";\nimport { Logger } from \"../shared/logging/logger\";\nimport { BROWSER_SDK_LOADER_DEFAULT_SOURCE } from \"../types\";\n\nexport class BrowserSdkLoader {\n private static _instance: BrowserSdkLoader | null;\n\n private static _sdkLoader: string;\n private static _aiUrl: string;\n private _isIkeyValid: boolean = true;\n private _isInitialized: boolean = false;\n private _browserSdkLoaderIkey?: string;\n\n constructor(config: InternalConfig) {\n if (!!BrowserSdkLoader._instance) {\n throw new Error(\n \"Browser SDK Loader should be configured from the applicationInsights object\",\n );\n }\n\n BrowserSdkLoader._instance = this;\n // AI URL used to validate if sdk loader already included\n BrowserSdkLoader._aiUrl = BROWSER_SDK_LOADER_DEFAULT_SOURCE;\n let clientWebIkey;\n if (config.browserSdkLoaderOptions?.connectionString) {\n clientWebIkey = this._getBrowserSdkLoaderIkey(\n config?.browserSdkLoaderOptions?.connectionString,\n );\n }\n this._browserSdkLoaderIkey =\n clientWebIkey ||\n ConnectionStringParser.parse(config.azureMonitorExporterOptions.connectionString)\n .instrumentationkey;\n\n if (this._isIkeyValid) {\n this._initialize();\n }\n }\n\n public isInitialized() {\n return this._isInitialized;\n }\n\n public static getInstance(): BrowserSdkLoader {\n return BrowserSdkLoader._instance!;\n }\n\n private _getBrowserSdkLoaderIkey(connectionString: string) {\n let iKey = null;\n try {\n const csCode = ConnectionStringParser.parse(connectionString);\n const iKeyCode = csCode.instrumentationkey || \"\";\n if (!ConnectionStringParser.validateInstrumentationKey(iKeyCode)) {\n this._isIkeyValid = false;\n Logger.getInstance().info(\n \"Invalid browser SDK loader connection string, browser SDK loader is not enabled.\",\n );\n } else {\n this._isIkeyValid = true;\n iKey = iKeyCode;\n }\n } catch (err) {\n Logger.getInstance().info(\"get browser SDK loader ikey error: \" + err);\n }\n return iKey;\n }\n\n /**\n * Gets string to inject into the web page\n * @returns The string to inject into the web page\n */\n private _getBrowserSdkLoaderReplacedStr() {\n let osStr = prefixHelper.getOsPrefix();\n let rpStr = prefixHelper.getResourceProvider();\n let sdkLoaderReplacedStr = `${this._browserSdkLoaderIkey}\\\",\\r\\n disableIkeyDeprecationMessage: true,\\r\\n sdkExtension: \\\"${rpStr}${osStr}d_n_`;\n let replacedSdkLoader = sdkLoader.replace(\"INSTRUMENTATION_KEY\", sdkLoaderReplacedStr);\n return replacedSdkLoader;\n }\n\n private _initialize() {\n this._isInitialized = true;\n BrowserSdkLoader._sdkLoader = this._getBrowserSdkLoaderReplacedStr();\n const originalHttpServer = http.createServer;\n const originalHttpsServer = https.createServer;\n\n (http.createServer as any) = (\n requestListener?: (request: IncomingMessage, response: ServerResponse) => void,\n ) => {\n const originalRequestListener = requestListener;\n if (originalRequestListener) {\n requestListener = (request: IncomingMessage, response: ServerResponse) => {\n // Patch response write method\n let originalResponseWrite = response.write;\n let isGetRequest = request.method == \"GET\";\n response.write = function wrap(a: Buffer | string, b?: Function | string) {\n //only patch GET request\n try {\n if (isGetRequest) {\n let headers = browserSdkLoaderHelper.getContentEncodingFromHeaders(response);\n let writeBufferType = undefined;\n if (typeof b === \"string\") {\n writeBufferType = b;\n }\n if (headers === null || headers === undefined) {\n if (BrowserSdkLoader._instance?.ValidateInjection(response, a)) {\n arguments[0] = BrowserSdkLoader._instance.InjectSdkLoader(\n response,\n a,\n undefined,\n writeBufferType,\n );\n }\n } else if (headers.length) {\n let encodeType = headers[0];\n arguments[0] = BrowserSdkLoader._instance?.InjectSdkLoader(\n response,\n a,\n encodeType,\n );\n }\n }\n } catch (err) {\n Logger.getInstance().warn(\"Inject browser sdk loader error: \" + err);\n }\n return originalResponseWrite.apply(response, arguments as any);\n };\n\n // Patch response end method for cases when HTML is added there\n let originalResponseEnd = response.end;\n\n (response.end as any) = function wrap(a?: Buffer | string | any, b?: Function) {\n if (isGetRequest) {\n try {\n if (isGetRequest) {\n let headers = browserSdkLoaderHelper.getContentEncodingFromHeaders(response);\n let endBufferType = undefined;\n if (typeof b === \"string\") {\n endBufferType = b;\n }\n if (headers === null || headers === undefined) {\n if (BrowserSdkLoader._instance?.ValidateInjection(response, a)) {\n arguments[0] = BrowserSdkLoader._instance.InjectSdkLoader(\n response,\n a,\n undefined,\n endBufferType,\n );\n }\n } else if (headers.length) {\n let encodeType = headers[0];\n arguments[0] = BrowserSdkLoader._instance?.InjectSdkLoader(\n response,\n a,\n encodeType,\n );\n }\n }\n } catch (err) {\n Logger.getInstance().warn(\"Inject browser sdk loader error: \" + err);\n }\n }\n return originalResponseEnd.apply(response, arguments as any);\n };\n\n return originalRequestListener(request, response);\n };\n }\n return originalHttpServer(requestListener);\n };\n\n (https.createServer as any) = function (options: any, httpsRequestListener: any): any {\n const originalHttpsRequestListener = httpsRequestListener;\n if (originalHttpsRequestListener) {\n httpsRequestListener = function (req: any, res: any) {\n let isGetHttpsRequest = req.method == \"GET\";\n let originalHttpsResponseWrite = res.write;\n let originalHttpsResponseEnd = res.end;\n res.write = function wrap(a: Buffer | string | any, b?: Function | string) {\n try {\n if (isGetHttpsRequest) {\n let headers = browserSdkLoaderHelper.getContentEncodingFromHeaders(res);\n let writeBufferType = undefined;\n if (typeof b === \"string\") {\n writeBufferType = b;\n }\n if (headers === null || headers === undefined) {\n if (BrowserSdkLoader._instance?.ValidateInjection(res, a)) {\n arguments[0] = this.InjectSdkLoader(res, a, undefined, writeBufferType);\n }\n } else if (headers.length) {\n let encodeType = headers[0];\n arguments[0] = BrowserSdkLoader._instance?.InjectSdkLoader(res, a, encodeType);\n }\n }\n } catch (err) {\n Logger.getInstance().warn(\"Inject SDK loader error: \" + err);\n }\n return originalHttpsResponseWrite.apply(res, arguments);\n };\n\n res.end = function wrap(a: Buffer | string | any, b?: Function | string) {\n try {\n if (isGetHttpsRequest) {\n let headers = browserSdkLoaderHelper.getContentEncodingFromHeaders(res);\n let endBufferType = undefined;\n if (typeof b === \"string\") {\n endBufferType = b;\n }\n if (headers === null || headers === undefined) {\n if (BrowserSdkLoader._instance?.ValidateInjection(res, a)) {\n arguments[0] = BrowserSdkLoader._instance.InjectSdkLoader(\n res,\n a,\n undefined,\n endBufferType,\n );\n }\n } else if (headers.length) {\n let encodeType = headers[0];\n arguments[0] = BrowserSdkLoader._instance?.InjectSdkLoader(res, a, encodeType);\n }\n }\n } catch (err) {\n Logger.getInstance().warn(\"Inject SDK loader error: \" + err);\n }\n return originalHttpsResponseEnd.apply(res, arguments);\n };\n return originalHttpsRequestListener(req, res);\n };\n return originalHttpsServer(options, httpsRequestListener);\n }\n };\n }\n\n /**\n * Validate response and try to inject Browser SDK Loader\n */\n public ValidateInjection(response: any, input: string | Buffer): boolean {\n try {\n if (!response || !input || response.statusCode != 200) return false;\n let isContentHtml = browserSdkLoaderHelper.isContentTypeHeaderHtml(response);\n if (!isContentHtml) return false;\n let inputStr = input.slice().toString();\n if (inputStr.indexOf(\"<head>\") >= 0 && inputStr.indexOf(\"</head>\") >= 0) {\n // Check if sdk loader not already present looking for AI Web SDK URL\n if (inputStr.indexOf(BrowserSdkLoader._aiUrl) < 0) {\n return true;\n }\n }\n } catch (err) {\n Logger.getInstance().info(\"validate injections error: \" + err);\n }\n return false;\n }\n\n /**\n * Inject Browser SDK Loader\n */\n public InjectSdkLoader(\n response: any,\n input: string | Buffer,\n encodeType?: browserSdkLoaderHelper.contentEncodingMethod,\n bufferEncodeType?: string,\n ): string | Buffer {\n try {\n let isCompressedBuffer = !!encodeType;\n if (!isCompressedBuffer) {\n let html = input.toString();\n let index = html.indexOf(\"</head>\");\n if (index < 0) return input;\n\n let newHtml = browserSdkLoaderHelper.insertBrowserSdkLoaderByIndex(\n index,\n html,\n BrowserSdkLoader._sdkLoader,\n );\n if (typeof input === \"string\") {\n response.removeHeader(\"Content-Length\");\n if (newHtml) {\n input = newHtml;\n }\n response.setHeader(\"Content-Length\", Buffer.byteLength(input));\n } else if (Buffer.isBuffer(input)) {\n let bufferType = bufferEncodeType ? bufferEncodeType : \"utf8\";\n let isValidBufferType = browserSdkLoaderHelper.isBufferType(input, bufferType);\n if (isValidBufferType && newHtml) {\n response.removeHeader(\"Content-Length\");\n let encodedString = Buffer.from(newHtml).toString(bufferType as BufferEncoding);\n input = Buffer.from(encodedString, bufferType as BufferEncoding);\n response.setHeader(\"Content-Length\", input.length);\n }\n }\n } else {\n response.removeHeader(\"Content-Length\");\n input = this._getInjectedCompressBuffer(\n response,\n input as Buffer,\n encodeType as browserSdkLoaderHelper.contentEncodingMethod,\n );\n response.setHeader(\"Content-Length\", input.length);\n }\n } catch (ex) {\n Logger.getInstance().warn(\n \"Failed to inject browser sdk loader and change content-length headers. Exception:\" + ex,\n );\n }\n return input;\n }\n\n //***********************\n // should NOT use sync functions here. But currently cannot get async functions to work\n // because reponse.write return boolean\n // and also this function do not support partial compression as well\n // need more investigation\n private _getInjectedCompressBuffer(\n response: any,\n input: Buffer,\n encodeType: browserSdkLoaderHelper.contentEncodingMethod,\n ): Buffer {\n try {\n switch (encodeType) {\n case browserSdkLoaderHelper.contentEncodingMethod.GZIP:\n let gunzipBuffer = zlib.gunzipSync(input);\n if (this.ValidateInjection(response, gunzipBuffer)) {\n let injectedGunzipBuffer = this.InjectSdkLoader(response, gunzipBuffer);\n input = zlib.gzipSync(injectedGunzipBuffer);\n }\n break;\n case browserSdkLoaderHelper.contentEncodingMethod.DEFLATE:\n let inflateBuffer = zlib.inflateSync(input);\n if (this.ValidateInjection(response, inflateBuffer)) {\n let injectedInflateBuffer = this.InjectSdkLoader(response, inflateBuffer);\n input = zlib.deflateSync(injectedInflateBuffer);\n }\n break;\n case browserSdkLoaderHelper.contentEncodingMethod.BR:\n let BrotliDecompressSync = browserSdkLoaderHelper.getBrotliDecompressSync(zlib);\n let BrotliCompressSync = browserSdkLoaderHelper.getBrotliCompressSync(zlib);\n if (BrotliDecompressSync && BrotliCompressSync) {\n let decompressBuffer = BrotliDecompressSync(input);\n if (this.ValidateInjection(response, decompressBuffer)) {\n let injectedDecompressBuffer = this.InjectSdkLoader(response, decompressBuffer);\n input = BrotliCompressSync(injectedDecompressBuffer);\n }\n break;\n }\n }\n } catch (err) {\n Logger.getInstance().info(\"get browser SDK loader compress buffer error: \" + err);\n }\n\n return input;\n }\n\n public dispose() {\n BrowserSdkLoader._instance = null;\n this._isInitialized = false;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"browserSdkLoader.js","sourceRoot":"","sources":["../../../src/browserSdkLoader/browserSdkLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import http from \"http\";\nimport https from \"https\";\nimport { webSnippet as sdkLoader } from \"@microsoft/applicationinsights-web-snippet\";\nimport * as browserSdkLoaderHelper from \"./browserSdkLoaderHelper\";\nimport * as prefixHelper from \"../utils/common\";\nimport * as zlib from \"zlib\";\nimport { InternalConfig } from \"../shared\";\nimport { ConnectionStringParser } from \"../utils/connectionStringParser\";\nimport { IncomingMessage, ServerResponse } from \"http\";\nimport { Logger } from \"../shared/logging/logger\";\nimport { BROWSER_SDK_LOADER_DEFAULT_SOURCE } from \"../types\";\nimport { diag } from \"@opentelemetry/api\";\n\nexport class BrowserSdkLoader {\n private static _instance: BrowserSdkLoader | null;\n\n private static _sdkLoader: string;\n private static _aiUrl: string;\n private _isIkeyValid: boolean = true;\n private _isInitialized: boolean = false;\n private _browserSdkLoaderIkey?: string;\n\n constructor(config: InternalConfig) {\n if (!!BrowserSdkLoader._instance) {\n diag.warn(\"Browser SDK Loader should be configured from the applicationInsights object\");\n }\n\n BrowserSdkLoader._instance = this;\n // AI URL used to validate if sdk loader already included\n BrowserSdkLoader._aiUrl = BROWSER_SDK_LOADER_DEFAULT_SOURCE;\n let clientWebIkey;\n if (config.browserSdkLoaderOptions?.connectionString) {\n clientWebIkey = this._getBrowserSdkLoaderIkey(\n config?.browserSdkLoaderOptions?.connectionString,\n );\n }\n this._browserSdkLoaderIkey =\n clientWebIkey ||\n ConnectionStringParser.parse(config.azureMonitorExporterOptions.connectionString)\n .instrumentationkey;\n\n if (this._isIkeyValid) {\n this._initialize();\n }\n }\n\n public isInitialized() {\n return this._isInitialized;\n }\n\n public static getInstance(): BrowserSdkLoader {\n return BrowserSdkLoader._instance!;\n }\n\n private _getBrowserSdkLoaderIkey(connectionString: string) {\n let iKey = null;\n try {\n const csCode = ConnectionStringParser.parse(connectionString);\n const iKeyCode = csCode.instrumentationkey || \"\";\n if (!ConnectionStringParser.validateInstrumentationKey(iKeyCode)) {\n this._isIkeyValid = false;\n Logger.getInstance().info(\n \"Invalid browser SDK loader connection string, browser SDK loader is not enabled.\",\n );\n } else {\n this._isIkeyValid = true;\n iKey = iKeyCode;\n }\n } catch (err) {\n Logger.getInstance().info(\"get browser SDK loader ikey error: \" + err);\n }\n return iKey;\n }\n\n /**\n * Gets string to inject into the web page\n * @returns The string to inject into the web page\n */\n private _getBrowserSdkLoaderReplacedStr() {\n let osStr = prefixHelper.getOsPrefix();\n let rpStr = prefixHelper.getResourceProvider();\n let sdkLoaderReplacedStr = `${this._browserSdkLoaderIkey}\\\",\\r\\n disableIkeyDeprecationMessage: true,\\r\\n sdkExtension: \\\"${rpStr}${osStr}d_n_`;\n let replacedSdkLoader = sdkLoader.replace(\"INSTRUMENTATION_KEY\", sdkLoaderReplacedStr);\n return replacedSdkLoader;\n }\n\n private _initialize() {\n this._isInitialized = true;\n BrowserSdkLoader._sdkLoader = this._getBrowserSdkLoaderReplacedStr();\n const originalHttpServer = http.createServer;\n const originalHttpsServer = https.createServer;\n\n (http.createServer as any) = (\n requestListener?: (request: IncomingMessage, response: ServerResponse) => void,\n ) => {\n const originalRequestListener = requestListener;\n if (originalRequestListener) {\n requestListener = (request: IncomingMessage, response: ServerResponse) => {\n // Patch response write method\n let originalResponseWrite = response.write;\n let isGetRequest = request.method == \"GET\";\n response.write = function wrap(a: Buffer | string, b?: Function | string) {\n //only patch GET request\n try {\n if (isGetRequest) {\n let headers = browserSdkLoaderHelper.getContentEncodingFromHeaders(response);\n let writeBufferType = undefined;\n if (typeof b === \"string\") {\n writeBufferType = b;\n }\n if (headers === null || headers === undefined) {\n if (BrowserSdkLoader._instance?.ValidateInjection(response, a)) {\n arguments[0] = BrowserSdkLoader._instance.InjectSdkLoader(\n response,\n a,\n undefined,\n writeBufferType,\n );\n }\n } else if (headers.length) {\n let encodeType = headers[0];\n arguments[0] = BrowserSdkLoader._instance?.InjectSdkLoader(\n response,\n a,\n encodeType,\n );\n }\n }\n } catch (err) {\n Logger.getInstance().warn(\"Inject browser sdk loader error: \" + err);\n }\n return originalResponseWrite.apply(response, arguments as any);\n };\n\n // Patch response end method for cases when HTML is added there\n let originalResponseEnd = response.end;\n\n (response.end as any) = function wrap(a?: Buffer | string | any, b?: Function) {\n if (isGetRequest) {\n try {\n if (isGetRequest) {\n let headers = browserSdkLoaderHelper.getContentEncodingFromHeaders(response);\n let endBufferType = undefined;\n if (typeof b === \"string\") {\n endBufferType = b;\n }\n if (headers === null || headers === undefined) {\n if (BrowserSdkLoader._instance?.ValidateInjection(response, a)) {\n arguments[0] = BrowserSdkLoader._instance.InjectSdkLoader(\n response,\n a,\n undefined,\n endBufferType,\n );\n }\n } else if (headers.length) {\n let encodeType = headers[0];\n arguments[0] = BrowserSdkLoader._instance?.InjectSdkLoader(\n response,\n a,\n encodeType,\n );\n }\n }\n } catch (err) {\n Logger.getInstance().warn(\"Inject browser sdk loader error: \" + err);\n }\n }\n return originalResponseEnd.apply(response, arguments as any);\n };\n\n return originalRequestListener(request, response);\n };\n }\n return originalHttpServer(requestListener);\n };\n\n (https.createServer as any) = function (options: any, httpsRequestListener: any): any {\n const originalHttpsRequestListener = httpsRequestListener;\n if (originalHttpsRequestListener) {\n httpsRequestListener = function (req: any, res: any) {\n let isGetHttpsRequest = req.method == \"GET\";\n let originalHttpsResponseWrite = res.write;\n let originalHttpsResponseEnd = res.end;\n res.write = function wrap(a: Buffer | string | any, b?: Function | string) {\n try {\n if (isGetHttpsRequest) {\n let headers = browserSdkLoaderHelper.getContentEncodingFromHeaders(res);\n let writeBufferType = undefined;\n if (typeof b === \"string\") {\n writeBufferType = b;\n }\n if (headers === null || headers === undefined) {\n if (BrowserSdkLoader._instance?.ValidateInjection(res, a)) {\n arguments[0] = this.InjectSdkLoader(res, a, undefined, writeBufferType);\n }\n } else if (headers.length) {\n let encodeType = headers[0];\n arguments[0] = BrowserSdkLoader._instance?.InjectSdkLoader(res, a, encodeType);\n }\n }\n } catch (err) {\n Logger.getInstance().warn(\"Inject SDK loader error: \" + err);\n }\n return originalHttpsResponseWrite.apply(res, arguments);\n };\n\n res.end = function wrap(a: Buffer | string | any, b?: Function | string) {\n try {\n if (isGetHttpsRequest) {\n let headers = browserSdkLoaderHelper.getContentEncodingFromHeaders(res);\n let endBufferType = undefined;\n if (typeof b === \"string\") {\n endBufferType = b;\n }\n if (headers === null || headers === undefined) {\n if (BrowserSdkLoader._instance?.ValidateInjection(res, a)) {\n arguments[0] = BrowserSdkLoader._instance.InjectSdkLoader(\n res,\n a,\n undefined,\n endBufferType,\n );\n }\n } else if (headers.length) {\n let encodeType = headers[0];\n arguments[0] = BrowserSdkLoader._instance?.InjectSdkLoader(res, a, encodeType);\n }\n }\n } catch (err) {\n Logger.getInstance().warn(\"Inject SDK loader error: \" + err);\n }\n return originalHttpsResponseEnd.apply(res, arguments);\n };\n return originalHttpsRequestListener(req, res);\n };\n return originalHttpsServer(options, httpsRequestListener);\n }\n };\n }\n\n /**\n * Validate response and try to inject Browser SDK Loader\n */\n public ValidateInjection(response: any, input: string | Buffer): boolean {\n try {\n if (!response || !input || response.statusCode != 200) return false;\n let isContentHtml = browserSdkLoaderHelper.isContentTypeHeaderHtml(response);\n if (!isContentHtml) return false;\n let inputStr = input.slice().toString();\n if (inputStr.indexOf(\"<head>\") >= 0 && inputStr.indexOf(\"</head>\") >= 0) {\n // Check if sdk loader not already present looking for AI Web SDK URL\n if (inputStr.indexOf(BrowserSdkLoader._aiUrl) < 0) {\n return true;\n }\n }\n } catch (err) {\n Logger.getInstance().info(\"validate injections error: \" + err);\n }\n return false;\n }\n\n /**\n * Inject Browser SDK Loader\n */\n public InjectSdkLoader(\n response: any,\n input: string | Buffer,\n encodeType?: browserSdkLoaderHelper.contentEncodingMethod,\n bufferEncodeType?: string,\n ): string | Buffer {\n try {\n let isCompressedBuffer = !!encodeType;\n if (!isCompressedBuffer) {\n let html = input.toString();\n let index = html.indexOf(\"</head>\");\n if (index < 0) return input;\n\n let newHtml = browserSdkLoaderHelper.insertBrowserSdkLoaderByIndex(\n index,\n html,\n BrowserSdkLoader._sdkLoader,\n );\n if (typeof input === \"string\") {\n response.removeHeader(\"Content-Length\");\n if (newHtml) {\n input = newHtml;\n }\n response.setHeader(\"Content-Length\", Buffer.byteLength(input));\n } else if (Buffer.isBuffer(input)) {\n let bufferType = bufferEncodeType ? bufferEncodeType : \"utf8\";\n let isValidBufferType = browserSdkLoaderHelper.isBufferType(input, bufferType);\n if (isValidBufferType && newHtml) {\n response.removeHeader(\"Content-Length\");\n let encodedString = Buffer.from(newHtml).toString(bufferType as BufferEncoding);\n input = Buffer.from(encodedString, bufferType as BufferEncoding);\n response.setHeader(\"Content-Length\", input.length);\n }\n }\n } else {\n response.removeHeader(\"Content-Length\");\n input = this._getInjectedCompressBuffer(\n response,\n input as Buffer,\n encodeType as browserSdkLoaderHelper.contentEncodingMethod,\n );\n response.setHeader(\"Content-Length\", input.length);\n }\n } catch (ex) {\n Logger.getInstance().warn(\n \"Failed to inject browser sdk loader and change content-length headers. Exception:\" + ex,\n );\n }\n return input;\n }\n\n //***********************\n // should NOT use sync functions here. But currently cannot get async functions to work\n // because reponse.write return boolean\n // and also this function do not support partial compression as well\n // need more investigation\n private _getInjectedCompressBuffer(\n response: any,\n input: Buffer,\n encodeType: browserSdkLoaderHelper.contentEncodingMethod,\n ): Buffer {\n try {\n switch (encodeType) {\n case browserSdkLoaderHelper.contentEncodingMethod.GZIP:\n let gunzipBuffer = zlib.gunzipSync(input);\n if (this.ValidateInjection(response, gunzipBuffer)) {\n let injectedGunzipBuffer = this.InjectSdkLoader(response, gunzipBuffer);\n input = zlib.gzipSync(injectedGunzipBuffer);\n }\n break;\n case browserSdkLoaderHelper.contentEncodingMethod.DEFLATE:\n let inflateBuffer = zlib.inflateSync(input);\n if (this.ValidateInjection(response, inflateBuffer)) {\n let injectedInflateBuffer = this.InjectSdkLoader(response, inflateBuffer);\n input = zlib.deflateSync(injectedInflateBuffer);\n }\n break;\n case browserSdkLoaderHelper.contentEncodingMethod.BR:\n let BrotliDecompressSync = browserSdkLoaderHelper.getBrotliDecompressSync(zlib);\n let BrotliCompressSync = browserSdkLoaderHelper.getBrotliCompressSync(zlib);\n if (BrotliDecompressSync && BrotliCompressSync) {\n let decompressBuffer = BrotliDecompressSync(input);\n if (this.ValidateInjection(response, decompressBuffer)) {\n let injectedDecompressBuffer = this.InjectSdkLoader(response, decompressBuffer);\n input = BrotliCompressSync(injectedDecompressBuffer);\n }\n break;\n }\n }\n } catch (err) {\n Logger.getInstance().info(\"get browser SDK loader compress buffer error: \" + err);\n }\n\n return input;\n }\n\n public dispose() {\n BrowserSdkLoader._instance = null;\n this._isInitialized = false;\n }\n}\n"]}
|
package/dist-esm/src/index.js
CHANGED
|
@@ -12,6 +12,7 @@ import { AZURE_MONITOR_OPENTELEMETRY_VERSION, } from "./types";
|
|
|
12
12
|
import { BrowserSdkLoader } from "./browserSdkLoader/browserSdkLoader";
|
|
13
13
|
import { setSdkPrefix } from "./metrics/quickpulse/utils";
|
|
14
14
|
import { getInstance } from "./utils/statsbeat";
|
|
15
|
+
import { parseResourceDetectorsFromEnvVar } from "./utils/common";
|
|
15
16
|
process.env["AZURE_MONITOR_DISTRO_VERSION"] = AZURE_MONITOR_OPENTELEMETRY_VERSION;
|
|
16
17
|
let sdk;
|
|
17
18
|
let browserSdkLoader;
|
|
@@ -51,6 +52,7 @@ export function useAzureMonitor(options) {
|
|
|
51
52
|
const instrumentations = traceHandler
|
|
52
53
|
.getInstrumentations()
|
|
53
54
|
.concat(logHandler.getInstrumentations());
|
|
55
|
+
const resourceDetectorsList = parseResourceDetectorsFromEnvVar();
|
|
54
56
|
// Initialize OpenTelemetry SDK
|
|
55
57
|
const sdkConfig = {
|
|
56
58
|
autoDetectResources: true,
|
|
@@ -61,6 +63,7 @@ export function useAzureMonitor(options) {
|
|
|
61
63
|
resource: config.resource,
|
|
62
64
|
sampler: traceHandler.getSampler(),
|
|
63
65
|
spanProcessors: [traceHandler.getAzureMonitorSpanProcessor()],
|
|
66
|
+
resourceDetectors: resourceDetectorsList,
|
|
64
67
|
};
|
|
65
68
|
sdk = new NodeSDK(sdkConfig);
|
|
66
69
|
setSdkPrefix();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAuB,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAwB,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EACL,mCAAmC,GAKpC,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { ProxyTracerProvider, metrics, trace } from \"@opentelemetry/api\";\nimport { logs } from \"@opentelemetry/api-logs\";\nimport { NodeSDK, NodeSDKConfiguration } from \"@opentelemetry/sdk-node\";\nimport { InternalConfig } from \"./shared/config\";\nimport { MetricHandler } from \"./metrics\";\nimport { TraceHandler } from \"./traces/handler\";\nimport { Logger as InternalLogger } from \"./shared/logging\";\nimport { LogHandler } from \"./logs\";\nimport {\n AZURE_MONITOR_OPENTELEMETRY_VERSION,\n AzureMonitorOpenTelemetryOptions,\n InstrumentationOptions,\n BrowserSdkLoaderOptions,\n StatsbeatOptions,\n} from \"./types\";\nimport { BrowserSdkLoader } from \"./browserSdkLoader/browserSdkLoader\";\nimport { setSdkPrefix } from \"./metrics/quickpulse/utils\";\nimport { SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport { LogRecordProcessor, LoggerProvider } from \"@opentelemetry/sdk-logs\";\nimport { NodeTracerProvider } from \"@opentelemetry/sdk-trace-node\";\nimport { getInstance } from \"./utils/statsbeat\";\nimport { parseResourceDetectorsFromEnvVar } from \"./utils/common\";\n\nexport { AzureMonitorOpenTelemetryOptions, InstrumentationOptions, BrowserSdkLoaderOptions };\n\nprocess.env[\"AZURE_MONITOR_DISTRO_VERSION\"] = AZURE_MONITOR_OPENTELEMETRY_VERSION;\n\nlet sdk: NodeSDK;\nlet browserSdkLoader: BrowserSdkLoader | undefined;\n\n/**\n * Initialize Azure Monitor Distro\n * @param options Azure Monitor OpenTelemetry Options\n */\nexport function useAzureMonitor(options?: AzureMonitorOpenTelemetryOptions) {\n const config = new InternalConfig(options);\n const statsbeatOptions: StatsbeatOptions = {\n // Instrumentations\n azureSdk: config.instrumentationOptions?.azureSdk?.enabled,\n mongoDb: config.instrumentationOptions?.mongoDb?.enabled,\n mySql: config.instrumentationOptions?.mySql?.enabled,\n postgreSql: config.instrumentationOptions?.postgreSql?.enabled,\n redis: config.instrumentationOptions?.redis?.enabled,\n bunyan: config.instrumentationOptions?.bunyan?.enabled,\n winston: config.instrumentationOptions?.winston?.enabled,\n // Features\n browserSdkLoader: config.browserSdkLoaderOptions.enabled,\n aadHandling: !!config.azureMonitorExporterOptions?.credential,\n diskRetry: !config.azureMonitorExporterOptions?.disableOfflineStorage,\n };\n getInstance().setStatsbeatFeatures(statsbeatOptions);\n\n if (config.browserSdkLoaderOptions.enabled) {\n browserSdkLoader = new BrowserSdkLoader(config);\n }\n // Remove global providers in OpenTelemetry, these would be overriden if present\n metrics.disable();\n trace.disable();\n logs.disable();\n\n // Create internal handlers\n const metricHandler = new MetricHandler(config);\n const traceHandler = new TraceHandler(config, metricHandler);\n const logHandler = new LogHandler(config, metricHandler);\n\n const instrumentations = traceHandler\n .getInstrumentations()\n .concat(logHandler.getInstrumentations());\n\n const resourceDetectorsList = parseResourceDetectorsFromEnvVar();\n\n // Initialize OpenTelemetry SDK\n const sdkConfig: Partial<NodeSDKConfiguration> = {\n autoDetectResources: true,\n metricReader: metricHandler.getMetricReader(),\n views: metricHandler.getViews(),\n instrumentations: instrumentations,\n logRecordProcessor: logHandler.getAzureLogRecordProcessor(),\n resource: config.resource,\n sampler: traceHandler.getSampler(),\n spanProcessors: [traceHandler.getAzureMonitorSpanProcessor()],\n resourceDetectors: resourceDetectorsList,\n };\n sdk = new NodeSDK(sdkConfig);\n setSdkPrefix();\n sdk.start();\n\n // TODO: Send processors as NodeSDK config once arrays are supported\n // https://github.com/open-telemetry/opentelemetry-js/issues/4451\n\n // Add extra SpanProcessors, MetricReaders and LogRecordProcessors\n let spanProcessors: SpanProcessor[] = options?.spanProcessors || [];\n // Add batch processor as the last one\n spanProcessors.push(traceHandler.getBatchSpanProcessor());\n\n // Add extra SpanProcessors, MetricReaders and LogRecordProcessors\n let logRecordProcessors: LogRecordProcessor[] = options?.logRecordProcessors || [];\n // Add batch processor as the last one\n logRecordProcessors.push(logHandler.getBatchLogRecordProcessor());\n\n try {\n const tracerProvider = (\n trace.getTracerProvider() as ProxyTracerProvider\n ).getDelegate() as NodeTracerProvider;\n spanProcessors.forEach((spanProcessor) => {\n tracerProvider.addSpanProcessor(spanProcessor);\n });\n } catch (error) {\n InternalLogger.getInstance().error(\"Failed to add SpanProcessors to TracerProvider.\", error);\n }\n try {\n const logProvider = logs.getLoggerProvider() as LoggerProvider;\n logRecordProcessors.forEach((logRecordProcessor) => {\n logProvider.addLogRecordProcessor(logRecordProcessor);\n });\n } catch (error) {\n InternalLogger.getInstance().error(\n \"Failed to add LogRecordProcessors to LoggerProvider.\",\n error,\n );\n }\n}\n\n/**\n * Shutdown Azure Monitor Open Telemetry Distro\n * @see https://github.com/open-telemetry/opentelemetry-js/blob/0229434cb5a3179f63c021105f36270ae7897929/experimental/packages/opentelemetry-sdk-node/src/sdk.ts#L398\n */\nexport function shutdownAzureMonitor(): Promise<void> {\n browserSdkLoader?.dispose();\n return sdk?.shutdown();\n}\n"]}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
|
-
import {
|
|
3
|
+
import { SpanStatusCode } from "@opentelemetry/api";
|
|
4
|
+
import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_NAMESPACE, SEMRESATTRS_SERVICE_INSTANCE_ID, SEMATTRS_PEER_SERVICE, SEMATTRS_HTTP_HOST, SEMATTRS_HTTP_URL, SEMATTRS_NET_PEER_NAME, SEMATTRS_NET_PEER_IP, SEMATTRS_EXCEPTION_MESSAGE, SEMATTRS_EXCEPTION_TYPE, SEMATTRS_HTTP_USER_AGENT, SEMATTRS_HTTP_STATUS_CODE, } from "@opentelemetry/semantic-conventions";
|
|
4
5
|
import { StandardMetricIds, StandardMetricPropertyNames, } from "./types";
|
|
5
6
|
export function getRequestDimensions(span) {
|
|
6
7
|
const dimensions = getBaseDimensions(span.resource);
|
|
7
8
|
dimensions.metricId = StandardMetricIds.REQUEST_DURATION;
|
|
8
|
-
const statusCode = String(span.attributes[
|
|
9
|
+
const statusCode = String(span.attributes[SEMATTRS_HTTP_STATUS_CODE]);
|
|
9
10
|
dimensions.requestResultCode = statusCode;
|
|
10
|
-
|
|
11
|
+
// OTel treats 4xx request responses as UNSET SpanStatusCode, but we should count them as failed
|
|
12
|
+
dimensions.requestSuccess =
|
|
13
|
+
span.status.code !== SpanStatusCode.ERROR && (Number(statusCode) || 0) < 400 ? "True" : "False";
|
|
11
14
|
if (isSyntheticLoad(span)) {
|
|
12
15
|
dimensions.operationSynthetic = "True";
|
|
13
16
|
}
|
|
@@ -16,11 +19,11 @@ export function getRequestDimensions(span) {
|
|
|
16
19
|
export function getDependencyDimensions(span) {
|
|
17
20
|
const dimensions = getBaseDimensions(span.resource);
|
|
18
21
|
dimensions.metricId = StandardMetricIds.DEPENDENCIES_DURATION;
|
|
19
|
-
const statusCode = String(span.attributes[
|
|
22
|
+
const statusCode = String(span.attributes[SEMATTRS_HTTP_STATUS_CODE]);
|
|
20
23
|
dimensions.dependencyTarget = getDependencyTarget(span.attributes);
|
|
21
24
|
dimensions.dependencyResultCode = statusCode;
|
|
22
25
|
dimensions.dependencyType = "http";
|
|
23
|
-
dimensions.dependencySuccess =
|
|
26
|
+
dimensions.dependencySuccess = span.status.code !== SpanStatusCode.ERROR ? "True" : "False";
|
|
24
27
|
if (isSyntheticLoad(span)) {
|
|
25
28
|
dimensions.operationSynthetic = "True";
|
|
26
29
|
}
|
|
@@ -41,8 +44,8 @@ export function getBaseDimensions(resource) {
|
|
|
41
44
|
dimensions.IsAutocollected = "True";
|
|
42
45
|
if (resource) {
|
|
43
46
|
const spanResourceAttributes = resource.attributes;
|
|
44
|
-
const serviceName = spanResourceAttributes[
|
|
45
|
-
const serviceNamespace = spanResourceAttributes[
|
|
47
|
+
const serviceName = spanResourceAttributes[SEMRESATTRS_SERVICE_NAME];
|
|
48
|
+
const serviceNamespace = spanResourceAttributes[SEMRESATTRS_SERVICE_NAMESPACE];
|
|
46
49
|
if (serviceName) {
|
|
47
50
|
if (serviceNamespace) {
|
|
48
51
|
dimensions.cloudRoleName = `${serviceNamespace}.${serviceName}`;
|
|
@@ -51,7 +54,7 @@ export function getBaseDimensions(resource) {
|
|
|
51
54
|
dimensions.cloudRoleName = String(serviceName);
|
|
52
55
|
}
|
|
53
56
|
}
|
|
54
|
-
const serviceInstanceId = spanResourceAttributes[
|
|
57
|
+
const serviceInstanceId = spanResourceAttributes[SEMRESATTRS_SERVICE_INSTANCE_ID];
|
|
55
58
|
dimensions.cloudRoleInstance = String(serviceInstanceId);
|
|
56
59
|
}
|
|
57
60
|
return dimensions;
|
|
@@ -60,11 +63,11 @@ export function getDependencyTarget(attributes) {
|
|
|
60
63
|
if (!attributes) {
|
|
61
64
|
return "";
|
|
62
65
|
}
|
|
63
|
-
const peerService = attributes[
|
|
64
|
-
const httpHost = attributes[
|
|
65
|
-
const httpUrl = attributes[
|
|
66
|
-
const netPeerName = attributes[
|
|
67
|
-
const netPeerIp = attributes[
|
|
66
|
+
const peerService = attributes[SEMATTRS_PEER_SERVICE];
|
|
67
|
+
const httpHost = attributes[SEMATTRS_HTTP_HOST];
|
|
68
|
+
const httpUrl = attributes[SEMATTRS_HTTP_URL];
|
|
69
|
+
const netPeerName = attributes[SEMATTRS_NET_PEER_NAME];
|
|
70
|
+
const netPeerIp = attributes[SEMATTRS_NET_PEER_IP];
|
|
68
71
|
if (peerService) {
|
|
69
72
|
return String(peerService);
|
|
70
73
|
}
|
|
@@ -88,8 +91,8 @@ export function isExceptionTelemetry(logRecord) {
|
|
|
88
91
|
if (baseType && baseType === "ExceptionData") {
|
|
89
92
|
return true;
|
|
90
93
|
}
|
|
91
|
-
else if (logRecord.attributes[
|
|
92
|
-
logRecord.attributes[
|
|
94
|
+
else if (logRecord.attributes[SEMATTRS_EXCEPTION_MESSAGE] ||
|
|
95
|
+
logRecord.attributes[SEMATTRS_EXCEPTION_TYPE]) {
|
|
93
96
|
return true;
|
|
94
97
|
}
|
|
95
98
|
return false;
|
|
@@ -100,14 +103,14 @@ export function isTraceTelemetry(logRecord) {
|
|
|
100
103
|
if (baseType && baseType === "MessageData") {
|
|
101
104
|
return true;
|
|
102
105
|
}
|
|
103
|
-
else if (!logRecord.attributes[
|
|
104
|
-
!logRecord.attributes[
|
|
106
|
+
else if (!logRecord.attributes[SEMATTRS_EXCEPTION_MESSAGE] &&
|
|
107
|
+
!logRecord.attributes[SEMATTRS_EXCEPTION_TYPE]) {
|
|
105
108
|
return true;
|
|
106
109
|
}
|
|
107
110
|
return false;
|
|
108
111
|
}
|
|
109
112
|
export function isSyntheticLoad(record) {
|
|
110
|
-
const userAgent = String(record.attributes[
|
|
113
|
+
const userAgent = String(record.attributes[SEMATTRS_HTTP_USER_AGENT]);
|
|
111
114
|
return userAgent !== null && userAgent.includes("AlwaysOn") ? true : false;
|
|
112
115
|
}
|
|
113
116
|
export function convertDimensions(dimensions) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/metrics/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { Attributes } from \"@opentelemetry/api\";\nimport { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport {\n SemanticAttributes,\n SemanticResourceAttributes,\n} from \"@opentelemetry/semantic-conventions\";\nimport {\n MetricDependencyDimensions,\n MetricDimensionTypeKeys,\n MetricRequestDimensions,\n StandardMetricBaseDimensions,\n StandardMetricIds,\n StandardMetricPropertyNames,\n} from \"./types\";\nimport { LogRecord } from \"@opentelemetry/sdk-logs\";\nimport { Resource } from \"@opentelemetry/resources\";\n\nexport function getRequestDimensions(span: ReadableSpan): Attributes {\n const dimensions: MetricRequestDimensions = getBaseDimensions(span.resource);\n dimensions.metricId = StandardMetricIds.REQUEST_DURATION;\n const statusCode = String(span.attributes[\"http.status_code\"]);\n dimensions.requestResultCode = statusCode;\n dimensions.requestSuccess = statusCode === \"200\" ? \"True\" : \"False\";\n if (isSyntheticLoad(span)) {\n dimensions.operationSynthetic = \"True\";\n }\n return convertDimensions(dimensions) as Attributes;\n}\n\nexport function getDependencyDimensions(span: ReadableSpan): Attributes {\n const dimensions: MetricDependencyDimensions = getBaseDimensions(span.resource);\n dimensions.metricId = StandardMetricIds.DEPENDENCIES_DURATION;\n const statusCode = String(span.attributes[\"http.status_code\"]);\n dimensions.dependencyTarget = getDependencyTarget(span.attributes);\n dimensions.dependencyResultCode = statusCode;\n dimensions.dependencyType = \"http\";\n dimensions.dependencySuccess = statusCode === \"200\" ? \"True\" : \"False\";\n if (isSyntheticLoad(span)) {\n dimensions.operationSynthetic = \"True\";\n }\n return convertDimensions(dimensions) as Attributes;\n}\n\nexport function getExceptionDimensions(resource: Resource): Attributes {\n const dimensions: StandardMetricBaseDimensions = getBaseDimensions(resource);\n dimensions.metricId = StandardMetricIds.EXCEPTIONS_COUNT;\n return dimensions as Attributes;\n}\n\nexport function getTraceDimensions(resource: Resource): Attributes {\n const dimensions: StandardMetricBaseDimensions = getBaseDimensions(resource);\n dimensions.metricId = StandardMetricIds.TRACES_COUNT;\n return dimensions as Attributes;\n}\n\nexport function getBaseDimensions(resource: Resource): StandardMetricBaseDimensions {\n const dimensions: StandardMetricBaseDimensions = {};\n dimensions.IsAutocollected = \"True\";\n if (resource) {\n const spanResourceAttributes = resource.attributes;\n const serviceName = spanResourceAttributes[SemanticResourceAttributes.SERVICE_NAME];\n const serviceNamespace = spanResourceAttributes[SemanticResourceAttributes.SERVICE_NAMESPACE];\n if (serviceName) {\n if (serviceNamespace) {\n dimensions.cloudRoleName = `${serviceNamespace}.${serviceName}`;\n } else {\n dimensions.cloudRoleName = String(serviceName);\n }\n }\n const serviceInstanceId =\n spanResourceAttributes[SemanticResourceAttributes.SERVICE_INSTANCE_ID];\n dimensions.cloudRoleInstance = String(serviceInstanceId);\n }\n return dimensions;\n}\n\nexport function getDependencyTarget(attributes: Attributes): string {\n if (!attributes) {\n return \"\";\n }\n const peerService = attributes[SemanticAttributes.PEER_SERVICE];\n const httpHost = attributes[SemanticAttributes.HTTP_HOST];\n const httpUrl = attributes[SemanticAttributes.HTTP_URL];\n const netPeerName = attributes[SemanticAttributes.NET_PEER_NAME];\n const netPeerIp = attributes[SemanticAttributes.NET_PEER_IP];\n if (peerService) {\n return String(peerService);\n } else if (httpHost) {\n return String(httpHost);\n } else if (httpUrl) {\n return String(httpUrl);\n } else if (netPeerName) {\n return String(netPeerName);\n } else if (netPeerIp) {\n return String(netPeerIp);\n }\n return \"\";\n}\n\nexport function isExceptionTelemetry(logRecord: LogRecord) {\n const baseType = logRecord.attributes[\"_MS.baseType\"];\n // If Application Insights Legacy logs\n if (baseType && baseType === \"ExceptionData\") {\n return true;\n } else if (\n logRecord.attributes[SemanticAttributes.EXCEPTION_MESSAGE] ||\n logRecord.attributes[SemanticAttributes.EXCEPTION_TYPE]\n ) {\n return true;\n }\n return false;\n}\n\nexport function isTraceTelemetry(logRecord: LogRecord) {\n const baseType = logRecord.attributes[\"_MS.baseType\"];\n // If Application Insights Legacy logs\n if (baseType && baseType === \"MessageData\") {\n return true;\n } else if (\n !logRecord.attributes[SemanticAttributes.EXCEPTION_MESSAGE] &&\n !logRecord.attributes[SemanticAttributes.EXCEPTION_TYPE]\n ) {\n return true;\n }\n return false;\n}\n\nexport function isSyntheticLoad(record: LogRecord | ReadableSpan): boolean {\n const userAgent = String(record.attributes[SemanticAttributes.HTTP_USER_AGENT]);\n return userAgent !== null && userAgent.includes(\"AlwaysOn\") ? true : false;\n}\n\nexport function convertDimensions(\n dimensions: MetricDependencyDimensions | MetricRequestDimensions,\n): Attributes {\n let convertedDimensions: any = {};\n for (let dim in dimensions) {\n convertedDimensions[StandardMetricPropertyNames[dim as MetricDimensionTypeKeys]] = (\n dimensions as any\n )[dim];\n }\n return convertedDimensions as Attributes;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/metrics/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { Attributes, SpanStatusCode } from \"@opentelemetry/api\";\nimport { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport {\n SEMRESATTRS_SERVICE_NAME,\n SEMRESATTRS_SERVICE_NAMESPACE,\n SEMRESATTRS_SERVICE_INSTANCE_ID,\n SEMATTRS_PEER_SERVICE,\n SEMATTRS_HTTP_HOST,\n SEMATTRS_HTTP_URL,\n SEMATTRS_NET_PEER_NAME,\n SEMATTRS_NET_PEER_IP,\n SEMATTRS_EXCEPTION_MESSAGE,\n SEMATTRS_EXCEPTION_TYPE,\n SEMATTRS_HTTP_USER_AGENT,\n SEMATTRS_HTTP_STATUS_CODE,\n} from \"@opentelemetry/semantic-conventions\";\nimport {\n MetricDependencyDimensions,\n MetricDimensionTypeKeys,\n MetricRequestDimensions,\n StandardMetricBaseDimensions,\n StandardMetricIds,\n StandardMetricPropertyNames,\n} from \"./types\";\nimport { LogRecord } from \"@opentelemetry/sdk-logs\";\nimport { Resource } from \"@opentelemetry/resources\";\n\nexport function getRequestDimensions(span: ReadableSpan): Attributes {\n const dimensions: MetricRequestDimensions = getBaseDimensions(span.resource);\n dimensions.metricId = StandardMetricIds.REQUEST_DURATION;\n const statusCode = String(span.attributes[SEMATTRS_HTTP_STATUS_CODE]);\n dimensions.requestResultCode = statusCode;\n // OTel treats 4xx request responses as UNSET SpanStatusCode, but we should count them as failed\n dimensions.requestSuccess =\n span.status.code !== SpanStatusCode.ERROR && (Number(statusCode) || 0) < 400 ? \"True\" : \"False\";\n if (isSyntheticLoad(span)) {\n dimensions.operationSynthetic = \"True\";\n }\n return convertDimensions(dimensions) as Attributes;\n}\n\nexport function getDependencyDimensions(span: ReadableSpan): Attributes {\n const dimensions: MetricDependencyDimensions = getBaseDimensions(span.resource);\n dimensions.metricId = StandardMetricIds.DEPENDENCIES_DURATION;\n const statusCode = String(span.attributes[SEMATTRS_HTTP_STATUS_CODE]);\n dimensions.dependencyTarget = getDependencyTarget(span.attributes);\n dimensions.dependencyResultCode = statusCode;\n dimensions.dependencyType = \"http\";\n dimensions.dependencySuccess = span.status.code !== SpanStatusCode.ERROR ? \"True\" : \"False\";\n if (isSyntheticLoad(span)) {\n dimensions.operationSynthetic = \"True\";\n }\n return convertDimensions(dimensions) as Attributes;\n}\n\nexport function getExceptionDimensions(resource: Resource): Attributes {\n const dimensions: StandardMetricBaseDimensions = getBaseDimensions(resource);\n dimensions.metricId = StandardMetricIds.EXCEPTIONS_COUNT;\n return dimensions as Attributes;\n}\n\nexport function getTraceDimensions(resource: Resource): Attributes {\n const dimensions: StandardMetricBaseDimensions = getBaseDimensions(resource);\n dimensions.metricId = StandardMetricIds.TRACES_COUNT;\n return dimensions as Attributes;\n}\n\nexport function getBaseDimensions(resource: Resource): StandardMetricBaseDimensions {\n const dimensions: StandardMetricBaseDimensions = {};\n dimensions.IsAutocollected = \"True\";\n if (resource) {\n const spanResourceAttributes = resource.attributes;\n const serviceName = spanResourceAttributes[SEMRESATTRS_SERVICE_NAME];\n const serviceNamespace = spanResourceAttributes[SEMRESATTRS_SERVICE_NAMESPACE];\n if (serviceName) {\n if (serviceNamespace) {\n dimensions.cloudRoleName = `${serviceNamespace}.${serviceName}`;\n } else {\n dimensions.cloudRoleName = String(serviceName);\n }\n }\n const serviceInstanceId = spanResourceAttributes[SEMRESATTRS_SERVICE_INSTANCE_ID];\n dimensions.cloudRoleInstance = String(serviceInstanceId);\n }\n return dimensions;\n}\n\nexport function getDependencyTarget(attributes: Attributes): string {\n if (!attributes) {\n return \"\";\n }\n const peerService = attributes[SEMATTRS_PEER_SERVICE];\n const httpHost = attributes[SEMATTRS_HTTP_HOST];\n const httpUrl = attributes[SEMATTRS_HTTP_URL];\n const netPeerName = attributes[SEMATTRS_NET_PEER_NAME];\n const netPeerIp = attributes[SEMATTRS_NET_PEER_IP];\n if (peerService) {\n return String(peerService);\n } else if (httpHost) {\n return String(httpHost);\n } else if (httpUrl) {\n return String(httpUrl);\n } else if (netPeerName) {\n return String(netPeerName);\n } else if (netPeerIp) {\n return String(netPeerIp);\n }\n return \"\";\n}\n\nexport function isExceptionTelemetry(logRecord: LogRecord) {\n const baseType = logRecord.attributes[\"_MS.baseType\"];\n // If Application Insights Legacy logs\n if (baseType && baseType === \"ExceptionData\") {\n return true;\n } else if (\n logRecord.attributes[SEMATTRS_EXCEPTION_MESSAGE] ||\n logRecord.attributes[SEMATTRS_EXCEPTION_TYPE]\n ) {\n return true;\n }\n return false;\n}\n\nexport function isTraceTelemetry(logRecord: LogRecord) {\n const baseType = logRecord.attributes[\"_MS.baseType\"];\n // If Application Insights Legacy logs\n if (baseType && baseType === \"MessageData\") {\n return true;\n } else if (\n !logRecord.attributes[SEMATTRS_EXCEPTION_MESSAGE] &&\n !logRecord.attributes[SEMATTRS_EXCEPTION_TYPE]\n ) {\n return true;\n }\n return false;\n}\n\nexport function isSyntheticLoad(record: LogRecord | ReadableSpan): boolean {\n const userAgent = String(record.attributes[SEMATTRS_HTTP_USER_AGENT]);\n return userAgent !== null && userAgent.includes(\"AlwaysOn\") ? true : false;\n}\n\nexport function convertDimensions(\n dimensions: MetricDependencyDimensions | MetricRequestDimensions,\n): Attributes {\n let convertedDimensions: any = {};\n for (let dim in dimensions) {\n convertedDimensions[StandardMetricPropertyNames[dim as MetricDimensionTypeKeys]] = (\n dimensions as any\n )[dim];\n }\n return convertedDimensions as Attributes;\n}\n"]}
|
|
@@ -25,7 +25,7 @@ export class InternalConfig {
|
|
|
25
25
|
// Default values
|
|
26
26
|
this.azureMonitorExporterOptions = {};
|
|
27
27
|
this.samplingRatio = 1;
|
|
28
|
-
this.enableLiveMetrics =
|
|
28
|
+
this.enableLiveMetrics = true;
|
|
29
29
|
this.enableStandardMetrics = true;
|
|
30
30
|
this.enableTraceBasedSamplingForLogs = true;
|
|
31
31
|
this.instrumentationOptions = {
|
|
@@ -47,7 +47,8 @@ export class InternalConfig {
|
|
|
47
47
|
this.azureMonitorExporterOptions = Object.assign(this.azureMonitorExporterOptions, options.azureMonitorExporterOptions);
|
|
48
48
|
this.instrumentationOptions = Object.assign(this.instrumentationOptions, options.instrumentationOptions);
|
|
49
49
|
this.resource = Object.assign(this.resource, options.resource);
|
|
50
|
-
this.samplingRatio =
|
|
50
|
+
this.samplingRatio =
|
|
51
|
+
options.samplingRatio !== undefined ? options.samplingRatio : this.samplingRatio;
|
|
51
52
|
this.browserSdkLoaderOptions = Object.assign(this.browserSdkLoaderOptions, options.browserSdkLoaderOptions);
|
|
52
53
|
this.enableLiveMetrics =
|
|
53
54
|
options.enableLiveMetrics != undefined ? options.enableLiveMetrics : this.enableLiveMetrics;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/shared/config.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n Resource,\n ResourceDetectionConfig,\n detectResourcesSync,\n envDetectorSync,\n} from \"@opentelemetry/resources\";\nimport {\n BrowserSdkLoaderOptions,\n AzureMonitorOpenTelemetryOptions,\n InstrumentationOptions,\n} from \"../types\";\nimport { AzureMonitorExporterOptions } from \"@azure/monitor-opentelemetry-exporter\";\nimport { JsonConfig } from \"./jsonConfig\";\nimport { Logger } from \"./logging\";\nimport {\n azureAppServiceDetector,\n azureFunctionsDetector,\n azureVmDetector,\n} from \"@opentelemetry/resource-detector-azure\";\n\n/**\n * Azure Monitor OpenTelemetry Client Configuration\n */\nexport class InternalConfig implements AzureMonitorOpenTelemetryOptions {\n /** The rate of telemetry items tracked that should be transmitted (Default 1.0) */\n public samplingRatio: number;\n /** Azure Monitor Exporter Configuration */\n public azureMonitorExporterOptions: AzureMonitorExporterOptions;\n /**\n * OpenTelemetry Instrumentations configuration included as part of Azure Monitor (azureSdk, http, mongoDb, mySql, postgreSql, redis, redis4)\n */\n public instrumentationOptions: InstrumentationOptions;\n /** Enable Live Metrics feature */\n enableLiveMetrics?: boolean;\n /** Enable Standard Metrics feature */\n enableStandardMetrics?: boolean;\n /** Enable log sampling based on trace (Default true) */\n enableTraceBasedSamplingForLogs?: boolean;\n\n private _resource: Resource = Resource.empty();\n\n public set resource(resource: Resource) {\n this._resource = this._resource.merge(resource);\n }\n\n /**\n *Get OpenTelemetry Resource\n */\n public get resource(): Resource {\n return this._resource;\n }\n\n public browserSdkLoaderOptions: BrowserSdkLoaderOptions;\n\n /**\n * Initializes a new instance of the AzureMonitorOpenTelemetryOptions class.\n */\n constructor(options?: AzureMonitorOpenTelemetryOptions) {\n // Default values\n this.azureMonitorExporterOptions = {};\n this.samplingRatio = 1;\n this.enableLiveMetrics = false;\n this.enableStandardMetrics = true;\n this.enableTraceBasedSamplingForLogs = true;\n this.instrumentationOptions = {\n http: { enabled: true },\n azureSdk: { enabled: false },\n mongoDb: { enabled: false },\n mySql: { enabled: false },\n postgreSql: { enabled: false },\n redis: { enabled: false },\n redis4: { enabled: false },\n };\n this._setDefaultResource();\n this.browserSdkLoaderOptions = {\n enabled: false,\n connectionString: \"\",\n };\n\n if (options) {\n // Merge default with provided options\n this.azureMonitorExporterOptions = Object.assign(\n this.azureMonitorExporterOptions,\n options.azureMonitorExporterOptions,\n );\n this.instrumentationOptions = Object.assign(\n this.instrumentationOptions,\n options.instrumentationOptions,\n );\n this.resource = Object.assign(this.resource, options.resource);\n this.samplingRatio = options.samplingRatio || this.samplingRatio;\n this.browserSdkLoaderOptions = Object.assign(\n this.browserSdkLoaderOptions,\n options.browserSdkLoaderOptions,\n );\n this.enableLiveMetrics =\n options.enableLiveMetrics != undefined ? options.enableLiveMetrics : this.enableLiveMetrics;\n this.enableStandardMetrics =\n options.enableStandardMetrics != undefined\n ? options.enableStandardMetrics\n : this.enableStandardMetrics;\n this.enableTraceBasedSamplingForLogs =\n options.enableTraceBasedSamplingForLogs != undefined\n ? options.enableTraceBasedSamplingForLogs\n : this.enableTraceBasedSamplingForLogs;\n }\n // JSON configuration will take precedence over other settings\n this._mergeConfig();\n }\n\n private _mergeConfig() {\n try {\n const jsonConfig = JsonConfig.getInstance();\n this.samplingRatio =\n jsonConfig.samplingRatio !== undefined ? jsonConfig.samplingRatio : this.samplingRatio;\n this.browserSdkLoaderOptions = Object.assign(\n this.browserSdkLoaderOptions,\n jsonConfig.browserSdkLoaderOptions,\n );\n this.enableLiveMetrics =\n jsonConfig.enableLiveMetrics !== undefined\n ? jsonConfig.enableLiveMetrics\n : this.enableLiveMetrics;\n this.enableStandardMetrics =\n jsonConfig.enableStandardMetrics !== undefined\n ? jsonConfig.enableStandardMetrics\n : this.enableStandardMetrics;\n this.enableTraceBasedSamplingForLogs =\n jsonConfig.enableTraceBasedSamplingForLogs !== undefined\n ? jsonConfig.enableTraceBasedSamplingForLogs\n : this.enableTraceBasedSamplingForLogs;\n this.azureMonitorExporterOptions = Object.assign(\n this.azureMonitorExporterOptions,\n jsonConfig.azureMonitorExporterOptions,\n );\n this.instrumentationOptions = Object.assign(\n this.instrumentationOptions,\n jsonConfig.instrumentationOptions,\n );\n } catch (error) {\n Logger.getInstance().error(\"Failed to load JSON config file values.\", error);\n }\n }\n\n private _setDefaultResource(): void {\n let resource = Resource.default();\n // Load resource attributes from env\n const detectResourceConfig: ResourceDetectionConfig = {\n detectors: [envDetectorSync],\n };\n const envResource = detectResourcesSync(detectResourceConfig);\n resource = resource.merge(envResource) as Resource;\n\n // Load resource attributes from Azure\n const azureResource: Resource = detectResourcesSync({\n detectors: [azureAppServiceDetector, azureFunctionsDetector],\n });\n this._resource = resource.merge(azureResource) as Resource;\n\n const vmResource = detectResourcesSync({\n detectors: [azureVmDetector],\n });\n if (vmResource.asyncAttributesPending) {\n vmResource.waitForAsyncAttributes?.().then(() => {\n this._resource = this._resource.merge(vmResource) as Resource;\n });\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/shared/config.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n Resource,\n ResourceDetectionConfig,\n detectResourcesSync,\n envDetectorSync,\n} from \"@opentelemetry/resources\";\nimport {\n BrowserSdkLoaderOptions,\n AzureMonitorOpenTelemetryOptions,\n InstrumentationOptions,\n} from \"../types\";\nimport { AzureMonitorExporterOptions } from \"@azure/monitor-opentelemetry-exporter\";\nimport { JsonConfig } from \"./jsonConfig\";\nimport { Logger } from \"./logging\";\nimport {\n azureAppServiceDetector,\n azureFunctionsDetector,\n azureVmDetector,\n} from \"@opentelemetry/resource-detector-azure\";\n\n/**\n * Azure Monitor OpenTelemetry Client Configuration\n */\nexport class InternalConfig implements AzureMonitorOpenTelemetryOptions {\n /** The rate of telemetry items tracked that should be transmitted (Default 1.0) */\n public samplingRatio: number;\n /** Azure Monitor Exporter Configuration */\n public azureMonitorExporterOptions: AzureMonitorExporterOptions;\n /**\n * OpenTelemetry Instrumentations configuration included as part of Azure Monitor (azureSdk, http, mongoDb, mySql, postgreSql, redis, redis4)\n */\n public instrumentationOptions: InstrumentationOptions;\n /** Enable Live Metrics feature */\n enableLiveMetrics?: boolean;\n /** Enable Standard Metrics feature */\n enableStandardMetrics?: boolean;\n /** Enable log sampling based on trace (Default true) */\n enableTraceBasedSamplingForLogs?: boolean;\n\n private _resource: Resource = Resource.empty();\n\n public set resource(resource: Resource) {\n this._resource = this._resource.merge(resource);\n }\n\n /**\n *Get OpenTelemetry Resource\n */\n public get resource(): Resource {\n return this._resource;\n }\n\n public browserSdkLoaderOptions: BrowserSdkLoaderOptions;\n\n /**\n * Initializes a new instance of the AzureMonitorOpenTelemetryOptions class.\n */\n constructor(options?: AzureMonitorOpenTelemetryOptions) {\n // Default values\n this.azureMonitorExporterOptions = {};\n this.samplingRatio = 1;\n this.enableLiveMetrics = true;\n this.enableStandardMetrics = true;\n this.enableTraceBasedSamplingForLogs = true;\n this.instrumentationOptions = {\n http: { enabled: true },\n azureSdk: { enabled: false },\n mongoDb: { enabled: false },\n mySql: { enabled: false },\n postgreSql: { enabled: false },\n redis: { enabled: false },\n redis4: { enabled: false },\n };\n this._setDefaultResource();\n this.browserSdkLoaderOptions = {\n enabled: false,\n connectionString: \"\",\n };\n\n if (options) {\n // Merge default with provided options\n this.azureMonitorExporterOptions = Object.assign(\n this.azureMonitorExporterOptions,\n options.azureMonitorExporterOptions,\n );\n this.instrumentationOptions = Object.assign(\n this.instrumentationOptions,\n options.instrumentationOptions,\n );\n this.resource = Object.assign(this.resource, options.resource);\n this.samplingRatio =\n options.samplingRatio !== undefined ? options.samplingRatio : this.samplingRatio;\n this.browserSdkLoaderOptions = Object.assign(\n this.browserSdkLoaderOptions,\n options.browserSdkLoaderOptions,\n );\n this.enableLiveMetrics =\n options.enableLiveMetrics != undefined ? options.enableLiveMetrics : this.enableLiveMetrics;\n this.enableStandardMetrics =\n options.enableStandardMetrics != undefined\n ? options.enableStandardMetrics\n : this.enableStandardMetrics;\n this.enableTraceBasedSamplingForLogs =\n options.enableTraceBasedSamplingForLogs != undefined\n ? options.enableTraceBasedSamplingForLogs\n : this.enableTraceBasedSamplingForLogs;\n }\n // JSON configuration will take precedence over other settings\n this._mergeConfig();\n }\n\n private _mergeConfig() {\n try {\n const jsonConfig = JsonConfig.getInstance();\n this.samplingRatio =\n jsonConfig.samplingRatio !== undefined ? jsonConfig.samplingRatio : this.samplingRatio;\n this.browserSdkLoaderOptions = Object.assign(\n this.browserSdkLoaderOptions,\n jsonConfig.browserSdkLoaderOptions,\n );\n this.enableLiveMetrics =\n jsonConfig.enableLiveMetrics !== undefined\n ? jsonConfig.enableLiveMetrics\n : this.enableLiveMetrics;\n this.enableStandardMetrics =\n jsonConfig.enableStandardMetrics !== undefined\n ? jsonConfig.enableStandardMetrics\n : this.enableStandardMetrics;\n this.enableTraceBasedSamplingForLogs =\n jsonConfig.enableTraceBasedSamplingForLogs !== undefined\n ? jsonConfig.enableTraceBasedSamplingForLogs\n : this.enableTraceBasedSamplingForLogs;\n this.azureMonitorExporterOptions = Object.assign(\n this.azureMonitorExporterOptions,\n jsonConfig.azureMonitorExporterOptions,\n );\n this.instrumentationOptions = Object.assign(\n this.instrumentationOptions,\n jsonConfig.instrumentationOptions,\n );\n } catch (error) {\n Logger.getInstance().error(\"Failed to load JSON config file values.\", error);\n }\n }\n\n private _setDefaultResource(): void {\n let resource = Resource.default();\n // Load resource attributes from env\n const detectResourceConfig: ResourceDetectionConfig = {\n detectors: [envDetectorSync],\n };\n const envResource = detectResourcesSync(detectResourceConfig);\n resource = resource.merge(envResource) as Resource;\n\n // Load resource attributes from Azure\n const azureResource: Resource = detectResourcesSync({\n detectors: [azureAppServiceDetector, azureFunctionsDetector],\n });\n this._resource = resource.merge(azureResource) as Resource;\n\n const vmResource = detectResourcesSync({\n detectors: [azureVmDetector],\n });\n if (vmResource.asyncAttributesPending) {\n vmResource.waitForAsyncAttributes?.().then(() => {\n this._resource = this._resource.merge(vmResource) as Resource;\n });\n }\n }\n}\n"]}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT license.
|
|
3
|
+
import { diag } from "@opentelemetry/api";
|
|
1
4
|
import { SamplingDecision } from "@opentelemetry/sdk-trace-base";
|
|
2
5
|
/**
|
|
3
6
|
* ApplicationInsightsSampler is responsible for the following:
|
|
@@ -12,8 +15,10 @@ export class ApplicationInsightsSampler {
|
|
|
12
15
|
*/
|
|
13
16
|
constructor(samplingRatio = 1) {
|
|
14
17
|
this._samplingRatio = samplingRatio;
|
|
15
|
-
if (this._samplingRatio > 1
|
|
16
|
-
|
|
18
|
+
if (this._samplingRatio > 1 ||
|
|
19
|
+
this._samplingRatio < 0 ||
|
|
20
|
+
!Number.isFinite(this._samplingRatio)) {
|
|
21
|
+
diag.warn("Invalid sampling rate, sampling rate must be a value in the range [0,1].");
|
|
17
22
|
}
|
|
18
23
|
this._sampleRate = Math.round(this._samplingRatio * 100);
|
|
19
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sampler.js","sourceRoot":"","sources":["../../../src/traces/sampler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sampler.js","sourceRoot":"","sources":["../../../src/traces/sampler.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,OAAO,EAAuC,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAW,gBAAgB,EAAkB,MAAM,+BAA+B,CAAC;AAE1F;;;;;GAKG;AACH,MAAM,OAAO,0BAA0B;IAIrC;;;OAGG;IACH,YAAY,gBAAwB,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IACE,IAAI,CAAC,cAAc,GAAG,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,CAAC;YACvB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EACrC,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,YAAY;IACjB,aAAa;IACb,OAAgB,EAChB,OAAe;IACf,aAAa;IACb,QAAgB;IAChB,aAAa;IACb,QAAkB,EAClB,UAAsB;IACtB,aAAa;IACb,KAAa;QAEb,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,IAAI,CAAC,WAAW,IAAI,GAAG,EAAE,CAAC;YAC5B,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;YACjC,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACtE,CAAC;QACD,oCAAoC;QACpC,UAAU,GAAG,UAAU,IAAI,EAAE,CAAC;QAC9B,UAAU,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QAChD,OAAO,WAAW;YAChB,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE;YAC3E,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;IACpE,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,OAAO,8BAA8B,IAAI,CAAC,cAAc,GAAG,CAAC;IAC9D,CAAC;IAEO,oBAAoB,CAAC,KAAa;QACxC,IAAI,SAAS,GAAG,CAAC,UAAU,CAAC;QAC5B,IAAI,SAAS,GAAG,UAAU,CAAC;QAC3B,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,uGAAuG;YACvG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,GAAG,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC;IAClC,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { Link, Attributes, SpanKind, Context, diag } from \"@opentelemetry/api\";\nimport { Sampler, SamplingDecision, SamplingResult } from \"@opentelemetry/sdk-trace-base\";\n\n/**\n * ApplicationInsightsSampler is responsible for the following:\n * Implements same trace id hashing algorithm so that traces are sampled the same across multiple nodes\n * Adds item count to span attribute if span is sampled (needed for ingestion service)\n * @param samplingRatio - 0 to 1 value.\n */\nexport class ApplicationInsightsSampler implements Sampler {\n private readonly _sampleRate: number;\n private readonly _samplingRatio: number;\n\n /**\n * Initializes a new instance of the ApplicationInsightsSampler class.\n * @param samplingRatio Value in the range [0,1], 1 meaning all data will sampled and 0 all Tracing data will be sampled out.\n */\n constructor(samplingRatio: number = 1) {\n this._samplingRatio = samplingRatio;\n if (\n this._samplingRatio > 1 ||\n this._samplingRatio < 0 ||\n !Number.isFinite(this._samplingRatio)\n ) {\n diag.warn(\"Invalid sampling rate, sampling rate must be a value in the range [0,1].\");\n }\n this._sampleRate = Math.round(this._samplingRatio * 100);\n }\n\n /**\n * Checks whether span needs to be created and tracked.\n *\n * @param context Parent Context which may contain a span.\n * @param traceId of the span to be created. It can be different from the\n * traceId in the {@link SpanContext}. Typically in situations when the\n * span to be created starts a new trace.\n * @param spanName of the span to be created.\n * @param spanKind of the span to be created.\n * @param attributes Initial set of SpanAttributes for the Span being constructed.\n * @param links Collection of links that will be associated with the Span to\n * be created. Typically useful for batch operations.\n * @returns a {@link SamplingResult}.\n */\n public shouldSample(\n // @ts-ignore\n context: Context,\n traceId: string,\n // @ts-ignore\n spanName: string,\n // @ts-ignore\n spanKind: SpanKind,\n attributes: Attributes,\n // @ts-ignore\n links: Link[],\n ): SamplingResult {\n let isSampledIn = false;\n if (this._sampleRate == 100) {\n isSampledIn = true;\n } else if (this._sampleRate == 0) {\n isSampledIn = false;\n } else {\n isSampledIn = this._getSamplingHashCode(traceId) < this._sampleRate;\n }\n // Add sample rate as span attribute\n attributes = attributes || {};\n attributes[\"_MS.sampleRate\"] = this._sampleRate;\n return isSampledIn\n ? { decision: SamplingDecision.RECORD_AND_SAMPLED, attributes: attributes }\n : { decision: SamplingDecision.RECORD, attributes: attributes };\n }\n\n /**\n * Return Sampler description\n */\n public toString(): string {\n return `ApplicationInsightsSampler{${this._samplingRatio}}`;\n }\n\n private _getSamplingHashCode(input: string): number {\n var csharpMin = -2147483648;\n var csharpMax = 2147483647;\n var hash = 5381;\n\n if (!input) {\n return 0;\n }\n\n while (input.length < 8) {\n input = input + input;\n }\n\n for (var i = 0; i < input.length; i++) {\n // JS doesn't respond to integer overflow by wrapping around. Simulate it with bitwise operators ( | 0)\n hash = ((((hash << 5) + hash) | 0) + input.charCodeAt(i)) | 0;\n }\n\n hash = hash <= csharpMin ? csharpMax : Math.abs(hash);\n return (hash / csharpMax) * 100;\n }\n}\n"]}
|
package/dist-esm/src/types.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
3
|
// Copyright (c) Microsoft Corporation.
|
|
4
4
|
// Licensed under the MIT license.
|
|
5
|
-
export const AZURE_MONITOR_OPENTELEMETRY_VERSION = "1.
|
|
5
|
+
export const AZURE_MONITOR_OPENTELEMETRY_VERSION = "1.6.0";
|
|
6
6
|
export const AZURE_MONITOR_STATSBEAT_FEATURES = "AZURE_MONITOR_STATSBEAT_FEATURES";
|
|
7
7
|
export const AZURE_MONITOR_PREFIX = "AZURE_MONITOR_PREFIX";
|
|
8
8
|
export const AZURE_MONITOR_AUTO_ATTACH = "AZURE_MONITOR_AUTO_ATTACH";
|
|
@@ -34,6 +34,7 @@ export var StatsbeatFeature;
|
|
|
34
34
|
StatsbeatFeature[StatsbeatFeature["BROWSER_SDK_LOADER"] = 4] = "BROWSER_SDK_LOADER";
|
|
35
35
|
StatsbeatFeature[StatsbeatFeature["DISTRO"] = 8] = "DISTRO";
|
|
36
36
|
StatsbeatFeature[StatsbeatFeature["LIVE_METRICS"] = 16] = "LIVE_METRICS";
|
|
37
|
+
StatsbeatFeature[StatsbeatFeature["SHIM"] = 32] = "SHIM";
|
|
37
38
|
})(StatsbeatFeature || (StatsbeatFeature = {}));
|
|
38
39
|
export var StatsbeatInstrumentation;
|
|
39
40
|
(function (StatsbeatInstrumentation) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,uCAAuC;AACvC,kCAAkC;AAwFlC,MAAM,CAAC,MAAM,mCAAmC,GAAG,OAAO,CAAC;AAC3D,MAAM,CAAC,MAAM,gCAAgC,GAAG,kCAAkC,CAAC;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAC3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AAErE,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,yCAAqB,CAAA;IACrB,gCAAY,CAAA;AACd,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,2CAA2C,CAAC;AAE7F;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,sCAAsC,CAAC;AAC9E;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,kDAAkD,CAAC;AAE/F,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,uCAAuC;AACvC,kCAAkC;AAwFlC,MAAM,CAAC,MAAM,mCAAmC,GAAG,OAAO,CAAC;AAC3D,MAAM,CAAC,MAAM,gCAAgC,GAAG,kCAAkC,CAAC;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAC3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AAErE,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,yCAAqB,CAAA;IACrB,gCAAY,CAAA;AACd,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,2CAA2C,CAAC;AAE7F;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,sCAAsC,CAAC;AAC9E;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,kDAAkD,CAAC;AAE/F,MAAM,CAAN,IAAY,gBAQX;AARD,WAAY,gBAAgB;IAC1B,uDAAQ,CAAA;IACR,mEAAc,CAAA;IACd,uEAAgB,CAAA;IAChB,mFAAsB,CAAA;IACtB,2DAAU,CAAA;IACV,wEAAiB,CAAA;IACjB,wDAAS,CAAA;AACX,CAAC,EARW,gBAAgB,KAAhB,gBAAgB,QAQ3B;AAED,MAAM,CAAN,IAAY,wBASX;AATD,WAAY,wBAAwB;IAClC,uEAAQ,CAAA;IACR,mGAAsB,CAAA;IACtB,6EAAW,CAAA;IACX,yEAAS,CAAA;IACT,yEAAS,CAAA;IACT,gFAAa,CAAA;IACb,4EAAW,CAAA;IACX,8EAAY,CAAA;AACd,CAAC,EATW,wBAAwB,KAAxB,wBAAwB,QASnC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AzureMonitorExporterOptions } from \"@azure/monitor-opentelemetry-exporter\";\nimport { InstrumentationConfig } from \"@opentelemetry/instrumentation\";\nimport { Resource } from \"@opentelemetry/resources\";\nimport { LogRecordProcessor } from \"@opentelemetry/sdk-logs\";\nimport { SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\n\n/**\n * Azure Monitor OpenTelemetry Options\n */\nexport interface AzureMonitorOpenTelemetryOptions {\n /** Azure Monitor Exporter Configuration */\n azureMonitorExporterOptions?: AzureMonitorExporterOptions;\n /** OpenTelemetry Resource */\n resource?: Resource;\n /** The rate of telemetry items tracked that should be transmitted (Default 1.0) */\n samplingRatio?: number;\n /** Enable Live Metrics feature (Default false)*/\n enableLiveMetrics?: boolean;\n /** Enable Standard Metrics feature (Default true)*/\n enableStandardMetrics?: boolean;\n /** Enable log sampling based on trace (Default true) */\n enableTraceBasedSamplingForLogs?: boolean;\n /** OpenTelemetry Instrumentations options included as part of Azure Monitor (azureSdk, http, mongoDb, mySql, postgreSql, redis, redis4) */\n instrumentationOptions?: InstrumentationOptions;\n /** Application Insights Web Instrumentation options (enabled, connectionString, src, config)*/\n browserSdkLoaderOptions?: BrowserSdkLoaderOptions;\n /** An array of log record processors to register to the logger provider.*/\n logRecordProcessors?: LogRecordProcessor[];\n /** An array of span processors to register to the tracer provider.*/\n spanProcessors?: SpanProcessor[];\n}\n\n/**\n * OpenTelemetry Instrumentations Configuration interface\n */\nexport interface InstrumentationOptions {\n /** Azure SDK Instrumentation Config */\n azureSdk?: InstrumentationConfig;\n /** HTTP Instrumentation Config */\n http?: InstrumentationConfig;\n /** MongoDB Instrumentation Config */\n mongoDb?: InstrumentationConfig;\n /** MySQL Instrumentation Config */\n mySql?: InstrumentationConfig;\n /** PostgreSql Instrumentation Config */\n postgreSql?: InstrumentationConfig;\n /** Redis Instrumentation Config */\n redis?: InstrumentationConfig;\n /** Redis4 Instrumentation Config */\n redis4?: InstrumentationConfig;\n /** Bunyan Instrumentation Config */\n bunyan?: InstrumentationConfig;\n /** Winston Instrumentation Config */\n winston?: InstrumentationConfig;\n}\n\n/**\n * Statsbeat Feature and Instrumentation Options interface\n * @internal\n */\nexport interface StatsbeatOptions {\n /** Instrumentations */\n azureSdk?: boolean;\n mongoDb?: boolean;\n mySql?: boolean;\n postgreSql?: boolean;\n redis?: boolean;\n bunyan?: boolean;\n winston?: boolean;\n /** Features */\n liveMetrics?: boolean;\n browserSdkLoader?: boolean;\n aadHandling?: boolean;\n diskRetry?: boolean;\n}\n\n/**\n * Application Insights Web Instrumentation Configuration interface\n */\nexport interface BrowserSdkLoaderOptions {\n /** Browser SDK Loader Enable */\n enabled?: boolean;\n /** Browser SDK Loader Connection String */\n connectionString?: string;\n}\n\nexport const AZURE_MONITOR_OPENTELEMETRY_VERSION = \"1.6.0\";\nexport const AZURE_MONITOR_STATSBEAT_FEATURES = \"AZURE_MONITOR_STATSBEAT_FEATURES\";\nexport const AZURE_MONITOR_PREFIX = \"AZURE_MONITOR_PREFIX\";\nexport const AZURE_MONITOR_AUTO_ATTACH = \"AZURE_MONITOR_AUTO_ATTACH\";\n\nexport enum AttachTypePrefix {\n INTEGRATED_AUTO = \"i\",\n MANUAL = \"m\",\n}\n\n/**\n * Default Browser SDK Loader Source\n * @internal\n */\nexport const BROWSER_SDK_LOADER_DEFAULT_SOURCE = \"https://js.monitor.azure.com/scripts/b/ai\";\n\n/**\n * Default Breeze endpoint.\n * @internal\n */\nexport const DEFAULT_BREEZE_ENDPOINT = \"https://dc.services.visualstudio.com\";\n/**\n * Default Live Metrics endpoint.\n * @internal\n */\nexport const DEFAULT_LIVEMETRICS_ENDPOINT = \"https://global.livediagnostics.monitor.azure.com\";\n\nexport enum StatsbeatFeature {\n NONE = 0,\n DISK_RETRY = 1,\n AAD_HANDLING = 2,\n BROWSER_SDK_LOADER = 4,\n DISTRO = 8,\n LIVE_METRICS = 16,\n SHIM = 32,\n}\n\nexport enum StatsbeatInstrumentation {\n NONE = 0,\n AZURE_CORE_TRACING = 1,\n MONGODB = 2,\n MYSQL = 4,\n REDIS = 8,\n POSTGRES = 16,\n BUNYAN = 32,\n WINSTON = 64,\n}\n"]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { envDetectorSync, hostDetectorSync, osDetectorSync, processDetectorSync, serviceInstanceIdDetectorSync, } from "@opentelemetry/resources";
|
|
2
|
+
import { diag } from "@opentelemetry/api";
|
|
1
3
|
export function ignoreOutgoingRequestHook(request) {
|
|
2
4
|
if (request && request.headers) {
|
|
3
5
|
if ((request.headers["User-Agent"] &&
|
|
@@ -84,4 +86,44 @@ export function msToTimeSpan(ms) {
|
|
|
84
86
|
const daysText = days > 0 ? `${days}.` : "";
|
|
85
87
|
return `${daysText + hour}:${min}:${sec}`;
|
|
86
88
|
}
|
|
89
|
+
// This function is a slight modification of an upstream otel util function -
|
|
90
|
+
// mainly for prioritizing the resource detectors customer may specify over
|
|
91
|
+
// env var & not enabling process detector by default.
|
|
92
|
+
export function parseResourceDetectorsFromEnvVar() {
|
|
93
|
+
var _a, _b;
|
|
94
|
+
const resourceDetectors = new Map([
|
|
95
|
+
["env", envDetectorSync],
|
|
96
|
+
["host", hostDetectorSync],
|
|
97
|
+
["os", osDetectorSync],
|
|
98
|
+
["process", processDetectorSync],
|
|
99
|
+
["serviceinstance", serviceInstanceIdDetectorSync],
|
|
100
|
+
]);
|
|
101
|
+
if (process.env.OTEL_NODE_RESOURCE_DETECTORS != null) {
|
|
102
|
+
const resourceDetectorsFromEnv = (_b = (_a = process.env.OTEL_NODE_RESOURCE_DETECTORS) === null || _a === void 0 ? void 0 : _a.split(",")) !== null && _b !== void 0 ? _b : [
|
|
103
|
+
"env",
|
|
104
|
+
"host",
|
|
105
|
+
"os",
|
|
106
|
+
];
|
|
107
|
+
if (resourceDetectorsFromEnv.includes("all")) {
|
|
108
|
+
return [...resourceDetectors.values()];
|
|
109
|
+
}
|
|
110
|
+
if (resourceDetectorsFromEnv.includes("none")) {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
return resourceDetectorsFromEnv.flatMap((detector) => {
|
|
114
|
+
const resourceDetector = resourceDetectors.get(detector);
|
|
115
|
+
if (!resourceDetector) {
|
|
116
|
+
diag.error(`Invalid resource detector "${detector}" specified in the environment variable OTEL_NODE_RESOURCE_DETECTORS`);
|
|
117
|
+
return [];
|
|
118
|
+
}
|
|
119
|
+
return [resourceDetector];
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
// leaving out the process detector as that can add many resource attributes
|
|
124
|
+
// with large values. Also not enabling service instance attributes by default
|
|
125
|
+
// as this is still experimental.
|
|
126
|
+
return [envDetectorSync, hostDetectorSync, osDetectorSync];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
87
129
|
//# sourceMappingURL=common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport * as http from \"http\";\nimport {\n DetectorSync,\n envDetectorSync,\n hostDetectorSync,\n osDetectorSync,\n processDetectorSync,\n serviceInstanceIdDetectorSync,\n} from \"@opentelemetry/resources\";\nimport { diag } from \"@opentelemetry/api\";\n\nexport function ignoreOutgoingRequestHook(request: http.RequestOptions): boolean {\n if (request && request.headers) {\n if (\n (request.headers[\"User-Agent\"] &&\n request.headers[\"User-Agent\"]\n .toString()\n .indexOf(\"azsdk-js-monitor-opentelemetry-exporter\") > -1) ||\n (request.headers[\"user-agent\"] &&\n request.headers[\"user-agent\"]\n .toString()\n .indexOf(\"azsdk-js-monitor-opentelemetry-exporter\") > -1)\n ) {\n return true;\n }\n }\n return false;\n}\n\nexport const isWindows = (): boolean => {\n return process.platform === \"win32\";\n};\n\nexport const isLinux = (): boolean => {\n return process.platform === \"linux\";\n};\n\nexport const isDarwin = (): boolean => {\n return process.platform === \"darwin\";\n};\n\n/**\n * Get prefix for OS\n * Windows system: \"w\"\n * Linux system: \"l\"\n * non-Windows and non-Linux system: \"u\" (unknown)\n */\nexport const getOsPrefix = (): string => {\n return isWindows() ? \"w\" : isLinux() ? \"l\" : \"u\";\n};\n\n/**\n * Get prefix resource provider, vm will considered as \"unknown RP\"\n * Web App: \"a\"\n * Function App: \"f\"\n * non-Web and non-Function APP: \"u\" (unknown)\n */\nexport const isAppService = (): boolean => {\n return process.env.WEBSITE_SITE_NAME && !process.env.FUNCTIONS_WORKER_RUNTIME ? true : false;\n};\n\nexport const isFunctionApp = (): boolean => {\n return process.env.FUNCTIONS_WORKER_RUNTIME ? true : false;\n};\n\nexport const isAks = (): boolean => {\n return process.env.AKS_ARM_NAMESPACE_ID ? true : false;\n};\n\n/**\n * Get prefix resource provider, vm will considered as \"unknown RP\"\n * Web App: \"a\"\n * Function App: \"f\"\n * AKS: \"k\"\n * non-Web and non-Function APP: \"u\" (unknown)\n */\nexport const getResourceProvider = (): string => {\n if (isAppService()) {\n return \"a\";\n }\n if (isFunctionApp()) {\n return \"f\";\n }\n if (isAks()) {\n return \"k\";\n }\n return \"u\";\n};\n\n/**\n * Convert milliseconds to Breeze expected time.\n * @internal\n */\nexport function msToTimeSpan(ms: number): string {\n let totalms = ms;\n if (Number.isNaN(totalms) || totalms < 0 || !Number.isFinite(ms)) {\n totalms = 0;\n }\n\n let sec = ((totalms / 1000) % 60).toFixed(7).replace(/0{0,4}$/, \"\");\n let min = `${Math.floor(totalms / (1000 * 60)) % 60}`;\n let hour = `${Math.floor(totalms / (1000 * 60 * 60)) % 24}`;\n const days = Math.floor(totalms / (1000 * 60 * 60 * 24));\n\n sec = sec.indexOf(\".\") < 2 ? `0${sec}` : sec;\n min = min.length < 2 ? `0${min}` : min;\n hour = hour.length < 2 ? `0${hour}` : hour;\n const daysText = days > 0 ? `${days}.` : \"\";\n\n return `${daysText + hour}:${min}:${sec}`;\n}\n\n// This function is a slight modification of an upstream otel util function -\n// mainly for prioritizing the resource detectors customer may specify over\n// env var & not enabling process detector by default.\nexport function parseResourceDetectorsFromEnvVar(): Array<DetectorSync> {\n const resourceDetectors = new Map<string, DetectorSync>([\n [\"env\", envDetectorSync],\n [\"host\", hostDetectorSync],\n [\"os\", osDetectorSync],\n [\"process\", processDetectorSync],\n [\"serviceinstance\", serviceInstanceIdDetectorSync],\n ]);\n\n if (process.env.OTEL_NODE_RESOURCE_DETECTORS != null) {\n const resourceDetectorsFromEnv = process.env.OTEL_NODE_RESOURCE_DETECTORS?.split(\",\") ?? [\n \"env\",\n \"host\",\n \"os\",\n ];\n\n if (resourceDetectorsFromEnv.includes(\"all\")) {\n return [...resourceDetectors.values()];\n }\n\n if (resourceDetectorsFromEnv.includes(\"none\")) {\n return [];\n }\n\n return resourceDetectorsFromEnv.flatMap((detector) => {\n const resourceDetector = resourceDetectors.get(detector);\n if (!resourceDetector) {\n diag.error(\n `Invalid resource detector \"${detector}\" specified in the environment variable OTEL_NODE_RESOURCE_DETECTORS`,\n );\n return [];\n }\n return [resourceDetector];\n });\n } else {\n // leaving out the process detector as that can add many resource attributes\n // with large values. Also not enabling service instance attributes by default\n // as this is still experimental.\n return [envDetectorSync, hostDetectorSync, osDetectorSync];\n }\n}\n"]}
|
|
@@ -7,6 +7,7 @@ class StatsbeatConfiguration {
|
|
|
7
7
|
constructor() {
|
|
8
8
|
// Initial Statsbeat options
|
|
9
9
|
this.currentStatsbeatOptions = {};
|
|
10
|
+
this.initializedByShim = false;
|
|
10
11
|
this.setStatsbeatFeatures = (statsbeatOptions) => {
|
|
11
12
|
// Merge old statsbeat options with new statsbeat options overriding any common properties
|
|
12
13
|
this.currentStatsbeatOptions = Object.assign(Object.assign({}, this.currentStatsbeatOptions), statsbeatOptions);
|
|
@@ -41,6 +42,9 @@ class StatsbeatConfiguration {
|
|
|
41
42
|
if (statsbeatOptions.liveMetrics === true) {
|
|
42
43
|
featureBitMap |= StatsbeatFeature.LIVE_METRICS;
|
|
43
44
|
}
|
|
45
|
+
if (this.initializedByShim) {
|
|
46
|
+
featureBitMap |= StatsbeatFeature.SHIM;
|
|
47
|
+
}
|
|
44
48
|
try {
|
|
45
49
|
const currentFeaturesBitMap = Number(process.env[AZURE_MONITOR_STATSBEAT_FEATURES]);
|
|
46
50
|
if (!isNaN(currentFeaturesBitMap)) {
|
|
@@ -55,6 +59,16 @@ class StatsbeatConfiguration {
|
|
|
55
59
|
InternalLogger.getInstance().error("Failed call to JSON.stringify.", error);
|
|
56
60
|
}
|
|
57
61
|
};
|
|
62
|
+
// Check for shim initialization upon construction
|
|
63
|
+
try {
|
|
64
|
+
if (JSON.parse(process.env[AZURE_MONITOR_STATSBEAT_FEATURES] || "{}").feature &
|
|
65
|
+
StatsbeatFeature.SHIM) {
|
|
66
|
+
this.initializedByShim = true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
InternalLogger.getInstance().error("Failed to parse statsbeat config environment variable.", error);
|
|
71
|
+
}
|
|
58
72
|
}
|
|
59
73
|
}
|
|
60
74
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statsbeat.js","sourceRoot":"","sources":["../../../src/utils/statsbeat.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EACL,gCAAgC,EAChC,gBAAgB,EAChB,wBAAwB,GAEzB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE7D,IAAI,QAAgC,CAAC;AAErC,MAAM,sBAAsB;
|
|
1
|
+
{"version":3,"file":"statsbeat.js","sourceRoot":"","sources":["../../../src/utils/statsbeat.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n AZURE_MONITOR_STATSBEAT_FEATURES,\n StatsbeatFeature,\n StatsbeatInstrumentation,\n StatsbeatOptions,\n} from \"../types\";\nimport { Logger as InternalLogger } from \"../shared/logging\";\n\nlet instance: StatsbeatConfiguration;\n\nclass StatsbeatConfiguration {\n // Initial Statsbeat options\n private currentStatsbeatOptions: StatsbeatOptions = {};\n private initializedByShim = false;\n\n constructor() {\n // Check for shim initialization upon construction\n try {\n if (\n JSON.parse(process.env[AZURE_MONITOR_STATSBEAT_FEATURES] || \"{}\").feature &\n StatsbeatFeature.SHIM\n ) {\n this.initializedByShim = true;\n }\n } catch (error) {\n InternalLogger.getInstance().error(\n \"Failed to parse statsbeat config environment variable.\",\n error,\n );\n }\n }\n\n public setStatsbeatFeatures = (statsbeatOptions: StatsbeatOptions) => {\n // Merge old statsbeat options with new statsbeat options overriding any common properties\n this.currentStatsbeatOptions = { ...this.currentStatsbeatOptions, ...statsbeatOptions };\n\n let instrumentationBitMap = StatsbeatInstrumentation.NONE;\n if (statsbeatOptions.azureSdk === true) {\n instrumentationBitMap |= StatsbeatInstrumentation.AZURE_CORE_TRACING;\n }\n if (statsbeatOptions.mongoDb === true) {\n instrumentationBitMap |= StatsbeatInstrumentation.MONGODB;\n }\n if (statsbeatOptions.mySql === true) {\n instrumentationBitMap |= StatsbeatInstrumentation.MYSQL;\n }\n if (statsbeatOptions.postgreSql === true) {\n instrumentationBitMap |= StatsbeatInstrumentation.POSTGRES;\n }\n if (statsbeatOptions.redis === true) {\n instrumentationBitMap |= StatsbeatInstrumentation.REDIS;\n }\n if (statsbeatOptions.bunyan === true) {\n instrumentationBitMap |= StatsbeatInstrumentation.BUNYAN;\n }\n if (statsbeatOptions.winston === true) {\n instrumentationBitMap |= StatsbeatInstrumentation.WINSTON;\n }\n\n let featureBitMap = StatsbeatFeature.NONE;\n featureBitMap |= StatsbeatFeature.DISTRO;\n\n if (statsbeatOptions.browserSdkLoader === true) {\n featureBitMap |= StatsbeatFeature.BROWSER_SDK_LOADER;\n }\n // Determines if the customer has activated the Live Metrics feature\n if (statsbeatOptions.liveMetrics === true) {\n featureBitMap |= StatsbeatFeature.LIVE_METRICS;\n }\n\n if (this.initializedByShim) {\n featureBitMap |= StatsbeatFeature.SHIM;\n }\n\n try {\n const currentFeaturesBitMap = Number(process.env[AZURE_MONITOR_STATSBEAT_FEATURES]);\n if (!isNaN(currentFeaturesBitMap)) {\n featureBitMap |= currentFeaturesBitMap;\n }\n process.env[AZURE_MONITOR_STATSBEAT_FEATURES] = JSON.stringify({\n instrumentation: instrumentationBitMap,\n feature: featureBitMap,\n });\n } catch (error) {\n InternalLogger.getInstance().error(\"Failed call to JSON.stringify.\", error);\n }\n };\n}\n\n/**\n * Singleton Statsbeat instance.\n * @internal\n */\nexport function getInstance(): StatsbeatConfiguration {\n if (!instance) {\n instance = new StatsbeatConfiguration();\n }\n return instance;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@azure/monitor-opentelemetry",
|
|
3
3
|
"author": "Microsoft Corporation",
|
|
4
4
|
"sdk-type": "client",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.6.0",
|
|
6
6
|
"description": "Azure Monitor OpenTelemetry (Node.js)",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"module": "dist-esm/src/index.js",
|
|
@@ -87,30 +87,30 @@
|
|
|
87
87
|
"@azure/core-rest-pipeline": "^1.1.0",
|
|
88
88
|
"@azure/functions": "^3.2.0",
|
|
89
89
|
"@azure/logger": "^1.0.0",
|
|
90
|
-
"@azure/monitor-opentelemetry-exporter": "1.0.0-beta.
|
|
90
|
+
"@azure/monitor-opentelemetry-exporter": "1.0.0-beta.24",
|
|
91
91
|
"@azure/opentelemetry-instrumentation-azure-sdk": "^1.0.0-beta.5",
|
|
92
92
|
"@microsoft/applicationinsights-web-snippet": "^1.1.2",
|
|
93
|
-
"@opentelemetry/api": "^1.
|
|
94
|
-
"@opentelemetry/api-logs": "^0.
|
|
95
|
-
"@opentelemetry/core": "^1.
|
|
96
|
-
"@opentelemetry/instrumentation": "^0.
|
|
97
|
-
"@opentelemetry/instrumentation-bunyan": "^0.
|
|
98
|
-
"@opentelemetry/instrumentation-http": "^0.
|
|
99
|
-
"@opentelemetry/instrumentation-mongodb": "^0.
|
|
100
|
-
"@opentelemetry/instrumentation-mysql": "^0.
|
|
101
|
-
"@opentelemetry/instrumentation-pg": "^0.
|
|
102
|
-
"@opentelemetry/instrumentation-redis": "^0.
|
|
103
|
-
"@opentelemetry/instrumentation-redis-4": "^0.
|
|
104
|
-
"@opentelemetry/instrumentation-winston": "^0.
|
|
105
|
-
"@opentelemetry/resource-detector-azure": "^0.2.
|
|
106
|
-
"@opentelemetry/resources": "^1.
|
|
107
|
-
"@opentelemetry/sdk-logs": "^0.
|
|
108
|
-
"@opentelemetry/sdk-metrics": "^1.
|
|
109
|
-
"@opentelemetry/sdk-node": "^0.
|
|
110
|
-
"@opentelemetry/sdk-trace-base": "^1.
|
|
111
|
-
"@opentelemetry/sdk-trace-node": "^1.
|
|
112
|
-
"@opentelemetry/semantic-conventions": "^1.
|
|
113
|
-
"@opentelemetry/winston-transport": "^0.
|
|
93
|
+
"@opentelemetry/api": "^1.9.0",
|
|
94
|
+
"@opentelemetry/api-logs": "^0.52.0",
|
|
95
|
+
"@opentelemetry/core": "^1.25.0",
|
|
96
|
+
"@opentelemetry/instrumentation": "^0.52.0",
|
|
97
|
+
"@opentelemetry/instrumentation-bunyan": "^0.39.0",
|
|
98
|
+
"@opentelemetry/instrumentation-http": "^0.52.0",
|
|
99
|
+
"@opentelemetry/instrumentation-mongodb": "^0.45.0",
|
|
100
|
+
"@opentelemetry/instrumentation-mysql": "^0.39.0",
|
|
101
|
+
"@opentelemetry/instrumentation-pg": "^0.42.0",
|
|
102
|
+
"@opentelemetry/instrumentation-redis": "^0.40.0",
|
|
103
|
+
"@opentelemetry/instrumentation-redis-4": "^0.40.0",
|
|
104
|
+
"@opentelemetry/instrumentation-winston": "^0.38.0",
|
|
105
|
+
"@opentelemetry/resource-detector-azure": "^0.2.9",
|
|
106
|
+
"@opentelemetry/resources": "^1.25.0",
|
|
107
|
+
"@opentelemetry/sdk-logs": "^0.52.0",
|
|
108
|
+
"@opentelemetry/sdk-metrics": "^1.25.0",
|
|
109
|
+
"@opentelemetry/sdk-node": "^0.52.0",
|
|
110
|
+
"@opentelemetry/sdk-trace-base": "^1.25.0",
|
|
111
|
+
"@opentelemetry/sdk-trace-node": "^1.25.0",
|
|
112
|
+
"@opentelemetry/semantic-conventions": "^1.25.0",
|
|
113
|
+
"@opentelemetry/winston-transport": "^0.4.0",
|
|
114
114
|
"tslib": "^2.6.2"
|
|
115
115
|
},
|
|
116
116
|
"sideEffects": false,
|