@azure/monitor-opentelemetry-exporter 1.0.0-beta.32 → 1.0.0-beta.34

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.
Files changed (193) hide show
  1. package/LICENSE +21 -0
  2. package/dist/commonjs/Declarations/Constants.d.ts +10 -0
  3. package/dist/commonjs/Declarations/Constants.d.ts.map +1 -1
  4. package/dist/commonjs/Declarations/Constants.js +11 -1
  5. package/dist/commonjs/Declarations/Constants.js.map +1 -1
  6. package/dist/commonjs/export/base.js +25 -14
  7. package/dist/commonjs/export/base.js.map +1 -1
  8. package/dist/commonjs/export/log.js +5 -4
  9. package/dist/commonjs/export/log.js.map +1 -1
  10. package/dist/commonjs/export/metric.js +5 -4
  11. package/dist/commonjs/export/metric.js.map +1 -1
  12. package/dist/commonjs/export/statsbeat/customerSDKStats.d.ts +133 -0
  13. package/dist/commonjs/export/statsbeat/customerSDKStats.d.ts.map +1 -0
  14. package/dist/commonjs/export/statsbeat/customerSDKStats.js +528 -0
  15. package/dist/commonjs/export/statsbeat/customerSDKStats.js.map +1 -0
  16. package/dist/commonjs/export/statsbeat/longIntervalStatsbeatMetrics.js +35 -11
  17. package/dist/commonjs/export/statsbeat/longIntervalStatsbeatMetrics.js.map +1 -1
  18. package/dist/commonjs/export/statsbeat/networkStatsbeatMetrics.js +52 -21
  19. package/dist/commonjs/export/statsbeat/networkStatsbeatMetrics.js.map +1 -1
  20. package/dist/commonjs/export/statsbeat/statsbeatExporter.d.ts +7 -0
  21. package/dist/commonjs/export/statsbeat/statsbeatExporter.d.ts.map +1 -1
  22. package/dist/commonjs/export/statsbeat/statsbeatExporter.js +25 -5
  23. package/dist/commonjs/export/statsbeat/statsbeatExporter.js.map +1 -1
  24. package/dist/commonjs/export/statsbeat/statsbeatMetrics.js +6 -8
  25. package/dist/commonjs/export/statsbeat/statsbeatMetrics.js.map +1 -1
  26. package/dist/commonjs/export/statsbeat/types.d.ts +77 -0
  27. package/dist/commonjs/export/statsbeat/types.d.ts.map +1 -1
  28. package/dist/commonjs/export/statsbeat/types.js +105 -1
  29. package/dist/commonjs/export/statsbeat/types.js.map +1 -1
  30. package/dist/commonjs/export/trace.js +6 -5
  31. package/dist/commonjs/export/trace.js.map +1 -1
  32. package/dist/commonjs/generated/applicationInsightsClient.js +9 -4
  33. package/dist/commonjs/generated/applicationInsightsClient.js.map +1 -1
  34. package/dist/commonjs/generated/models/mappers.js +145 -68
  35. package/dist/commonjs/generated/models/mappers.js.map +1 -1
  36. package/dist/commonjs/index.d.ts +2 -1
  37. package/dist/commonjs/index.d.ts.map +1 -1
  38. package/dist/commonjs/index.js +5 -3
  39. package/dist/commonjs/index.js.map +1 -1
  40. package/dist/commonjs/platform/nodejs/baseSender.d.ts +1 -0
  41. package/dist/commonjs/platform/nodejs/baseSender.d.ts.map +1 -1
  42. package/dist/commonjs/platform/nodejs/baseSender.js +92 -31
  43. package/dist/commonjs/platform/nodejs/baseSender.js.map +1 -1
  44. package/dist/commonjs/platform/nodejs/context/context.d.ts +0 -1
  45. package/dist/commonjs/platform/nodejs/context/context.d.ts.map +1 -1
  46. package/dist/commonjs/platform/nodejs/context/context.js +4 -8
  47. package/dist/commonjs/platform/nodejs/context/context.js.map +1 -1
  48. package/dist/commonjs/platform/nodejs/httpSender.js +11 -4
  49. package/dist/commonjs/platform/nodejs/httpSender.js.map +1 -1
  50. package/dist/commonjs/platform/nodejs/index.d.ts +1 -0
  51. package/dist/commonjs/platform/nodejs/index.d.ts.map +1 -1
  52. package/dist/commonjs/platform/nodejs/index.js +1 -0
  53. package/dist/commonjs/platform/nodejs/index.js.map +1 -1
  54. package/dist/commonjs/platform/nodejs/persist/fileAccessControl.js +7 -7
  55. package/dist/commonjs/platform/nodejs/persist/fileAccessControl.js.map +1 -1
  56. package/dist/commonjs/platform/nodejs/persist/fileSystemPersist.d.ts +9 -1
  57. package/dist/commonjs/platform/nodejs/persist/fileSystemPersist.d.ts.map +1 -1
  58. package/dist/commonjs/platform/nodejs/persist/fileSystemPersist.js +37 -16
  59. package/dist/commonjs/platform/nodejs/persist/fileSystemPersist.js.map +1 -1
  60. package/dist/commonjs/{sampling.d.ts → sampling/percentageSampler.d.ts} +2 -3
  61. package/dist/commonjs/sampling/percentageSampler.d.ts.map +1 -0
  62. package/dist/commonjs/{sampling.js → sampling/percentageSampler.js} +6 -39
  63. package/dist/commonjs/sampling/percentageSampler.js.map +1 -0
  64. package/dist/commonjs/sampling/rateLimitedSampler.d.ts +58 -0
  65. package/dist/commonjs/sampling/rateLimitedSampler.d.ts.map +1 -0
  66. package/dist/commonjs/sampling/rateLimitedSampler.js +118 -0
  67. package/dist/commonjs/sampling/rateLimitedSampler.js.map +1 -0
  68. package/dist/commonjs/sampling/samplingUtils.d.ts +17 -0
  69. package/dist/commonjs/sampling/samplingUtils.d.ts.map +1 -0
  70. package/dist/commonjs/sampling/samplingUtils.js +94 -0
  71. package/dist/commonjs/sampling/samplingUtils.js.map +1 -0
  72. package/dist/commonjs/tsdoc-metadata.json +11 -11
  73. package/dist/commonjs/types.d.ts +3 -1
  74. package/dist/commonjs/types.d.ts.map +1 -1
  75. package/dist/commonjs/types.js +4 -0
  76. package/dist/commonjs/types.js.map +1 -1
  77. package/dist/commonjs/utils/common.js +2 -3
  78. package/dist/commonjs/utils/common.js.map +1 -1
  79. package/dist/commonjs/utils/connectionStringParser.js +3 -3
  80. package/dist/commonjs/utils/connectionStringParser.js.map +1 -1
  81. package/dist/commonjs/utils/constants/applicationinsights.d.ts +2 -1
  82. package/dist/commonjs/utils/constants/applicationinsights.d.ts.map +1 -1
  83. package/dist/commonjs/utils/constants/applicationinsights.js +3 -2
  84. package/dist/commonjs/utils/constants/applicationinsights.js.map +1 -1
  85. package/dist/commonjs/utils/eventhub.js +5 -2
  86. package/dist/commonjs/utils/eventhub.js.map +1 -1
  87. package/dist/commonjs/utils/logUtils.d.ts.map +1 -1
  88. package/dist/commonjs/utils/logUtils.js +34 -15
  89. package/dist/commonjs/utils/logUtils.js.map +1 -1
  90. package/dist/commonjs/utils/metricUtils.d.ts.map +1 -1
  91. package/dist/commonjs/utils/metricUtils.js +6 -6
  92. package/dist/commonjs/utils/metricUtils.js.map +1 -1
  93. package/dist/commonjs/utils/spanUtils.d.ts.map +1 -1
  94. package/dist/commonjs/utils/spanUtils.js +29 -14
  95. package/dist/commonjs/utils/spanUtils.js.map +1 -1
  96. package/dist/esm/Declarations/Constants.d.ts +10 -0
  97. package/dist/esm/Declarations/Constants.d.ts.map +1 -1
  98. package/dist/esm/Declarations/Constants.js +10 -0
  99. package/dist/esm/Declarations/Constants.js.map +1 -1
  100. package/dist/esm/export/base.js +25 -14
  101. package/dist/esm/export/base.js.map +1 -1
  102. package/dist/esm/export/log.js +5 -4
  103. package/dist/esm/export/log.js.map +1 -1
  104. package/dist/esm/export/metric.js +5 -4
  105. package/dist/esm/export/metric.js.map +1 -1
  106. package/dist/esm/export/statsbeat/customerSDKStats.d.ts +133 -0
  107. package/dist/esm/export/statsbeat/customerSDKStats.d.ts.map +1 -0
  108. package/dist/esm/export/statsbeat/customerSDKStats.js +523 -0
  109. package/dist/esm/export/statsbeat/customerSDKStats.js.map +1 -0
  110. package/dist/esm/export/statsbeat/longIntervalStatsbeatMetrics.js +35 -11
  111. package/dist/esm/export/statsbeat/longIntervalStatsbeatMetrics.js.map +1 -1
  112. package/dist/esm/export/statsbeat/networkStatsbeatMetrics.js +52 -21
  113. package/dist/esm/export/statsbeat/networkStatsbeatMetrics.js.map +1 -1
  114. package/dist/esm/export/statsbeat/statsbeatExporter.d.ts +7 -0
  115. package/dist/esm/export/statsbeat/statsbeatExporter.d.ts.map +1 -1
  116. package/dist/esm/export/statsbeat/statsbeatExporter.js +25 -5
  117. package/dist/esm/export/statsbeat/statsbeatExporter.js.map +1 -1
  118. package/dist/esm/export/statsbeat/statsbeatMetrics.js +6 -8
  119. package/dist/esm/export/statsbeat/statsbeatMetrics.js.map +1 -1
  120. package/dist/esm/export/statsbeat/types.d.ts +77 -0
  121. package/dist/esm/export/statsbeat/types.d.ts.map +1 -1
  122. package/dist/esm/export/statsbeat/types.js +103 -0
  123. package/dist/esm/export/statsbeat/types.js.map +1 -1
  124. package/dist/esm/export/trace.js +6 -5
  125. package/dist/esm/export/trace.js.map +1 -1
  126. package/dist/esm/generated/applicationInsightsClient.js +9 -4
  127. package/dist/esm/generated/applicationInsightsClient.js.map +1 -1
  128. package/dist/esm/generated/models/mappers.js +145 -68
  129. package/dist/esm/generated/models/mappers.js.map +1 -1
  130. package/dist/esm/index.d.ts +2 -1
  131. package/dist/esm/index.d.ts.map +1 -1
  132. package/dist/esm/index.js +2 -1
  133. package/dist/esm/index.js.map +1 -1
  134. package/dist/esm/platform/nodejs/baseSender.d.ts +1 -0
  135. package/dist/esm/platform/nodejs/baseSender.d.ts.map +1 -1
  136. package/dist/esm/platform/nodejs/baseSender.js +91 -30
  137. package/dist/esm/platform/nodejs/baseSender.js.map +1 -1
  138. package/dist/esm/platform/nodejs/context/context.d.ts +0 -1
  139. package/dist/esm/platform/nodejs/context/context.d.ts.map +1 -1
  140. package/dist/esm/platform/nodejs/context/context.js +4 -8
  141. package/dist/esm/platform/nodejs/context/context.js.map +1 -1
  142. package/dist/esm/platform/nodejs/httpSender.js +11 -4
  143. package/dist/esm/platform/nodejs/httpSender.js.map +1 -1
  144. package/dist/esm/platform/nodejs/index.d.ts +1 -0
  145. package/dist/esm/platform/nodejs/index.d.ts.map +1 -1
  146. package/dist/esm/platform/nodejs/index.js +1 -0
  147. package/dist/esm/platform/nodejs/index.js.map +1 -1
  148. package/dist/esm/platform/nodejs/persist/fileAccessControl.js +7 -7
  149. package/dist/esm/platform/nodejs/persist/fileAccessControl.js.map +1 -1
  150. package/dist/esm/platform/nodejs/persist/fileSystemPersist.d.ts +9 -1
  151. package/dist/esm/platform/nodejs/persist/fileSystemPersist.d.ts.map +1 -1
  152. package/dist/esm/platform/nodejs/persist/fileSystemPersist.js +37 -16
  153. package/dist/esm/platform/nodejs/persist/fileSystemPersist.js.map +1 -1
  154. package/dist/esm/{sampling.d.ts → sampling/percentageSampler.d.ts} +2 -3
  155. package/dist/esm/sampling/percentageSampler.d.ts.map +1 -0
  156. package/dist/esm/{sampling.js → sampling/percentageSampler.js} +6 -39
  157. package/dist/esm/sampling/percentageSampler.js.map +1 -0
  158. package/dist/esm/sampling/rateLimitedSampler.d.ts +58 -0
  159. package/dist/esm/sampling/rateLimitedSampler.d.ts.map +1 -0
  160. package/dist/esm/sampling/rateLimitedSampler.js +114 -0
  161. package/dist/esm/sampling/rateLimitedSampler.js.map +1 -0
  162. package/dist/esm/sampling/samplingUtils.d.ts +17 -0
  163. package/dist/esm/sampling/samplingUtils.d.ts.map +1 -0
  164. package/dist/esm/sampling/samplingUtils.js +89 -0
  165. package/dist/esm/sampling/samplingUtils.js.map +1 -0
  166. package/dist/esm/types.d.ts +3 -1
  167. package/dist/esm/types.d.ts.map +1 -1
  168. package/dist/esm/types.js +4 -0
  169. package/dist/esm/types.js.map +1 -1
  170. package/dist/esm/utils/common.js +2 -3
  171. package/dist/esm/utils/common.js.map +1 -1
  172. package/dist/esm/utils/connectionStringParser.js +3 -3
  173. package/dist/esm/utils/connectionStringParser.js.map +1 -1
  174. package/dist/esm/utils/constants/applicationinsights.d.ts +2 -1
  175. package/dist/esm/utils/constants/applicationinsights.d.ts.map +1 -1
  176. package/dist/esm/utils/constants/applicationinsights.js +2 -1
  177. package/dist/esm/utils/constants/applicationinsights.js.map +1 -1
  178. package/dist/esm/utils/eventhub.js +5 -2
  179. package/dist/esm/utils/eventhub.js.map +1 -1
  180. package/dist/esm/utils/logUtils.d.ts.map +1 -1
  181. package/dist/esm/utils/logUtils.js +31 -12
  182. package/dist/esm/utils/logUtils.js.map +1 -1
  183. package/dist/esm/utils/metricUtils.d.ts.map +1 -1
  184. package/dist/esm/utils/metricUtils.js +6 -6
  185. package/dist/esm/utils/metricUtils.js.map +1 -1
  186. package/dist/esm/utils/spanUtils.d.ts.map +1 -1
  187. package/dist/esm/utils/spanUtils.js +32 -17
  188. package/dist/esm/utils/spanUtils.js.map +1 -1
  189. package/package.json +34 -35
  190. package/dist/commonjs/sampling.d.ts.map +0 -1
  191. package/dist/commonjs/sampling.js.map +0 -1
  192. package/dist/esm/sampling.d.ts.map +0 -1
  193. package/dist/esm/sampling.js.map +0 -1
