@azure/opentelemetry-instrumentation-azure-sdk 1.0.0-beta.7 → 1.0.0-beta.9

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 (69) hide show
  1. package/LICENSE +3 -3
  2. package/README.md +34 -36
  3. package/dist/browser/configuration.js +1 -1
  4. package/dist/browser/configuration.js.map +1 -1
  5. package/dist/browser/instrumentation-browser.d.mts.map +1 -1
  6. package/dist/browser/instrumentation-browser.mjs.map +1 -1
  7. package/dist/browser/instrumentation.d.ts +2 -1
  8. package/dist/browser/instrumentation.js +1 -1
  9. package/dist/browser/instrumenter.d.ts +1 -1
  10. package/dist/browser/instrumenter.d.ts.map +1 -1
  11. package/dist/browser/instrumenter.js.map +1 -1
  12. package/dist/browser/spanWrapper.d.ts +2 -2
  13. package/dist/browser/spanWrapper.d.ts.map +1 -1
  14. package/dist/browser/spanWrapper.js +17 -2
  15. package/dist/browser/spanWrapper.js.map +1 -1
  16. package/dist/browser/transformations.d.ts +3 -2
  17. package/dist/browser/transformations.d.ts.map +1 -1
  18. package/dist/browser/transformations.js.map +1 -1
  19. package/dist/commonjs/configuration.js +1 -1
  20. package/dist/commonjs/configuration.js.map +1 -1
  21. package/dist/commonjs/instrumentation.d.ts +8 -5
  22. package/dist/commonjs/instrumentation.d.ts.map +1 -1
  23. package/dist/commonjs/instrumentation.js +6 -4
  24. package/dist/commonjs/instrumentation.js.map +1 -1
  25. package/dist/commonjs/instrumenter.d.ts +1 -1
  26. package/dist/commonjs/instrumenter.d.ts.map +1 -1
  27. package/dist/commonjs/instrumenter.js.map +1 -1
  28. package/dist/commonjs/spanWrapper.d.ts +2 -2
  29. package/dist/commonjs/spanWrapper.d.ts.map +1 -1
  30. package/dist/commonjs/spanWrapper.js +17 -2
  31. package/dist/commonjs/spanWrapper.js.map +1 -1
  32. package/dist/commonjs/transformations.d.ts +3 -2
  33. package/dist/commonjs/transformations.d.ts.map +1 -1
  34. package/dist/commonjs/transformations.js.map +1 -1
  35. package/dist/commonjs/tsdoc-metadata.json +1 -1
  36. package/dist/esm/configuration.js +1 -1
  37. package/dist/esm/configuration.js.map +1 -1
  38. package/dist/esm/instrumentation.d.ts +8 -5
  39. package/dist/esm/instrumentation.d.ts.map +1 -1
  40. package/dist/esm/instrumentation.js +6 -4
  41. package/dist/esm/instrumentation.js.map +1 -1
  42. package/dist/esm/instrumenter.d.ts +1 -1
  43. package/dist/esm/instrumenter.d.ts.map +1 -1
  44. package/dist/esm/instrumenter.js.map +1 -1
  45. package/dist/esm/spanWrapper.d.ts +2 -2
  46. package/dist/esm/spanWrapper.d.ts.map +1 -1
  47. package/dist/esm/spanWrapper.js +17 -2
  48. package/dist/esm/spanWrapper.js.map +1 -1
  49. package/dist/esm/transformations.d.ts +3 -2
  50. package/dist/esm/transformations.d.ts.map +1 -1
  51. package/dist/esm/transformations.js.map +1 -1
  52. package/dist/react-native/configuration.js +1 -1
  53. package/dist/react-native/configuration.js.map +1 -1
  54. package/dist/react-native/instrumentation.d.ts +8 -5
  55. package/dist/react-native/instrumentation.d.ts.map +1 -1
  56. package/dist/react-native/instrumentation.js +6 -4
  57. package/dist/react-native/instrumentation.js.map +1 -1
  58. package/dist/react-native/instrumenter.d.ts +1 -1
  59. package/dist/react-native/instrumenter.d.ts.map +1 -1
  60. package/dist/react-native/instrumenter.js.map +1 -1
  61. package/dist/react-native/spanWrapper.d.ts +2 -2
  62. package/dist/react-native/spanWrapper.d.ts.map +1 -1
  63. package/dist/react-native/spanWrapper.js +17 -2
  64. package/dist/react-native/spanWrapper.js.map +1 -1
  65. package/dist/react-native/transformations.d.ts +3 -2
  66. package/dist/react-native/transformations.d.ts.map +1 -1
  67. package/dist/react-native/transformations.js.map +1 -1
  68. package/package.json +23 -32
  69. package/types/latest/opentelemetry-instrumentation-azure-sdk.d.ts +0 -52
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
- The MIT License (MIT)
1
+ Copyright (c) Microsoft Corporation.
2
2
 
3
- Copyright (c) 2020 Microsoft
3
+ MIT License
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -12,7 +12,7 @@ furnished to do so, subject to the following conditions:
12
12
  The above copyright notice and this permission notice shall be included in all
13
13
  copies or substantial portions of the Software.
14
14
 
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
16
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
17
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
18
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
package/README.md CHANGED
@@ -38,15 +38,16 @@ To use this client library in the browser, first you need to use a bundler. For
38
38
 
39
39
  ### Enable OpenTelemetry instrumentation
40
40
 
41
- ```javascript
42
- const { registerInstrumentations } = require("@opentelemetry/instrumentation");
43
- const { createAzureSdkInstrumentation } = require("@azure/opentelemetry-instrumentation-azure-sdk");
44
-
45
- // Set-up and configure a Node Tracer Provider using OpenTelemetry
46
- const opentelemetry = require("@opentelemetry/api");
47
- const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node");
48
- const { SimpleSpanProcessor, ConsoleSpanExporter } = require("@opentelemetry/tracing");
49
-
41
+ ```ts snippet:enable_instrumentation
42
+ import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
43
+ import { SimpleSpanProcessor, ConsoleSpanExporter } from "@opentelemetry/tracing";
44
+ import { registerInstrumentations } from "@opentelemetry/instrumentation";
45
+ import { createAzureSdkInstrumentation } from "@azure/opentelemetry-instrumentation-azure-sdk";
46
+ import { KeyClient } from "@azure/keyvault-keys";
47
+ import { DefaultAzureCredential } from "@azure/identity";
48
+ import { trace, context } from "@opentelemetry/api";
49
+
50
+ // Set-up and configure a Node Tracer Provider using OpenTelemetry SDK.
50
51
  const provider = new NodeTracerProvider();
51
52
  provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
52
53
  provider.register();
@@ -56,30 +57,27 @@ registerInstrumentations({
56
57
  });
57
58
 
58
59
  // Continue to import any Azure SDK client libraries after registering the instrumentation.
59
-
60
- const { KeyClient } = require("@azure/keyvault-keys");
61
- const { DefaultAzureCredential } = require("@azure/identity");
62
-
63
- const keyClient = new KeyClient(url, new DefaultAzureCredential());
64
-
65
- async function main() {
66
- // Tracing is now enabled using automatic span propagation with an active context.
67
- await keyClient.getKey("MyKeyName");
68
-
69
- // If your scenario requires manual span propagation, all Azure client libraries
70
- // support explicitly passing a parent context via an `options` parameter.
71
- // Get a tracer from a registered provider, create a span, and get the current context.
72
- const tracer = opentelemetry.trace.getTracer("my-tracer");
73
- const span = tracer.startSpan("main");
74
- const ctx = opentelemetry.trace.setSpan(opentelemetry.context.active(), span);
75
-
76
- await keyClient.getKey("MyKeyName", {
77
- tracingOptions: {
78
- // ctx will be used as the parent context for all operations.
79
- tracingContext: ctx,
80
- },
81
- });
82
- }
60
+ // import { KeyClient } from "@azure/keyvault-keys";
61
+ // import { DefaultAzureCredential } from "@azure/identity";
62
+
63
+ const keyClient = new KeyClient("https://my.keyvault.azure.net", new DefaultAzureCredential());
64
+
65
+ // Tracing is now enabled using automatic span propagation with an active context.
66
+ await keyClient.getKey("MyKeyName");
67
+
68
+ // If your scenario requires manual span propagation, all Azure client libraries
69
+ // support explicitly passing a parent context via an `options` parameter.
70
+ // Get a tracer from a registered provider, create a span, and get the current context.
71
+ const tracer = trace.getTracer("my-tracer");
72
+ const span = tracer.startSpan("main");
73
+ const ctx = trace.setSpan(context.active(), span);
74
+
75
+ await keyClient.getKey("MyKeyName", {
76
+ tracingOptions: {
77
+ // ctx will be used as the parent context for all operations.
78
+ tracingContext: ctx,
79
+ },
80
+ });
83
81
  ```
84
82
 
85
83
  ## Troubleshooting
@@ -88,8 +86,8 @@ async function main() {
88
86
 
89
87
  Enabling logging may help uncover useful information about failures. In order to see a log of HTTP requests and responses, set the `AZURE_LOG_LEVEL` environment variable to `info`. Alternatively, logging can be enabled at runtime by calling `setLogLevel` in the `@azure/logger`:
90
88
 
91
- ```javascript
92
- const { setLogLevel } = require("@azure/logger");
89
+ ```ts snippet:logging
90
+ import { setLogLevel } from "@azure/logger";
93
91
 
94
92
  setLogLevel("info");
95
93
  ```
@@ -108,7 +106,7 @@ If you'd like to contribute to this library, please read the [contributing guide
108
106
 