@@ -7,7 +7,7 @@ import type { Sampler, SamplingResult } from "@opentelemetry/sdk-trace-base";
7
7
  * @param samplingRatio - 0 to 1 value.
8
8
  */
9
9
  export declare class ApplicationInsightsSampler implements Sampler {
10
- private readonly _sampleRate;
10
+ private _sampleRate;
11
11
  private readonly samplingRatio;
12
12
  /**
13
13
  * Initializes a new instance of the ApplicationInsightsSampler class.
@@ -33,6 +33,5 @@ export declare class ApplicationInsightsSampler implements Sampler {
33
33
  * Return Sampler description
34
34
  */
35
35
  toString(): string;
36
- private _getSamplingHashCode;
37
36
  }
38
- //# sourceMappingURL=sampling.d.ts.map
37
+ //# sourceMappingURL=percentageSampler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"percentageSampler.d.ts","sourceRoot":"","sources":["../../../src/sampling/percentageSampler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAI7E;;;;;GAKG;AACH,qBAAa,0BAA2B,YAAW,OAAO;IACxD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC;;;OAGG;gBACS,aAAa,GAAE,MAAU;IAQrC;;;;;;;;;;;;;OAaG;IACI,YAAY,CACjB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EAEf,QAAQ,EAAE,MAAM,EAEhB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EAEtB,KAAK,EAAE,IAAI,EAAE,GACZ,cAAc;IAMjB;;OAEG;IACI,QAAQ,IAAI,MAAM;CAG1B"}
@@ -1,5 +1,5 @@
1
1
  import { SamplingDecision } from "@opentelemetry/sdk-trace-base";
2
- import { AzureMonitorSampleRate } from "./utils/constants/applicationinsights.js";
2
+ import { shouldSample } from "./samplingUtils.js";
3
3
  /**
4
4
  * ApplicationInsightsSampler is responsible for the following:
5
5
  * Implements same trace id hashing algorithm so that traces are sampled the same across multiple nodes
@@ -7,6 +7,8 @@ import { AzureMonitorSampleRate } from "./utils/constants/applicationinsights.js
7
7
  * @param samplingRatio - 0 to 1 value.
8
8
  */
9
9
  export class ApplicationInsightsSampler {
10
+ _sampleRate;
11
+ samplingRatio;
10
12
  /**
11
13
  * Initializes a new instance of the ApplicationInsightsSampler class.
12
14
  * @param samplingRatio - Value in the range [0,1], 1 meaning all data will sampled and 0 all Tracing data will be sampled out.
@@ -32,32 +34,14 @@ export class ApplicationInsightsSampler {
32
34
  * be created. Typically useful for batch operations.
33
35
  * @returns a {@link SamplingResult}.
34
36
  */
35
- shouldSample(
36
- // @ts-expect-error unused argument
37
- context, traceId,
37
+ shouldSample(context, traceId,
38
38
  // @ts-expect-error unused argument
39
39
  spanName,
40
40
  // @ts-expect-error unused argument
41
41
  spanKind, attributes,
42
42
  // @ts-expect-error unused argument
43
43
  links) {
44
- let isSampledIn = false;
45
- if (this._sampleRate === 100) {
46
- isSampledIn = true;
47
- }
48
- else if (this._sampleRate === 0) {
49
- isSampledIn = false;
50
- }
51
- else {
52
- isSampledIn = this._getSamplingHashCode(traceId) < this._sampleRate;
53
- }
54
- // Add sample rate as span attribute
55
- attributes = attributes || {};
56
- // Only send the sample rate if it's not 100
57
- if (this._sampleRate !== 100) {
58
- attributes[AzureMonitorSampleRate] = this._sampleRate;
59
- }
60
- return isSampledIn
44
+ return shouldSample(this._sampleRate, context, traceId, attributes)
61
45
  ? { decision: SamplingDecision.RECORD_AND_SAMPLED, attributes: attributes }
62
46
  : { decision: SamplingDecision.NOT_RECORD, attributes: attributes };
63
47
  }
@@ -67,22 +51,5 @@ export class ApplicationInsightsSampler {
67
51
  toString() {
68
52
  return `ApplicationInsightsSampler{${this.samplingRatio}}`;
69
53
  }
70
- _getSamplingHashCode(input) {
71
- const csharpMin = -2147483648;
72
- const csharpMax = 2147483647;
73
- let hash = 5381;
74
- if (!input) {
75
- return 0;
76
- }
77
- while (input.length < 8) {
78
- input = input + input;
79
- }
80
- for (let i = 0; i < input.length; i++) {
81
- // JS doesn't respond to integer overflow by wrapping around. Simulate it with bitwise operators ( | 0)
82
- hash = ((((hash << 5) + hash) | 0) + input.charCodeAt(i)) | 0;
83
- }
84
- hash = hash <= csharpMin ? csharpMax : Math.abs(hash);
85
- return (hash / csharpMax) * 100;
86
- }
87
54
  }
88
- //# sourceMappingURL=sampling.js.map
55
+ //# sourceMappingURL=percentageSampler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"percentageSampler.js","sourceRoot":"","sources":["../../../src/sampling/percentageSampler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,OAAO,0BAA0B;IAC7B,WAAW,CAAS;IACX,aAAa,CAAS;IAEvC;;;OAGG;IACH,YAAY,gBAAwB,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC7F,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,YAAY,CACjB,OAAgB,EAChB,OAAe;IACf,mCAAmC;IACnC,QAAgB;IAChB,mCAAmC;IACnC,QAAkB,EAClB,UAAsB;IACtB,mCAAmC;IACnC,KAAa;QAEb,OAAO,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC;YACjE,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE;YAC3E,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;IACxE,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,OAAO,8BAA8B,IAAI,CAAC,aAAa,GAAG,CAAC;IAC7D,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport type { Link, Attributes, SpanKind, Context } from \"@opentelemetry/api\";\nimport type { Sampler, SamplingResult } from \"@opentelemetry/sdk-trace-base\";\nimport { SamplingDecision } from \"@opentelemetry/sdk-trace-base\";\nimport { shouldSample } from \"./samplingUtils.js\";\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 _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 (this.samplingRatio > 1 || this.samplingRatio < 0 || !Number.isFinite(this.samplingRatio)) {\n throw new Error(\"Wrong sampling rate, data will not be sampled out\");\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 - traceif 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 - Name of the span to be created.\n * @param spanKind - Kind 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 context: Context,\n traceId: string,\n // @ts-expect-error unused argument\n spanName: string,\n // @ts-expect-error unused argument\n spanKind: SpanKind,\n attributes: Attributes,\n // @ts-expect-error unused argument\n links: Link[],\n ): SamplingResult {\n return shouldSample(this._sampleRate, context, traceId, attributes)\n ? { decision: SamplingDecision.RECORD_AND_SAMPLED, attributes: attributes }\n : { decision: SamplingDecision.NOT_RECORD, attributes: attributes };\n }\n\n /**\n * Return Sampler description\n */\n public toString(): string {\n return `ApplicationInsightsSampler{${this.samplingRatio}}`;\n }\n}\n"]}
@@ -0,0 +1,58 @@
1
+ import type { Link, Attributes, SpanKind, Context } from "@opentelemetry/api";
2
+ import type { Sampler, SamplingResult } from "@opentelemetry/sdk-trace-base";
3
+ /**
4
+ * RateLimitedSampler is responsible for the following:
5
+ * - Implements a rate-limiting sampling strategy based on a specified number of requests per second.
6
+ * - Dynamically adjusts the sampling rate based on the time elapsed since the last sample.
7
+ * - Provides a sampling rate that can be used to determine whether a span should be recorded.
8
+ * @param requestsPerSecond -
9
+ */
10
+ export declare class RateLimitedSampler implements Sampler {
11
+ private readonly nanoTimeSupplier;
12
+ private readonly inverseAdaptationTimeNanos;
13
+ private readonly targetSpansPerNanosecondLimit;
14
+ private state;
15
+ private readonly roundToNearest;
16
+ private readonly tracesPerSecond;
17
+ /**
18
+ * Initializes a new instance of the RateLimitedSampler class.
19
+ * @param tracesPerSecond - The maximum number of traces to sample per second.
20
+ * @throws Error if tracesPerSecond is negative.
21
+ */
22
+ constructor(tracesPerSecond: number);
23
+ /**
24
+ * Updates the state of the sampler based on the current time.
25
+ * This method calculates the effective window count and nanos based on the time elapsed since the last sample.
26
+ * @param oldState - The previous state of the sampler.
27
+ * @param currentNanoTime - The current time in nanoseconds.
28
+ * @returns The updated state of the sampler.
29
+ */
30
+ private updateState;
31
+ /**
32
+ * Gets the current sample rate based on the effective window count and nanos.
33
+ * This method calculates the sampling probability and returns it as a percentage.
34
+ * If `roundToNearest` is true, it rounds down the sampling percentage to the nearest whole number.
35
+ * @returns The current sample rate as a percentage.
36
+ */
37
+ getSampleRate(): number;
38
+ /**
39
+ * Checks whether span needs to be created and tracked.
40
+ *
41
+ * @param context - Parent Context which may contain a span.
42
+ * @param traceId - traceId of the span to be created. It can be different from the
43
+ * traceId in the {@link SpanContext}. Typically in situations when the
44
+ * span to be created starts a new trace.
45
+ * @param spanName - Name of the span to be created.
46
+ * @param spanKind - Kind of the span to be created.
47
+ * @param attributes - Initial set of SpanAttributes for the Span being constructed.
48
+ * @param links - Collection of links that will be associated with the Span to
49
+ * be created. Typically useful for batch operations.
50
+ * @returns a {@link SamplingResult}.
51
+ */
52
+ shouldSample(context: Context, traceId: string, spanName: string, spanKind: SpanKind, attributes: Attributes, links: Link[]): SamplingResult;
53
+ /**
54
+ * Return Sampler description
55
+ */
56
+ toString(): string;
57
+ }
58
+ //# sourceMappingURL=rateLimitedSampler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimitedSampler.d.ts","sourceRoot":"","sources":["../../../src/sampling/rateLimitedSampler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAU7E;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,OAAO;IAChD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAe;IAChD,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAS;IACpD,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAS;IACvD,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEzC;;;;OAIG;gBACS,eAAe,EAAE,MAAM;IAkBnC;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAsBnB;;;;;OAKG;IACI,aAAa,IAAI,MAAM;IAe9B;;;;;;;;;;;;;OAaG;IACI,YAAY,CACjB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EAEf,QAAQ,EAAE,MAAM,EAEhB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EAEtB,KAAK,EAAE,IAAI,EAAE,GACZ,cAAc;IAOjB;;OAEG;IACI,QAAQ,IAAI,MAAM;CAG1B"}
@@ -0,0 +1,114 @@
1
+ import { SamplingDecision } from "@opentelemetry/sdk-trace-base";
2
+ import { roundDownToNearest, shouldSample } from "./samplingUtils.js";
3
+ /**
4
+ * RateLimitedSampler is responsible for the following:
5
+ * - Implements a rate-limiting sampling strategy based on a specified number of requests per second.
6
+ * - Dynamically adjusts the sampling rate based on the time elapsed since the last sample.
7
+ * - Provides a sampling rate that can be used to determine whether a span should be recorded.
8
+ * @param requestsPerSecond -
9
+ */
10
+ export class RateLimitedSampler {
11
+ nanoTimeSupplier;
12
+ inverseAdaptationTimeNanos;
13
+ targetSpansPerNanosecondLimit;
14
+ state;
15
+ roundToNearest;
16
+ tracesPerSecond;
17
+ /**
18
+ * Initializes a new instance of the RateLimitedSampler class.
19
+ * @param tracesPerSecond - The maximum number of traces to sample per second.
20
+ * @throws Error if tracesPerSecond is negative.
21
+ */
22
+ constructor(tracesPerSecond) {
23
+ this.tracesPerSecond = tracesPerSecond;
24
+ if (this.tracesPerSecond < 0.0) {
25
+ throw new Error("Limit for sampled traces per second must be nonnegative");
26
+ }
27
+ const adaptationTimeSeconds = 0.1;
28
+ this.nanoTimeSupplier = () => Number(process.hrtime.bigint());
29
+ this.inverseAdaptationTimeNanos = 1e-9 / adaptationTimeSeconds;
30
+ this.targetSpansPerNanosecondLimit = 1e-9 * this.tracesPerSecond;
31
+ const now = this.nanoTimeSupplier();
32
+ this.state = {
33
+ effectiveWindowCount: 0,
34
+ effectiveWindowNanos: 0,
35
+ lastNanoTime: now,
36
+ };
37
+ this.roundToNearest = true;
38
+ }
39
+ /**
40
+ * Updates the state of the sampler based on the current time.
41
+ * This method calculates the effective window count and nanos based on the time elapsed since the last sample.
42
+ * @param oldState - The previous state of the sampler.
43
+ * @param currentNanoTime - The current time in nanoseconds.
44
+ * @returns The updated state of the sampler.
45
+ */
46
+ updateState(oldState, currentNanoTime) {
47
+ if (currentNanoTime <= oldState.lastNanoTime) {
48
+ return {
49
+ effectiveWindowCount: oldState.effectiveWindowCount + 1,
50
+ effectiveWindowNanos: oldState.effectiveWindowNanos,
51
+ lastNanoTime: oldState.lastNanoTime,
52
+ };
53
+ }
54
+ const nanoTimeDelta = currentNanoTime - oldState.lastNanoTime;
55
+ const decayFactor = Math.exp(-nanoTimeDelta * this.inverseAdaptationTimeNanos);
56
+ const currentEffectiveWindowCount = oldState.effectiveWindowCount * decayFactor + 1;
57
+ const currentEffectiveWindowNanos = oldState.effectiveWindowNanos * decayFactor + nanoTimeDelta;
58
+ return {
59
+ effectiveWindowCount: currentEffectiveWindowCount,
60
+ effectiveWindowNanos: currentEffectiveWindowNanos,
61
+ lastNanoTime: currentNanoTime,
62
+ };
63
+ }
64
+ /**
65
+ * Gets the current sample rate based on the effective window count and nanos.
66
+ * This method calculates the sampling probability and returns it as a percentage.
67
+ * If `roundToNearest` is true, it rounds down the sampling percentage to the nearest whole number.
68
+ * @returns The current sample rate as a percentage.
69
+ */
70
+ getSampleRate() {
71
+ const currentNanoTime = this.nanoTimeSupplier();
72
+ this.state = this.updateState(this.state, currentNanoTime);
73
+ const samplingProbability = (this.state.effectiveWindowNanos * this.targetSpansPerNanosecondLimit) /
74
+ this.state.effectiveWindowCount;
75
+ let samplingPercentage = 100 * Math.min(samplingProbability, 1);
76
+ if (this.roundToNearest) {
77
+ samplingPercentage = roundDownToNearest(samplingPercentage);
78
+ }
79
+ return samplingPercentage;
80
+ }
81
+ /**
82
+ * Checks whether span needs to be created and tracked.
83
+ *
84
+ * @param context - Parent Context which may contain a span.
85
+ * @param traceId - traceId of the span to be created. It can be different from the
86
+ * traceId in the {@link SpanContext}. Typically in situations when the
87
+ * span to be created starts a new trace.
88
+ * @param spanName - Name of the span to be created.
89
+ * @param spanKind - Kind of the span to be created.
90
+ * @param attributes - Initial set of SpanAttributes for the Span being constructed.
91
+ * @param links - Collection of links that will be associated with the Span to
92
+ * be created. Typically useful for batch operations.
93
+ * @returns a {@link SamplingResult}.
94
+ */
95
+ shouldSample(context, traceId,
96
+ // @ts-expect-error unused argument
97
+ spanName,
98
+ // @ts-expect-error unused argument
99
+ spanKind, attributes,
100
+ // @ts-expect-error unused argument
101
+ links) {
102
+ const sampleRate = this.getSampleRate();
103
+ return shouldSample(sampleRate, context, traceId, attributes)
104
+ ? { decision: SamplingDecision.RECORD_AND_SAMPLED, attributes: attributes }
105
+ : { decision: SamplingDecision.NOT_RECORD, attributes: attributes };
106
+ }
107
+ /**
108
+ * Return Sampler description
109
+ */
110
+ toString() {
111
+ return `RateLimitedSampler{${this.tracesPerSecond}}`;
112
+ }
113
+ }
114
+ //# sourceMappingURL=rateLimitedSampler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimitedSampler.js","sourceRoot":"","sources":["../../../src/sampling/rateLimitedSampler.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport type { Link, Attributes, SpanKind, Context } from \"@opentelemetry/api\";\nimport type { Sampler, SamplingResult } from \"@opentelemetry/sdk-trace-base\";\nimport { SamplingDecision } from \"@opentelemetry/sdk-trace-base\";\nimport { roundDownToNearest, shouldSample } from \"./samplingUtils.js\";\n\ntype RateLimitedSamplerState = {\n effectiveWindowCount: number;\n effectiveWindowNanos: number;\n lastNanoTime: number;\n};\n\n/**\n * RateLimitedSampler is responsible for the following:\n * - Implements a rate-limiting sampling strategy based on a specified number of requests per second.\n * - Dynamically adjusts the sampling rate based on the time elapsed since the last sample.\n * - Provides a sampling rate that can be used to determine whether a span should be recorded.\n * @param requestsPerSecond -\n */\nexport class RateLimitedSampler implements Sampler {\n private readonly nanoTimeSupplier: () => number;\n private readonly inverseAdaptationTimeNanos: number;\n private readonly targetSpansPerNanosecondLimit: number;\n private state: RateLimitedSamplerState;\n private readonly roundToNearest: boolean;\n private readonly tracesPerSecond: number;\n\n /**\n * Initializes a new instance of the RateLimitedSampler class.\n * @param tracesPerSecond - The maximum number of traces to sample per second.\n * @throws Error if tracesPerSecond is negative.\n */\n constructor(tracesPerSecond: number) {\n this.tracesPerSecond = tracesPerSecond;\n if (this.tracesPerSecond < 0.0) {\n throw new Error(\"Limit for sampled traces per second must be nonnegative\");\n }\n const adaptationTimeSeconds = 0.1;\n this.nanoTimeSupplier = () => Number(process.hrtime.bigint());\n this.inverseAdaptationTimeNanos = 1e-9 / adaptationTimeSeconds;\n this.targetSpansPerNanosecondLimit = 1e-9 * this.tracesPerSecond;\n const now = this.nanoTimeSupplier();\n this.state = {\n effectiveWindowCount: 0,\n effectiveWindowNanos: 0,\n lastNanoTime: now,\n };\n this.roundToNearest = true;\n }\n\n /**\n * Updates the state of the sampler based on the current time.\n * This method calculates the effective window count and nanos based on the time elapsed since the last sample.\n * @param oldState - The previous state of the sampler.\n * @param currentNanoTime - The current time in nanoseconds.\n * @returns The updated state of the sampler.\n */\n private updateState(\n oldState: RateLimitedSamplerState,\n currentNanoTime: number,\n ): RateLimitedSamplerState {\n if (currentNanoTime <= oldState.lastNanoTime) {\n return {\n effectiveWindowCount: oldState.effectiveWindowCount + 1,\n effectiveWindowNanos: oldState.effectiveWindowNanos,\n lastNanoTime: oldState.lastNanoTime,\n };\n }\n const nanoTimeDelta = currentNanoTime - oldState.lastNanoTime;\n const decayFactor = Math.exp(-nanoTimeDelta * this.inverseAdaptationTimeNanos);\n const currentEffectiveWindowCount = oldState.effectiveWindowCount * decayFactor + 1;\n const currentEffectiveWindowNanos = oldState.effectiveWindowNanos * decayFactor + nanoTimeDelta;\n return {\n effectiveWindowCount: currentEffectiveWindowCount,\n effectiveWindowNanos: currentEffectiveWindowNanos,\n lastNanoTime: currentNanoTime,\n };\n }\n\n /**\n * Gets the current sample rate based on the effective window count and nanos.\n * This method calculates the sampling probability and returns it as a percentage.\n * If `roundToNearest` is true, it rounds down the sampling percentage to the nearest whole number.\n * @returns The current sample rate as a percentage.\n */\n public getSampleRate(): number {\n const currentNanoTime = this.nanoTimeSupplier();\n this.state = this.updateState(this.state, currentNanoTime);\n\n const samplingProbability =\n (this.state.effectiveWindowNanos * this.targetSpansPerNanosecondLimit) /\n this.state.effectiveWindowCount;\n let samplingPercentage = 100 * Math.min(samplingProbability, 1);\n\n if (this.roundToNearest) {\n samplingPercentage = roundDownToNearest(samplingPercentage);\n }\n return samplingPercentage;\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 - 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 - Name of the span to be created.\n * @param spanKind - Kind 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 context: Context,\n traceId: string,\n // @ts-expect-error unused argument\n spanName: string,\n // @ts-expect-error unused argument\n spanKind: SpanKind,\n attributes: Attributes,\n // @ts-expect-error unused argument\n links: Link[],\n ): SamplingResult {\n const sampleRate = this.getSampleRate();\n return shouldSample(sampleRate, context, traceId, attributes)\n ? { decision: SamplingDecision.RECORD_AND_SAMPLED, attributes: attributes }\n : { decision: SamplingDecision.NOT_RECORD, attributes: attributes };\n }\n\n /**\n * Return Sampler description\n */\n public toString(): string {\n return `RateLimitedSampler{${this.tracesPerSecond}}`;\n }\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import type { Attributes, Context } from "@opentelemetry/api";
2
+ /**
3
+ * Computes a deterministic hash code from a string input (typically a trace ID)
4
+ * and returns a value between 0 and 100 for sampling decisions.
5
+ *
6
+ * This function replicates the C# hash algorithm used in Application Insights
7
+ * to ensure consistent sampling decisions across different SDKs and languages.
8
+ * The same trace ID will always produce the same hash value, enabling
9
+ * distributed sampling where all spans in a trace are sampled consistently.
10
+ *
11
+ * @param input - The input string to hash (usually a trace ID)
12
+ * @returns A number between 0 and 100 representing the hash-based sampling score
13
+ */
14
+ export declare function getSamplingHashCode(input: string): number;
15
+ export declare function roundDownToNearest(samplingPercentage: number): number;
16
+ export declare function shouldSample(samplePercentage: number, context: Context, traceId: string, attributes: Attributes): boolean;
17
+ //# sourceMappingURL=samplingUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"samplingUtils.d.ts","sourceRoot":"","sources":["../../../src/sampling/samplingUtils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAI9D;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAyBzD;AAED,wBAAgB,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAMrE;AAED,wBAAgB,YAAY,CAC1B,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,GACrB,OAAO,CA2CT"}
@@ -0,0 +1,89 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { trace, TraceFlags } from "@opentelemetry/api";
4
+ import { AzureMonitorSampleRate } from "../utils/constants/applicationinsights.js";
5
+ /**
6
+ * Computes a deterministic hash code from a string input (typically a trace ID)
7
+ * and returns a value between 0 and 100 for sampling decisions.
8
+ *
9
+ * This function replicates the C# hash algorithm used in Application Insights
10
+ * to ensure consistent sampling decisions across different SDKs and languages.
11
+ * The same trace ID will always produce the same hash value, enabling
12
+ * distributed sampling where all spans in a trace are sampled consistently.
13
+ *
14
+ * @param input - The input string to hash (usually a trace ID)
15
+ * @returns A number between 0 and 100 representing the hash-based sampling score
16
+ */
17
+ export function getSamplingHashCode(input) {
18
+ const csharpMin = -2147483648;
19
+ const csharpMax = 2147483647;
20
+ let hash = 5381;
21
+ if (!input) {
22
+ return 0;
23
+ }
24
+ // Ensure input is at least 8 characters long by repeating it
25
+ let processedInput = input;
26
+ while (processedInput.length < 8) {
27
+ processedInput = processedInput + processedInput;
28
+ }
29
+ // Compute hash using a variation of djb2 algorithm with C# integer overflow simulation
30
+ // This uses hash * 33 + c (where hash << 5 + hash equals hash * 33)
31
+ for (let i = 0; i < processedInput.length; i++) {
32
+ // JS doesn't respond to integer overflow by wrapping around. Simulate it with bitwise operators ( | 0)
33
+ hash = ((((hash << 5) + hash) | 0) + processedInput.charCodeAt(i)) | 0;
34
+ }
35
+ // Normalize hash to positive value and convert to 0-100 range
36
+ hash = hash <= csharpMin ? csharpMax : Math.abs(hash);
37
+ return (hash / csharpMax) * 100;
38
+ }
39
+ export function roundDownToNearest(samplingPercentage) {
40
+ if (samplingPercentage === 0) {
41
+ return 0;
42
+ }
43
+ const itemCount = 100 / samplingPercentage;
44
+ return 100.0 / Math.ceil(itemCount);
45
+ }
46
+ export function shouldSample(samplePercentage, context, traceId, attributes) {
47
+ let sampleRate = samplePercentage;
48
+ let isSampled = undefined;
49
+ if (sampleRate === 100) {
50
+ isSampled = true;
51
+ }
52
+ else if (sampleRate === 0) {
53
+ isSampled = false;
54
+ }
55
+ else {
56
+ // Try to get the parent sampling result first
57
+ const parentSpan = trace.getSpan(context);
58
+ const parentSpanContext = parentSpan?.spanContext();
59
+ if (parentSpanContext &&
60
+ trace.isSpanContextValid(parentSpanContext) &&
61
+ !parentSpanContext.isRemote) {
62
+ if ((parentSpanContext.traceFlags & TraceFlags.SAMPLED) === TraceFlags.SAMPLED) {
63
+ isSampled = true;
64
+ }
65
+ else if ((parentSpanContext.traceFlags & TraceFlags.NONE) === TraceFlags.NONE) {
66
+ isSampled = false;
67
+ }
68
+ // If the parent span is valid and not remote, we can use its sample rate
69
+ const parentSampleRate = Number(parentSpan.attributes?.[AzureMonitorSampleRate]);
70
+ if (!isNaN(parentSampleRate)) {
71
+ sampleRate = Number(parentSampleRate);
72
+ }
73
+ }
74
+ }
75
+ // Only add sample rate attribute if it's not 100
76
+ if (sampleRate !== 100) {
77
+ // Add sample rate as span attribute
78
+ attributes = attributes || {};
79
+ attributes[AzureMonitorSampleRate] = sampleRate;
80
+ }
81
+ if (isSampled === undefined) {
82
+ const samplingHashCode = getSamplingHashCode(traceId);
83
+ return samplingHashCode < sampleRate;
84
+ }
85
+ else {
86
+ return isSampled;
87
+ }
88
+ }
89
+ //# sourceMappingURL=samplingUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"samplingUtils.js","sourceRoot":"","sources":["../../../src/sampling/samplingUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Attributes, Context } from \"@opentelemetry/api\";\nimport { trace, TraceFlags } from \"@opentelemetry/api\";\nimport { AzureMonitorSampleRate } from \"../utils/constants/applicationinsights.js\";\n\n/**\n * Computes a deterministic hash code from a string input (typically a trace ID)\n * and returns a value between 0 and 100 for sampling decisions.\n *\n * This function replicates the C# hash algorithm used in Application Insights\n * to ensure consistent sampling decisions across different SDKs and languages.\n * The same trace ID will always produce the same hash value, enabling\n * distributed sampling where all spans in a trace are sampled consistently.\n *\n * @param input - The input string to hash (usually a trace ID)\n * @returns A number between 0 and 100 representing the hash-based sampling score\n */\nexport function getSamplingHashCode(input: string): number {\n const csharpMin = -2147483648;\n const csharpMax = 2147483647;\n let hash = 5381;\n\n if (!input) {\n return 0;\n }\n\n // Ensure input is at least 8 characters long by repeating it\n let processedInput = input;\n while (processedInput.length < 8) {\n processedInput = processedInput + processedInput;\n }\n\n // Compute hash using a variation of djb2 algorithm with C# integer overflow simulation\n // This uses hash * 33 + c (where hash << 5 + hash equals hash * 33)\n for (let i = 0; i < processedInput.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) + processedInput.charCodeAt(i)) | 0;\n }\n\n // Normalize hash to positive value and convert to 0-100 range\n hash = hash <= csharpMin ? csharpMax : Math.abs(hash);\n return (hash / csharpMax) * 100;\n}\n\nexport function roundDownToNearest(samplingPercentage: number): number {\n if (samplingPercentage === 0) {\n return 0;\n }\n const itemCount = 100 / samplingPercentage;\n return 100.0 / Math.ceil(itemCount);\n}\n\nexport function shouldSample(\n samplePercentage: number,\n context: Context,\n traceId: string,\n attributes: Attributes,\n): boolean {\n let sampleRate = samplePercentage;\n let isSampled = undefined;\n\n if (sampleRate === 100) {\n isSampled = true;\n } else if (sampleRate === 0) {\n isSampled = false;\n } else {\n // Try to get the parent sampling result first\n const parentSpan = trace.getSpan(context);\n const parentSpanContext = parentSpan?.spanContext();\n if (\n parentSpanContext &&\n trace.isSpanContextValid(parentSpanContext) &&\n !parentSpanContext.isRemote\n ) {\n if ((parentSpanContext.traceFlags & TraceFlags.SAMPLED) === TraceFlags.SAMPLED) {\n isSampled = true;\n } else if ((parentSpanContext.traceFlags & TraceFlags.NONE) === TraceFlags.NONE) {\n isSampled = false;\n }\n // If the parent span is valid and not remote, we can use its sample rate\n const parentSampleRate = Number((parentSpan as any).attributes?.[AzureMonitorSampleRate]);\n if (!isNaN(parentSampleRate)) {\n sampleRate = Number(parentSampleRate);\n }\n }\n }\n\n // Only add sample rate attribute if it's not 100\n if (sampleRate !== 100) {\n // Add sample rate as span attribute\n attributes = attributes || {};\n attributes[AzureMonitorSampleRate] = sampleRate;\n }\n\n if (isSampled === undefined) {\n const samplingHashCode = getSamplingHashCode(traceId);\n return samplingHashCode < sampleRate;\n } else {\n return isSampled;\n }\n}\n"]}
@@ -97,7 +97,9 @@ export declare const legacySemanticValues: string[];
97
97
  * @internal
98
98
  */
99
99
  export declare enum experimentalOpenTelemetryValues {
100
- SYNTHETIC_TYPE = "user_agent.synthetic.type"
100
+ SYNTHETIC_TYPE = "user_agent.synthetic.type",
101
+ ATTR_ENDUSER_PSEUDO_ID = "enduser.pseudo.id",
102
+ ATTR_ENDUSER_ID = "enduser.id"
101
103
  }
102
104
  /**
103
105
  * HTTP semantic convention values
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAuDA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,IAAI,GAAG;KAAG,GAAG,IAAI,cAAc,GAAG,MAAM;CAAE,CAAC;AACvD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;AACpF;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAAA;CAAE,CAAC;AACtE;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;CACZ;AACD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AACrD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,oBAAY,2BAA2B;IACrC,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,qBAAqB,0BAA0B;IAC/C,YAAY,iBAAiB;IAC7B,gBAAgB,2BAA2B;IAC3C,uBAAuB,4BAA4B;IACnD,cAAc,mBAAmB;CAClC;AAED;;;GAGG;AACH,oBAAY,6BAA6B;IACvC,aAAa,iDAAiD;IAC9D,eAAe,8BAA8B;IAC7C,cAAc,0CAA0C;IACxD,qBAAqB,oDAAoD;IACzE,YAAY,6DAA6D;IACzE,gBAAgB,uEAAuE;IACvF,uBAAuB,+DAA+D;IACtF,cAAc,sEAAsE;CACrF;AAED;;;GAGG;AACH,oBAAY,kBAAkB;IAC5B,QAAQ,MAAM;IACd,OAAO,OAAO;IACd,YAAY,OAAO;IACnB,WAAW,QAAQ;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,UA8BhC,CAAC;AAEF;;;GAGG;AACH,oBAAY,+BAA+B;IACzC,cAAc,8BAA8B;CAC7C;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,8eAwB9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,2BAA2B,UAAsC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAuDA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,IAAI,GAAG;KAAG,GAAG,IAAI,cAAc,GAAG,MAAM;CAAE,CAAC;AACvD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;AACpF;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAAA;CAAE,CAAC;AACtE;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;CACZ;AACD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AACrD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,oBAAY,2BAA2B;IACrC,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,qBAAqB,0BAA0B;IAC/C,YAAY,iBAAiB;IAC7B,gBAAgB,2BAA2B;IAC3C,uBAAuB,4BAA4B;IACnD,cAAc,mBAAmB;CAClC;AAED;;;GAGG;AACH,oBAAY,6BAA6B;IACvC,aAAa,iDAAiD;IAC9D,eAAe,8BAA8B;IAC7C,cAAc,0CAA0C;IACxD,qBAAqB,oDAAoD;IACzE,YAAY,6DAA6D;IACzE,gBAAgB,uEAAuE;IACvF,uBAAuB,+DAA+D;IACtF,cAAc,sEAAsE;CACrF;AAED;;;GAGG;AACH,oBAAY,kBAAkB;IAC5B,QAAQ,MAAM;IACd,OAAO,OAAO;IACd,YAAY,OAAO;IACnB,WAAW,QAAQ;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,UA8BhC,CAAC;AAEF;;;GAGG;AACH,oBAAY,+BAA+B;IACzC,cAAc,8BAA8B;IAC5C,sBAAsB,sBAAsB;IAC5C,eAAe,eAAe;CAC/B;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,8eA0B9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,2BAA2B,UAAsC,CAAC"}
package/dist/esm/types.js CHANGED
@@ -84,6 +84,8 @@ export const legacySemanticValues = [
84
84
  export var experimentalOpenTelemetryValues;
85
85
  (function (experimentalOpenTelemetryValues) {
86
86
  experimentalOpenTelemetryValues["SYNTHETIC_TYPE"] = "user_agent.synthetic.type";
87
+ experimentalOpenTelemetryValues["ATTR_ENDUSER_PSEUDO_ID"] = "enduser.pseudo.id";
88
+ experimentalOpenTelemetryValues["ATTR_ENDUSER_ID"] = "enduser.id";
87
89
  })(experimentalOpenTelemetryValues || (experimentalOpenTelemetryValues = {}));
88
90
  /**
89
91
  * HTTP semantic convention values
@@ -112,6 +114,8 @@ export const httpSemanticValues = [
112
114
  ATTR_EXCEPTION_TYPE,
113
115
  ATTR_EXCEPTION_MESSAGE,
114
116
  ATTR_EXCEPTION_STACKTRACE,
117
+ experimentalOpenTelemetryValues.ATTR_ENDUSER_ID,
118
+ experimentalOpenTelemetryValues.ATTR_ENDUSER_PSEUDO_ID,
115
119
  experimentalOpenTelemetryValues.SYNTHETIC_TYPE,
116
120
  ];
117
121
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,EACxB,8BAA8B,EAC9B,0BAA0B,EAC1B,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,6BAA6B,EAC7B,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,qCAAqC,CAAC;AA8C7C;;;GAGG;AACH,MAAM,CAAN,IAAY,2BASX;AATD,WAAY,2BAA2B;IACrC,8DAA+B,CAAA;IAC/B,kEAAmC,CAAA;IACnC,gEAAiC,CAAA;IACjC,8EAA+C,CAAA;IAC/C,4DAA6B,CAAA;IAC7B,0EAA2C,CAAA;IAC3C,kFAAmD,CAAA;IACnD,gEAAiC,CAAA;AACnC,CAAC,EATW,2BAA2B,KAA3B,2BAA2B,QAStC;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,6BASX;AATD,WAAY,6BAA6B;IACvC,+FAA8D,CAAA;IAC9D,8EAA6C,CAAA;IAC7C,yFAAwD,CAAA;IACxD,0GAAyE,CAAA;IACzE,0GAAyE,CAAA;IACzE,wHAAuF,CAAA;IACvF,uHAAsF,CAAA;IACtF,qHAAoF,CAAA;AACtF,CAAC,EATW,6BAA6B,KAA7B,6BAA6B,QASxC;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,qEAAc,CAAA;IACd,oEAAc,CAAA;IACd,8EAAmB,CAAA;IACnB,6EAAmB,CAAA;AACrB,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,oBAAoB;IACpB,sBAAsB;IACtB,oBAAoB;IACpB,qBAAqB;IACrB,wBAAwB;IACxB,oBAAoB;IACpB,iBAAiB;IACjB,yBAAyB;IACzB,mBAAmB;IACnB,kBAAkB;IAClB,kBAAkB;IAClB,qBAAqB;IACrB,qBAAqB;IACrB,gBAAgB;IAChB,mBAAmB;IACnB,6BAA6B;IAC7B,uBAAuB;IACvB,0BAA0B;IAC1B,6BAA6B;IAC7B,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,uBAAuB;IACvB,mBAAmB;IACnB,kBAAkB;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAN,IAAY,+BAEX;AAFD,WAAY,+BAA+B;IACzC,+EAA4C,CAAA;AAC9C,CAAC,EAFW,+BAA+B,KAA/B,+BAA+B,QAE1C;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,mBAAmB;IACnB,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,cAAc;IACd,eAAe;IACf,eAAe;IACf,0BAA0B;IAC1B,uBAAuB;IACvB,0BAA0B;IAC1B,yBAAyB;IACzB,sBAAsB;IACtB,6BAA6B;IAC7B,sBAAsB;IACtB,wBAAwB;IACxB,wBAAwB;IACxB,8BAA8B;IAC9B,mBAAmB;IACnB,sBAAsB;IACtB,yBAAyB;IACzB,+BAA+B,CAAC,cAAc;CAC/C,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,iCAAiC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n ATTR_CLIENT_ADDRESS,\n ATTR_CLIENT_PORT,\n ATTR_ERROR_TYPE,\n ATTR_EXCEPTION_MESSAGE,\n ATTR_EXCEPTION_STACKTRACE,\n ATTR_EXCEPTION_TYPE,\n ATTR_HTTP_REQUEST_METHOD,\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n ATTR_NETWORK_LOCAL_ADDRESS,\n ATTR_NETWORK_LOCAL_PORT,\n ATTR_NETWORK_PEER_ADDRESS,\n ATTR_NETWORK_PEER_PORT,\n ATTR_NETWORK_PROTOCOL_NAME,\n ATTR_NETWORK_PROTOCOL_VERSION,\n ATTR_NETWORK_TRANSPORT,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n ATTR_URL_FULL,\n ATTR_URL_PATH,\n ATTR_URL_QUERY,\n ATTR_URL_SCHEME,\n ATTR_USER_AGENT_ORIGINAL,\n SEMATTRS_DB_NAME,\n SEMATTRS_DB_OPERATION,\n SEMATTRS_DB_STATEMENT,\n SEMATTRS_DB_SYSTEM,\n SEMATTRS_ENDUSER_ID,\n SEMATTRS_EXCEPTION_MESSAGE,\n SEMATTRS_EXCEPTION_STACKTRACE,\n SEMATTRS_EXCEPTION_TYPE,\n SEMATTRS_HTTP_CLIENT_IP,\n SEMATTRS_HTTP_FLAVOR,\n SEMATTRS_HTTP_HOST,\n SEMATTRS_HTTP_METHOD,\n SEMATTRS_HTTP_ROUTE,\n SEMATTRS_HTTP_SCHEME,\n SEMATTRS_HTTP_STATUS_CODE,\n SEMATTRS_HTTP_TARGET,\n SEMATTRS_HTTP_URL,\n SEMATTRS_HTTP_USER_AGENT,\n SEMATTRS_NET_HOST_IP,\n SEMATTRS_NET_HOST_NAME,\n SEMATTRS_NET_HOST_PORT,\n SEMATTRS_NET_PEER_IP,\n SEMATTRS_NET_PEER_NAME,\n SEMATTRS_NET_PEER_PORT,\n SEMATTRS_NET_TRANSPORT,\n SEMATTRS_PEER_SERVICE,\n SEMATTRS_RPC_GRPC_STATUS_CODE,\n SEMATTRS_RPC_SYSTEM,\n} from \"@opentelemetry/semantic-conventions\";\nimport type { ContextTagKeys } from \"./generated/index.js\";\n\n/**\n * Azure Monitor envelope tags.\n * @internal\n */\nexport type Tags = { [key in ContextTagKeys]: string };\n/**\n * Azure Monitor envelope property type.\n * @internal\n */\nexport type PropertyType = string | number | boolean | object | Array<PropertyType>;\n/**\n * Azure Monitor envelope properties.\n * @internal\n */\nexport type Properties = { [key: string]: Properties | PropertyType };\n/**\n * Azure Monitor envelope links.\n * @internal\n */\nexport interface MSLink {\n operation_Id: string;\n id: string;\n}\n/**\n * Azure Monitor envelope measurements.\n * @internal\n */\nexport type Measurements = { [key: string]: number };\n/**\n * Exporter sender result.\n * @internal\n */\nexport type SenderResult = { statusCode: number | undefined; result: string };\n\n/**\n * Exporter persistent storage.\n * @internal\n */\nexport interface PersistentStorage {\n shift(): Promise<unknown>;\n push(value: unknown[]): Promise<boolean>;\n}\n\n/**\n * Performance Counter OpenTelemetry compliant names.\n * @internal\n */\nexport enum OTelPerformanceCounterNames {\n PRIVATE_BYTES = \"Private_Bytes\",\n AVAILABLE_BYTES = \"Available_Bytes\",\n PROCESSOR_TIME = \"Processor_Time\",\n PROCESS_TIME_STANDARD = \"Process_Time_Standard\",\n REQUEST_RATE = \"Request_Rate\",\n REQUEST_DURATION = \"Request_Execution_Time\",\n PROCESS_TIME_NORMALIZED = \"Process_Time_Normalized\",\n EXCEPTION_RATE = \"Exception_Rate\",\n}\n\n/**\n * Breeze Performance Counter names.\n * @internal\n */\nexport enum BreezePerformanceCounterNames {\n PRIVATE_BYTES = \"\\\\Process(??APP_WIN32_PROC??)\\\\Private Bytes\",\n AVAILABLE_BYTES = \"\\\\Memory\\\\Available Bytes\",\n PROCESSOR_TIME = \"\\\\Processor(_Total)\\\\% Processor Time\",\n PROCESS_TIME_STANDARD = \"\\\\Process(??APP_WIN32_PROC??)\\\\% Processor Time\",\n REQUEST_RATE = \"\\\\ASP.NET Applications(??APP_W3SVC_PROC??)\\\\Requests/Sec\",\n REQUEST_DURATION = \"\\\\ASP.NET Applications(??APP_W3SVC_PROC??)\\\\Request Execution Time\",\n PROCESS_TIME_NORMALIZED = \"\\\\Process(??APP_WIN32_PROC??)\\\\% Processor Time Normalized\",\n EXCEPTION_RATE = \"\\\\.NET CLR Exceptions(??APP_CLR_PROC??)\\\\# of Exceps Thrown / sec\",\n}\n\n/**\n * Property Max Lengths\n * @internal\n */\nexport enum MaxPropertyLengths {\n NINE_BIT = 512,\n TEN_BIT = 1024,\n THIRTEEN_BIT = 8192,\n FIFTEEN_BIT = 32768,\n}\n\n/**\n * Legacy HTTP semantic convention values\n * @internal\n */\nexport const legacySemanticValues = [\n SEMATTRS_NET_PEER_IP,\n SEMATTRS_NET_PEER_NAME,\n SEMATTRS_NET_HOST_IP,\n SEMATTRS_PEER_SERVICE,\n SEMATTRS_HTTP_USER_AGENT,\n SEMATTRS_HTTP_METHOD,\n SEMATTRS_HTTP_URL,\n SEMATTRS_HTTP_STATUS_CODE,\n SEMATTRS_HTTP_ROUTE,\n SEMATTRS_HTTP_HOST,\n SEMATTRS_DB_SYSTEM,\n SEMATTRS_DB_STATEMENT,\n SEMATTRS_DB_OPERATION,\n SEMATTRS_DB_NAME,\n SEMATTRS_RPC_SYSTEM,\n SEMATTRS_RPC_GRPC_STATUS_CODE,\n SEMATTRS_EXCEPTION_TYPE,\n SEMATTRS_EXCEPTION_MESSAGE,\n SEMATTRS_EXCEPTION_STACKTRACE,\n SEMATTRS_HTTP_SCHEME,\n SEMATTRS_HTTP_TARGET,\n SEMATTRS_HTTP_FLAVOR,\n SEMATTRS_NET_TRANSPORT,\n SEMATTRS_NET_HOST_NAME,\n SEMATTRS_NET_HOST_PORT,\n SEMATTRS_NET_PEER_PORT,\n SEMATTRS_HTTP_CLIENT_IP,\n SEMATTRS_ENDUSER_ID,\n \"http.status_text\",\n];\n\n/**\n * Experimental OpenTelemetry semantic convention values\n * @internal\n */\nexport enum experimentalOpenTelemetryValues {\n SYNTHETIC_TYPE = \"user_agent.synthetic.type\",\n}\n\n/**\n * HTTP semantic convention values\n * @internal\n */\nexport const httpSemanticValues = [\n ATTR_CLIENT_ADDRESS,\n ATTR_CLIENT_PORT,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n ATTR_URL_FULL,\n ATTR_URL_PATH,\n ATTR_URL_QUERY,\n ATTR_URL_SCHEME,\n ATTR_ERROR_TYPE,\n ATTR_NETWORK_LOCAL_ADDRESS,\n ATTR_NETWORK_LOCAL_PORT,\n ATTR_NETWORK_PROTOCOL_NAME,\n ATTR_NETWORK_PEER_ADDRESS,\n ATTR_NETWORK_PEER_PORT,\n ATTR_NETWORK_PROTOCOL_VERSION,\n ATTR_NETWORK_TRANSPORT,\n ATTR_USER_AGENT_ORIGINAL,\n ATTR_HTTP_REQUEST_METHOD,\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n ATTR_EXCEPTION_TYPE,\n ATTR_EXCEPTION_MESSAGE,\n ATTR_EXCEPTION_STACKTRACE,\n experimentalOpenTelemetryValues.SYNTHETIC_TYPE,\n];\n\n/**\n * Internal Microsoft attributes\n * @internal\n */\nexport const internalMicrosoftAttributes = [\"_MS.ProcessedByMetricExtractors\"];\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n ATTR_CLIENT_ADDRESS,\n ATTR_CLIENT_PORT,\n ATTR_ERROR_TYPE,\n ATTR_EXCEPTION_MESSAGE,\n ATTR_EXCEPTION_STACKTRACE,\n ATTR_EXCEPTION_TYPE,\n ATTR_HTTP_REQUEST_METHOD,\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n ATTR_NETWORK_LOCAL_ADDRESS,\n ATTR_NETWORK_LOCAL_PORT,\n ATTR_NETWORK_PEER_ADDRESS,\n ATTR_NETWORK_PEER_PORT,\n ATTR_NETWORK_PROTOCOL_NAME,\n ATTR_NETWORK_PROTOCOL_VERSION,\n ATTR_NETWORK_TRANSPORT,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n ATTR_URL_FULL,\n ATTR_URL_PATH,\n ATTR_URL_QUERY,\n ATTR_URL_SCHEME,\n ATTR_USER_AGENT_ORIGINAL,\n SEMATTRS_DB_NAME,\n SEMATTRS_DB_OPERATION,\n SEMATTRS_DB_STATEMENT,\n SEMATTRS_DB_SYSTEM,\n SEMATTRS_ENDUSER_ID,\n SEMATTRS_EXCEPTION_MESSAGE,\n SEMATTRS_EXCEPTION_STACKTRACE,\n SEMATTRS_EXCEPTION_TYPE,\n SEMATTRS_HTTP_CLIENT_IP,\n SEMATTRS_HTTP_FLAVOR,\n SEMATTRS_HTTP_HOST,\n SEMATTRS_HTTP_METHOD,\n SEMATTRS_HTTP_ROUTE,\n SEMATTRS_HTTP_SCHEME,\n SEMATTRS_HTTP_STATUS_CODE,\n SEMATTRS_HTTP_TARGET,\n SEMATTRS_HTTP_URL,\n SEMATTRS_HTTP_USER_AGENT,\n SEMATTRS_NET_HOST_IP,\n SEMATTRS_NET_HOST_NAME,\n SEMATTRS_NET_HOST_PORT,\n SEMATTRS_NET_PEER_IP,\n SEMATTRS_NET_PEER_NAME,\n SEMATTRS_NET_PEER_PORT,\n SEMATTRS_NET_TRANSPORT,\n SEMATTRS_PEER_SERVICE,\n SEMATTRS_RPC_GRPC_STATUS_CODE,\n SEMATTRS_RPC_SYSTEM,\n} from \"@opentelemetry/semantic-conventions\";\nimport type { ContextTagKeys } from \"./generated/index.js\";\n\n/**\n * Azure Monitor envelope tags.\n * @internal\n */\nexport type Tags = { [key in ContextTagKeys]: string };\n/**\n * Azure Monitor envelope property type.\n * @internal\n */\nexport type PropertyType = string | number | boolean | object | Array<PropertyType>;\n/**\n * Azure Monitor envelope properties.\n * @internal\n */\nexport type Properties = { [key: string]: Properties | PropertyType };\n/**\n * Azure Monitor envelope links.\n * @internal\n */\nexport interface MSLink {\n operation_Id: string;\n id: string;\n}\n/**\n * Azure Monitor envelope measurements.\n * @internal\n */\nexport type Measurements = { [key: string]: number };\n/**\n * Exporter sender result.\n * @internal\n */\nexport type SenderResult = { statusCode: number | undefined; result: string };\n\n/**\n * Exporter persistent storage.\n * @internal\n */\nexport interface PersistentStorage {\n shift(): Promise<unknown>;\n push(value: unknown[]): Promise<boolean>;\n}\n\n/**\n * Performance Counter OpenTelemetry compliant names.\n * @internal\n */\nexport enum OTelPerformanceCounterNames {\n PRIVATE_BYTES = \"Private_Bytes\",\n AVAILABLE_BYTES = \"Available_Bytes\",\n PROCESSOR_TIME = \"Processor_Time\",\n PROCESS_TIME_STANDARD = \"Process_Time_Standard\",\n REQUEST_RATE = \"Request_Rate\",\n REQUEST_DURATION = \"Request_Execution_Time\",\n PROCESS_TIME_NORMALIZED = \"Process_Time_Normalized\",\n EXCEPTION_RATE = \"Exception_Rate\",\n}\n\n/**\n * Breeze Performance Counter names.\n * @internal\n */\nexport enum BreezePerformanceCounterNames {\n PRIVATE_BYTES = \"\\\\Process(??APP_WIN32_PROC??)\\\\Private Bytes\",\n AVAILABLE_BYTES = \"\\\\Memory\\\\Available Bytes\",\n PROCESSOR_TIME = \"\\\\Processor(_Total)\\\\% Processor Time\",\n PROCESS_TIME_STANDARD = \"\\\\Process(??APP_WIN32_PROC??)\\\\% Processor Time\",\n REQUEST_RATE = \"\\\\ASP.NET Applications(??APP_W3SVC_PROC??)\\\\Requests/Sec\",\n REQUEST_DURATION = \"\\\\ASP.NET Applications(??APP_W3SVC_PROC??)\\\\Request Execution Time\",\n PROCESS_TIME_NORMALIZED = \"\\\\Process(??APP_WIN32_PROC??)\\\\% Processor Time Normalized\",\n EXCEPTION_RATE = \"\\\\.NET CLR Exceptions(??APP_CLR_PROC??)\\\\# of Exceps Thrown / sec\",\n}\n\n/**\n * Property Max Lengths\n * @internal\n */\nexport enum MaxPropertyLengths {\n NINE_BIT = 512,\n TEN_BIT = 1024,\n THIRTEEN_BIT = 8192,\n FIFTEEN_BIT = 32768,\n}\n\n/**\n * Legacy HTTP semantic convention values\n * @internal\n */\nexport const legacySemanticValues = [\n SEMATTRS_NET_PEER_IP,\n SEMATTRS_NET_PEER_NAME,\n SEMATTRS_NET_HOST_IP,\n SEMATTRS_PEER_SERVICE,\n SEMATTRS_HTTP_USER_AGENT,\n SEMATTRS_HTTP_METHOD,\n SEMATTRS_HTTP_URL,\n SEMATTRS_HTTP_STATUS_CODE,\n SEMATTRS_HTTP_ROUTE,\n SEMATTRS_HTTP_HOST,\n SEMATTRS_DB_SYSTEM,\n SEMATTRS_DB_STATEMENT,\n SEMATTRS_DB_OPERATION,\n SEMATTRS_DB_NAME,\n SEMATTRS_RPC_SYSTEM,\n SEMATTRS_RPC_GRPC_STATUS_CODE,\n SEMATTRS_EXCEPTION_TYPE,\n SEMATTRS_EXCEPTION_MESSAGE,\n SEMATTRS_EXCEPTION_STACKTRACE,\n SEMATTRS_HTTP_SCHEME,\n SEMATTRS_HTTP_TARGET,\n SEMATTRS_HTTP_FLAVOR,\n SEMATTRS_NET_TRANSPORT,\n SEMATTRS_NET_HOST_NAME,\n SEMATTRS_NET_HOST_PORT,\n SEMATTRS_NET_PEER_PORT,\n SEMATTRS_HTTP_CLIENT_IP,\n SEMATTRS_ENDUSER_ID,\n \"http.status_text\",\n];\n\n/**\n * Experimental OpenTelemetry semantic convention values\n * @internal\n */\nexport enum experimentalOpenTelemetryValues {\n SYNTHETIC_TYPE = \"user_agent.synthetic.type\",\n ATTR_ENDUSER_PSEUDO_ID = \"enduser.pseudo.id\",\n ATTR_ENDUSER_ID = \"enduser.id\",\n}\n\n/**\n * HTTP semantic convention values\n * @internal\n */\nexport const httpSemanticValues = [\n ATTR_CLIENT_ADDRESS,\n ATTR_CLIENT_PORT,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n ATTR_URL_FULL,\n ATTR_URL_PATH,\n ATTR_URL_QUERY,\n ATTR_URL_SCHEME,\n ATTR_ERROR_TYPE,\n ATTR_NETWORK_LOCAL_ADDRESS,\n ATTR_NETWORK_LOCAL_PORT,\n ATTR_NETWORK_PROTOCOL_NAME,\n ATTR_NETWORK_PEER_ADDRESS,\n ATTR_NETWORK_PEER_PORT,\n ATTR_NETWORK_PROTOCOL_VERSION,\n ATTR_NETWORK_TRANSPORT,\n ATTR_USER_AGENT_ORIGINAL,\n ATTR_HTTP_REQUEST_METHOD,\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n ATTR_EXCEPTION_TYPE,\n ATTR_EXCEPTION_MESSAGE,\n ATTR_EXCEPTION_STACKTRACE,\n experimentalOpenTelemetryValues.ATTR_ENDUSER_ID,\n experimentalOpenTelemetryValues.ATTR_ENDUSER_PSEUDO_ID,\n experimentalOpenTelemetryValues.SYNTHETIC_TYPE,\n];\n\n/**\n * Internal Microsoft attributes\n * @internal\n */\nexport const internalMicrosoftAttributes = [\"_MS.ProcessedByMetricExtractors\"];\n"]}
@@ -13,7 +13,7 @@ export function hrTimeToDate(hrTime) {
13
13
  }
14
14
  export function createTagsFromResource(resource) {
15
15
  const context = getInstance();
16
- const tags = Object.assign({}, context.tags);
16
+ const tags = { ...context.tags };
17
17
  if (resource && resource.attributes) {
18
18
  tags[KnownContextTagKeys.AiCloudRole] = getCloudRole(resource);
19
19
  tags[KnownContextTagKeys.AiCloudRoleInstance] = getCloudRoleInstance(resource);
@@ -235,8 +235,7 @@ export function serializeAttribute(value) {
235
235
  return String(value);
236
236
  }
237
237
  export function shouldCreateResourceMetric() {
238
- var _a;
239
- return !(((_a = process.env[ENV_OPENTELEMETRY_RESOURCE_METRIC_DISABLED]) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === "true");
238
+ return !(process.env[ENV_OPENTELEMETRY_RESOURCE_METRIC_DISABLED]?.toLowerCase() === "true");
240
239
  }
241
240
  export function isSyntheticSource(attributes) {
242
241
  return !!attributes[experimentalOpenTelemetryValues.SYNTHETIC_TYPE];
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,2BAA2B,EAC3B,wBAAwB,EACxB,+BAA+B,EAC/B,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,6BAA6B,EAC7B,+BAA+B,EAC/B,+BAA+B,EAC/B,gCAAgC,EAChC,wBAAwB,EACxB,4BAA4B,EAC5B,8BAA8B,EAC9B,0BAA0B,EAC1B,2BAA2B,EAC3B,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,+BAA+B,EAAa,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,0CAA0C,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EACL,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAa,EACb,UAAU,EACV,cAAc,EACd,cAAc,EACd,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAkB;IACvD,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,IAAI,qBAAc,OAAO,CAAC,IAAI,CAAE,CAAC;IACvC,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACpC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,CAAC,6BAA6B,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,GAAG,MAAM,CAC9C,QAAQ,CAAC,UAAU,CAAC,6BAA6B,CAAC,CACnD,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,GAAG,MAAM,CACjD,QAAQ,CAAC,UAAU,CAAC,2BAA2B,CAAC,CACjD,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,QAAkB;IACtC,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,qBAAqB;IACrB,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;IAClE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;IAC5E,IAAI,WAAW,EAAE,CAAC;QAChB,iEAAiE;QACjE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACvD,IAAI,gBAAgB,EAAE,CAAC;gBACrB,OAAO,GAAG,gBAAgB,IAAI,WAAW,EAAE,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,yEAAyE;YACzE,IAAI,gBAAgB,EAAE,CAAC;gBACrB,SAAS,GAAG,GAAG,gBAAgB,IAAI,WAAW,EAAE,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IACD,+CAA+C;IAC/C,MAAM,wBAAwB,GAAG,QAAQ,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;IACtF,IAAI,wBAAwB,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,uBAAuB,GAAG,QAAQ,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;IACrF,IAAI,uBAAuB,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,yBAAyB,GAAG,QAAQ,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC;IACxF,IAAI,yBAAyB,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;IACxE,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,qBAAqB,GAAG,QAAQ,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;IAChF,IAAI,qBAAqB,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,uBAAuB,GAAG,QAAQ,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;IACpF,IAAI,uBAAuB,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAkB;IAC9C,+CAA+C;IAC/C,MAAM,iBAAiB,GAAG,QAAQ,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;IACxE,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACnC,CAAC;IACD,qBAAqB;IACrB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;IAC/E,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACnC,CAAC;IACD,UAAU;IACV,OAAO,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,QAAgB;IACtC,OAAO,CACL,QAAQ,KAAK,kBAAkB;QAC/B,QAAQ,KAAK,oBAAoB;QACjC,QAAQ,KAAK,sBAAsB;QACnC,QAAQ,KAAK,oBAAoB;QACjC,QAAQ,KAAK,qBAAqB;QAClC,QAAQ,KAAK,qBAAqB;QAClC,QAAQ,KAAK,wBAAwB;QACrC,QAAQ,KAAK,qBAAqB;QAClC,QAAQ,KAAK,iBAAiB,CAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,UAAsB;IAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;YAC7C,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;gBACzC,IAAI,QAAQ,EAAE,CAAC;oBACb,OAAO,GAAG,UAAU,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;gBACpD,CAAC;qBAAM,CAAC;oBACN,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;oBAC/C,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;wBAC/C,IAAI,WAAW,EAAE,CAAC;4BAChB,OAAO,GAAG,UAAU,MAAM,WAAW,IAAI,WAAW,GAAG,UAAU,EAAE,CAAC;wBACtE,CAAC;6BAAM,CAAC;4BACN,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;4BACxC,IAAI,SAAS,EAAE,CAAC;gCACd,OAAO,GAAG,UAAU,MAAM,SAAS,IAAI,WAAW,GAAG,UAAU,EAAE,CAAC;4BACpE,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,UAAsB;IACxD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,WAAW,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7B,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;SAAM,IAAI,OAAO,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7B,CAAC;SAAM,IAAI,SAAS,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,QAAkB,EAClB,kBAA0B;IAE1B,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,kBAAkB,GAAuC,EAAE,CAAC;QAClE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACnD,oDAAoD;YACpD,IACE,CAAC,CACC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;gBACtB,GAAG,KAAK,0BAA0B;gBAClC,GAAG,KAAK,2BAA2B;gBACnC,GAAG,KAAK,uBAAuB,CAChC,EACD,CAAC;gBACD,kBAAkB,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAW,CAAC;YAC/D,CAAC;QACH,CAAC;QACD,yDAAyD;QACzD,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAgB;gBAC5B,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC/C,UAAU,EAAE,kBAAkB;aAC/B,CAAC;YACF,MAAM,QAAQ,GAAa;gBACzB,IAAI,EAAE,sCAAsC;gBAC5C,IAAI,EAAE,IAAI,IAAI,EAAE;gBAChB,UAAU,EAAE,GAAG,EAAE,4BAA4B;gBAC7C,kBAAkB,EAAE,kBAAkB;gBACtC,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE;oBACJ,QAAQ,EAAE,YAAY;oBACtB,QAAQ,EAAE,QAAQ;iBACnB;gBACD,IAAI,EAAE,IAAI;aACX,CAAC;YACF,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO;AACT,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAe;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;YAClE,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,0CAA0C;gBAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YACvC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,0CAA0C;gBAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IACD,qCAAqC;IACrC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,0BAA0B;;IACxC,OAAO,CAAC,CAAC,CAAA,MAAA,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,0CAAE,WAAW,EAAE,MAAK,MAAM,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAsB;IACtD,OAAO,CAAC,CAAC,UAAU,CAAC,+BAA+B,CAAC,cAAc,CAAC,CAAC;AACtE,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport os from \"node:os\";\nimport {\n SEMRESATTRS_DEVICE_ID,\n SEMRESATTRS_DEVICE_MODEL_NAME,\n SEMRESATTRS_SERVICE_VERSION,\n SEMRESATTRS_K8S_POD_NAME,\n SEMRESATTRS_SERVICE_INSTANCE_ID,\n DBSYSTEMVALUES_DB2,\n DBSYSTEMVALUES_DERBY,\n DBSYSTEMVALUES_MARIADB,\n DBSYSTEMVALUES_MSSQL,\n DBSYSTEMVALUES_ORACLE,\n DBSYSTEMVALUES_SQLITE,\n DBSYSTEMVALUES_OTHER_SQL,\n DBSYSTEMVALUES_HSQLDB,\n SEMATTRS_PEER_SERVICE,\n SEMRESATTRS_SERVICE_NAME,\n SEMRESATTRS_SERVICE_NAMESPACE,\n SEMRESATTRS_K8S_DEPLOYMENT_NAME,\n SEMRESATTRS_K8S_REPLICASET_NAME,\n SEMRESATTRS_K8S_STATEFULSET_NAME,\n SEMRESATTRS_K8S_JOB_NAME,\n SEMRESATTRS_K8S_CRONJOB_NAME,\n SEMRESATTRS_K8S_DAEMONSET_NAME,\n ATTR_TELEMETRY_SDK_VERSION,\n ATTR_TELEMETRY_SDK_LANGUAGE,\n ATTR_TELEMETRY_SDK_NAME,\n DBSYSTEMVALUES_H2,\n} from \"@opentelemetry/semantic-conventions\";\nimport { experimentalOpenTelemetryValues, type Tags } from \"../types.js\";\nimport { getInstance } from \"../platform/index.js\";\nimport type { TelemetryItem as Envelope, MetricsData } from \"../generated/index.js\";\nimport { KnownContextTagKeys } from \"../generated/index.js\";\nimport type { Resource } from \"@opentelemetry/resources\";\nimport type { Attributes, HrTime } from \"@opentelemetry/api\";\nimport { hrTimeToNanoseconds } from \"@opentelemetry/core\";\nimport type { AnyValue } from \"@opentelemetry/api-logs\";\nimport { ENV_OPENTELEMETRY_RESOURCE_METRIC_DISABLED } from \"../Declarations/Constants.js\";\nimport {\n getHttpHost,\n getHttpMethod,\n getHttpScheme,\n getHttpTarget,\n getHttpUrl,\n getNetPeerName,\n getNetPeerPort,\n getPeerIp,\n} from \"./spanUtils.js\";\n\nexport function hrTimeToDate(hrTime: HrTime): Date {\n return new Date(hrTimeToNanoseconds(hrTime) / 1000000);\n}\n\nexport function createTagsFromResource(resource: Resource): Tags {\n const context = getInstance();\n const tags: Tags = { ...context.tags };\n if (resource && resource.attributes) {\n tags[KnownContextTagKeys.AiCloudRole] = getCloudRole(resource);\n tags[KnownContextTagKeys.AiCloudRoleInstance] = getCloudRoleInstance(resource);\n if (resource.attributes[SEMRESATTRS_DEVICE_ID]) {\n tags[KnownContextTagKeys.AiDeviceId] = String(resource.attributes[SEMRESATTRS_DEVICE_ID]);\n }\n if (resource.attributes[SEMRESATTRS_DEVICE_MODEL_NAME]) {\n tags[KnownContextTagKeys.AiDeviceModel] = String(\n resource.attributes[SEMRESATTRS_DEVICE_MODEL_NAME],\n );\n }\n if (resource.attributes[SEMRESATTRS_SERVICE_VERSION]) {\n tags[KnownContextTagKeys.AiApplicationVer] = String(\n resource.attributes[SEMRESATTRS_SERVICE_VERSION],\n );\n }\n }\n return tags;\n}\n\nfunction getCloudRole(resource: Resource): string {\n let cloudRole = \"\";\n // Service attributes\n const serviceName = resource.attributes[SEMRESATTRS_SERVICE_NAME];\n const serviceNamespace = resource.attributes[SEMRESATTRS_SERVICE_NAMESPACE];\n if (serviceName) {\n // Custom Service name provided by customer is highest precedence\n if (!String(serviceName).startsWith(\"unknown_service\")) {\n if (serviceNamespace) {\n return `${serviceNamespace}.${serviceName}`;\n } else {\n return String(serviceName);\n }\n } else {\n // Service attributes will be only used if K8S attributes are not present\n if (serviceNamespace) {\n cloudRole = `${serviceNamespace}.${serviceName}`;\n } else {\n cloudRole = String(serviceName);\n }\n }\n }\n // Kubernetes attributes should take precedence\n const kubernetesDeploymentName = resource.attributes[SEMRESATTRS_K8S_DEPLOYMENT_NAME];\n if (kubernetesDeploymentName) {\n return String(kubernetesDeploymentName);\n }\n const kuberneteReplicasetName = resource.attributes[SEMRESATTRS_K8S_REPLICASET_NAME];\n if (kuberneteReplicasetName) {\n return String(kuberneteReplicasetName);\n }\n const kubernetesStatefulSetName = resource.attributes[SEMRESATTRS_K8S_STATEFULSET_NAME];\n if (kubernetesStatefulSetName) {\n return String(kubernetesStatefulSetName);\n }\n const kubernetesJobName = resource.attributes[SEMRESATTRS_K8S_JOB_NAME];\n if (kubernetesJobName) {\n return String(kubernetesJobName);\n }\n const kubernetesCronjobName = resource.attributes[SEMRESATTRS_K8S_CRONJOB_NAME];\n if (kubernetesCronjobName) {\n return String(kubernetesCronjobName);\n }\n const kubernetesDaemonsetName = resource.attributes[SEMRESATTRS_K8S_DAEMONSET_NAME];\n if (kubernetesDaemonsetName) {\n return String(kubernetesDaemonsetName);\n }\n return cloudRole;\n}\n\nfunction getCloudRoleInstance(resource: Resource): string {\n // Kubernetes attributes should take precedence\n const kubernetesPodName = resource.attributes[SEMRESATTRS_K8S_POD_NAME];\n if (kubernetesPodName) {\n return String(kubernetesPodName);\n }\n // Service attributes\n const serviceInstanceId = resource.attributes[SEMRESATTRS_SERVICE_INSTANCE_ID];\n if (serviceInstanceId) {\n return String(serviceInstanceId);\n }\n // Default\n return os && os.hostname();\n}\n\nexport function isSqlDB(dbSystem: string): boolean {\n return (\n dbSystem === DBSYSTEMVALUES_DB2 ||\n dbSystem === DBSYSTEMVALUES_DERBY ||\n dbSystem === DBSYSTEMVALUES_MARIADB ||\n dbSystem === DBSYSTEMVALUES_MSSQL ||\n dbSystem === DBSYSTEMVALUES_ORACLE ||\n dbSystem === DBSYSTEMVALUES_SQLITE ||\n dbSystem === DBSYSTEMVALUES_OTHER_SQL ||\n dbSystem === DBSYSTEMVALUES_HSQLDB ||\n dbSystem === DBSYSTEMVALUES_H2\n );\n}\n\nexport function getUrl(attributes: Attributes): string {\n if (!attributes) {\n return \"\";\n }\n const httpMethod = getHttpMethod(attributes);\n if (httpMethod) {\n const httpUrl = getHttpUrl(attributes);\n if (httpUrl) {\n return String(httpUrl);\n } else {\n const httpScheme = getHttpScheme(attributes);\n const httpTarget = getHttpTarget(attributes);\n if (httpScheme && httpTarget) {\n const httpHost = getHttpHost(attributes);\n if (httpHost) {\n return `${httpScheme}://${httpHost}${httpTarget}`;\n } else {\n const netPeerPort = getNetPeerPort(attributes);\n if (netPeerPort) {\n const netPeerName = getNetPeerName(attributes);\n if (netPeerName) {\n return `${httpScheme}://${netPeerName}:${netPeerPort}${httpTarget}`;\n } else {\n const netPeerIp = getPeerIp(attributes);\n if (netPeerIp) {\n return `${httpScheme}://${netPeerIp}:${netPeerPort}${httpTarget}`;\n }\n }\n }\n }\n }\n }\n }\n return \"\";\n}\n\nexport function getDependencyTarget(attributes: Attributes): string {\n if (!attributes) {\n return \"\";\n }\n const peerService = attributes[SEMATTRS_PEER_SERVICE];\n const httpHost = getHttpHost(attributes);\n const httpUrl = getHttpUrl(attributes);\n const netPeerName = getNetPeerName(attributes);\n const netPeerIp = getPeerIp(attributes);\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 createResourceMetricEnvelope(\n resource: Resource,\n instrumentationKey: string,\n): Envelope | undefined {\n if (resource && resource.attributes) {\n const tags = createTagsFromResource(resource);\n const resourceAttributes: { [propertyName: string]: string } = {};\n for (const key of Object.keys(resource.attributes)) {\n // Avoid duplication ignoring fields already mapped.\n if (\n !(\n key.startsWith(\"_MS.\") ||\n key === ATTR_TELEMETRY_SDK_VERSION ||\n key === ATTR_TELEMETRY_SDK_LANGUAGE ||\n key === ATTR_TELEMETRY_SDK_NAME\n )\n ) {\n resourceAttributes[key] = resource.attributes[key] as string;\n }\n }\n // Only send event when resource attributes are available\n if (Object.keys(resourceAttributes).length > 0) {\n const baseData: MetricsData = {\n version: 2,\n metrics: [{ name: \"_OTELRESOURCE_\", value: 1 }],\n properties: resourceAttributes,\n };\n const envelope: Envelope = {\n name: \"Microsoft.ApplicationInsights.Metric\",\n time: new Date(),\n sampleRate: 100, // Metrics are never sampled\n instrumentationKey: instrumentationKey,\n version: 1,\n data: {\n baseType: \"MetricData\",\n baseData: baseData,\n },\n tags: tags,\n };\n return envelope;\n }\n }\n return;\n}\n\nexport function serializeAttribute(value: AnyValue): string {\n if (typeof value === \"object\") {\n if (value instanceof Error) {\n try {\n return JSON.stringify(value, Object.getOwnPropertyNames(value));\n } catch (err: unknown) {\n // Failed to serialize, return string cast\n return String(value);\n }\n } else if (value instanceof Uint8Array) {\n return String(value);\n } else {\n try {\n return JSON.stringify(value);\n } catch (err: unknown) {\n // Failed to serialize, return string cast\n return String(value);\n }\n }\n }\n // Return scalar and undefined values\n return String(value);\n}\n\nexport function shouldCreateResourceMetric(): boolean {\n return !(process.env[ENV_OPENTELEMETRY_RESOURCE_METRIC_DISABLED]?.toLowerCase() === \"true\");\n}\n\nexport function isSyntheticSource(attributes: Attributes): boolean {\n return !!attributes[experimentalOpenTelemetryValues.SYNTHETIC_TYPE];\n}\n"]}
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.\n\nimport os from \"node:os\";\nimport {\n SEMRESATTRS_DEVICE_ID,\n SEMRESATTRS_DEVICE_MODEL_NAME,\n SEMRESATTRS_SERVICE_VERSION,\n SEMRESATTRS_K8S_POD_NAME,\n SEMRESATTRS_SERVICE_INSTANCE_ID,\n DBSYSTEMVALUES_DB2,\n DBSYSTEMVALUES_DERBY,\n DBSYSTEMVALUES_MARIADB,\n DBSYSTEMVALUES_MSSQL,\n DBSYSTEMVALUES_ORACLE,\n DBSYSTEMVALUES_SQLITE,\n DBSYSTEMVALUES_OTHER_SQL,\n DBSYSTEMVALUES_HSQLDB,\n SEMATTRS_PEER_SERVICE,\n SEMRESATTRS_SERVICE_NAME,\n SEMRESATTRS_SERVICE_NAMESPACE,\n SEMRESATTRS_K8S_DEPLOYMENT_NAME,\n SEMRESATTRS_K8S_REPLICASET_NAME,\n SEMRESATTRS_K8S_STATEFULSET_NAME,\n SEMRESATTRS_K8S_JOB_NAME,\n SEMRESATTRS_K8S_CRONJOB_NAME,\n SEMRESATTRS_K8S_DAEMONSET_NAME,\n ATTR_TELEMETRY_SDK_VERSION,\n ATTR_TELEMETRY_SDK_LANGUAGE,\n ATTR_TELEMETRY_SDK_NAME,\n DBSYSTEMVALUES_H2,\n} from \"@opentelemetry/semantic-conventions\";\nimport { experimentalOpenTelemetryValues, type Tags } from \"../types.js\";\nimport { getInstance } from \"../platform/index.js\";\nimport type { TelemetryItem as Envelope, MetricsData } from \"../generated/index.js\";\nimport { KnownContextTagKeys } from \"../generated/index.js\";\nimport type { Resource } from \"@opentelemetry/resources\";\nimport type { Attributes, HrTime } from \"@opentelemetry/api\";\nimport { hrTimeToNanoseconds } from \"@opentelemetry/core\";\nimport type { AnyValue } from \"@opentelemetry/api-logs\";\nimport { ENV_OPENTELEMETRY_RESOURCE_METRIC_DISABLED } from \"../Declarations/Constants.js\";\nimport {\n getHttpHost,\n getHttpMethod,\n getHttpScheme,\n getHttpTarget,\n getHttpUrl,\n getNetPeerName,\n getNetPeerPort,\n getPeerIp,\n} from \"./spanUtils.js\";\n\nexport function hrTimeToDate(hrTime: HrTime): Date {\n return new Date(hrTimeToNanoseconds(hrTime) / 1000000);\n}\n\nexport function createTagsFromResource(resource: Resource): Tags {\n const context = getInstance();\n const tags: Tags = { ...context.tags };\n if (resource && resource.attributes) {\n tags[KnownContextTagKeys.AiCloudRole] = getCloudRole(resource);\n tags[KnownContextTagKeys.AiCloudRoleInstance] = getCloudRoleInstance(resource);\n if (resource.attributes[SEMRESATTRS_DEVICE_ID]) {\n tags[KnownContextTagKeys.AiDeviceId] = String(resource.attributes[SEMRESATTRS_DEVICE_ID]);\n }\n if (resource.attributes[SEMRESATTRS_DEVICE_MODEL_NAME]) {\n tags[KnownContextTagKeys.AiDeviceModel] = String(\n resource.attributes[SEMRESATTRS_DEVICE_MODEL_NAME],\n );\n }\n if (resource.attributes[SEMRESATTRS_SERVICE_VERSION]) {\n tags[KnownContextTagKeys.AiApplicationVer] = String(\n resource.attributes[SEMRESATTRS_SERVICE_VERSION],\n );\n }\n }\n return tags;\n}\n\nfunction getCloudRole(resource: Resource): string {\n let cloudRole = \"\";\n // Service attributes\n const serviceName = resource.attributes[SEMRESATTRS_SERVICE_NAME];\n const serviceNamespace = resource.attributes[SEMRESATTRS_SERVICE_NAMESPACE];\n if (serviceName) {\n // Custom Service name provided by customer is highest precedence\n if (!String(serviceName).startsWith(\"unknown_service\")) {\n if (serviceNamespace) {\n return `${serviceNamespace}.${serviceName}`;\n } else {\n return String(serviceName);\n }\n } else {\n // Service attributes will be only used if K8S attributes are not present\n if (serviceNamespace) {\n cloudRole = `${serviceNamespace}.${serviceName}`;\n } else {\n cloudRole = String(serviceName);\n }\n }\n }\n // Kubernetes attributes should take precedence\n const kubernetesDeploymentName = resource.attributes[SEMRESATTRS_K8S_DEPLOYMENT_NAME];\n if (kubernetesDeploymentName) {\n return String(kubernetesDeploymentName);\n }\n const kuberneteReplicasetName = resource.attributes[SEMRESATTRS_K8S_REPLICASET_NAME];\n if (kuberneteReplicasetName) {\n return String(kuberneteReplicasetName);\n }\n const kubernetesStatefulSetName = resource.attributes[SEMRESATTRS_K8S_STATEFULSET_NAME];\n if (kubernetesStatefulSetName) {\n return String(kubernetesStatefulSetName);\n }\n const kubernetesJobName = resource.attributes[SEMRESATTRS_K8S_JOB_NAME];\n if (kubernetesJobName) {\n return String(kubernetesJobName);\n }\n const kubernetesCronjobName = resource.attributes[SEMRESATTRS_K8S_CRONJOB_NAME];\n if (kubernetesCronjobName) {\n return String(kubernetesCronjobName);\n }\n const kubernetesDaemonsetName = resource.attributes[SEMRESATTRS_K8S_DAEMONSET_NAME];\n if (kubernetesDaemonsetName) {\n return String(kubernetesDaemonsetName);\n }\n return cloudRole;\n}\n\nfunction getCloudRoleInstance(resource: Resource): string {\n // Kubernetes attributes should take precedence\n const kubernetesPodName = resource.attributes[SEMRESATTRS_K8S_POD_NAME];\n if (kubernetesPodName) {\n return String(kubernetesPodName);\n }\n // Service attributes\n const serviceInstanceId = resource.attributes[SEMRESATTRS_SERVICE_INSTANCE_ID];\n if (serviceInstanceId) {\n return String(serviceInstanceId);\n }\n // Default\n return os && os.hostname();\n}\n\nexport function isSqlDB(dbSystem: string): boolean {\n return (\n dbSystem === DBSYSTEMVALUES_DB2 ||\n dbSystem === DBSYSTEMVALUES_DERBY ||\n dbSystem === DBSYSTEMVALUES_MARIADB ||\n dbSystem === DBSYSTEMVALUES_MSSQL ||\n dbSystem === DBSYSTEMVALUES_ORACLE ||\n dbSystem === DBSYSTEMVALUES_SQLITE ||\n dbSystem === DBSYSTEMVALUES_OTHER_SQL ||\n dbSystem === DBSYSTEMVALUES_HSQLDB ||\n dbSystem === DBSYSTEMVALUES_H2\n );\n}\n\nexport function getUrl(attributes: Attributes): string {\n if (!attributes) {\n return \"\";\n }\n const httpMethod = getHttpMethod(attributes);\n if (httpMethod) {\n const httpUrl = getHttpUrl(attributes);\n if (httpUrl) {\n return String(httpUrl);\n } else {\n const httpScheme = getHttpScheme(attributes);\n const httpTarget = getHttpTarget(attributes);\n if (httpScheme && httpTarget) {\n const httpHost = getHttpHost(attributes);\n if (httpHost) {\n return `${httpScheme}://${httpHost}${httpTarget}`;\n } else {\n const netPeerPort = getNetPeerPort(attributes);\n if (netPeerPort) {\n const netPeerName = getNetPeerName(attributes);\n if (netPeerName) {\n return `${httpScheme}://${netPeerName}:${netPeerPort}${httpTarget}`;\n } else {\n const netPeerIp = getPeerIp(attributes);\n if (netPeerIp) {\n return `${httpScheme}://${netPeerIp}:${netPeerPort}${httpTarget}`;\n }\n }\n }\n }\n }\n }\n }\n return \"\";\n}\n\nexport function getDependencyTarget(attributes: Attributes): string {\n if (!attributes) {\n return \"\";\n }\n const peerService = attributes[SEMATTRS_PEER_SERVICE];\n const httpHost = getHttpHost(attributes);\n const httpUrl = getHttpUrl(attributes);\n const netPeerName = getNetPeerName(attributes);\n const netPeerIp = getPeerIp(attributes);\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 createResourceMetricEnvelope(\n resource: Resource,\n instrumentationKey: string,\n): Envelope | undefined {\n if (resource && resource.attributes) {\n const tags = createTagsFromResource(resource);\n const resourceAttributes: { [propertyName: string]: string } = {};\n for (const key of Object.keys(resource.attributes)) {\n // Avoid duplication ignoring fields already mapped.\n if (\n !(\n key.startsWith(\"_MS.\") ||\n key === ATTR_TELEMETRY_SDK_VERSION ||\n key === ATTR_TELEMETRY_SDK_LANGUAGE ||\n key === ATTR_TELEMETRY_SDK_NAME\n )\n ) {\n resourceAttributes[key] = resource.attributes[key] as string;\n }\n }\n // Only send event when resource attributes are available\n if (Object.keys(resourceAttributes).length > 0) {\n const baseData: MetricsData = {\n version: 2,\n metrics: [{ name: \"_OTELRESOURCE_\", value: 1 }],\n properties: resourceAttributes,\n };\n const envelope: Envelope = {\n name: \"Microsoft.ApplicationInsights.Metric\",\n time: new Date(),\n sampleRate: 100, // Metrics are never sampled\n instrumentationKey: instrumentationKey,\n version: 1,\n data: {\n baseType: \"MetricData\",\n baseData: baseData,\n },\n tags: tags,\n };\n return envelope;\n }\n }\n return;\n}\n\nexport function serializeAttribute(value: AnyValue): string {\n if (typeof value === \"object\") {\n if (value instanceof Error) {\n try {\n return JSON.stringify(value, Object.getOwnPropertyNames(value));\n } catch (err: unknown) {\n // Failed to serialize, return string cast\n return String(value);\n }\n } else if (value instanceof Uint8Array) {\n return String(value);\n } else {\n try {\n return JSON.stringify(value);\n } catch (err: unknown) {\n // Failed to serialize, return string cast\n return String(value);\n }\n }\n }\n // Return scalar and undefined values\n return String(value);\n}\n\nexport function shouldCreateResourceMetric(): boolean {\n return !(process.env[ENV_OPENTELEMETRY_RESOURCE_METRIC_DISABLED]?.toLowerCase() === \"true\");\n}\n\nexport function isSyntheticSource(attributes: Attributes): boolean {\n return !!attributes[experimentalOpenTelemetryValues.SYNTHETIC_TYPE];\n}\n"]}