109
107
  - [Microsoft Azure SDK for Javascript](https://github.com/Azure/azure-sdk-for-js)
110
108
 
111
- ![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-js%2Fsdk%2Ftemplate%2Ftemplate%2FREADME.png)
109
+
112
110
 
113
111
  [azure_sub]: https://azure.microsoft.com/free/
114
112
  [otel_instrumentation]: https://www.npmjs.com/package/@opentelemetry/instrumentation
@@ -1,6 +1,6 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
- export const SDK_VERSION = "1.0.0-beta.7";
3
+ export const SDK_VERSION = "1.0.0-beta.9";
4
4
  /**
5
5
  * @internal
6
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/configuration.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,CAAC,MAAM,WAAW,GAAW,cAAc,CAAC;AASlD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2C,CAAC;AAEnF;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAwB;;IACtD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,MAAA,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAwB;;IACvD,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACpE,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport const SDK_VERSION: string = \"1.0.0-beta.7\";\n\n/**\n * @internal\n *\n * Keys of known environment variables we look up.\n */\nexport type KnownEnvironmentKey = \"AZURE_HTTP_TRACING_CHILDREN_DISABLED\" | \"AZURE_TRACING_DISABLED\";\n\n/**\n * @internal\n *\n * Cached values of environment variables that were fetched.\n */\nexport const environmentCache = new Map<KnownEnvironmentKey, string | undefined>();\n\n/**\n * Converts an environment variable to Boolean.\n * the strings \"false\" and \"0\" are treated as falsy values.\n *\n * @internal\n */\nexport function envVarToBoolean(key: KnownEnvironmentKey): boolean {\n if (!environmentCache.has(key)) {\n loadEnvironmentVariable(key);\n }\n const value = (environmentCache.get(key) ?? \"\").toLowerCase();\n return value !== \"false\" && value !== \"0\" && Boolean(value);\n}\n\nfunction loadEnvironmentVariable(key: KnownEnvironmentKey): void {\n if (typeof process !== \"undefined\" && process.env) {\n const rawValue = process.env[key] ?? process.env[key.toLowerCase()];\n environmentCache.set(key, rawValue);\n }\n}\n"]}
1
+ {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/configuration.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,CAAC,MAAM,WAAW,GAAW,cAAc,CAAC;AASlD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2C,CAAC;AAEnF;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAwB;;IACtD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,MAAA,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAwB;;IACvD,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACpE,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport const SDK_VERSION: string = \"1.0.0-beta.9\";\n\n/**\n * @internal\n *\n * Keys of known environment variables we look up.\n */\nexport type KnownEnvironmentKey = \"AZURE_HTTP_TRACING_CHILDREN_DISABLED\" | \"AZURE_TRACING_DISABLED\";\n\n/**\n * @internal\n *\n * Cached values of environment variables that were fetched.\n */\nexport const environmentCache = new Map<KnownEnvironmentKey, string | undefined>();\n\n/**\n * Converts an environment variable to Boolean.\n * the strings \"false\" and \"0\" are treated as falsy values.\n *\n * @internal\n */\nexport function envVarToBoolean(key: KnownEnvironmentKey): boolean {\n if (!environmentCache.has(key)) {\n loadEnvironmentVariable(key);\n }\n const value = (environmentCache.get(key) ?? \"\").toLowerCase();\n return value !== \"false\" && value !== \"0\" && Boolean(value);\n}\n\nfunction loadEnvironmentVariable(key: KnownEnvironmentKey): void {\n if (typeof process !== \"undefined\" && process.env) {\n const rawValue = process.env[key] ?? process.env[key.toLowerCase()];\n environmentCache.set(key, rawValue);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation-browser.d.mts","sourceRoot":"","sources":["../../src/instrumentation-browser.mts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,gCAAgC,CAAC;AAMxC;;GAEG;AACH,MAAM,WAAW,8BAA+B,SAAQ,qBAAqB;CAAG;AAEhF;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,mBAAmB;gBAClD,OAAO,GAAE,8BAAmC;IAOxD,2GAA2G;IAC3G,SAAS,CAAC,IAAI,IAAI,IAAI;IAItB;;OAEG;IACH,MAAM,IAAI,IAAI;IAId,OAAO,IAAI,IAAI;CAGhB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,8BAAmC,GAC3C,eAAe,CAEjB"}
1
+ {"version":3,"file":"instrumentation-browser.d.mts","sourceRoot":"","sources":["../../src/instrumentation-browser.mts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACpB,MAAM,gCAAgC,CAAC;AAMxC;;GAEG;AACH,MAAM,WAAW,8BAA+B,SAAQ,qBAAqB;CAAG;AAEhF;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,mBAAmB;gBAClD,OAAO,GAAE,8BAAmC;IAOxD,2GAA2G;IAC3G,SAAS,CAAC,IAAI,IAAI,IAAI;IAItB;;OAEG;IACH,MAAM,IAAI,IAAI;IAId,OAAO,IAAI,IAAI;CAGhB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,8BAAmC,GAC3C,eAAe,CAEjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation-browser.mjs","sourceRoot":"","sources":["../../src/instrumentation-browser.mts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAEL,mBAAmB,GAEpB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAOtD;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,mBAAmB;IAC9D,YAAY,UAA0C,EAAE;QACtD,KAAK,CACH,gDAAgD,EAChD,WAAW,EACX,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAC3B,CAAC;IACJ,CAAC;IACD,2GAA2G;IACjG,IAAI;QACZ,QAAQ;IACV,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,eAAe,CAAC,IAAI,yBAAyB,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO;QACL,QAAQ;IACV,CAAC;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,6BAA6B,CAC3C,UAA0C,EAAE;IAE5C,OAAO,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n Instrumentation,\n InstrumentationBase,\n InstrumentationConfig,\n} from \"@opentelemetry/instrumentation\";\n\nimport { OpenTelemetryInstrumenter } from \"./instrumenter.js\";\nimport { SDK_VERSION } from \"./configuration.js\";\nimport { useInstrumenter } from \"@azure/core-tracing\";\n\n/**\n * Configuration options that can be passed to {@link createAzureSdkInstrumentation} function.\n */\nexport interface AzureSdkInstrumentationOptions extends InstrumentationConfig {}\n\n/**\n * The instrumentation module for the Azure SDK. Implements OpenTelemetry's {@link Instrumentation}.\n */\nexport class AzureSdkInstrumentation extends InstrumentationBase {\n constructor(options: AzureSdkInstrumentationOptions = {}) {\n super(\n \"@azure/opentelemetry-instrumentation-azure-sdk\",\n SDK_VERSION,\n Object.assign({}, options),\n );\n }\n /** In the browser we rely on overriding the `enable` function instead as there are no modules to patch. */\n protected init(): void {\n // no-op\n }\n\n /**\n * Entrypoint for the module registration. Ensures the global instrumenter is set to use OpenTelemetry.\n */\n enable(): void {\n useInstrumenter(new OpenTelemetryInstrumenter());\n }\n\n disable(): void {\n // no-op\n }\n}\n\n/**\n * Enables Azure SDK Instrumentation using OpenTelemetry for Azure SDK client libraries.\n *\n * When registered, any Azure data plane package will begin emitting tracing spans for internal calls\n * as well as network calls\n *\n * Example usage:\n * ```ts\n * const openTelemetryInstrumentation = require(\"@opentelemetry/instrumentation\");\n * openTelemetryInstrumentation.registerInstrumentations({\n * instrumentations: [createAzureSdkInstrumentation()],\n * })\n * ```\n */\nexport function createAzureSdkInstrumentation(\n options: AzureSdkInstrumentationOptions = {},\n): Instrumentation {\n return new AzureSdkInstrumentation(options);\n}\n"]}
1
+ {"version":3,"file":"instrumentation-browser.mjs","sourceRoot":"","sources":["../../src/instrumentation-browser.mts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAKlC,OAAO,EACL,mBAAmB,EACpB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAOtD;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,mBAAmB;IAC9D,YAAY,UAA0C,EAAE;QACtD,KAAK,CACH,gDAAgD,EAChD,WAAW,EACX,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAC3B,CAAC;IACJ,CAAC;IACD,2GAA2G;IACjG,IAAI;QACZ,QAAQ;IACV,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,eAAe,CAAC,IAAI,yBAAyB,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO;QACL,QAAQ;IACV,CAAC;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,6BAA6B,CAC3C,UAA0C,EAAE;IAE5C,OAAO,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n Instrumentation,\n InstrumentationConfig} from \"@opentelemetry/instrumentation\";\nimport {\n InstrumentationBase\n} from \"@opentelemetry/instrumentation\";\n\nimport { OpenTelemetryInstrumenter } from \"./instrumenter.js\";\nimport { SDK_VERSION } from \"./configuration.js\";\nimport { useInstrumenter } from \"@azure/core-tracing\";\n\n/**\n * Configuration options that can be passed to {@link createAzureSdkInstrumentation} function.\n */\nexport interface AzureSdkInstrumentationOptions extends InstrumentationConfig {}\n\n/**\n * The instrumentation module for the Azure SDK. Implements OpenTelemetry's {@link Instrumentation}.\n */\nexport class AzureSdkInstrumentation extends InstrumentationBase {\n constructor(options: AzureSdkInstrumentationOptions = {}) {\n super(\n \"@azure/opentelemetry-instrumentation-azure-sdk\",\n SDK_VERSION,\n Object.assign({}, options),\n );\n }\n /** In the browser we rely on overriding the `enable` function instead as there are no modules to patch. */\n protected init(): void {\n // no-op\n }\n\n /**\n * Entrypoint for the module registration. Ensures the global instrumenter is set to use OpenTelemetry.\n */\n enable(): void {\n useInstrumenter(new OpenTelemetryInstrumenter());\n }\n\n disable(): void {\n // no-op\n }\n}\n\n/**\n * Enables Azure SDK Instrumentation using OpenTelemetry for Azure SDK client libraries.\n *\n * When registered, any Azure data plane package will begin emitting tracing spans for internal calls\n * as well as network calls\n *\n * Example usage:\n * ```ts\n * const openTelemetryInstrumentation = require(\"@opentelemetry/instrumentation\");\n * openTelemetryInstrumentation.registerInstrumentations({\n * instrumentations: [createAzureSdkInstrumentation()],\n * })\n * ```\n */\nexport function createAzureSdkInstrumentation(\n options: AzureSdkInstrumentationOptions = {},\n): Instrumentation {\n return new AzureSdkInstrumentation(options);\n}\n"]}
@@ -1,4 +1,5 @@
1
- import { Instrumentation, InstrumentationBase, InstrumentationConfig } from "@opentelemetry/instrumentation";
1
+ import type { Instrumentation, InstrumentationConfig } from "@opentelemetry/instrumentation";
2
+ import { InstrumentationBase } from "@opentelemetry/instrumentation";
2
3
  /**
3
4
  * Configuration options that can be passed to {@link createAzureSdkInstrumentation} function.
4
5
  */
@@ -1,6 +1,6 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
- import { InstrumentationBase, } from "@opentelemetry/instrumentation";
3
+ import { InstrumentationBase } from "@opentelemetry/instrumentation";
4
4
  import { OpenTelemetryInstrumenter } from "./instrumenter.js";
5
5
  import { SDK_VERSION } from "./configuration.js";
6
6
  import { useInstrumenter } from "@azure/core-tracing";
@@ -1,4 +1,4 @@
1
- import { Instrumenter, InstrumenterSpanOptions, TracingContext, TracingSpan } from "@azure/core-tracing";
1
+ import type { Instrumenter, InstrumenterSpanOptions, TracingContext, TracingSpan } from "@azure/core-tracing";
2
2
  import { W3CTraceContextPropagator } from "@opentelemetry/core";
3
3
  export declare const propagator: W3CTraceContextPropagator;
4
4
  export declare class OpenTelemetryInstrumenter implements Instrumenter {
@@ -1 +1 @@
1
- {"version":3,"file":"instrumenter.d.ts","sourceRoot":"","sources":["../../src/instrumenter.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,cAAc,EACd,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAmB,MAAM,qBAAqB,CAAC;AAOjF,eAAO,MAAM,UAAU,2BAAkC,CAAC;AAE1D,qBAAa,yBAA0B,YAAW,YAAY;IAC5D,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,uBAAuB,GACnC;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,cAAc,EAAE,cAAc,CAAA;KAAE;IA2BxD,WAAW,CACT,YAAY,SAAS,OAAO,EAAE,EAC9B,QAAQ,SAAS,CAAC,GAAG,IAAI,EAAE,YAAY,KAAK,UAAU,CAAC,QAAQ,CAAC,EAEhE,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,GAAG,YAAY,EAAE,YAAY,GAC5B,UAAU,CAAC,QAAQ,CAAC;IASvB,sBAAsB,CAAC,iBAAiB,EAAE,MAAM,GAAG,cAAc;IAQjE,oBAAoB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAK9E"}
1
+ {"version":3,"file":"instrumenter.d.ts","sourceRoot":"","sources":["../../src/instrumenter.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACvB,cAAc,EACd,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAmB,MAAM,qBAAqB,CAAC;AAOjF,eAAO,MAAM,UAAU,2BAAkC,CAAC;AAE1D,qBAAa,yBAA0B,YAAW,YAAY;IAC5D,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,uBAAuB,GACnC;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,cAAc,EAAE,cAAc,CAAA;KAAE;IA2BxD,WAAW,CACT,YAAY,SAAS,OAAO,EAAE,EAC9B,QAAQ,SAAS,CAAC,GAAG,IAAI,EAAE,YAAY,KAAK,UAAU,CAAC,QAAQ,CAAC,EAEhE,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,GAAG,YAAY,EAAE,YAAY,GAC5B,UAAU,CAAC,QAAQ,CAAC;IASvB,sBAAsB,CAAC,iBAAiB,EAAE,MAAM,GAAG,cAAc;IAQjE,oBAAoB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAK9E"}
@@ -1 +1 @@
1
- {"version":3,"file":"instrumenter.js","sourceRoot":"","sources":["../../src/instrumenter.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EACL,oBAAoB,EAEpB,OAAO,EACP,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,GACN,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,oGAAoG;AACpG,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,yBAAyB,EAAE,CAAC;AAE1D,MAAM,OAAO,yBAAyB;IACpC,SAAS,CACP,IAAY,EACZ,WAAoC;QAEpC,IAAI,GAAG,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,cAAc,KAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1D,IAAI,IAAU,CAAC;QAEf,IAAI,eAAe,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAC9C,sDAAsD;YACtD,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,kBAAkB;YAClB,IAAI,GAAG,KAAK;iBACT,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,cAAc,CAAC;iBAC9D,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;YAEpD,IACE,eAAe,CAAC,sCAAsC,CAAC;gBACvD,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EACrC,CAAC;gBACD,2BAA2B;gBAC3B,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,IAAI,wBAAwB,CAAC,IAAI,CAAC;YACxC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;SACzC,CAAC;IACJ,CAAC;IACD,WAAW,CAIT,cAA8B,EAC9B,QAAkB,EAClB,GAAG,YAA0B;QAE7B,OAAO,OAAO,CAAC,IAAI,CACjB,cAAc,EACd,QAAQ;QACR,4DAA4D,CAAC,SAAS,EACtE,GAAG,YAAY,CAChB,CAAC;IACJ,CAAC;IAED,sBAAsB,CAAC,iBAAyB;QAC9C,OAAO,UAAU,CAAC,OAAO,CACvB,OAAO,CAAC,MAAM,EAAE,EAChB,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAClC,oBAAoB,CACrB,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,cAA+B;QAClD,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,UAAU,CAAC,MAAM,CAAC,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC;QACrF,OAAO,OAAO,CAAC;IACjB,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n INVALID_SPAN_CONTEXT,\n Span,\n context,\n defaultTextMapGetter,\n defaultTextMapSetter,\n trace,\n} from \"@opentelemetry/api\";\nimport {\n Instrumenter,\n InstrumenterSpanOptions,\n TracingContext,\n TracingSpan,\n} from \"@azure/core-tracing\";\nimport { W3CTraceContextPropagator, suppressTracing } from \"@opentelemetry/core\";\n\nimport { OpenTelemetrySpanWrapper } from \"./spanWrapper.js\";\nimport { envVarToBoolean } from \"./configuration.js\";\nimport { toSpanOptions } from \"./transformations.js\";\n\n// While default propagation is user-configurable, Azure services always use the W3C implementation.\nexport const propagator = new W3CTraceContextPropagator();\n\nexport class OpenTelemetryInstrumenter implements Instrumenter {\n startSpan(\n name: string,\n spanOptions: InstrumenterSpanOptions,\n ): { span: TracingSpan; tracingContext: TracingContext } {\n let ctx = spanOptions?.tracingContext || context.active();\n let span: Span;\n\n if (envVarToBoolean(\"AZURE_TRACING_DISABLED\")) {\n // disable only our spans but not any downstream spans\n span = trace.wrapSpanContext(INVALID_SPAN_CONTEXT);\n } else {\n // Create our span\n span = trace\n .getTracer(spanOptions.packageName, spanOptions.packageVersion)\n .startSpan(name, toSpanOptions(spanOptions), ctx);\n\n if (\n envVarToBoolean(\"AZURE_HTTP_TRACING_CHILDREN_DISABLED\") &&\n name.toUpperCase().startsWith(\"HTTP\")\n ) {\n // disable downstream spans\n ctx = suppressTracing(ctx);\n }\n }\n\n return {\n span: new OpenTelemetrySpanWrapper(span),\n tracingContext: trace.setSpan(ctx, span),\n };\n }\n withContext<\n CallbackArgs extends unknown[],\n Callback extends (...args: CallbackArgs) => ReturnType<Callback>,\n >(\n tracingContext: TracingContext,\n callback: Callback,\n ...callbackArgs: CallbackArgs\n ): ReturnType<Callback> {\n return context.with(\n tracingContext,\n callback,\n /** Assume caller will bind `this` or use arrow functions */ undefined,\n ...callbackArgs,\n );\n }\n\n parseTraceparentHeader(traceparentHeader: string): TracingContext {\n return propagator.extract(\n context.active(),\n { traceparent: traceparentHeader },\n defaultTextMapGetter,\n );\n }\n\n createRequestHeaders(tracingContext?: TracingContext): Record<string, string> {\n const headers: Record<string, string> = {};\n propagator.inject(tracingContext || context.active(), headers, defaultTextMapSetter);\n return headers;\n }\n}\n"]}
1
+ {"version":3,"file":"instrumenter.js","sourceRoot":"","sources":["../../src/instrumenter.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EACL,oBAAoB,EACpB,OAAO,EACP,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,GACN,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,oGAAoG;AACpG,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,yBAAyB,EAAE,CAAC;AAE1D,MAAM,OAAO,yBAAyB;IACpC,SAAS,CACP,IAAY,EACZ,WAAoC;QAEpC,IAAI,GAAG,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,cAAc,KAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1D,IAAI,IAAU,CAAC;QAEf,IAAI,eAAe,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAC9C,sDAAsD;YACtD,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,kBAAkB;YAClB,IAAI,GAAG,KAAK;iBACT,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,cAAc,CAAC;iBAC9D,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;YAEpD,IACE,eAAe,CAAC,sCAAsC,CAAC;gBACvD,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EACrC,CAAC;gBACD,2BAA2B;gBAC3B,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,IAAI,wBAAwB,CAAC,IAAI,CAAC;YACxC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;SACzC,CAAC;IACJ,CAAC;IACD,WAAW,CAIT,cAA8B,EAC9B,QAAkB,EAClB,GAAG,YAA0B;QAE7B,OAAO,OAAO,CAAC,IAAI,CACjB,cAAc,EACd,QAAQ;QACR,4DAA4D,CAAC,SAAS,EACtE,GAAG,YAAY,CAChB,CAAC;IACJ,CAAC;IAED,sBAAsB,CAAC,iBAAyB;QAC9C,OAAO,UAAU,CAAC,OAAO,CACvB,OAAO,CAAC,MAAM,EAAE,EAChB,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAClC,oBAAoB,CACrB,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,cAA+B;QAClD,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,UAAU,CAAC,MAAM,CAAC,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC;QACrF,OAAO,OAAO,CAAC;IACjB,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Span } from \"@opentelemetry/api\";\nimport {\n INVALID_SPAN_CONTEXT,\n context,\n defaultTextMapGetter,\n defaultTextMapSetter,\n trace,\n} from \"@opentelemetry/api\";\nimport type {\n Instrumenter,\n InstrumenterSpanOptions,\n TracingContext,\n TracingSpan,\n} from \"@azure/core-tracing\";\nimport { W3CTraceContextPropagator, suppressTracing } from \"@opentelemetry/core\";\n\nimport { OpenTelemetrySpanWrapper } from \"./spanWrapper.js\";\nimport { envVarToBoolean } from \"./configuration.js\";\nimport { toSpanOptions } from \"./transformations.js\";\n\n// While default propagation is user-configurable, Azure services always use the W3C implementation.\nexport const propagator = new W3CTraceContextPropagator();\n\nexport class OpenTelemetryInstrumenter implements Instrumenter {\n startSpan(\n name: string,\n spanOptions: InstrumenterSpanOptions,\n ): { span: TracingSpan; tracingContext: TracingContext } {\n let ctx = spanOptions?.tracingContext || context.active();\n let span: Span;\n\n if (envVarToBoolean(\"AZURE_TRACING_DISABLED\")) {\n // disable only our spans but not any downstream spans\n span = trace.wrapSpanContext(INVALID_SPAN_CONTEXT);\n } else {\n // Create our span\n span = trace\n .getTracer(spanOptions.packageName, spanOptions.packageVersion)\n .startSpan(name, toSpanOptions(spanOptions), ctx);\n\n if (\n envVarToBoolean(\"AZURE_HTTP_TRACING_CHILDREN_DISABLED\") &&\n name.toUpperCase().startsWith(\"HTTP\")\n ) {\n // disable downstream spans\n ctx = suppressTracing(ctx);\n }\n }\n\n return {\n span: new OpenTelemetrySpanWrapper(span),\n tracingContext: trace.setSpan(ctx, span),\n };\n }\n withContext<\n CallbackArgs extends unknown[],\n Callback extends (...args: CallbackArgs) => ReturnType<Callback>,\n >(\n tracingContext: TracingContext,\n callback: Callback,\n ...callbackArgs: CallbackArgs\n ): ReturnType<Callback> {\n return context.with(\n tracingContext,\n callback,\n /** Assume caller will bind `this` or use arrow functions */ undefined,\n ...callbackArgs,\n );\n }\n\n parseTraceparentHeader(traceparentHeader: string): TracingContext {\n return propagator.extract(\n context.active(),\n { traceparent: traceparentHeader },\n defaultTextMapGetter,\n );\n }\n\n createRequestHeaders(tracingContext?: TracingContext): Record<string, string> {\n const headers: Record<string, string> = {};\n propagator.inject(tracingContext || context.active(), headers, defaultTextMapSetter);\n return headers;\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { Span } from "@opentelemetry/api";
2
- import { SpanStatus, TracingSpan, AddEventOptions } from "@azure/core-tracing";
1
+ import type { Span } from "@opentelemetry/api";
2
+ import type { SpanStatus, TracingSpan, AddEventOptions } from "@azure/core-tracing";
3
3
  export declare class OpenTelemetrySpanWrapper implements TracingSpan {
4
4
  private _span;
5
5
  constructor(span: Span);
@@ -1 +1 @@
1
- {"version":3,"file":"spanWrapper.d.ts","sourceRoot":"","sources":["../../src/spanWrapper.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAkB,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG/E,qBAAa,wBAAyB,YAAW,WAAW;IAC1D,OAAO,CAAC,KAAK,CAAO;gBAER,IAAI,EAAE,IAAI;IAItB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAanC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAMhD,GAAG,IAAI,IAAI;IAIX,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAIhD,WAAW,IAAI,OAAO;IAItB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI;IAI3D;;;;;OAKG;IACH,MAAM,IAAI,IAAI;CAGf"}
1
+ {"version":3,"file":"spanWrapper.d.ts","sourceRoot":"","sources":["../../src/spanWrapper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAIpF,qBAAa,wBAAyB,YAAW,WAAW;IAC1D,OAAO,CAAC,KAAK,CAAO;gBAER,IAAI,EAAE,IAAI;IAItB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAanC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAMhD,GAAG,IAAI,IAAI;IAIX,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAIhD,WAAW,IAAI,OAAO;IAItB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI;IAI3D;;;;;OAKG;IACH,MAAM,IAAI,IAAI;CAGf"}
@@ -2,12 +2,13 @@
2
2
  // Licensed under the MIT License.
3
3
  import { SpanStatusCode } from "@opentelemetry/api";
4
4
  import { isAttributeValue, sanitizeAttributes } from "@opentelemetry/core";
5
+ import { logger } from "./logger.js";
5
6
  export class OpenTelemetrySpanWrapper {
6
7
  constructor(span) {
7
8
  this._span = span;
8
9
  }
9
10
  setStatus(status) {
10
- if (status.status === "error") {
11
+ if (status.status === "error" && isRecordableError(status.error)) {
11
12
  if (status.error) {
12
13
  this._span.setStatus({ code: SpanStatusCode.ERROR, message: status.error.toString() });
13
14
  this.recordException(status.error);
@@ -17,7 +18,7 @@ export class OpenTelemetrySpanWrapper {
17
18
  }
18
19
  }
19
20
  else if (status.status === "success") {
20
- this._span.setStatus({ code: SpanStatusCode.OK });
21
+ logger.verbose("Leaving span with status UNSET per OpenTelemetry spec.");
21
22
  }
22
23
  }
23
24
  setAttribute(name, value) {
@@ -47,4 +48,18 @@ export class OpenTelemetrySpanWrapper {
47
48
  return this._span;
48
49
  }
49
50
  }
51
+ /**
52
+ * Determines if an error should be recorded on the span.
53
+ *
54
+ * By default, all errors will mark the span status as error
55
+ * except for {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/304} which is expected
56
+ * when the cached resource is still valid in a conditional request.
57
+ */
58
+ function isRecordableError(error) {
59
+ if (error !== null && typeof error === "object" && "statusCode" in error) {
60
+ return error.statusCode !== 304;
61
+ }
62
+ // we do not have enough information to determine if this error is recordable so we assume it is
63
+ return true;
64
+ }
50
65
  //# sourceMappingURL=spanWrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spanWrapper.js","sourceRoot":"","sources":["../../src/spanWrapper.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAQ,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,MAAM,OAAO,wBAAwB;IAGnC,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,SAAS,CAAC,MAAkB;QAC1B,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACvF,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,KAAc;QACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,GAAG;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,eAAe,CAAC,SAAyB;QACvC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,UAA2B,EAAE;QAClD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACvF,CAAC;IAED;;;;;OAKG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Span, SpanStatusCode } from \"@opentelemetry/api\";\nimport { SpanStatus, TracingSpan, AddEventOptions } from \"@azure/core-tracing\";\nimport { isAttributeValue, sanitizeAttributes } from \"@opentelemetry/core\";\n\nexport class OpenTelemetrySpanWrapper implements TracingSpan {\n private _span: Span;\n\n constructor(span: Span) {\n this._span = span;\n }\n\n setStatus(status: SpanStatus): void {\n if (status.status === \"error\") {\n if (status.error) {\n this._span.setStatus({ code: SpanStatusCode.ERROR, message: status.error.toString() });\n this.recordException(status.error);\n } else {\n this._span.setStatus({ code: SpanStatusCode.ERROR });\n }\n } else if (status.status === \"success\") {\n this._span.setStatus({ code: SpanStatusCode.OK });\n }\n }\n\n setAttribute(name: string, value: unknown): void {\n if (value !== null && value !== undefined && isAttributeValue(value)) {\n this._span.setAttribute(name, value);\n }\n }\n\n end(): void {\n this._span.end();\n }\n\n recordException(exception: string | Error): void {\n this._span.recordException(exception);\n }\n\n isRecording(): boolean {\n return this._span.isRecording();\n }\n\n addEvent(name: string, options: AddEventOptions = {}): void {\n this._span.addEvent(name, sanitizeAttributes(options.attributes), options.startTime);\n }\n\n /**\n * Allows getting the wrapped span as needed.\n * @internal\n *\n * @returns The underlying span\n */\n unwrap(): Span {\n return this._span;\n }\n}\n"]}
1
+ {"version":3,"file":"spanWrapper.js","sourceRoot":"","sources":["../../src/spanWrapper.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAO,wBAAwB;IAGnC,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,SAAS,CAAC,MAAkB;QAC1B,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACvF,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,KAAc;QACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,GAAG;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,eAAe,CAAC,SAAyB;QACvC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,UAA2B,EAAE;QAClD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACvF,CAAC;IAED;;;;;OAKG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,KAAiC;IAC1D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;QACzE,OAAO,KAAK,CAAC,UAAU,KAAK,GAAG,CAAC;IAClC,CAAC;IAED,gGAAgG;IAChG,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Span } from \"@opentelemetry/api\";\nimport { SpanStatusCode } from \"@opentelemetry/api\";\nimport type { SpanStatus, TracingSpan, AddEventOptions } from \"@azure/core-tracing\";\nimport { isAttributeValue, sanitizeAttributes } from \"@opentelemetry/core\";\nimport { logger } from \"./logger.js\";\n\nexport class OpenTelemetrySpanWrapper implements TracingSpan {\n private _span: Span;\n\n constructor(span: Span) {\n this._span = span;\n }\n\n setStatus(status: SpanStatus): void {\n if (status.status === \"error\" && isRecordableError(status.error)) {\n if (status.error) {\n this._span.setStatus({ code: SpanStatusCode.ERROR, message: status.error.toString() });\n this.recordException(status.error);\n } else {\n this._span.setStatus({ code: SpanStatusCode.ERROR });\n }\n } else if (status.status === \"success\") {\n logger.verbose(\"Leaving span with status UNSET per OpenTelemetry spec.\");\n }\n }\n\n setAttribute(name: string, value: unknown): void {\n if (value !== null && value !== undefined && isAttributeValue(value)) {\n this._span.setAttribute(name, value);\n }\n }\n\n end(): void {\n this._span.end();\n }\n\n recordException(exception: string | Error): void {\n this._span.recordException(exception);\n }\n\n isRecording(): boolean {\n return this._span.isRecording();\n }\n\n addEvent(name: string, options: AddEventOptions = {}): void {\n this._span.addEvent(name, sanitizeAttributes(options.attributes), options.startTime);\n }\n\n /**\n * Allows getting the wrapped span as needed.\n * @internal\n *\n * @returns The underlying span\n */\n unwrap(): Span {\n return this._span;\n }\n}\n\n/**\n * Determines if an error should be recorded on the span.\n *\n * By default, all errors will mark the span status as error\n * except for {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/304} which is expected\n * when the cached resource is still valid in a conditional request.\n */\nfunction isRecordableError(error: string | Error | undefined): boolean {\n if (error !== null && typeof error === \"object\" && \"statusCode\" in error) {\n return error.statusCode !== 304;\n }\n\n // we do not have enough information to determine if this error is recordable so we assume it is\n return true;\n}\n"]}
@@ -1,5 +1,6 @@
1
- import { InstrumenterSpanOptions, TracingSpanKind } from "@azure/core-tracing";
2
- import { SpanKind, SpanOptions } from "@opentelemetry/api";
1
+ import type { InstrumenterSpanOptions, TracingSpanKind } from "@azure/core-tracing";
2
+ import type { SpanOptions } from "@opentelemetry/api";
3
+ import { SpanKind } from "@opentelemetry/api";
3
4
  /**
4
5
  * Converts our TracingSpanKind to the corresponding OpenTelemetry SpanKind.
5
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"transformations.d.ts","sourceRoot":"","sources":["../../src/transformations.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAQ,QAAQ,EAAE,WAAW,EAAS,MAAM,oBAAoB,CAAC;AAGxE;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,eAAe,EAC/D,eAAe,CAAC,EAAE,CAAC,GAClB,eAAe,CAAC,CAAC,CAAC,CAGpB;AAED;;GAEG;AACH,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;CAC7B,CAAC;AAqBF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,CAAC,EAAE,uBAAuB,GAAG,WAAW,CAYhF"}
1
+ {"version":3,"file":"transformations.d.ts","sourceRoot":"","sources":["../../src/transformations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,uBAAuB,EACvB,eAAe,EAEhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAQ,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAS,MAAM,oBAAoB,CAAC;AAGrD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,eAAe,EAC/D,eAAe,CAAC,EAAE,CAAC,GAClB,eAAe,CAAC,CAAC,CAAC,CAGpB;AAED;;GAEG;AACH,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;CAC7B,CAAC;AAqBF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,CAAC,EAAE,uBAAuB,GAAG,WAAW,CAYhF"}
@@ -1 +1 @@
1
- {"version":3,"file":"transformations.js","sourceRoot":"","sources":["../../src/transformations.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAQ,QAAQ,EAAe,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,eAAmB;IAEnB,MAAM,GAAG,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC,CAAC,WAAW,EAA2B,CAAC;IACnF,OAAO,QAAQ,CAAC,GAAG,CAAuB,CAAC;AAC7C,CAAC;AAaD;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,YAA+B,EAAE;IAC7D,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE;QAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QACzE,IAAI,WAAW,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO,EAAE,WAAW;gBACpB,UAAU,EAAE,kBAAkB,CAAC,eAAe,CAAC,UAAU,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAY,CAAC,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,WAAqC;IACjE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW,IAAI,EAAE,CAAC;IAElE,MAAM,UAAU,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAE9C,OAAO;QACL,UAAU;QACV,IAAI;QACJ,KAAK;KACN,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { InstrumenterSpanOptions, TracingSpanKind, TracingSpanLink } from \"@azure/core-tracing\";\nimport { Link, SpanKind, SpanOptions, trace } from \"@opentelemetry/api\";\nimport { sanitizeAttributes } from \"@opentelemetry/core\";\n\n/**\n * Converts our TracingSpanKind to the corresponding OpenTelemetry SpanKind.\n *\n * By default it will return {@link SpanKind.INTERNAL}\n * @param tracingSpanKind - The core tracing {@link TracingSpanKind}\n * @returns - The OpenTelemetry {@link SpanKind}\n */\nexport function toOpenTelemetrySpanKind<K extends TracingSpanKind>(\n tracingSpanKind?: K,\n): SpanKindMapping[K] {\n const key = (tracingSpanKind || \"internal\").toUpperCase() as keyof typeof SpanKind;\n return SpanKind[key] as SpanKindMapping[K];\n}\n\n/**\n * A mapping between our {@link TracingSpanKind} union type and OpenTelemetry's {@link SpanKind}.\n */\ntype SpanKindMapping = {\n client: SpanKind.CLIENT;\n server: SpanKind.SERVER;\n producer: SpanKind.PRODUCER;\n consumer: SpanKind.CONSUMER;\n internal: SpanKind.INTERNAL;\n};\n\n/**\n * Converts core-tracing's TracingSpanLink to OpenTelemetry's Link\n *\n * @param spanLinks - The core tracing {@link TracingSpanLink} to convert\n * @returns A set of {@link Link}s\n */\nfunction toOpenTelemetryLinks(spanLinks: TracingSpanLink[] = []): Link[] {\n return spanLinks.reduce((acc, tracingSpanLink) => {\n const spanContext = trace.getSpanContext(tracingSpanLink.tracingContext);\n if (spanContext) {\n acc.push({\n context: spanContext,\n attributes: sanitizeAttributes(tracingSpanLink.attributes),\n });\n }\n return acc;\n }, [] as Link[]);\n}\n\n/**\n * Converts core-tracing span options to OpenTelemetry options.\n *\n * @param spanOptions - The {@link InstrumenterSpanOptions} to convert.\n * @returns An OpenTelemetry {@link SpanOptions} that can be used when creating a span.\n */\nexport function toSpanOptions(spanOptions?: InstrumenterSpanOptions): SpanOptions {\n const { spanAttributes, spanLinks, spanKind } = spanOptions || {};\n\n const attributes = sanitizeAttributes(spanAttributes);\n const kind = toOpenTelemetrySpanKind(spanKind);\n const links = toOpenTelemetryLinks(spanLinks);\n\n return {\n attributes,\n kind,\n links,\n };\n}\n"]}
1
+ {"version":3,"file":"transformations.js","sourceRoot":"","sources":["../../src/transformations.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAQlC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,eAAmB;IAEnB,MAAM,GAAG,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC,CAAC,WAAW,EAA2B,CAAC;IACnF,OAAO,QAAQ,CAAC,GAAG,CAAuB,CAAC;AAC7C,CAAC;AAaD;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,YAA+B,EAAE;IAC7D,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE;QAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QACzE,IAAI,WAAW,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO,EAAE,WAAW;gBACpB,UAAU,EAAE,kBAAkB,CAAC,eAAe,CAAC,UAAU,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAY,CAAC,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,WAAqC;IACjE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW,IAAI,EAAE,CAAC;IAElE,MAAM,UAAU,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAE9C,OAAO;QACL,UAAU;QACV,IAAI;QACJ,KAAK;KACN,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n InstrumenterSpanOptions,\n TracingSpanKind,\n TracingSpanLink,\n} from \"@azure/core-tracing\";\nimport type { Link, SpanOptions } from \"@opentelemetry/api\";\nimport { SpanKind, trace } from \"@opentelemetry/api\";\nimport { sanitizeAttributes } from \"@opentelemetry/core\";\n\n/**\n * Converts our TracingSpanKind to the corresponding OpenTelemetry SpanKind.\n *\n * By default it will return {@link SpanKind.INTERNAL}\n * @param tracingSpanKind - The core tracing {@link TracingSpanKind}\n * @returns - The OpenTelemetry {@link SpanKind}\n */\nexport function toOpenTelemetrySpanKind<K extends TracingSpanKind>(\n tracingSpanKind?: K,\n): SpanKindMapping[K] {\n const key = (tracingSpanKind || \"internal\").toUpperCase() as keyof typeof SpanKind;\n return SpanKind[key] as SpanKindMapping[K];\n}\n\n/**\n * A mapping between our {@link TracingSpanKind} union type and OpenTelemetry's {@link SpanKind}.\n */\ntype SpanKindMapping = {\n client: SpanKind.CLIENT;\n server: SpanKind.SERVER;\n producer: SpanKind.PRODUCER;\n consumer: SpanKind.CONSUMER;\n internal: SpanKind.INTERNAL;\n};\n\n/**\n * Converts core-tracing's TracingSpanLink to OpenTelemetry's Link\n *\n * @param spanLinks - The core tracing {@link TracingSpanLink} to convert\n * @returns A set of {@link Link}s\n */\nfunction toOpenTelemetryLinks(spanLinks: TracingSpanLink[] = []): Link[] {\n return spanLinks.reduce((acc, tracingSpanLink) => {\n const spanContext = trace.getSpanContext(tracingSpanLink.tracingContext);\n if (spanContext) {\n acc.push({\n context: spanContext,\n attributes: sanitizeAttributes(tracingSpanLink.attributes),\n });\n }\n return acc;\n }, [] as Link[]);\n}\n\n/**\n * Converts core-tracing span options to OpenTelemetry options.\n *\n * @param spanOptions - The {@link InstrumenterSpanOptions} to convert.\n * @returns An OpenTelemetry {@link SpanOptions} that can be used when creating a span.\n */\nexport function toSpanOptions(spanOptions?: InstrumenterSpanOptions): SpanOptions {\n const { spanAttributes, spanLinks, spanKind } = spanOptions || {};\n\n const attributes = sanitizeAttributes(spanAttributes);\n const kind = toOpenTelemetrySpanKind(spanKind);\n const links = toOpenTelemetryLinks(spanLinks);\n\n return {\n attributes,\n kind,\n links,\n };\n}\n"]}
@@ -4,7 +4,7 @@
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.environmentCache = exports.SDK_VERSION = void 0;
6
6
  exports.envVarToBoolean = envVarToBoolean;
7
- exports.SDK_VERSION = "1.0.0-beta.7";
7
+ exports.SDK_VERSION = "1.0.0-beta.9";
8
8
  /**
9
9
  * @internal
10
10
  *
@@ -1 +1 @@
1
- {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/configuration.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAwBlC,0CAMC;AA5BY,QAAA,WAAW,GAAW,cAAc,CAAC;AASlD;;;;GAIG;AACU,QAAA,gBAAgB,GAAG,IAAI,GAAG,EAA2C,CAAC;AAEnF;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,GAAwB;;IACtD,IAAI,CAAC,wBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,MAAA,wBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAwB;;IACvD,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACpE,wBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport const SDK_VERSION: string = \"1.0.0-beta.7\";\n\n/**\n * @internal\n *\n * Keys of known environment variables we look up.\n */\nexport type KnownEnvironmentKey = \"AZURE_HTTP_TRACING_CHILDREN_DISABLED\" | \"AZURE_TRACING_DISABLED\";\n\n/**\n * @internal\n *\n * Cached values of environment variables that were fetched.\n */\nexport const environmentCache = new Map<KnownEnvironmentKey, string | undefined>();\n\n/**\n * Converts an environment variable to Boolean.\n * the strings \"false\" and \"0\" are treated as falsy values.\n *\n * @internal\n */\nexport function envVarToBoolean(key: KnownEnvironmentKey): boolean {\n if (!environmentCache.has(key)) {\n loadEnvironmentVariable(key);\n }\n const value = (environmentCache.get(key) ?? \"\").toLowerCase();\n return value !== \"false\" && value !== \"0\" && Boolean(value);\n}\n\nfunction loadEnvironmentVariable(key: KnownEnvironmentKey): void {\n if (typeof process !== \"undefined\" && process.env) {\n const rawValue = process.env[key] ?? process.env[key.toLowerCase()];\n environmentCache.set(key, rawValue);\n }\n}\n"]}
1
+ {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/configuration.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAwBlC,0CAMC;AA5BY,QAAA,WAAW,GAAW,cAAc,CAAC;AASlD;;;;GAIG;AACU,QAAA,gBAAgB,GAAG,IAAI,GAAG,EAA2C,CAAC;AAEnF;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,GAAwB;;IACtD,IAAI,CAAC,wBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,MAAA,wBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAwB;;IACvD,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACpE,wBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport const SDK_VERSION: string = \"1.0.0-beta.9\";\n\n/**\n * @internal\n *\n * Keys of known environment variables we look up.\n */\nexport type KnownEnvironmentKey = \"AZURE_HTTP_TRACING_CHILDREN_DISABLED\" | \"AZURE_TRACING_DISABLED\";\n\n/**\n * @internal\n *\n * Cached values of environment variables that were fetched.\n */\nexport const environmentCache = new Map<KnownEnvironmentKey, string | undefined>();\n\n/**\n * Converts an environment variable to Boolean.\n * the strings \"false\" and \"0\" are treated as falsy values.\n *\n * @internal\n */\nexport function envVarToBoolean(key: KnownEnvironmentKey): boolean {\n if (!environmentCache.has(key)) {\n loadEnvironmentVariable(key);\n }\n const value = (environmentCache.get(key) ?? \"\").toLowerCase();\n return value !== \"false\" && value !== \"0\" && Boolean(value);\n}\n\nfunction loadEnvironmentVariable(key: KnownEnvironmentKey): void {\n if (typeof process !== \"undefined\" && process.env) {\n const rawValue = process.env[key] ?? process.env[key.toLowerCase()];\n environmentCache.set(key, rawValue);\n }\n}\n"]}
@@ -1,4 +1,5 @@
1
- import { Instrumentation, InstrumentationBase, InstrumentationConfig, InstrumentationModuleDefinition } from "@opentelemetry/instrumentation";
1
+ import type { Instrumentation, InstrumentationConfig, InstrumentationModuleDefinition } from "@opentelemetry/instrumentation";
2
+ import { InstrumentationBase } from "@opentelemetry/instrumentation";
2
3
  /**
3
4
  * Configuration options that can be passed to {@link createAzureSdkInstrumentation} function.
4
5
  */
@@ -23,11 +24,13 @@ export declare class AzureSdkInstrumentation extends InstrumentationBase {
23
24
  * as well as network calls
24
25
  *
25
26
  * Example usage:
26
- * ```ts
27
- * const openTelemetryInstrumentation = require("@opentelemetry/instrumentation");
28
- * openTelemetryInstrumentation.registerInstrumentations({
27
+ * ```ts snippet:instrumentation_usage
28
+ * import { registerInstrumentations } from "@opentelemetry/instrumentation";
29
+ * import { createAzureSdkInstrumentation } from "@azure/opentelemetry-instrumentation-azure-sdk";
30
+ *
31
+ * registerInstrumentations({
29
32
  * instrumentations: [createAzureSdkInstrumentation()],
30
- * })
33
+ * });
31
34
  * ```
32
35
  *
33
36
  * @remarks
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,+BAA+B,EAEhC,MAAM,gCAAgC,CAAC;AAKxC;;GAEG;AACH,MAAM,WAAW,8BAA+B,SAAQ,qBAAqB;CAAG;AAEhF;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,mBAAmB;gBAClD,OAAO,GAAE,8BAAmC;IAOxD;;;;OAIG;IACH,SAAS,CAAC,IAAI,IAAI,IAAI,GAAG,+BAA+B,GAAG,+BAA+B,EAAE;CAgB7F;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,8BAAmC,GAC3C,eAAe,CAEjB"}
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,+BAA+B,EAChC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,mBAAmB,EAEpB,MAAM,gCAAgC,CAAC;AAKxC;;GAEG;AACH,MAAM,WAAW,8BAA+B,SAAQ,qBAAqB;CAAG;AAEhF;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,mBAAmB;gBAClD,OAAO,GAAE,8BAAmC;IAOxD;;;;OAIG;IACH,SAAS,CAAC,IAAI,IAAI,IAAI,GAAG,+BAA+B,GAAG,+BAA+B,EAAE;CAgB7F;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,8BAAmC,GAC3C,eAAe,CAEjB"}
@@ -39,11 +39,13 @@ exports.AzureSdkInstrumentation = AzureSdkInstrumentation;
39
39
  * as well as network calls
40
40
  *
41
41
  * Example usage:
42
- * ```ts
43
- * const openTelemetryInstrumentation = require("@opentelemetry/instrumentation");
44
- * openTelemetryInstrumentation.registerInstrumentations({
42
+ * ```ts snippet:instrumentation_usage
43
+ * import { registerInstrumentations } from "@opentelemetry/instrumentation";
44
+ * import { createAzureSdkInstrumentation } from "@azure/opentelemetry-instrumentation-azure-sdk";
45
+ *
46
+ * registerInstrumentations({
45
47
  * instrumentations: [createAzureSdkInstrumentation()],
46
- * })
48
+ * });
47
49
  * ```
48
50
  *
49
51
  * @remarks
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAuElC,sEAIC;AAzED,oEAMwC;AAExC,uDAA8D;AAC9D,yDAAiD;AAOjD;;GAEG;AACH,MAAa,uBAAwB,SAAQ,qCAAmB;IAC9D,YAAY,UAA0C,EAAE;QACtD,KAAK,CACH,gDAAgD,EAChD,8BAAW,EACX,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAC3B,CAAC;IACJ,CAAC;IACD;;;;OAIG;IACO,IAAI;QACZ,MAAM,MAAM,GAAoC,IAAI,qDAAmC,CACrF,qBAAqB,EACrB,CAAC,mBAAmB,EAAE,QAAQ,CAAC,EAC/B,CAAC,aAAa,EAAE,EAAE;YAChB,IAAI,OAAO,aAAa,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;gBACxD,aAAa,CAAC,eAAe,CAAC,IAAI,2CAAyB,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,aAAa,CAAC;QACvB,CAAC,CACF,CAAC;QACF,qCAAqC;QACrC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA7BD,0DA6BC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,6BAA6B,CAC3C,UAA0C,EAAE;IAE5C,OAAO,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n Instrumentation,\n InstrumentationBase,\n InstrumentationConfig,\n InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\n\nimport { OpenTelemetryInstrumenter } from \"./instrumenter.js\";\nimport { SDK_VERSION } from \"./configuration.js\";\n\n/**\n * Configuration options that can be passed to {@link createAzureSdkInstrumentation} function.\n */\nexport interface AzureSdkInstrumentationOptions extends InstrumentationConfig {}\n\n/**\n * The instrumentation module for the Azure SDK. Implements OpenTelemetry's {@link Instrumentation}.\n */\nexport class AzureSdkInstrumentation extends InstrumentationBase {\n constructor(options: AzureSdkInstrumentationOptions = {}) {\n super(\n \"@azure/opentelemetry-instrumentation-azure-sdk\",\n SDK_VERSION,\n Object.assign({}, options),\n );\n }\n /**\n * Entrypoint for the module registration.\n *\n * @returns The patched \\@azure/core-tracing module after setting its instrumenter.\n */\n protected init(): void | InstrumentationModuleDefinition | InstrumentationModuleDefinition[] {\n const result: InstrumentationModuleDefinition = new InstrumentationNodeModuleDefinition(\n \"@azure/core-tracing\",\n [\"^1.0.0-preview.14\", \"^1.0.0\"],\n (moduleExports) => {\n if (typeof moduleExports.useInstrumenter === \"function\") {\n moduleExports.useInstrumenter(new OpenTelemetryInstrumenter());\n }\n\n return moduleExports;\n },\n );\n // Needed to support 1.0.0-preview.14\n result.includePrerelease = true;\n return result;\n }\n}\n\n/**\n * Enables Azure SDK Instrumentation using OpenTelemetry for Azure SDK client libraries.\n *\n * When registered, any Azure data plane package will begin emitting tracing spans for internal calls\n * as well as network calls\n *\n * Example usage:\n * ```ts\n * const openTelemetryInstrumentation = require(\"@opentelemetry/instrumentation\");\n * openTelemetryInstrumentation.registerInstrumentations({\n * instrumentations: [createAzureSdkInstrumentation()],\n * })\n * ```\n *\n * @remarks\n *\n * As OpenTelemetry instrumentations rely on patching required modules, you should register\n * this instrumentation as early as possible and before loading any Azure Client Libraries.\n */\nexport function createAzureSdkInstrumentation(\n options: AzureSdkInstrumentationOptions = {},\n): Instrumentation {\n return new AzureSdkInstrumentation(options);\n}\n"]}
1
+ {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/instrumentation.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AA2ElC,sEAIC;AAxED,oEAGwC;AAExC,uDAA8D;AAC9D,yDAAiD;AAOjD;;GAEG;AACH,MAAa,uBAAwB,SAAQ,qCAAmB;IAC9D,YAAY,UAA0C,EAAE;QACtD,KAAK,CACH,gDAAgD,EAChD,8BAAW,EACX,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAC3B,CAAC;IACJ,CAAC;IACD;;;;OAIG;IACO,IAAI;QACZ,MAAM,MAAM,GAAoC,IAAI,qDAAmC,CACrF,qBAAqB,EACrB,CAAC,mBAAmB,EAAE,QAAQ,CAAC,EAC/B,CAAC,aAAa,EAAE,EAAE;YAChB,IAAI,OAAO,aAAa,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;gBACxD,aAAa,CAAC,eAAe,CAAC,IAAI,2CAAyB,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,aAAa,CAAC;QACvB,CAAC,CACF,CAAC;QACF,qCAAqC;QACrC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA7BD,0DA6BC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAgB,6BAA6B,CAC3C,UAA0C,EAAE;IAE5C,OAAO,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n Instrumentation,\n InstrumentationConfig,\n InstrumentationModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n} from \"@opentelemetry/instrumentation\";\n\nimport { OpenTelemetryInstrumenter } from \"./instrumenter.js\";\nimport { SDK_VERSION } from \"./configuration.js\";\n\n/**\n * Configuration options that can be passed to {@link createAzureSdkInstrumentation} function.\n */\nexport interface AzureSdkInstrumentationOptions extends InstrumentationConfig {}\n\n/**\n * The instrumentation module for the Azure SDK. Implements OpenTelemetry's {@link Instrumentation}.\n */\nexport class AzureSdkInstrumentation extends InstrumentationBase {\n constructor(options: AzureSdkInstrumentationOptions = {}) {\n super(\n \"@azure/opentelemetry-instrumentation-azure-sdk\",\n SDK_VERSION,\n Object.assign({}, options),\n );\n }\n /**\n * Entrypoint for the module registration.\n *\n * @returns The patched \\@azure/core-tracing module after setting its instrumenter.\n */\n protected init(): void | InstrumentationModuleDefinition | InstrumentationModuleDefinition[] {\n const result: InstrumentationModuleDefinition = new InstrumentationNodeModuleDefinition(\n \"@azure/core-tracing\",\n [\"^1.0.0-preview.14\", \"^1.0.0\"],\n (moduleExports) => {\n if (typeof moduleExports.useInstrumenter === \"function\") {\n moduleExports.useInstrumenter(new OpenTelemetryInstrumenter());\n }\n\n return moduleExports;\n },\n );\n // Needed to support 1.0.0-preview.14\n result.includePrerelease = true;\n return result;\n }\n}\n\n/**\n * Enables Azure SDK Instrumentation using OpenTelemetry for Azure SDK client libraries.\n *\n * When registered, any Azure data plane package will begin emitting tracing spans for internal calls\n * as well as network calls\n *\n * Example usage:\n * ```ts snippet:instrumentation_usage\n * import { registerInstrumentations } from \"@opentelemetry/instrumentation\";\n * import { createAzureSdkInstrumentation } from \"@azure/opentelemetry-instrumentation-azure-sdk\";\n *\n * registerInstrumentations({\n * instrumentations: [createAzureSdkInstrumentation()],\n * });\n * ```\n *\n * @remarks\n *\n * As OpenTelemetry instrumentations rely on patching required modules, you should register\n * this instrumentation as early as possible and before loading any Azure Client Libraries.\n */\nexport function createAzureSdkInstrumentation(\n options: AzureSdkInstrumentationOptions = {},\n): Instrumentation {\n return new AzureSdkInstrumentation(options);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Instrumenter, InstrumenterSpanOptions, TracingContext, TracingSpan } from "@azure/core-tracing";
1
+ import type { Instrumenter, InstrumenterSpanOptions, TracingContext, TracingSpan } from "@azure/core-tracing";
2
2
  import { W3CTraceContextPropagator } from "@opentelemetry/core";
3
3
  export declare const propagator: W3CTraceContextPropagator;
4
4
  export declare class OpenTelemetryInstrumenter implements Instrumenter {
@@ -1 +1 @@
1
- {"version":3,"file":"instrumenter.d.ts","sourceRoot":"","sources":["../../src/instrumenter.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,cAAc,EACd,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAmB,MAAM,qBAAqB,CAAC;AAOjF,eAAO,MAAM,UAAU,2BAAkC,CAAC;AAE1D,qBAAa,yBAA0B,YAAW,YAAY;IAC5D,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,uBAAuB,GACnC;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,cAAc,EAAE,cAAc,CAAA;KAAE;IA2BxD,WAAW,CACT,YAAY,SAAS,OAAO,EAAE,EAC9B,QAAQ,SAAS,CAAC,GAAG,IAAI,EAAE,YAAY,KAAK,UAAU,CAAC,QAAQ,CAAC,EAEhE,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,GAAG,YAAY,EAAE,YAAY,GAC5B,UAAU,CAAC,QAAQ,CAAC;IASvB,sBAAsB,CAAC,iBAAiB,EAAE,MAAM,GAAG,cAAc;IAQjE,oBAAoB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAK9E"}
1
+ {"version":3,"file":"instrumenter.d.ts","sourceRoot":"","sources":["../../src/instrumenter.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,YAAY,EACZ,uBAAuB,EACvB,cAAc,EACd,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAmB,MAAM,qBAAqB,CAAC;AAOjF,eAAO,MAAM,UAAU,2BAAkC,CAAC;AAE1D,qBAAa,yBAA0B,YAAW,YAAY;IAC5D,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,uBAAuB,GACnC;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,cAAc,EAAE,cAAc,CAAA;KAAE;IA2BxD,WAAW,CACT,YAAY,SAAS,OAAO,EAAE,EAC9B,QAAQ,SAAS,CAAC,GAAG,IAAI,EAAE,YAAY,KAAK,UAAU,CAAC,QAAQ,CAAC,EAEhE,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,GAAG,YAAY,EAAE,YAAY,GAC5B,UAAU,CAAC,QAAQ,CAAC;IASvB,sBAAsB,CAAC,iBAAiB,EAAE,MAAM,GAAG,cAAc;IAQjE,oBAAoB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAK9E"}
@@ -1 +1 @@
1
- {"version":3,"file":"instrumenter.js","sourceRoot":"","sources":["../../src/instrumenter.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAElC,4CAO4B;AAO5B,8CAAiF;AAEjF,qDAA4D;AAC5D,yDAAqD;AACrD,6DAAqD;AAErD,oGAAoG;AACvF,QAAA,UAAU,GAAG,IAAI,gCAAyB,EAAE,CAAC;AAE1D,MAAa,yBAAyB;IACpC,SAAS,CACP,IAAY,EACZ,WAAoC;QAEpC,IAAI,GAAG,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,cAAc,KAAI,aAAO,CAAC,MAAM,EAAE,CAAC;QAC1D,IAAI,IAAU,CAAC;QAEf,IAAI,IAAA,kCAAe,EAAC,wBAAwB,CAAC,EAAE,CAAC;YAC9C,sDAAsD;YACtD,IAAI,GAAG,WAAK,CAAC,eAAe,CAAC,0BAAoB,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,kBAAkB;YAClB,IAAI,GAAG,WAAK;iBACT,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,cAAc,CAAC;iBAC9D,SAAS,CAAC,IAAI,EAAE,IAAA,kCAAa,EAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;YAEpD,IACE,IAAA,kCAAe,EAAC,sCAAsC,CAAC;gBACvD,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EACrC,CAAC;gBACD,2BAA2B;gBAC3B,GAAG,GAAG,IAAA,sBAAe,EAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,IAAI,yCAAwB,CAAC,IAAI,CAAC;YACxC,cAAc,EAAE,WAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;SACzC,CAAC;IACJ,CAAC;IACD,WAAW,CAIT,cAA8B,EAC9B,QAAkB,EAClB,GAAG,YAA0B;QAE7B,OAAO,aAAO,CAAC,IAAI,CACjB,cAAc,EACd,QAAQ;QACR,4DAA4D,CAAC,SAAS,EACtE,GAAG,YAAY,CAChB,CAAC;IACJ,CAAC;IAED,sBAAsB,CAAC,iBAAyB;QAC9C,OAAO,kBAAU,CAAC,OAAO,CACvB,aAAO,CAAC,MAAM,EAAE,EAChB,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAClC,0BAAoB,CACrB,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,cAA+B;QAClD,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,kBAAU,CAAC,MAAM,CAAC,cAAc,IAAI,aAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,0BAAoB,CAAC,CAAC;QACrF,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA5DD,8DA4DC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n INVALID_SPAN_CONTEXT,\n Span,\n context,\n defaultTextMapGetter,\n defaultTextMapSetter,\n trace,\n} from \"@opentelemetry/api\";\nimport {\n Instrumenter,\n InstrumenterSpanOptions,\n TracingContext,\n TracingSpan,\n} from \"@azure/core-tracing\";\nimport { W3CTraceContextPropagator, suppressTracing } from \"@opentelemetry/core\";\n\nimport { OpenTelemetrySpanWrapper } from \"./spanWrapper.js\";\nimport { envVarToBoolean } from \"./configuration.js\";\nimport { toSpanOptions } from \"./transformations.js\";\n\n// While default propagation is user-configurable, Azure services always use the W3C implementation.\nexport const propagator = new W3CTraceContextPropagator();\n\nexport class OpenTelemetryInstrumenter implements Instrumenter {\n startSpan(\n name: string,\n spanOptions: InstrumenterSpanOptions,\n ): { span: TracingSpan; tracingContext: TracingContext } {\n let ctx = spanOptions?.tracingContext || context.active();\n let span: Span;\n\n if (envVarToBoolean(\"AZURE_TRACING_DISABLED\")) {\n // disable only our spans but not any downstream spans\n span = trace.wrapSpanContext(INVALID_SPAN_CONTEXT);\n } else {\n // Create our span\n span = trace\n .getTracer(spanOptions.packageName, spanOptions.packageVersion)\n .startSpan(name, toSpanOptions(spanOptions), ctx);\n\n if (\n envVarToBoolean(\"AZURE_HTTP_TRACING_CHILDREN_DISABLED\") &&\n name.toUpperCase().startsWith(\"HTTP\")\n ) {\n // disable downstream spans\n ctx = suppressTracing(ctx);\n }\n }\n\n return {\n span: new OpenTelemetrySpanWrapper(span),\n tracingContext: trace.setSpan(ctx, span),\n };\n }\n withContext<\n CallbackArgs extends unknown[],\n Callback extends (...args: CallbackArgs) => ReturnType<Callback>,\n >(\n tracingContext: TracingContext,\n callback: Callback,\n ...callbackArgs: CallbackArgs\n ): ReturnType<Callback> {\n return context.with(\n tracingContext,\n callback,\n /** Assume caller will bind `this` or use arrow functions */ undefined,\n ...callbackArgs,\n );\n }\n\n parseTraceparentHeader(traceparentHeader: string): TracingContext {\n return propagator.extract(\n context.active(),\n { traceparent: traceparentHeader },\n defaultTextMapGetter,\n );\n }\n\n createRequestHeaders(tracingContext?: TracingContext): Record<string, string> {\n const headers: Record<string, string> = {};\n propagator.inject(tracingContext || context.active(), headers, defaultTextMapSetter);\n return headers;\n }\n}\n"]}
1
+ {"version":3,"file":"instrumenter.js","sourceRoot":"","sources":["../../src/instrumenter.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAGlC,4CAM4B;AAO5B,8CAAiF;AAEjF,qDAA4D;AAC5D,yDAAqD;AACrD,6DAAqD;AAErD,oGAAoG;AACvF,QAAA,UAAU,GAAG,IAAI,gCAAyB,EAAE,CAAC;AAE1D,MAAa,yBAAyB;IACpC,SAAS,CACP,IAAY,EACZ,WAAoC;QAEpC,IAAI,GAAG,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,cAAc,KAAI,aAAO,CAAC,MAAM,EAAE,CAAC;QAC1D,IAAI,IAAU,CAAC;QAEf,IAAI,IAAA,kCAAe,EAAC,wBAAwB,CAAC,EAAE,CAAC;YAC9C,sDAAsD;YACtD,IAAI,GAAG,WAAK,CAAC,eAAe,CAAC,0BAAoB,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,kBAAkB;YAClB,IAAI,GAAG,WAAK;iBACT,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,cAAc,CAAC;iBAC9D,SAAS,CAAC,IAAI,EAAE,IAAA,kCAAa,EAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;YAEpD,IACE,IAAA,kCAAe,EAAC,sCAAsC,CAAC;gBACvD,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EACrC,CAAC;gBACD,2BAA2B;gBAC3B,GAAG,GAAG,IAAA,sBAAe,EAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,IAAI,yCAAwB,CAAC,IAAI,CAAC;YACxC,cAAc,EAAE,WAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;SACzC,CAAC;IACJ,CAAC;IACD,WAAW,CAIT,cAA8B,EAC9B,QAAkB,EAClB,GAAG,YAA0B;QAE7B,OAAO,aAAO,CAAC,IAAI,CACjB,cAAc,EACd,QAAQ;QACR,4DAA4D,CAAC,SAAS,EACtE,GAAG,YAAY,CAChB,CAAC;IACJ,CAAC;IAED,sBAAsB,CAAC,iBAAyB;QAC9C,OAAO,kBAAU,CAAC,OAAO,CACvB,aAAO,CAAC,MAAM,EAAE,EAChB,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAClC,0BAAoB,CACrB,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,cAA+B;QAClD,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,kBAAU,CAAC,MAAM,CAAC,cAAc,IAAI,aAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,0BAAoB,CAAC,CAAC;QACrF,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA5DD,8DA4DC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Span } from \"@opentelemetry/api\";\nimport {\n INVALID_SPAN_CONTEXT,\n context,\n defaultTextMapGetter,\n defaultTextMapSetter,\n trace,\n} from \"@opentelemetry/api\";\nimport type {\n Instrumenter,\n InstrumenterSpanOptions,\n TracingContext,\n TracingSpan,\n} from \"@azure/core-tracing\";\nimport { W3CTraceContextPropagator, suppressTracing } from \"@opentelemetry/core\";\n\nimport { OpenTelemetrySpanWrapper } from \"./spanWrapper.js\";\nimport { envVarToBoolean } from \"./configuration.js\";\nimport { toSpanOptions } from \"./transformations.js\";\n\n// While default propagation is user-configurable, Azure services always use the W3C implementation.\nexport const propagator = new W3CTraceContextPropagator();\n\nexport class OpenTelemetryInstrumenter implements Instrumenter {\n startSpan(\n name: string,\n spanOptions: InstrumenterSpanOptions,\n ): { span: TracingSpan; tracingContext: TracingContext } {\n let ctx = spanOptions?.tracingContext || context.active();\n let span: Span;\n\n if (envVarToBoolean(\"AZURE_TRACING_DISABLED\")) {\n // disable only our spans but not any downstream spans\n span = trace.wrapSpanContext(INVALID_SPAN_CONTEXT);\n } else {\n // Create our span\n span = trace\n .getTracer(spanOptions.packageName, spanOptions.packageVersion)\n .startSpan(name, toSpanOptions(spanOptions), ctx);\n\n if (\n envVarToBoolean(\"AZURE_HTTP_TRACING_CHILDREN_DISABLED\") &&\n name.toUpperCase().startsWith(\"HTTP\")\n ) {\n // disable downstream spans\n ctx = suppressTracing(ctx);\n }\n }\n\n return {\n span: new OpenTelemetrySpanWrapper(span),\n tracingContext: trace.setSpan(ctx, span),\n };\n }\n withContext<\n CallbackArgs extends unknown[],\n Callback extends (...args: CallbackArgs) => ReturnType<Callback>,\n >(\n tracingContext: TracingContext,\n callback: Callback,\n ...callbackArgs: CallbackArgs\n ): ReturnType<Callback> {\n return context.with(\n tracingContext,\n callback,\n /** Assume caller will bind `this` or use arrow functions */ undefined,\n ...callbackArgs,\n );\n }\n\n parseTraceparentHeader(traceparentHeader: string): TracingContext {\n return propagator.extract(\n context.active(),\n { traceparent: traceparentHeader },\n defaultTextMapGetter,\n );\n }\n\n createRequestHeaders(tracingContext?: TracingContext): Record<string, string> {\n const headers: Record<string, string> = {};\n propagator.inject(tracingContext || context.active(), headers, defaultTextMapSetter);\n return headers;\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { Span } from "@opentelemetry/api";
2
- import { SpanStatus, TracingSpan, AddEventOptions } from "@azure/core-tracing";
1
+ import type { Span } from "@opentelemetry/api";
2
+ import type { SpanStatus, TracingSpan, AddEventOptions } from "@azure/core-tracing";
3
3
  export declare class OpenTelemetrySpanWrapper implements TracingSpan {
4
4
  private _span;
5
5
  constructor(span: Span);
@@ -1 +1 @@
1
- {"version":3,"file":"spanWrapper.d.ts","sourceRoot":"","sources":["../../src/spanWrapper.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAkB,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG/E,qBAAa,wBAAyB,YAAW,WAAW;IAC1D,OAAO,CAAC,KAAK,CAAO;gBAER,IAAI,EAAE,IAAI;IAItB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAanC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAMhD,GAAG,IAAI,IAAI;IAIX,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAIhD,WAAW,IAAI,OAAO;IAItB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI;IAI3D;;;;;OAKG;IACH,MAAM,IAAI,IAAI;CAGf"}
1
+ {"version":3,"file":"spanWrapper.d.ts","sourceRoot":"","sources":["../../src/spanWrapper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAIpF,qBAAa,wBAAyB,YAAW,WAAW;IAC1D,OAAO,CAAC,KAAK,CAAO;gBAER,IAAI,EAAE,IAAI;IAItB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAanC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAMhD,GAAG,IAAI,IAAI;IAIX,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAIhD,WAAW,IAAI,OAAO;IAItB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI;IAI3D;;;;;OAKG;IACH,MAAM,IAAI,IAAI;CAGf"}
@@ -5,12 +5,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.OpenTelemetrySpanWrapper = void 0;
6
6
  const api_1 = require("@opentelemetry/api");
7
7
  const core_1 = require("@opentelemetry/core");
8
+ const logger_js_1 = require("./logger.js");
8
9
  class OpenTelemetrySpanWrapper {
9
10
  constructor(span) {
10
11
  this._span = span;
11
12
  }
12
13
  setStatus(status) {
13
- if (status.status === "error") {
14
+ if (status.status === "error" && isRecordableError(status.error)) {
14
15
  if (status.error) {
15
16
  this._span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: status.error.toString() });
16
17
  this.recordException(status.error);
@@ -20,7 +21,7 @@ class OpenTelemetrySpanWrapper {
20
21
  }
21
22
  }
22
23
  else if (status.status === "success") {
23
- this._span.setStatus({ code: api_1.SpanStatusCode.OK });
24
+ logger_js_1.logger.verbose("Leaving span with status UNSET per OpenTelemetry spec.");
24
25
  }
25
26
  }
26
27
  setAttribute(name, value) {
@@ -51,4 +52,18 @@ class OpenTelemetrySpanWrapper {
51
52
  }
52
53
  }
53
54
  exports.OpenTelemetrySpanWrapper = OpenTelemetrySpanWrapper;
55
+ /**
56
+ * Determines if an error should be recorded on the span.
57
+ *
58
+ * By default, all errors will mark the span status as error
59
+ * except for {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/304} which is expected
60
+ * when the cached resource is still valid in a conditional request.
61
+ */
62
+ function isRecordableError(error) {
63
+ if (error !== null && typeof error === "object" && "statusCode" in error) {
64
+ return error.statusCode !== 304;
65
+ }
66
+ // we do not have enough information to determine if this error is recordable so we assume it is
67
+ return true;
68
+ }
54
69
  //# sourceMappingURL=spanWrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spanWrapper.js","sourceRoot":"","sources":["../../src/spanWrapper.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAElC,4CAA0D;AAE1D,8CAA2E;AAE3E,MAAa,wBAAwB;IAGnC,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,SAAS,CAAC,MAAkB;QAC1B,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACvF,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,KAAc;QACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,IAAA,uBAAgB,EAAC,KAAK,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,GAAG;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,eAAe,CAAC,SAAyB;QACvC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,UAA2B,EAAE;QAClD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAA,yBAAkB,EAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACvF,CAAC;IAED;;;;;OAKG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF;AAnDD,4DAmDC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Span, SpanStatusCode } from \"@opentelemetry/api\";\nimport { SpanStatus, TracingSpan, AddEventOptions } from \"@azure/core-tracing\";\nimport { isAttributeValue, sanitizeAttributes } from \"@opentelemetry/core\";\n\nexport class OpenTelemetrySpanWrapper implements TracingSpan {\n private _span: Span;\n\n constructor(span: Span) {\n this._span = span;\n }\n\n setStatus(status: SpanStatus): void {\n if (status.status === \"error\") {\n if (status.error) {\n this._span.setStatus({ code: SpanStatusCode.ERROR, message: status.error.toString() });\n this.recordException(status.error);\n } else {\n this._span.setStatus({ code: SpanStatusCode.ERROR });\n }\n } else if (status.status === \"success\") {\n this._span.setStatus({ code: SpanStatusCode.OK });\n }\n }\n\n setAttribute(name: string, value: unknown): void {\n if (value !== null && value !== undefined && isAttributeValue(value)) {\n this._span.setAttribute(name, value);\n }\n }\n\n end(): void {\n this._span.end();\n }\n\n recordException(exception: string | Error): void {\n this._span.recordException(exception);\n }\n\n isRecording(): boolean {\n return this._span.isRecording();\n }\n\n addEvent(name: string, options: AddEventOptions = {}): void {\n this._span.addEvent(name, sanitizeAttributes(options.attributes), options.startTime);\n }\n\n /**\n * Allows getting the wrapped span as needed.\n * @internal\n *\n * @returns The underlying span\n */\n unwrap(): Span {\n return this._span;\n }\n}\n"]}
1
+ {"version":3,"file":"spanWrapper.js","sourceRoot":"","sources":["../../src/spanWrapper.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAGlC,4CAAoD;AAEpD,8CAA2E;AAC3E,2CAAqC;AAErC,MAAa,wBAAwB;IAGnC,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,SAAS,CAAC,MAAkB;QAC1B,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACvF,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAc,CAAC,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,kBAAM,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,KAAc;QACvC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,IAAA,uBAAgB,EAAC,KAAK,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,GAAG;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,eAAe,CAAC,SAAyB;QACvC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,UAA2B,EAAE;QAClD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAA,yBAAkB,EAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACvF,CAAC;IAED;;;;;OAKG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF;AAnDD,4DAmDC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,KAAiC;IAC1D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;QACzE,OAAO,KAAK,CAAC,UAAU,KAAK,GAAG,CAAC;IAClC,CAAC;IAED,gGAAgG;IAChG,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Span } from \"@opentelemetry/api\";\nimport { SpanStatusCode } from \"@opentelemetry/api\";\nimport type { SpanStatus, TracingSpan, AddEventOptions } from \"@azure/core-tracing\";\nimport { isAttributeValue, sanitizeAttributes } from \"@opentelemetry/core\";\nimport { logger } from \"./logger.js\";\n\nexport class OpenTelemetrySpanWrapper implements TracingSpan {\n private _span: Span;\n\n constructor(span: Span) {\n this._span = span;\n }\n\n setStatus(status: SpanStatus): void {\n if (status.status === \"error\" && isRecordableError(status.error)) {\n if (status.error) {\n this._span.setStatus({ code: SpanStatusCode.ERROR, message: status.error.toString() });\n this.recordException(status.error);\n } else {\n this._span.setStatus({ code: SpanStatusCode.ERROR });\n }\n } else if (status.status === \"success\") {\n logger.verbose(\"Leaving span with status UNSET per OpenTelemetry spec.\");\n }\n }\n\n setAttribute(name: string, value: unknown): void {\n if (value !== null && value !== undefined && isAttributeValue(value)) {\n this._span.setAttribute(name, value);\n }\n }\n\n end(): void {\n this._span.end();\n }\n\n recordException(exception: string | Error): void {\n this._span.recordException(exception);\n }\n\n isRecording(): boolean {\n return this._span.isRecording();\n }\n\n addEvent(name: string, options: AddEventOptions = {}): void {\n this._span.addEvent(name, sanitizeAttributes(options.attributes), options.startTime);\n }\n\n /**\n * Allows getting the wrapped span as needed.\n * @internal\n *\n * @returns The underlying span\n */\n unwrap(): Span {\n return this._span;\n }\n}\n\n/**\n * Determines if an error should be recorded on the span.\n *\n * By default, all errors will mark the span status as error\n * except for {@link https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/304} which is expected\n * when the cached resource is still valid in a conditional request.\n */\nfunction isRecordableError(error: string | Error | undefined): boolean {\n if (error !== null && typeof error === \"object\" && \"statusCode\" in error) {\n return error.statusCode !== 304;\n }\n\n // we do not have enough information to determine if this error is recordable so we assume it is\n return true;\n}\n"]}
@@ -1,5 +1,6 @@
1
- import { InstrumenterSpanOptions, TracingSpanKind } from "@azure/core-tracing";
2
- import { SpanKind, SpanOptions } from "@opentelemetry/api";
1
+ import type { InstrumenterSpanOptions, TracingSpanKind } from "@azure/core-tracing";
2
+ import type { SpanOptions } from "@opentelemetry/api";
3
+ import { SpanKind } from "@opentelemetry/api";
3
4
  /**
4
5
  * Converts our TracingSpanKind to the corresponding OpenTelemetry SpanKind.
5
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"transformations.d.ts","sourceRoot":"","sources":["../../src/transformations.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAQ,QAAQ,EAAE,WAAW,EAAS,MAAM,oBAAoB,CAAC;AAGxE;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,eAAe,EAC/D,eAAe,CAAC,EAAE,CAAC,GAClB,eAAe,CAAC,CAAC,CAAC,CAGpB;AAED;;GAEG;AACH,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;CAC7B,CAAC;AAqBF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,CAAC,EAAE,uBAAuB,GAAG,WAAW,CAYhF"}
1
+ {"version":3,"file":"transformations.d.ts","sourceRoot":"","sources":["../../src/transformations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,uBAAuB,EACvB,eAAe,EAEhB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAQ,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAS,MAAM,oBAAoB,CAAC;AAGrD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,eAAe,EAC/D,eAAe,CAAC,EAAE,CAAC,GAClB,eAAe,CAAC,CAAC,CAAC,CAGpB;AAED;;GAEG;AACH,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;CAC7B,CAAC;AAqBF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,CAAC,EAAE,uBAAuB,GAAG,WAAW,CAYhF"}
@@ -1 +1 @@
1
- {"version":3,"file":"transformations.js","sourceRoot":"","sources":["../../src/transformations.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;AAalC,0DAKC;AAsCD,sCAYC;AAjED,4CAAwE;AACxE,8CAAyD;AAEzD;;;;;;GAMG;AACH,SAAgB,uBAAuB,CACrC,eAAmB;IAEnB,MAAM,GAAG,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC,CAAC,WAAW,EAA2B,CAAC;IACnF,OAAO,cAAQ,CAAC,GAAG,CAAuB,CAAC;AAC7C,CAAC;AAaD;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,YAA+B,EAAE;IAC7D,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE;QAC/C,MAAM,WAAW,GAAG,WAAK,CAAC,cAAc,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QACzE,IAAI,WAAW,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO,EAAE,WAAW;gBACpB,UAAU,EAAE,IAAA,yBAAkB,EAAC,eAAe,CAAC,UAAU,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAY,CAAC,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,WAAqC;IACjE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW,IAAI,EAAE,CAAC;IAElE,MAAM,UAAU,GAAG,IAAA,yBAAkB,EAAC,cAAc,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAE9C,OAAO;QACL,UAAU;QACV,IAAI;QACJ,KAAK;KACN,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { InstrumenterSpanOptions, TracingSpanKind, TracingSpanLink } from \"@azure/core-tracing\";\nimport { Link, SpanKind, SpanOptions, trace } from \"@opentelemetry/api\";\nimport { sanitizeAttributes } from \"@opentelemetry/core\";\n\n/**\n * Converts our TracingSpanKind to the corresponding OpenTelemetry SpanKind.\n *\n * By default it will return {@link SpanKind.INTERNAL}\n * @param tracingSpanKind - The core tracing {@link TracingSpanKind}\n * @returns - The OpenTelemetry {@link SpanKind}\n */\nexport function toOpenTelemetrySpanKind<K extends TracingSpanKind>(\n tracingSpanKind?: K,\n): SpanKindMapping[K] {\n const key = (tracingSpanKind || \"internal\").toUpperCase() as keyof typeof SpanKind;\n return SpanKind[key] as SpanKindMapping[K];\n}\n\n/**\n * A mapping between our {@link TracingSpanKind} union type and OpenTelemetry's {@link SpanKind}.\n */\ntype SpanKindMapping = {\n client: SpanKind.CLIENT;\n server: SpanKind.SERVER;\n producer: SpanKind.PRODUCER;\n consumer: SpanKind.CONSUMER;\n internal: SpanKind.INTERNAL;\n};\n\n/**\n * Converts core-tracing's TracingSpanLink to OpenTelemetry's Link\n *\n * @param spanLinks - The core tracing {@link TracingSpanLink} to convert\n * @returns A set of {@link Link}s\n */\nfunction toOpenTelemetryLinks(spanLinks: TracingSpanLink[] = []): Link[] {\n return spanLinks.reduce((acc, tracingSpanLink) => {\n const spanContext = trace.getSpanContext(tracingSpanLink.tracingContext);\n if (spanContext) {\n acc.push({\n context: spanContext,\n attributes: sanitizeAttributes(tracingSpanLink.attributes),\n });\n }\n return acc;\n }, [] as Link[]);\n}\n\n/**\n * Converts core-tracing span options to OpenTelemetry options.\n *\n * @param spanOptions - The {@link InstrumenterSpanOptions} to convert.\n * @returns An OpenTelemetry {@link SpanOptions} that can be used when creating a span.\n */\nexport function toSpanOptions(spanOptions?: InstrumenterSpanOptions): SpanOptions {\n const { spanAttributes, spanLinks, spanKind } = spanOptions || {};\n\n const attributes = sanitizeAttributes(spanAttributes);\n const kind = toOpenTelemetrySpanKind(spanKind);\n const links = toOpenTelemetryLinks(spanLinks);\n\n return {\n attributes,\n kind,\n links,\n };\n}\n"]}
1
+ {"version":3,"file":"transformations.js","sourceRoot":"","sources":["../../src/transformations.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;AAkBlC,0DAKC;AAsCD,sCAYC;AAjED,4CAAqD;AACrD,8CAAyD;AAEzD;;;;;;GAMG;AACH,SAAgB,uBAAuB,CACrC,eAAmB;IAEnB,MAAM,GAAG,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC,CAAC,WAAW,EAA2B,CAAC;IACnF,OAAO,cAAQ,CAAC,GAAG,CAAuB,CAAC;AAC7C,CAAC;AAaD;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,YAA+B,EAAE;IAC7D,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE;QAC/C,MAAM,WAAW,GAAG,WAAK,CAAC,cAAc,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QACzE,IAAI,WAAW,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO,EAAE,WAAW;gBACpB,UAAU,EAAE,IAAA,yBAAkB,EAAC,eAAe,CAAC,UAAU,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAY,CAAC,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,WAAqC;IACjE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW,IAAI,EAAE,CAAC;IAElE,MAAM,UAAU,GAAG,IAAA,yBAAkB,EAAC,cAAc,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAE9C,OAAO;QACL,UAAU;QACV,IAAI;QACJ,KAAK;KACN,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n InstrumenterSpanOptions,\n TracingSpanKind,\n TracingSpanLink,\n} from \"@azure/core-tracing\";\nimport type { Link, SpanOptions } from \"@opentelemetry/api\";\nimport { SpanKind, trace } from \"@opentelemetry/api\";\nimport { sanitizeAttributes } from \"@opentelemetry/core\";\n\n/**\n * Converts our TracingSpanKind to the corresponding OpenTelemetry SpanKind.\n *\n * By default it will return {@link SpanKind.INTERNAL}\n * @param tracingSpanKind - The core tracing {@link TracingSpanKind}\n * @returns - The OpenTelemetry {@link SpanKind}\n */\nexport function toOpenTelemetrySpanKind<K extends TracingSpanKind>(\n tracingSpanKind?: K,\n): SpanKindMapping[K] {\n const key = (tracingSpanKind || \"internal\").toUpperCase() as keyof typeof SpanKind;\n return SpanKind[key] as SpanKindMapping[K];\n}\n\n/**\n * A mapping between our {@link TracingSpanKind} union type and OpenTelemetry's {@link SpanKind}.\n */\ntype SpanKindMapping = {\n client: SpanKind.CLIENT;\n server: SpanKind.SERVER;\n producer: SpanKind.PRODUCER;\n consumer: SpanKind.CONSUMER;\n internal: SpanKind.INTERNAL;\n};\n\n/**\n * Converts core-tracing's TracingSpanLink to OpenTelemetry's Link\n *\n * @param spanLinks - The core tracing {@link TracingSpanLink} to convert\n * @returns A set of {@link Link}s\n */\nfunction toOpenTelemetryLinks(spanLinks: TracingSpanLink[] = []): Link[] {\n return spanLinks.reduce((acc, tracingSpanLink) => {\n const spanContext = trace.getSpanContext(tracingSpanLink.tracingContext);\n if (spanContext) {\n acc.push({\n context: spanContext,\n attributes: sanitizeAttributes(tracingSpanLink.attributes),\n });\n }\n return acc;\n }, [] as Link[]);\n}\n\n/**\n * Converts core-tracing span options to OpenTelemetry options.\n *\n * @param spanOptions - The {@link InstrumenterSpanOptions} to convert.\n * @returns An OpenTelemetry {@link SpanOptions} that can be used when creating a span.\n */\nexport function toSpanOptions(spanOptions?: InstrumenterSpanOptions): SpanOptions {\n const { spanAttributes, spanLinks, spanKind } = spanOptions || {};\n\n const attributes = sanitizeAttributes(spanAttributes);\n const kind = toOpenTelemetrySpanKind(spanKind);\n const links = toOpenTelemetryLinks(spanLinks);\n\n return {\n attributes,\n kind,\n links,\n };\n}\n"]}