@azure/monitor-opentelemetry 1.16.0 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/README.md +2 -1
  2. package/dist/commonjs/generated/api/index.d.ts +4 -0
  3. package/dist/commonjs/generated/api/index.d.ts.map +1 -0
  4. package/dist/commonjs/generated/api/index.js +11 -0
  5. package/dist/commonjs/generated/api/index.js.map +1 -0
  6. package/dist/commonjs/generated/api/operations.d.ts +13 -0
  7. package/dist/commonjs/generated/api/operations.d.ts.map +1 -0
  8. package/dist/commonjs/generated/api/operations.js +107 -0
  9. package/dist/commonjs/generated/api/operations.js.map +1 -0
  10. package/dist/commonjs/generated/api/options.d.ts +31 -0
  11. package/dist/commonjs/generated/api/options.d.ts.map +1 -0
  12. package/dist/commonjs/generated/api/options.js +5 -0
  13. package/dist/commonjs/generated/api/options.js.map +1 -0
  14. package/dist/commonjs/generated/api/quickpulseContext.d.ts +17 -0
  15. package/dist/commonjs/generated/api/quickpulseContext.d.ts.map +1 -0
  16. package/dist/commonjs/generated/api/quickpulseContext.js +26 -0
  17. package/dist/commonjs/generated/api/quickpulseContext.js.map +1 -0
  18. package/dist/commonjs/generated/index.d.ts +2 -1
  19. package/dist/commonjs/generated/index.d.ts.map +1 -1
  20. package/dist/commonjs/generated/index.js +5 -10
  21. package/dist/commonjs/generated/index.js.map +1 -1
  22. package/dist/commonjs/generated/logger.d.ts +2 -0
  23. package/dist/commonjs/generated/logger.d.ts.map +1 -0
  24. package/dist/commonjs/generated/logger.js +8 -0
  25. package/dist/commonjs/generated/logger.js.map +1 -0
  26. package/dist/commonjs/generated/models/index.d.ts +1 -422
  27. package/dist/commonjs/generated/models/index.d.ts.map +1 -1
  28. package/dist/commonjs/generated/models/index.js +5 -104
  29. package/dist/commonjs/generated/models/index.js.map +1 -1
  30. package/dist/commonjs/generated/models/models.d.ts +265 -0
  31. package/dist/commonjs/generated/models/models.d.ts.map +1 -0
  32. package/dist/commonjs/generated/models/models.js +393 -0
  33. package/dist/commonjs/generated/models/models.js.map +1 -0
  34. package/dist/commonjs/generated/quickpulseClient.d.ts +16 -28
  35. package/dist/commonjs/generated/quickpulseClient.d.ts.map +1 -1
  36. package/dist/commonjs/generated/quickpulseClient.js +24 -139
  37. package/dist/commonjs/generated/quickpulseClient.js.map +1 -1
  38. package/dist/commonjs/generated/static-helpers/urlTemplate.d.ts +5 -0
  39. package/dist/commonjs/generated/static-helpers/urlTemplate.d.ts.map +1 -0
  40. package/dist/commonjs/generated/static-helpers/urlTemplate.js +203 -0
  41. package/dist/commonjs/generated/static-helpers/urlTemplate.js.map +1 -0
  42. package/dist/commonjs/index.d.ts +2 -2
  43. package/dist/commonjs/index.d.ts.map +1 -1
  44. package/dist/commonjs/index.js +13 -0
  45. package/dist/commonjs/index.js.map +1 -1
  46. package/dist/commonjs/logs/logRecordProcessor.d.ts +3 -1
  47. package/dist/commonjs/logs/logRecordProcessor.d.ts.map +1 -1
  48. package/dist/commonjs/logs/logRecordProcessor.js +32 -1
  49. package/dist/commonjs/logs/logRecordProcessor.js.map +1 -1
  50. package/dist/commonjs/metrics/performanceCounters.d.ts.map +1 -1
  51. package/dist/commonjs/metrics/performanceCounters.js +4 -2
  52. package/dist/commonjs/metrics/performanceCounters.js.map +1 -1
  53. package/dist/commonjs/metrics/quickpulse/export/exporter.d.ts.map +1 -1
  54. package/dist/commonjs/metrics/quickpulse/export/exporter.js.map +1 -1
  55. package/dist/commonjs/metrics/quickpulse/export/sender.d.ts +22 -5
  56. package/dist/commonjs/metrics/quickpulse/export/sender.d.ts.map +1 -1
  57. package/dist/commonjs/metrics/quickpulse/export/sender.js +59 -18
  58. package/dist/commonjs/metrics/quickpulse/export/sender.js.map +1 -1
  59. package/dist/commonjs/metrics/quickpulse/filtering/filter.d.ts.map +1 -1
  60. package/dist/commonjs/metrics/quickpulse/filtering/filter.js +12 -13
  61. package/dist/commonjs/metrics/quickpulse/filtering/filter.js.map +1 -1
  62. package/dist/commonjs/metrics/quickpulse/filtering/projection.d.ts.map +1 -1
  63. package/dist/commonjs/metrics/quickpulse/filtering/projection.js +14 -15
  64. package/dist/commonjs/metrics/quickpulse/filtering/projection.js.map +1 -1
  65. package/dist/commonjs/metrics/quickpulse/filtering/validator.d.ts.map +1 -1
  66. package/dist/commonjs/metrics/quickpulse/filtering/validator.js +37 -20
  67. package/dist/commonjs/metrics/quickpulse/filtering/validator.js.map +1 -1
  68. package/dist/commonjs/metrics/quickpulse/liveMetrics.d.ts.map +1 -1
  69. package/dist/commonjs/metrics/quickpulse/liveMetrics.js +20 -24
  70. package/dist/commonjs/metrics/quickpulse/liveMetrics.js.map +1 -1
  71. package/dist/commonjs/metrics/quickpulse/types.d.ts +4 -3
  72. package/dist/commonjs/metrics/quickpulse/types.d.ts.map +1 -1
  73. package/dist/commonjs/metrics/quickpulse/types.js.map +1 -1
  74. package/dist/commonjs/metrics/quickpulse/utils.d.ts.map +1 -1
  75. package/dist/commonjs/metrics/quickpulse/utils.js +9 -10
  76. package/dist/commonjs/metrics/quickpulse/utils.js.map +1 -1
  77. package/dist/commonjs/metrics/standardMetrics.d.ts.map +1 -1
  78. package/dist/commonjs/metrics/standardMetrics.js +2 -1
  79. package/dist/commonjs/metrics/standardMetrics.js.map +1 -1
  80. package/dist/commonjs/metrics/utils.d.ts +7 -0
  81. package/dist/commonjs/metrics/utils.d.ts.map +1 -1
  82. package/dist/commonjs/metrics/utils.js +23 -0
  83. package/dist/commonjs/metrics/utils.js.map +1 -1
  84. package/dist/commonjs/shared/config.d.ts.map +1 -1
  85. package/dist/commonjs/shared/config.js +1 -1
  86. package/dist/commonjs/shared/config.js.map +1 -1
  87. package/dist/commonjs/shared/envConfig.d.ts +1 -1
  88. package/dist/commonjs/shared/envConfig.d.ts.map +1 -1
  89. package/dist/commonjs/shared/envConfig.js.map +1 -1
  90. package/dist/commonjs/shared/module.d.ts +2 -1
  91. package/dist/commonjs/shared/module.d.ts.map +1 -0
  92. package/dist/commonjs/shared/module.js +2 -1
  93. package/dist/commonjs/shared/module.js.map +1 -0
  94. package/dist/commonjs/traces/spanProcessor.d.ts +3 -1
  95. package/dist/commonjs/traces/spanProcessor.d.ts.map +1 -1
  96. package/dist/commonjs/traces/spanProcessor.js +64 -1
  97. package/dist/commonjs/traces/spanProcessor.js.map +1 -1
  98. package/dist/commonjs/tsdoc-metadata.json +1 -1
  99. package/dist/commonjs/types.d.ts +5 -3
  100. package/dist/commonjs/types.d.ts.map +1 -1
  101. package/dist/commonjs/types.js +3 -1
  102. package/dist/commonjs/types.js.map +1 -1
  103. package/dist/commonjs/utils/common.d.ts.map +1 -1
  104. package/dist/commonjs/utils/common.js +5 -0
  105. package/dist/commonjs/utils/common.js.map +1 -1
  106. package/dist/commonjs/utils/genaiAttributes.d.ts +43 -0
  107. package/dist/commonjs/utils/genaiAttributes.d.ts.map +1 -0
  108. package/dist/commonjs/utils/genaiAttributes.js +60 -0
  109. package/dist/commonjs/utils/genaiAttributes.js.map +1 -0
  110. package/dist/esm/generated/api/index.d.ts +4 -0
  111. package/dist/esm/generated/api/index.d.ts.map +1 -0
  112. package/dist/esm/generated/api/index.js +5 -0
  113. package/dist/esm/generated/api/index.js.map +1 -0
  114. package/dist/esm/generated/api/operations.d.ts +13 -0
  115. package/dist/esm/generated/api/operations.d.ts.map +1 -0
  116. package/dist/esm/generated/api/operations.js +99 -0
  117. package/dist/esm/generated/api/operations.js.map +1 -0
  118. package/dist/esm/generated/api/options.d.ts +31 -0
  119. package/dist/esm/generated/api/options.d.ts.map +1 -0
  120. package/dist/esm/generated/api/options.js +4 -0
  121. package/dist/esm/generated/api/options.js.map +1 -0
  122. package/dist/esm/generated/api/quickpulseContext.d.ts +17 -0
  123. package/dist/esm/generated/api/quickpulseContext.d.ts.map +1 -0
  124. package/dist/esm/generated/api/quickpulseContext.js +23 -0
  125. package/dist/esm/generated/api/quickpulseContext.js.map +1 -0
  126. package/dist/esm/generated/index.d.ts +2 -1
  127. package/dist/esm/generated/index.d.ts.map +1 -1
  128. package/dist/esm/generated/index.js +3 -8
  129. package/dist/esm/generated/index.js.map +1 -1
  130. package/dist/esm/generated/logger.d.ts +2 -0
  131. package/dist/esm/generated/logger.d.ts.map +1 -0
  132. package/dist/esm/generated/logger.js +5 -0
  133. package/dist/esm/generated/logger.js.map +1 -0
  134. package/dist/esm/generated/models/index.d.ts +1 -422
  135. package/dist/esm/generated/models/index.d.ts.map +1 -1
  136. package/dist/esm/generated/models/index.js +3 -103
  137. package/dist/esm/generated/models/index.js.map +1 -1
  138. package/dist/esm/generated/models/models.d.ts +265 -0
  139. package/dist/esm/generated/models/models.d.ts.map +1 -0
  140. package/dist/esm/generated/models/models.js +347 -0
  141. package/dist/esm/generated/models/models.js.map +1 -0
  142. package/dist/esm/generated/quickpulseClient.d.ts +16 -28
  143. package/dist/esm/generated/quickpulseClient.d.ts.map +1 -1
  144. package/dist/esm/generated/quickpulseClient.js +24 -138
  145. package/dist/esm/generated/quickpulseClient.js.map +1 -1
  146. package/dist/esm/generated/static-helpers/urlTemplate.d.ts +5 -0
  147. package/dist/esm/generated/static-helpers/urlTemplate.d.ts.map +1 -0
  148. package/dist/esm/generated/static-helpers/urlTemplate.js +200 -0
  149. package/dist/esm/generated/static-helpers/urlTemplate.js.map +1 -0
  150. package/dist/esm/index.d.ts +2 -2
  151. package/dist/esm/index.d.ts.map +1 -1
  152. package/dist/esm/index.js +13 -0
  153. package/dist/esm/index.js.map +1 -1
  154. package/dist/esm/logs/logRecordProcessor.d.ts +3 -1
  155. package/dist/esm/logs/logRecordProcessor.d.ts.map +1 -1
  156. package/dist/esm/logs/logRecordProcessor.js +32 -1
  157. package/dist/esm/logs/logRecordProcessor.js.map +1 -1
  158. package/dist/esm/metrics/performanceCounters.d.ts.map +1 -1
  159. package/dist/esm/metrics/performanceCounters.js +4 -2
  160. package/dist/esm/metrics/performanceCounters.js.map +1 -1
  161. package/dist/esm/metrics/quickpulse/export/exporter.d.ts.map +1 -1
  162. package/dist/esm/metrics/quickpulse/export/exporter.js.map +1 -1
  163. package/dist/esm/metrics/quickpulse/export/sender.d.ts +22 -5
  164. package/dist/esm/metrics/quickpulse/export/sender.d.ts.map +1 -1
  165. package/dist/esm/metrics/quickpulse/export/sender.js +59 -18
  166. package/dist/esm/metrics/quickpulse/export/sender.js.map +1 -1
  167. package/dist/esm/metrics/quickpulse/filtering/filter.d.ts.map +1 -1
  168. package/dist/esm/metrics/quickpulse/filtering/filter.js +12 -13
  169. package/dist/esm/metrics/quickpulse/filtering/filter.js.map +1 -1
  170. package/dist/esm/metrics/quickpulse/filtering/projection.d.ts.map +1 -1
  171. package/dist/esm/metrics/quickpulse/filtering/projection.js +14 -15
  172. package/dist/esm/metrics/quickpulse/filtering/projection.js.map +1 -1
  173. package/dist/esm/metrics/quickpulse/filtering/validator.d.ts.map +1 -1
  174. package/dist/esm/metrics/quickpulse/filtering/validator.js +37 -20
  175. package/dist/esm/metrics/quickpulse/filtering/validator.js.map +1 -1
  176. package/dist/esm/metrics/quickpulse/liveMetrics.d.ts.map +1 -1
  177. package/dist/esm/metrics/quickpulse/liveMetrics.js +20 -24
  178. package/dist/esm/metrics/quickpulse/liveMetrics.js.map +1 -1
  179. package/dist/esm/metrics/quickpulse/types.d.ts +4 -3
  180. package/dist/esm/metrics/quickpulse/types.d.ts.map +1 -1
  181. package/dist/esm/metrics/quickpulse/types.js.map +1 -1
  182. package/dist/esm/metrics/quickpulse/utils.d.ts.map +1 -1
  183. package/dist/esm/metrics/quickpulse/utils.js +6 -7
  184. package/dist/esm/metrics/quickpulse/utils.js.map +1 -1
  185. package/dist/esm/metrics/standardMetrics.d.ts.map +1 -1
  186. package/dist/esm/metrics/standardMetrics.js +2 -1
  187. package/dist/esm/metrics/standardMetrics.js.map +1 -1
  188. package/dist/esm/metrics/utils.d.ts +7 -0
  189. package/dist/esm/metrics/utils.d.ts.map +1 -1
  190. package/dist/esm/metrics/utils.js +22 -0
  191. package/dist/esm/metrics/utils.js.map +1 -1
  192. package/dist/esm/shared/config.d.ts.map +1 -1
  193. package/dist/esm/shared/config.js +2 -2
  194. package/dist/esm/shared/config.js.map +1 -1
  195. package/dist/esm/shared/envConfig.d.ts +1 -1
  196. package/dist/esm/shared/envConfig.d.ts.map +1 -1
  197. package/dist/esm/shared/envConfig.js.map +1 -1
  198. package/dist/esm/traces/spanProcessor.d.ts +3 -1
  199. package/dist/esm/traces/spanProcessor.d.ts.map +1 -1
  200. package/dist/esm/traces/spanProcessor.js +64 -1
  201. package/dist/esm/traces/spanProcessor.js.map +1 -1
  202. package/dist/esm/types.d.ts +5 -3
  203. package/dist/esm/types.d.ts.map +1 -1
  204. package/dist/esm/types.js +3 -1
  205. package/dist/esm/types.js.map +1 -1
  206. package/dist/esm/utils/common.d.ts.map +1 -1
  207. package/dist/esm/utils/common.js +5 -0
  208. package/dist/esm/utils/common.js.map +1 -1
  209. package/dist/esm/utils/genaiAttributes.d.ts +43 -0
  210. package/dist/esm/utils/genaiAttributes.d.ts.map +1 -0
  211. package/dist/esm/utils/genaiAttributes.js +57 -0
  212. package/dist/esm/utils/genaiAttributes.js.map +1 -0
  213. package/package.json +40 -44
  214. package/dist/commonjs/generated/models/mappers.d.ts +0 -31
  215. package/dist/commonjs/generated/models/mappers.d.ts.map +0 -1
  216. package/dist/commonjs/generated/models/mappers.js +0 -791
  217. package/dist/commonjs/generated/models/mappers.js.map +0 -1
  218. package/dist/commonjs/generated/models/parameters.d.ts +0 -16
  219. package/dist/commonjs/generated/models/parameters.d.ts.map +0 -1
  220. package/dist/commonjs/generated/models/parameters.js +0 -147
  221. package/dist/commonjs/generated/models/parameters.js.map +0 -1
  222. package/dist/commonjs/shared/module-cjs.cjs.map +0 -1
  223. package/dist/commonjs/shared/module-cjs.d.cts.map +0 -1
  224. package/dist/esm/generated/models/mappers.d.ts +0 -31
  225. package/dist/esm/generated/models/mappers.d.ts.map +0 -1
  226. package/dist/esm/generated/models/mappers.js +0 -788
  227. package/dist/esm/generated/models/mappers.js.map +0 -1
  228. package/dist/esm/generated/models/parameters.d.ts +0 -16
  229. package/dist/esm/generated/models/parameters.d.ts.map +0 -1
  230. package/dist/esm/generated/models/parameters.js +0 -144
  231. package/dist/esm/generated/models/parameters.js.map +0 -1
@@ -20,6 +20,12 @@ const opentelemetryInstrumentationPatcher_js_1 = require("./utils/opentelemetryI
20
20
  const common_js_1 = require("./utils/common.js");
21
21
  const index_js_3 = require("./shared/logging/index.js");
22
22
  const types_js_2 = require("./types.js");
23
+ const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
24
+ /**
25
+ * Semantic attribute for cloud resource ID, defined by \@opentelemetry/resource-detector-azure
26
+ * @internal
27
+ */
28
+ const CLOUD_RESOURCE_ID_ATTRIBUTE = "cloud.resource_id";
23
29
  process.env["AZURE_MONITOR_DISTRO_VERSION"] = types_js_1.AZURE_MONITOR_OPENTELEMETRY_VERSION;
24
30
  let sdk;
25
31
  let browserSdkLoader;
@@ -57,11 +63,18 @@ function useAzureMonitor(options) {
57
63
  bunyan: config.instrumentationOptions?.bunyan?.enabled,
58
64
  winston: config.instrumentationOptions?.winston?.enabled,
59
65
  };
66
+ // Check if the AKS resource detector successfully populated specific resource attributes
67
+ // (k8s.cluster.name or cloud.resource_id) beyond the basic cloud.platform/cloud.provider
68
+ // Derive from config.resource.attributes which already includes the AKS detector results
69
+ const resourceAttributes = config.resource.attributes;
70
+ const aksResourceDetected = semantic_conventions_1.SEMRESATTRS_K8S_CLUSTER_NAME in resourceAttributes ||
71
+ CLOUD_RESOURCE_ID_ATTRIBUTE in resourceAttributes;
60
72
  const statsbeatFeatures = {
61
73
  browserSdkLoader: config.browserSdkLoaderOptions.enabled,
62
74
  aadHandling: !!config.azureMonitorExporterOptions?.credential,
63
75
  diskRetry: !config.azureMonitorExporterOptions?.disableOfflineStorage,
64
76
  customerSdkStats: process.env[types_js_1.APPLICATIONINSIGHTS_SDKSTATS_DISABLED]?.toLowerCase() === "true",
77
+ aksResourceDetectorPopulation: aksResourceDetected,
65
78
  };
66
79
  (0, statsbeat_js_1.getInstance)().setStatsbeatFeatures(statsbeatInstrumentations, statsbeatFeatures);
67
80
  if (config.browserSdkLoaderOptions.enabled) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { metrics, trace } from \"@opentelemetry/api\";\nimport { logs } from \"@opentelemetry/api-logs\";\nimport type { NodeSDKConfiguration } from \"@opentelemetry/sdk-node\";\nimport { NodeSDK } from \"@opentelemetry/sdk-node\";\nimport type { MetricReader, ViewOptions } from \"@opentelemetry/sdk-metrics\";\nimport { InternalConfig } from \"./shared/config.js\";\nimport { MetricHandler } from \"./metrics/index.js\";\nimport { TraceHandler } from \"./traces/handler.js\";\nimport { LogHandler } from \"./logs/index.js\";\nimport type { StatsbeatFeatures, StatsbeatInstrumentations } from \"./types.js\";\nimport {\n AZURE_MONITOR_OPENTELEMETRY_VERSION,\n AzureMonitorOpenTelemetryOptions,\n APPLICATIONINSIGHTS_SDKSTATS_DISABLED,\n InstrumentationOptions,\n BrowserSdkLoaderOptions,\n} from \"./types.js\";\nimport { BrowserSdkLoader } from \"./browserSdkLoader/browserSdkLoader.js\";\nimport { setSdkPrefix } from \"./metrics/quickpulse/utils.js\";\nimport type { SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport type { LogRecordProcessor } from \"@opentelemetry/sdk-logs\";\nimport { getInstance } from \"./utils/statsbeat.js\";\nimport { patchOpenTelemetryInstrumentationEnable } from \"./utils/opentelemetryInstrumentationPatcher.js\";\nimport { isFunctionApp, parseResourceDetectorsFromEnvVar } from \"./utils/common.js\";\nimport { Logger } from \"./shared/logging/index.js\";\nimport { AZURE_MONITOR_AUTO_ATTACH } from \"./types.js\";\n\nexport { AzureMonitorOpenTelemetryOptions, InstrumentationOptions, BrowserSdkLoaderOptions };\n\nprocess.env[\"AZURE_MONITOR_DISTRO_VERSION\"] = AZURE_MONITOR_OPENTELEMETRY_VERSION;\n\nlet sdk: NodeSDK;\nlet browserSdkLoader: BrowserSdkLoader | undefined;\n\n/**\n * Check if auto-attach (autoinstrumentation) is enabled and warn about double instrumentation.\n */\nfunction sendAttachWarning(): void {\n if (process.env[AZURE_MONITOR_AUTO_ATTACH] === \"true\" && !isFunctionApp()) {\n // TODO: When AKS attach is public, update this message with disablement instructions for AKS\n const message =\n \"Distro detected that automatic instrumentation may have occurred. Only use autoinstrumentation if you \" +\n \"are not using manual instrumentation of OpenTelemetry in your code, such as with \" +\n \"@azure/monitor-opentelemetry or @azure/monitor-opentelemetry-exporter. For App Service resources, disable \" +\n \"autoinstrumentation in the Application Insights experience on your App Service resource or by setting \" +\n \"the ApplicationInsightsAgent_EXTENSION_VERSION app setting to 'disabled'.\";\n // Surface in the log stream\n console.warn(message);\n // Also log via diagnostic logging\n Logger.getInstance().warn(message);\n }\n}\n\n/**\n * Initialize Azure Monitor Distro\n * @param options - Azure Monitor OpenTelemetry Options\n */\nexport function useAzureMonitor(options?: AzureMonitorOpenTelemetryOptions): void {\n const config = new InternalConfig(options);\n patchOpenTelemetryInstrumentationEnable();\n const statsbeatInstrumentations: StatsbeatInstrumentations = {\n // Instrumentations\n azureSdk: config.instrumentationOptions?.azureSdk?.enabled,\n mongoDb: config.instrumentationOptions?.mongoDb?.enabled,\n mySql: config.instrumentationOptions?.mySql?.enabled,\n postgreSql: config.instrumentationOptions?.postgreSql?.enabled,\n redis: config.instrumentationOptions?.redis?.enabled,\n bunyan: config.instrumentationOptions?.bunyan?.enabled,\n winston: config.instrumentationOptions?.winston?.enabled,\n };\n const statsbeatFeatures: StatsbeatFeatures = {\n browserSdkLoader: config.browserSdkLoaderOptions.enabled,\n aadHandling: !!config.azureMonitorExporterOptions?.credential,\n diskRetry: !config.azureMonitorExporterOptions?.disableOfflineStorage,\n customerSdkStats: process.env[APPLICATIONINSIGHTS_SDKSTATS_DISABLED]?.toLowerCase() === \"true\",\n };\n getInstance().setStatsbeatFeatures(statsbeatInstrumentations, statsbeatFeatures);\n\n if (config.browserSdkLoaderOptions.enabled) {\n browserSdkLoader = new BrowserSdkLoader(config);\n }\n // Remove global providers in OpenTelemetry, these would be overridden if present\n metrics.disable();\n trace.disable();\n logs.disable();\n\n // Clear the entire OpenTelemetry API global state to avoid version conflicts.\n // The disable() calls above remove individual providers but leave the `version` field\n // on the global object intact. If a different version of @opentelemetry/api was loaded\n // first (e.g. by a VS Code extension host or another extension), the stale version\n // causes registerGlobal() in sdk.start() to fail with \"All API registration versions\n // must match\", resulting in Noop providers. Deleting the global object forces\n // registerGlobal() to create a fresh one with the correct version.\n const globalOpentelemetryApiKey = Symbol.for(\"opentelemetry.js.api.1\");\n delete (globalThis as Record<symbol, unknown>)[globalOpentelemetryApiKey];\n\n // Create internal handlers\n const metricHandler = new MetricHandler(config);\n const traceHandler = new TraceHandler(config, metricHandler);\n const logHandler = new LogHandler(config, metricHandler);\n\n const instrumentations = traceHandler\n .getInstrumentations()\n .concat(logHandler.getInstrumentations());\n\n const resourceDetectorsList = parseResourceDetectorsFromEnvVar();\n\n // Add extra SpanProcessors, and logRecordProcessors from user configuration\n const spanProcessors: SpanProcessor[] = options?.spanProcessors || [];\n const logRecordProcessors: LogRecordProcessor[] = options?.logRecordProcessors || [];\n const customViews: ViewOptions[] = options?.views || [];\n\n // Prepare metric readers - always include Azure Monitor\n const metricReaders: MetricReader[] = [\n metricHandler.getMetricReader(),\n ...(options?.metricReaders || []),\n ];\n\n const views: ViewOptions[] = metricHandler.getViews().concat(customViews);\n\n // Initialize OpenTelemetry SDK\n const sdkConfig: Partial<NodeSDKConfiguration> = {\n autoDetectResources: true,\n metricReaders: metricReaders,\n views,\n instrumentations: instrumentations,\n logRecordProcessors: [\n logHandler.getAzureLogRecordProcessor(),\n ...logRecordProcessors,\n logHandler.getBatchLogRecordProcessor(),\n ],\n resource: config.resource,\n sampler: traceHandler.getSampler(),\n spanProcessors: [\n traceHandler.getAzureMonitorSpanProcessor(),\n ...spanProcessors,\n traceHandler.getBatchSpanProcessor(),\n ],\n resourceDetectors: resourceDetectorsList,\n };\n sdk = new NodeSDK(sdkConfig);\n setSdkPrefix();\n sendAttachWarning();\n sdk.start();\n}\n\n/**\n * Shutdown Azure Monitor Open Telemetry Distro\n * @see https://github.com/open-telemetry/opentelemetry-js/blob/0229434cb5a3179f63c021105f36270ae7897929/experimental/packages/opentelemetry-sdk-node/src/sdk.ts#L398\n */\nexport function shutdownAzureMonitor(): Promise<void> {\n browserSdkLoader?.dispose();\n return sdk?.shutdown();\n}\n\n/**\n * Get the internal SDK instance for testing purposes\n * @internal\n */\n// eslint-disable-next-line no-underscore-dangle\nexport function _getSdkInstance(): NodeSDK | undefined {\n return sdk;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { metrics, trace } from \"@opentelemetry/api\";\nimport { logs } from \"@opentelemetry/api-logs\";\nimport type { NodeSDKConfiguration } from \"@opentelemetry/sdk-node\";\nimport { NodeSDK } from \"@opentelemetry/sdk-node\";\nimport type { MetricReader, ViewOptions } from \"@opentelemetry/sdk-metrics\";\nimport { InternalConfig } from \"./shared/config.js\";\nimport { MetricHandler } from \"./metrics/index.js\";\nimport { TraceHandler } from \"./traces/handler.js\";\nimport { LogHandler } from \"./logs/index.js\";\nimport type {\n StatsbeatFeatures,\n StatsbeatInstrumentations,\n AzureMonitorOpenTelemetryOptions,\n InstrumentationOptions,\n BrowserSdkLoaderOptions,\n} from \"./types.js\";\nimport {\n AZURE_MONITOR_OPENTELEMETRY_VERSION,\n APPLICATIONINSIGHTS_SDKSTATS_DISABLED,\n} from \"./types.js\";\nimport { BrowserSdkLoader } from \"./browserSdkLoader/browserSdkLoader.js\";\nimport { setSdkPrefix } from \"./metrics/quickpulse/utils.js\";\nimport type { SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport type { LogRecordProcessor } from \"@opentelemetry/sdk-logs\";\nimport { getInstance } from \"./utils/statsbeat.js\";\nimport { patchOpenTelemetryInstrumentationEnable } from \"./utils/opentelemetryInstrumentationPatcher.js\";\nimport { isFunctionApp, parseResourceDetectorsFromEnvVar } from \"./utils/common.js\";\nimport { Logger } from \"./shared/logging/index.js\";\nimport { AZURE_MONITOR_AUTO_ATTACH } from \"./types.js\";\nimport { SEMRESATTRS_K8S_CLUSTER_NAME } from \"@opentelemetry/semantic-conventions\";\n\n/**\n * Semantic attribute for cloud resource ID, defined by \\@opentelemetry/resource-detector-azure\n * @internal\n */\nconst CLOUD_RESOURCE_ID_ATTRIBUTE = \"cloud.resource_id\";\n\nexport type { AzureMonitorOpenTelemetryOptions, InstrumentationOptions, BrowserSdkLoaderOptions };\n\nprocess.env[\"AZURE_MONITOR_DISTRO_VERSION\"] = AZURE_MONITOR_OPENTELEMETRY_VERSION;\n\nlet sdk: NodeSDK;\nlet browserSdkLoader: BrowserSdkLoader | undefined;\n\n/**\n * Check if auto-attach (autoinstrumentation) is enabled and warn about double instrumentation.\n */\nfunction sendAttachWarning(): void {\n if (process.env[AZURE_MONITOR_AUTO_ATTACH] === \"true\" && !isFunctionApp()) {\n // TODO: When AKS attach is public, update this message with disablement instructions for AKS\n const message =\n \"Distro detected that automatic instrumentation may have occurred. Only use autoinstrumentation if you \" +\n \"are not using manual instrumentation of OpenTelemetry in your code, such as with \" +\n \"@azure/monitor-opentelemetry or @azure/monitor-opentelemetry-exporter. For App Service resources, disable \" +\n \"autoinstrumentation in the Application Insights experience on your App Service resource or by setting \" +\n \"the ApplicationInsightsAgent_EXTENSION_VERSION app setting to 'disabled'.\";\n // Surface in the log stream\n console.warn(message);\n // Also log via diagnostic logging\n Logger.getInstance().warn(message);\n }\n}\n\n/**\n * Initialize Azure Monitor Distro\n * @param options - Azure Monitor OpenTelemetry Options\n */\nexport function useAzureMonitor(options?: AzureMonitorOpenTelemetryOptions): void {\n const config = new InternalConfig(options);\n patchOpenTelemetryInstrumentationEnable();\n const statsbeatInstrumentations: StatsbeatInstrumentations = {\n // Instrumentations\n azureSdk: config.instrumentationOptions?.azureSdk?.enabled,\n mongoDb: config.instrumentationOptions?.mongoDb?.enabled,\n mySql: config.instrumentationOptions?.mySql?.enabled,\n postgreSql: config.instrumentationOptions?.postgreSql?.enabled,\n redis: config.instrumentationOptions?.redis?.enabled,\n bunyan: config.instrumentationOptions?.bunyan?.enabled,\n winston: config.instrumentationOptions?.winston?.enabled,\n };\n // Check if the AKS resource detector successfully populated specific resource attributes\n // (k8s.cluster.name or cloud.resource_id) beyond the basic cloud.platform/cloud.provider\n // Derive from config.resource.attributes which already includes the AKS detector results\n const resourceAttributes = config.resource.attributes;\n const aksResourceDetected =\n SEMRESATTRS_K8S_CLUSTER_NAME in resourceAttributes ||\n CLOUD_RESOURCE_ID_ATTRIBUTE in resourceAttributes;\n const statsbeatFeatures: StatsbeatFeatures = {\n browserSdkLoader: config.browserSdkLoaderOptions.enabled,\n aadHandling: !!config.azureMonitorExporterOptions?.credential,\n diskRetry: !config.azureMonitorExporterOptions?.disableOfflineStorage,\n customerSdkStats: process.env[APPLICATIONINSIGHTS_SDKSTATS_DISABLED]?.toLowerCase() === \"true\",\n aksResourceDetectorPopulation: aksResourceDetected,\n };\n getInstance().setStatsbeatFeatures(statsbeatInstrumentations, statsbeatFeatures);\n\n if (config.browserSdkLoaderOptions.enabled) {\n browserSdkLoader = new BrowserSdkLoader(config);\n }\n // Remove global providers in OpenTelemetry, these would be overridden if present\n metrics.disable();\n trace.disable();\n logs.disable();\n\n // Clear the entire OpenTelemetry API global state to avoid version conflicts.\n // The disable() calls above remove individual providers but leave the `version` field\n // on the global object intact. If a different version of @opentelemetry/api was loaded\n // first (e.g. by a VS Code extension host or another extension), the stale version\n // causes registerGlobal() in sdk.start() to fail with \"All API registration versions\n // must match\", resulting in Noop providers. Deleting the global object forces\n // registerGlobal() to create a fresh one with the correct version.\n const globalOpentelemetryApiKey = Symbol.for(\"opentelemetry.js.api.1\");\n delete (globalThis as Record<symbol, unknown>)[globalOpentelemetryApiKey];\n\n // Create internal handlers\n const metricHandler = new MetricHandler(config);\n const traceHandler = new TraceHandler(config, metricHandler);\n const logHandler = new LogHandler(config, metricHandler);\n\n const instrumentations = traceHandler\n .getInstrumentations()\n .concat(logHandler.getInstrumentations());\n\n const resourceDetectorsList = parseResourceDetectorsFromEnvVar();\n\n // Add extra SpanProcessors, and logRecordProcessors from user configuration\n const spanProcessors: SpanProcessor[] = options?.spanProcessors || [];\n const logRecordProcessors: LogRecordProcessor[] = options?.logRecordProcessors || [];\n const customViews: ViewOptions[] = options?.views || [];\n\n // Prepare metric readers - always include Azure Monitor\n const metricReaders: MetricReader[] = [\n metricHandler.getMetricReader(),\n ...(options?.metricReaders || []),\n ];\n\n const views: ViewOptions[] = metricHandler.getViews().concat(customViews);\n\n // Initialize OpenTelemetry SDK\n const sdkConfig: Partial<NodeSDKConfiguration> = {\n autoDetectResources: true,\n metricReaders: metricReaders,\n views,\n instrumentations: instrumentations,\n logRecordProcessors: [\n logHandler.getAzureLogRecordProcessor(),\n ...logRecordProcessors,\n logHandler.getBatchLogRecordProcessor(),\n ],\n resource: config.resource,\n sampler: traceHandler.getSampler(),\n spanProcessors: [\n traceHandler.getAzureMonitorSpanProcessor(),\n ...spanProcessors,\n traceHandler.getBatchSpanProcessor(),\n ],\n resourceDetectors: resourceDetectorsList,\n };\n sdk = new NodeSDK(sdkConfig);\n setSdkPrefix();\n sendAttachWarning();\n sdk.start();\n}\n\n/**\n * Shutdown Azure Monitor Open Telemetry Distro\n * @see https://github.com/open-telemetry/opentelemetry-js/blob/0229434cb5a3179f63c021105f36270ae7897929/experimental/packages/opentelemetry-sdk-node/src/sdk.ts#L398\n */\nexport function shutdownAzureMonitor(): Promise<void> {\n browserSdkLoader?.dispose();\n return sdk?.shutdown();\n}\n\n/**\n * Get the internal SDK instance for testing purposes\n * @internal\n */\n// eslint-disable-next-line no-underscore-dangle\nexport function _getSdkInstance(): NodeSDK | undefined {\n return sdk;\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import type { MetricHandler } from "../metrics/handler.js";
2
2
  import type { LogRecordProcessor, SdkLogRecord } from "@opentelemetry/sdk-logs";
3
+ import type { Context } from "@opentelemetry/api";
3
4
  /**
4
5
  * Azure Monitor LogRecord Processor.
5
6
  * @internal
@@ -7,7 +8,8 @@ import type { LogRecordProcessor, SdkLogRecord } from "@opentelemetry/sdk-logs";
7
8
  export declare class AzureLogRecordProcessor implements LogRecordProcessor {
8
9
  private readonly _metricHandler;
9
10
  constructor(metricHandler: MetricHandler);
10
- onEmit(logRecord: SdkLogRecord): void;
11
+ onEmit(logRecord: SdkLogRecord, context?: Context): void;
12
+ private _propagateMainAgentAttributesFromActiveSpan;
11
13
  forceFlush(): Promise<void>;
12
14
  shutdown(): Promise<void>;
13
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logRecordProcessor.d.ts","sourceRoot":"","sources":["../../../src/logs/logRecordProcessor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGhF;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,kBAAkB;IAChE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;gBAEnC,aAAa,EAAE,aAAa;IAIjC,MAAM,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAQrC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGjC"}
1
+ {"version":3,"file":"logRecordProcessor.d.ts","sourceRoot":"","sources":["../../../src/logs/logRecordProcessor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAMlD;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,kBAAkB;IAChE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;gBAEnC,aAAa,EAAE,aAAa;IAIjC,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAa/D,OAAO,CAAC,2CAA2C;IA2B5C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGjC"}
@@ -3,7 +3,9 @@
3
3
  // Licensed under the MIT License.
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.AzureLogRecordProcessor = void 0;
6
+ const api_1 = require("@opentelemetry/api");
6
7
  const index_js_1 = require("../shared/logging/index.js");
8
+ const genaiAttributes_js_1 = require("../utils/genaiAttributes.js");
7
9
  /**
8
10
  * Azure Monitor LogRecord Processor.
9
11
  * @internal
@@ -13,7 +15,13 @@ class AzureLogRecordProcessor {
13
15
  constructor(metricHandler) {
14
16
  this._metricHandler = metricHandler;
15
17
  }
16
- onEmit(logRecord) {
18
+ onEmit(logRecord, context) {
19
+ try {
20
+ this._propagateMainAgentAttributesFromActiveSpan(logRecord, context);
21
+ }
22
+ catch (error) {
23
+ index_js_1.Logger.getInstance().warn("Error while propagating main agent attributes onEmit", error);
24
+ }
17
25
  try {
18
26
  this._metricHandler.recordLog(logRecord);
19
27
  }
@@ -21,6 +29,29 @@ class AzureLogRecordProcessor {
21
29
  index_js_1.Logger.getInstance().warn("Error while recording log", error);
22
30
  }
23
31
  }
32
+ _propagateMainAgentAttributesFromActiveSpan(logRecord, context) {
33
+ if (!context) {
34
+ return;
35
+ }
36
+ const span = api_1.trace.getSpan(context);
37
+ if (!span) {
38
+ return;
39
+ }
40
+ // The Span returned by trace.getSpan may be a non-recording span or a
41
+ // foreign implementation that does not expose `attributes`.
42
+ const spanAttributes = span.attributes;
43
+ if (!spanAttributes) {
44
+ return;
45
+ }
46
+ // Copy only the spec-defined main-agent attributes rather than scanning
47
+ // every attribute on the span by prefix.
48
+ for (const key of genaiAttributes_js_1.MAIN_AGENT_TARGET_ATTRIBUTES) {
49
+ const value = spanAttributes[key];
50
+ if (value !== undefined) {
51
+ logRecord.setAttribute(key, value);
52
+ }
53
+ }
54
+ }
24
55
  forceFlush() {
25
56
  return Promise.resolve();
26
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logRecordProcessor.js","sourceRoot":"","sources":["../../../src/logs/logRecordProcessor.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAIlC,yDAAoD;AAEpD;;;GAGG;AACH,MAAa,uBAAuB;IACjB,cAAc,CAAgB;IAE/C,YAAY,aAA4B;QACtC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,SAAuB;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iBAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAEM,UAAU;QACf,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAEM,QAAQ;QACb,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AAtBD,0DAsBC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { MetricHandler } from \"../metrics/handler.js\";\nimport type { LogRecordProcessor, SdkLogRecord } from \"@opentelemetry/sdk-logs\";\nimport { Logger } from \"../shared/logging/index.js\";\n\n/**\n * Azure Monitor LogRecord Processor.\n * @internal\n */\nexport class AzureLogRecordProcessor implements LogRecordProcessor {\n private readonly _metricHandler: MetricHandler;\n\n constructor(metricHandler: MetricHandler) {\n this._metricHandler = metricHandler;\n }\n\n public onEmit(logRecord: SdkLogRecord): void {\n try {\n this._metricHandler.recordLog(logRecord);\n } catch (error) {\n Logger.getInstance().warn(\"Error while recording log\", error);\n }\n }\n\n public forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n public shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n"]}
1
+ {"version":3,"file":"logRecordProcessor.js","sourceRoot":"","sources":["../../../src/logs/logRecordProcessor.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAKlC,4CAA2C;AAE3C,yDAAoD;AACpD,oEAA2E;AAE3E;;;GAGG;AACH,MAAa,uBAAuB;IACjB,cAAc,CAAgB;IAE/C,YAAY,aAA4B;QACtC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,SAAuB,EAAE,OAAiB;QACtD,IAAI,CAAC;YACH,IAAI,CAAC,2CAA2C,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iBAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,sDAAsD,EAAE,KAAK,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iBAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAEO,2CAA2C,CACjD,SAAuB,EACvB,OAAiB;QAEjB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,sEAAsE;QACtE,4DAA4D;QAC5D,MAAM,cAAc,GAAI,IAA8B,CAAC,UAAU,CAAC;QAClE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QACD,wEAAwE;QACxE,yCAAyC;QACzC,KAAK,MAAM,GAAG,IAAI,iDAA4B,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAEM,UAAU;QACf,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAEM,QAAQ;QACb,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AAtDD,0DAsDC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { MetricHandler } from \"../metrics/handler.js\";\nimport type { LogRecordProcessor, SdkLogRecord } from \"@opentelemetry/sdk-logs\";\nimport type { Context } from \"@opentelemetry/api\";\nimport { trace } from \"@opentelemetry/api\";\nimport type { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../shared/logging/index.js\";\nimport { MAIN_AGENT_TARGET_ATTRIBUTES } from \"../utils/genaiAttributes.js\";\n\n/**\n * Azure Monitor LogRecord Processor.\n * @internal\n */\nexport class AzureLogRecordProcessor implements LogRecordProcessor {\n private readonly _metricHandler: MetricHandler;\n\n constructor(metricHandler: MetricHandler) {\n this._metricHandler = metricHandler;\n }\n\n public onEmit(logRecord: SdkLogRecord, context?: Context): void {\n try {\n this._propagateMainAgentAttributesFromActiveSpan(logRecord, context);\n } catch (error) {\n Logger.getInstance().warn(\"Error while propagating main agent attributes onEmit\", error);\n }\n try {\n this._metricHandler.recordLog(logRecord);\n } catch (error) {\n Logger.getInstance().warn(\"Error while recording log\", error);\n }\n }\n\n private _propagateMainAgentAttributesFromActiveSpan(\n logRecord: SdkLogRecord,\n context?: Context,\n ): void {\n if (!context) {\n return;\n }\n const span = trace.getSpan(context);\n if (!span) {\n return;\n }\n // The Span returned by trace.getSpan may be a non-recording span or a\n // foreign implementation that does not expose `attributes`.\n const spanAttributes = (span as Partial<ReadableSpan>).attributes;\n if (!spanAttributes) {\n return;\n }\n // Copy only the spec-defined main-agent attributes rather than scanning\n // every attribute on the span by prefix.\n for (const key of MAIN_AGENT_TARGET_ATTRIBUTES) {\n const value = spanAttributes[key];\n if (value !== undefined) {\n logRecord.setAttribute(key, value);\n }\n }\n }\n\n public forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n public shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"performanceCounters.d.ts","sourceRoot":"","sources":["../../../src/metrics/performanceCounters.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAM5D,OAAO,EAAE,aAAa,EAAiC,MAAM,4BAA4B,CAAC;AAC1F,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,+BAA+B,CAAC;AAE9E,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAMpE;;GAEG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,wBAAwB,CAAY;IAC5C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,wBAAwB,CAAqB;IACrD,OAAO,CAAC,uBAAuB,CAAkB;IACjD,OAAO,CAAC,+BAA+B,CAAqB;IAC5D,OAAO,CAAC,yBAAyB,CAAkB;IACnD,OAAO,CAAC,iCAAiC,CAAqB;IAC9D,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,0BAA0B,CAAqB;IACvD,OAAO,CAAC,0BAA0B,CAAkB;IACpD,OAAO,CAAC,kCAAkC,CAAqB;IAC/D,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,wBAAwB,CAAqB;IACrD,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,2BAA2B,CAAqB;IACxD,OAAO,CAAC,iBAAiB,CAA0D;IACnF,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,eAAe,CAA6D;IACpF,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,UAAU,CAAW;IAC7B,OAAO,CAAC,QAAQ,CAIZ;IACJ,OAAO,CAAC,eAAe,CAInB;IACJ,OAAO,CAAC,mBAAmB,CAAa;IAExC;;;;OAIG;gBACS,MAAM,EAAE,gCAAgC,EAAE,OAAO,CAAC,EAAE;QAAE,kBAAkB,EAAE,MAAM,CAAA;KAAE;IAgG9F;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;OAEG;IACI,gBAAgB,IAAI,aAAa;IAIxC;;;OAGG;IACI,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAkB3C;;;OAGG;IACI,SAAS,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAO/C,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,mBAAmB;IAwC3B,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,wBAAwB;IAwChC,OAAO,CAAC,cAAc;IA2CtB,OAAO,CAAC,gBAAgB;CAgBzB"}
1
+ {"version":3,"file":"performanceCounters.d.ts","sourceRoot":"","sources":["../../../src/metrics/performanceCounters.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAM5D,OAAO,EAAE,aAAa,EAAiC,MAAM,4BAA4B,CAAC;AAC1F,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,+BAA+B,CAAC;AAG9E,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAOpE;;GAEG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,wBAAwB,CAAY;IAC5C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,wBAAwB,CAAqB;IACrD,OAAO,CAAC,uBAAuB,CAAkB;IACjD,OAAO,CAAC,+BAA+B,CAAqB;IAC5D,OAAO,CAAC,yBAAyB,CAAkB;IACnD,OAAO,CAAC,iCAAiC,CAAqB;IAC9D,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,0BAA0B,CAAqB;IACvD,OAAO,CAAC,0BAA0B,CAAkB;IACpD,OAAO,CAAC,kCAAkC,CAAqB;IAC/D,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,wBAAwB,CAAqB;IACrD,OAAO,CAAC,mBAAmB,CAAkB;IAC7C,OAAO,CAAC,2BAA2B,CAAqB;IACxD,OAAO,CAAC,iBAAiB,CAA0D;IACnF,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,eAAe,CAA6D;IACpF,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,UAAU,CAAW;IAC7B,OAAO,CAAC,QAAQ,CAIZ;IACJ,OAAO,CAAC,eAAe,CAInB;IACJ,OAAO,CAAC,mBAAmB,CAAa;IAExC;;;;OAIG;gBACS,MAAM,EAAE,gCAAgC,EAAE,OAAO,CAAC,EAAE;QAAE,kBAAkB,EAAE,MAAM,CAAA;KAAE;IAgG9F;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;OAEG;IACI,gBAAgB,IAAI,aAAa;IAIxC;;;OAGG;IACI,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAkB3C;;;OAGG;IACI,SAAS,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAO/C,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,mBAAmB;IAwC3B,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,wBAAwB;IAwChC,OAAO,CAAC,cAAc;IA2CtB,OAAO,CAAC,gBAAgB;CAgBzB"}
@@ -9,8 +9,10 @@ const api_1 = require("@opentelemetry/api");
9
9
  const monitor_opentelemetry_exporter_1 = require("@azure/monitor-opentelemetry-exporter");
10
10
  const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
11
11
  const types_js_1 = require("./types.js");
12
+ const core_1 = require("@opentelemetry/core");
12
13
  const utils_js_1 = require("./quickpulse/utils.js");
13
14
  const logger_js_1 = require("../shared/logging/logger.js");
15
+ const utils_js_2 = require("./utils.js");
14
16
  const node_process_1 = tslib_1.__importDefault(require("node:process"));
15
17
  /**
16
18
  * Azure Monitor PerformanceCounter Metrics
@@ -140,7 +142,7 @@ class PerformanceCounterMetrics {
140
142
  return;
141
143
  }
142
144
  this.totalCount++;
143
- const durationMs = span.duration[0];
145
+ const durationMs = (0, core_1.hrTimeToMilliseconds)(span.duration);
144
146
  this.intervalExecutionTime += durationMs;
145
147
  this.requestDurationHistogram.record(durationMs);
146
148
  if (span.events) {
@@ -186,7 +188,7 @@ class PerformanceCounterMetrics {
186
188
  }
187
189
  }
188
190
  getAvailableMemory(observableResult) {
189
- observableResult.observe(node_os_1.default.freemem());
191
+ observableResult.observe((0, utils_js_2.readAvailableMemory)());
190
192
  }
191
193
  getTotalCombinedCpu(cpus, lastCpus) {
192
194
  let totalUser = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"performanceCounters.js","sourceRoot":"","sources":["../../../src/metrics/performanceCounters.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport os from \"node:os\";\nimport type {\n Histogram,\n Meter,\n ObservableCallback,\n ObservableGauge,\n ObservableResult,\n} from \"@opentelemetry/api\";\nimport { SpanKind, ValueType } from \"@opentelemetry/api\";\nimport type { SdkLogRecord } from \"@opentelemetry/sdk-logs\";\nimport { AzureMonitorMetricExporter } from \"@azure/monitor-opentelemetry-exporter\";\nimport type {\n MeterProviderOptions,\n PeriodicExportingMetricReaderOptions,\n} from \"@opentelemetry/sdk-metrics\";\nimport { MeterProvider, PeriodicExportingMetricReader } from \"@opentelemetry/sdk-metrics\";\nimport type { ReadableSpan, TimedEvent } from \"@opentelemetry/sdk-trace-base\";\nimport { PerformanceCounterMetricNames } from \"./types.js\";\nimport type { AzureMonitorOpenTelemetryOptions } from \"../types.js\";\nimport { getLogData, isExceptionData } from \"./quickpulse/utils.js\";\nimport type { ExceptionData, TraceData } from \"./quickpulse/types.js\";\nimport { Logger } from \"../shared/logging/logger.js\";\nimport process from \"node:process\";\n\n/**\n * Azure Monitor PerformanceCounter Metrics\n */\nexport class PerformanceCounterMetrics {\n private internalConfig: AzureMonitorOpenTelemetryOptions;\n private collectionInterval = 60000; // 60 seconds\n private meterProvider: MeterProvider;\n private azureExporter: AzureMonitorMetricExporter;\n private meter: Meter;\n private requestDurationHistogram: Histogram;\n private requestRateGauge: ObservableGauge;\n private requestRateGaugeCallback: ObservableCallback;\n private memoryPrivateBytesGauge: ObservableGauge;\n private memoryPrivateBytesGaugeCallback: ObservableCallback;\n private memoryAvailableBytesGauge: ObservableGauge;\n private memoryAvailableBytesGaugeCallback: ObservableCallback;\n private processorTimeGauge: ObservableGauge;\n private processorTimeGaugeCallback: ObservableCallback;\n private processTimeNormalizedGauge: ObservableGauge;\n private processTimeNormalizedGaugeCallback: ObservableCallback;\n private processTimeGauge: ObservableGauge;\n private processTimeGaugeCallback: ObservableCallback;\n private exceptionCountGauge: ObservableGauge;\n private exceptionCountGaugeCallback: ObservableCallback;\n private lastExceptionRate: { count: number; time: number } = { count: 0, time: 0 };\n private totalCount: number = 0;\n private intervalExecutionTime = 0;\n private lastRequestRate: { count: number; time: number; executionInterval: number };\n private lastAppCpuUsage: { user: number; system: number };\n private lastHrtime: number[];\n private lastCpus: {\n model: string;\n speed: number;\n times: { user: number; nice: number; sys: number; idle: number; irq: number };\n }[];\n private lastCpusProcess: {\n model: string;\n speed: number;\n times: { user: number; nice: number; sys: number; idle: number; irq: number };\n }[];\n private totalExceptionCount: number = 0;\n\n /**\n * Creates performance counter instruments.\n * @param options - Distro configuration.\n * @param config - Application Insights configuration.\n */\n constructor(config: AzureMonitorOpenTelemetryOptions, options?: { collectionInterval: number }) {\n this.internalConfig = config;\n this.lastCpus = os.cpus();\n this.lastCpusProcess = os.cpus();\n this.lastAppCpuUsage = process.cpuUsage();\n this.lastHrtime = process.hrtime();\n\n this.lastRequestRate = {\n count: this.totalCount,\n time: +new Date(),\n executionInterval: this.intervalExecutionTime,\n };\n\n this.azureExporter = new AzureMonitorMetricExporter(\n this.internalConfig.azureMonitorExporterOptions,\n );\n const metricReaderOptions: PeriodicExportingMetricReaderOptions = {\n exporter: this.azureExporter,\n exportIntervalMillis: options?.collectionInterval || this.collectionInterval,\n };\n const meterProviderConfig: MeterProviderOptions = {\n readers: [new PeriodicExportingMetricReader(metricReaderOptions)],\n resource: this.internalConfig.resource,\n };\n this.meterProvider = new MeterProvider(meterProviderConfig);\n this.meter = this.meterProvider.getMeter(\"AzureMonitorPerformanceCountersMeter\");\n\n this.lastRequestRate = { count: 0, time: 0, executionInterval: 0 };\n\n // Create Instruments\n this.requestDurationHistogram = this.meter.createHistogram(\n PerformanceCounterMetricNames.REQUEST_DURATION,\n { valueType: ValueType.DOUBLE },\n );\n this.requestRateGauge = this.meter.createObservableGauge(\n PerformanceCounterMetricNames.REQUEST_RATE,\n {\n description: \"Incoming Requests Average Execution Time\",\n valueType: ValueType.DOUBLE,\n },\n );\n this.memoryPrivateBytesGauge = this.meter.createObservableGauge(\n PerformanceCounterMetricNames.PRIVATE_BYTES,\n { description: \"Amount of memory process has used in bytes\", valueType: ValueType.INT },\n );\n this.memoryAvailableBytesGauge = this.meter.createObservableGauge(\n PerformanceCounterMetricNames.AVAILABLE_BYTES,\n { description: \"Amount of available memory in bytes\", valueType: ValueType.INT },\n );\n this.processorTimeGauge = this.meter.createObservableGauge(\n PerformanceCounterMetricNames.PROCESSOR_TIME,\n {\n description: \"Processor time as a percentage\",\n valueType: ValueType.DOUBLE,\n },\n );\n this.processTimeGauge = this.meter.createObservableGauge(\n PerformanceCounterMetricNames.PROCESS_TIME_STANDARD,\n {\n description: \"Process CPU usage as a percentage\",\n valueType: ValueType.DOUBLE,\n },\n );\n this.processTimeNormalizedGauge = this.meter.createObservableGauge(\n PerformanceCounterMetricNames.PROCESS_TIME_NORMALIZED,\n {\n description: \"Process CPU usage normalized as a percentage\",\n valueType: ValueType.DOUBLE,\n },\n );\n this.exceptionCountGauge = this.meter.createObservableGauge(\n PerformanceCounterMetricNames.EXCEPTION_RATE,\n {\n description: \"Exception Rate\",\n valueType: ValueType.DOUBLE,\n },\n );\n\n // Add callbacks\n this.requestRateGaugeCallback = this.getRequestRate.bind(this);\n this.memoryPrivateBytesGaugeCallback = this.getPrivateMemory.bind(this);\n this.memoryAvailableBytesGaugeCallback = this.getAvailableMemory.bind(this);\n this.processorTimeGaugeCallback = this.getProcessorTime.bind(this);\n this.processTimeGaugeCallback = this.getProcessTime.bind(this);\n this.processTimeNormalizedGaugeCallback = this.getNormalizedProcessTime.bind(this);\n this.exceptionCountGaugeCallback = this.getExceptionRate.bind(this);\n\n this.memoryPrivateBytesGauge.addCallback(this.memoryPrivateBytesGaugeCallback);\n this.memoryAvailableBytesGauge.addCallback(this.memoryAvailableBytesGaugeCallback);\n this.processTimeGauge.addCallback(this.processTimeGaugeCallback);\n this.processTimeNormalizedGauge.addCallback(this.processTimeNormalizedGaugeCallback);\n this.processorTimeGauge.addCallback(this.processorTimeGaugeCallback);\n this.requestRateGauge.addCallback(this.requestRateGaugeCallback);\n this.exceptionCountGauge.addCallback(this.exceptionCountGaugeCallback);\n }\n\n /**\n * Shutdown Meter Provider it will return no-op Meters after being called.\n */\n public async shutdown(): Promise<void> {\n return this.meterProvider.shutdown();\n }\n\n /**\n * Force flush Meter Provider.\n */\n public async flush(): Promise<void> {\n return this.meterProvider.forceFlush();\n }\n\n /**\n *Get OpenTelemetry MeterProvider\n */\n public getMeterProvider(): MeterProvider {\n return this.meterProvider;\n }\n\n /**\n * Record Span metrics\n * @internal\n */\n public recordSpan(span: ReadableSpan): void {\n if (span.kind !== SpanKind.SERVER) {\n return;\n }\n this.totalCount++;\n const durationMs = span.duration[0];\n this.intervalExecutionTime += durationMs;\n this.requestDurationHistogram.record(durationMs);\n if (span.events) {\n span.events.forEach((event: TimedEvent) => {\n event.attributes = event.attributes || {};\n if (event.name === \"exception\") {\n this.totalExceptionCount++;\n }\n });\n }\n }\n\n /**\n * Record Log metrics\n * @internal\n */\n public recordLog(logRecord: SdkLogRecord): void {\n const columns: TraceData | ExceptionData = getLogData(logRecord);\n if (isExceptionData(columns)) {\n this.totalExceptionCount++;\n }\n }\n\n private getRequestRate(observableResult: ObservableResult): void {\n const currentTime = +new Date();\n const intervalRequests = this.totalCount - this.lastRequestRate.count || 0;\n const elapsedMs = currentTime - this.lastRequestRate.time;\n if (elapsedMs > 0) {\n const elapsedSeconds = elapsedMs / 1000;\n const requestsPerSec = intervalRequests / elapsedSeconds;\n observableResult.observe(requestsPerSec);\n }\n this.lastRequestRate = {\n count: this.totalCount,\n time: currentTime,\n executionInterval: this.lastRequestRate.executionInterval,\n };\n }\n\n private getPrivateMemory(observableResult: ObservableResult): void {\n if (process?.memoryUsage) {\n observableResult.observe(process.memoryUsage().rss);\n } else {\n Logger.getInstance().debug(\"Couldn't report Private Memory. Process is not defined.\");\n }\n }\n\n private getAvailableMemory(observableResult: ObservableResult): void {\n observableResult.observe(os.freemem());\n }\n\n private getTotalCombinedCpu(cpus: os.CpuInfo[], lastCpus: os.CpuInfo[]) {\n let totalUser = 0;\n let totalSys = 0;\n let totalNice = 0;\n let totalIdle = 0;\n let totalIrq = 0;\n for (let i = 0; !!cpus && i < cpus.length; i++) {\n const cpu = cpus[i];\n const lastCpu = lastCpus[i];\n const times = cpu.times;\n const lastTimes = lastCpu.times;\n // user cpu time (or) % CPU time spent in user space\n let user = times.user - lastTimes.user;\n user = user > 0 ? user : 0; // Avoid negative values\n totalUser += user;\n // system cpu time (or) % CPU time spent in kernel space\n let sys = times.sys - lastTimes.sys;\n sys = sys > 0 ? sys : 0; // Avoid negative values\n totalSys += sys;\n // user nice cpu time (or) % CPU time spent on low priority processes\n let nice = times.nice - lastTimes.nice;\n nice = nice > 0 ? nice : 0; // Avoid negative values\n totalNice += nice;\n // idle cpu time (or) % CPU time spent idle\n let idle = times.idle - lastTimes.idle;\n idle = idle > 0 ? idle : 0; // Avoid negative values\n totalIdle += idle;\n // irq (or) % CPU time spent servicing/handling hardware interrupts\n let irq = times.irq - lastTimes.irq;\n irq = irq > 0 ? irq : 0; // Avoid negative values\n totalIrq += irq;\n }\n const combinedTotal = totalUser + totalSys + totalNice + totalIdle + totalIrq;\n return {\n combinedTotal: combinedTotal,\n totalUser: totalUser,\n totalIdle: totalIdle,\n };\n }\n\n private getProcessorTime(observableResult: ObservableResult): void {\n // this reports total ms spent in each category since the OS was booted, to calculate percent it is necessary\n // to find the delta since the last measurement\n const cpus = os.cpus();\n if (cpus && cpus.length && this.lastCpus && cpus.length === this.lastCpus.length) {\n const cpuTotals = this.getTotalCombinedCpu(cpus, this.lastCpus);\n\n const value =\n cpuTotals.combinedTotal > 0\n ? ((cpuTotals.combinedTotal - cpuTotals.totalIdle) / cpuTotals.combinedTotal) * 100\n : 0;\n observableResult.observe(value);\n }\n this.lastCpus = cpus;\n }\n\n private getNormalizedProcessTime(observableResult: ObservableResult): void {\n // this reports total ms spent in each category since the OS was booted, to calculate percent it is necessary\n // to find the delta since the last measurement\n const cpus = os.cpus();\n if (\n cpus &&\n cpus.length &&\n this.lastCpusProcess &&\n cpus.length === this.lastCpusProcess.length\n ) {\n // Calculate % of total cpu time (user + system) this App Process used (Only supported by node v6.1.0+)\n let appCpuPercent: number | undefined = undefined;\n const appCpuUsage = process.cpuUsage();\n const hrtime = process.hrtime();\n const totalApp =\n appCpuUsage.user -\n this.lastAppCpuUsage.user +\n (appCpuUsage.system - this.lastAppCpuUsage.system) || 0;\n\n if (typeof this.lastHrtime !== \"undefined\" && this.lastHrtime.length === 2) {\n const elapsedTime =\n (hrtime[0] - this.lastHrtime[0]) * 1e6 + (hrtime[1] - this.lastHrtime[1]) / 1e3 || 0; // convert to microseconds\n\n appCpuPercent = (100 * totalApp) / (elapsedTime * cpus.length);\n }\n // Set previous\n this.lastAppCpuUsage = appCpuUsage;\n this.lastHrtime = hrtime;\n const cpuTotals = this.getTotalCombinedCpu(cpus, this.lastCpusProcess);\n let value = 0;\n if (appCpuPercent !== undefined) {\n value = appCpuPercent;\n } else {\n value = (cpuTotals.totalUser / cpuTotals.combinedTotal) * 100;\n }\n observableResult.observe(value);\n }\n this.lastCpusProcess = cpus;\n }\n\n private getProcessTime(observableResult: ObservableResult): void {\n // this reports total ms spent in each category since the OS was booted, to calculate percent it is necessary\n // to find the delta since the last measurement\n if (process) {\n const cpus = os.cpus();\n if (\n cpus &&\n cpus.length &&\n this.lastCpusProcess &&\n cpus.length === this.lastCpusProcess.length\n ) {\n // Calculate % of total cpu time (user + system) this App Process used (Only supported by node v6.1.0+)\n let appCpuPercent: number | undefined = undefined;\n const appCpuUsage = process.cpuUsage();\n const hrtime = process.hrtime();\n const totalApp =\n appCpuUsage.user -\n this.lastAppCpuUsage.user +\n (appCpuUsage.system - this.lastAppCpuUsage.system) || 0;\n\n if (typeof this.lastHrtime !== \"undefined\" && this.lastHrtime.length === 2) {\n const elapsedTime =\n (hrtime[0] - this.lastHrtime[0]) * 1e6 + (hrtime[1] - this.lastHrtime[1]) / 1e3 || 0; // convert to microseconds\n appCpuPercent = (100 * totalApp) / elapsedTime;\n }\n // Set previous\n this.lastAppCpuUsage = appCpuUsage;\n this.lastHrtime = hrtime;\n const cpuTotals = this.getTotalCombinedCpu(cpus, this.lastCpusProcess);\n let value = 0;\n if (appCpuPercent !== undefined) {\n value = appCpuPercent;\n } else {\n value = (cpuTotals.totalUser / cpuTotals.combinedTotal) * 100;\n }\n observableResult.observe(value);\n }\n this.lastCpusProcess = cpus;\n } else {\n Logger.getInstance().debug(\"Couldn't report process time. Process is not defined.\");\n }\n }\n\n private getExceptionRate(observableResult: ObservableResult): void {\n const currentTime = +new Date();\n const intervalData = this.totalExceptionCount - this.lastExceptionRate.count || 0;\n const elapsedMs = currentTime - this.lastExceptionRate.time;\n if (elapsedMs > 0) {\n const elapsedSeconds = elapsedMs / 1000;\n const dataPerSec = intervalData / elapsedSeconds;\n observableResult.observe(dataPerSec);\n }\n this.lastExceptionRate = {\n count: this.totalExceptionCount,\n time: currentTime,\n };\n }\n\n // TODO: Add Process I/O Rate\n}\n"]}
1
+ {"version":3,"file":"performanceCounters.js","sourceRoot":"","sources":["../../../src/metrics/performanceCounters.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport os from \"node:os\";\nimport type {\n Histogram,\n Meter,\n ObservableCallback,\n ObservableGauge,\n ObservableResult,\n} from \"@opentelemetry/api\";\nimport { SpanKind, ValueType } from \"@opentelemetry/api\";\nimport type { SdkLogRecord } from \"@opentelemetry/sdk-logs\";\nimport { AzureMonitorMetricExporter } from \"@azure/monitor-opentelemetry-exporter\";\nimport type {\n MeterProviderOptions,\n PeriodicExportingMetricReaderOptions,\n} from \"@opentelemetry/sdk-metrics\";\nimport { MeterProvider, PeriodicExportingMetricReader } from \"@opentelemetry/sdk-metrics\";\nimport type { ReadableSpan, TimedEvent } from \"@opentelemetry/sdk-trace-base\";\nimport { PerformanceCounterMetricNames } from \"./types.js\";\nimport { hrTimeToMilliseconds } from \"@opentelemetry/core\";\nimport type { AzureMonitorOpenTelemetryOptions } from \"../types.js\";\nimport { getLogData, isExceptionData } from \"./quickpulse/utils.js\";\nimport type { ExceptionData, TraceData } from \"./quickpulse/types.js\";\nimport { Logger } from \"../shared/logging/logger.js\";\nimport { readAvailableMemory } from \"./utils.js\";\nimport process from \"node:process\";\n\n/**\n * Azure Monitor PerformanceCounter Metrics\n */\nexport class PerformanceCounterMetrics {\n private internalConfig: AzureMonitorOpenTelemetryOptions;\n private collectionInterval = 60000; // 60 seconds\n private meterProvider: MeterProvider;\n private azureExporter: AzureMonitorMetricExporter;\n private meter: Meter;\n private requestDurationHistogram: Histogram;\n private requestRateGauge: ObservableGauge;\n private requestRateGaugeCallback: ObservableCallback;\n private memoryPrivateBytesGauge: ObservableGauge;\n private memoryPrivateBytesGaugeCallback: ObservableCallback;\n private memoryAvailableBytesGauge: ObservableGauge;\n private memoryAvailableBytesGaugeCallback: ObservableCallback;\n private processorTimeGauge: ObservableGauge;\n private processorTimeGaugeCallback: ObservableCallback;\n private processTimeNormalizedGauge: ObservableGauge;\n private processTimeNormalizedGaugeCallback: ObservableCallback;\n private processTimeGauge: ObservableGauge;\n private processTimeGaugeCallback: ObservableCallback;\n private exceptionCountGauge: ObservableGauge;\n private exceptionCountGaugeCallback: ObservableCallback;\n private lastExceptionRate: { count: number; time: number } = { count: 0, time: 0 };\n private totalCount: number = 0;\n private intervalExecutionTime = 0;\n private lastRequestRate: { count: number; time: number; executionInterval: number };\n private lastAppCpuUsage: { user: number; system: number };\n private lastHrtime: number[];\n private lastCpus: {\n model: string;\n speed: number;\n times: { user: number; nice: number; sys: number; idle: number; irq: number };\n }[];\n private lastCpusProcess: {\n model: string;\n speed: number;\n times: { user: number; nice: number; sys: number; idle: number; irq: number };\n }[];\n private totalExceptionCount: number = 0;\n\n /**\n * Creates performance counter instruments.\n * @param options - Distro configuration.\n * @param config - Application Insights configuration.\n */\n constructor(config: AzureMonitorOpenTelemetryOptions, options?: { collectionInterval: number }) {\n this.internalConfig = config;\n this.lastCpus = os.cpus();\n this.lastCpusProcess = os.cpus();\n this.lastAppCpuUsage = process.cpuUsage();\n this.lastHrtime = process.hrtime();\n\n this.lastRequestRate = {\n count: this.totalCount,\n time: +new Date(),\n executionInterval: this.intervalExecutionTime,\n };\n\n this.azureExporter = new AzureMonitorMetricExporter(\n this.internalConfig.azureMonitorExporterOptions,\n );\n const metricReaderOptions: PeriodicExportingMetricReaderOptions = {\n exporter: this.azureExporter,\n exportIntervalMillis: options?.collectionInterval || this.collectionInterval,\n };\n const meterProviderConfig: MeterProviderOptions = {\n readers: [new PeriodicExportingMetricReader(metricReaderOptions)],\n resource: this.internalConfig.resource,\n };\n this.meterProvider = new MeterProvider(meterProviderConfig);\n this.meter = this.meterProvider.getMeter(\"AzureMonitorPerformanceCountersMeter\");\n\n this.lastRequestRate = { count: 0, time: 0, executionInterval: 0 };\n\n // Create Instruments\n this.requestDurationHistogram = this.meter.createHistogram(\n PerformanceCounterMetricNames.REQUEST_DURATION,\n { valueType: ValueType.DOUBLE },\n );\n this.requestRateGauge = this.meter.createObservableGauge(\n PerformanceCounterMetricNames.REQUEST_RATE,\n {\n description: \"Incoming Requests Average Execution Time\",\n valueType: ValueType.DOUBLE,\n },\n );\n this.memoryPrivateBytesGauge = this.meter.createObservableGauge(\n PerformanceCounterMetricNames.PRIVATE_BYTES,\n { description: \"Amount of memory process has used in bytes\", valueType: ValueType.INT },\n );\n this.memoryAvailableBytesGauge = this.meter.createObservableGauge(\n PerformanceCounterMetricNames.AVAILABLE_BYTES,\n { description: \"Amount of available memory in bytes\", valueType: ValueType.INT },\n );\n this.processorTimeGauge = this.meter.createObservableGauge(\n PerformanceCounterMetricNames.PROCESSOR_TIME,\n {\n description: \"Processor time as a percentage\",\n valueType: ValueType.DOUBLE,\n },\n );\n this.processTimeGauge = this.meter.createObservableGauge(\n PerformanceCounterMetricNames.PROCESS_TIME_STANDARD,\n {\n description: \"Process CPU usage as a percentage\",\n valueType: ValueType.DOUBLE,\n },\n );\n this.processTimeNormalizedGauge = this.meter.createObservableGauge(\n PerformanceCounterMetricNames.PROCESS_TIME_NORMALIZED,\n {\n description: \"Process CPU usage normalized as a percentage\",\n valueType: ValueType.DOUBLE,\n },\n );\n this.exceptionCountGauge = this.meter.createObservableGauge(\n PerformanceCounterMetricNames.EXCEPTION_RATE,\n {\n description: \"Exception Rate\",\n valueType: ValueType.DOUBLE,\n },\n );\n\n // Add callbacks\n this.requestRateGaugeCallback = this.getRequestRate.bind(this);\n this.memoryPrivateBytesGaugeCallback = this.getPrivateMemory.bind(this);\n this.memoryAvailableBytesGaugeCallback = this.getAvailableMemory.bind(this);\n this.processorTimeGaugeCallback = this.getProcessorTime.bind(this);\n this.processTimeGaugeCallback = this.getProcessTime.bind(this);\n this.processTimeNormalizedGaugeCallback = this.getNormalizedProcessTime.bind(this);\n this.exceptionCountGaugeCallback = this.getExceptionRate.bind(this);\n\n this.memoryPrivateBytesGauge.addCallback(this.memoryPrivateBytesGaugeCallback);\n this.memoryAvailableBytesGauge.addCallback(this.memoryAvailableBytesGaugeCallback);\n this.processTimeGauge.addCallback(this.processTimeGaugeCallback);\n this.processTimeNormalizedGauge.addCallback(this.processTimeNormalizedGaugeCallback);\n this.processorTimeGauge.addCallback(this.processorTimeGaugeCallback);\n this.requestRateGauge.addCallback(this.requestRateGaugeCallback);\n this.exceptionCountGauge.addCallback(this.exceptionCountGaugeCallback);\n }\n\n /**\n * Shutdown Meter Provider it will return no-op Meters after being called.\n */\n public async shutdown(): Promise<void> {\n return this.meterProvider.shutdown();\n }\n\n /**\n * Force flush Meter Provider.\n */\n public async flush(): Promise<void> {\n return this.meterProvider.forceFlush();\n }\n\n /**\n *Get OpenTelemetry MeterProvider\n */\n public getMeterProvider(): MeterProvider {\n return this.meterProvider;\n }\n\n /**\n * Record Span metrics\n * @internal\n */\n public recordSpan(span: ReadableSpan): void {\n if (span.kind !== SpanKind.SERVER) {\n return;\n }\n this.totalCount++;\n const durationMs = hrTimeToMilliseconds(span.duration);\n this.intervalExecutionTime += durationMs;\n this.requestDurationHistogram.record(durationMs);\n if (span.events) {\n span.events.forEach((event: TimedEvent) => {\n event.attributes = event.attributes || {};\n if (event.name === \"exception\") {\n this.totalExceptionCount++;\n }\n });\n }\n }\n\n /**\n * Record Log metrics\n * @internal\n */\n public recordLog(logRecord: SdkLogRecord): void {\n const columns: TraceData | ExceptionData = getLogData(logRecord);\n if (isExceptionData(columns)) {\n this.totalExceptionCount++;\n }\n }\n\n private getRequestRate(observableResult: ObservableResult): void {\n const currentTime = +new Date();\n const intervalRequests = this.totalCount - this.lastRequestRate.count || 0;\n const elapsedMs = currentTime - this.lastRequestRate.time;\n if (elapsedMs > 0) {\n const elapsedSeconds = elapsedMs / 1000;\n const requestsPerSec = intervalRequests / elapsedSeconds;\n observableResult.observe(requestsPerSec);\n }\n this.lastRequestRate = {\n count: this.totalCount,\n time: currentTime,\n executionInterval: this.lastRequestRate.executionInterval,\n };\n }\n\n private getPrivateMemory(observableResult: ObservableResult): void {\n if (process?.memoryUsage) {\n observableResult.observe(process.memoryUsage().rss);\n } else {\n Logger.getInstance().debug(\"Couldn't report Private Memory. Process is not defined.\");\n }\n }\n\n private getAvailableMemory(observableResult: ObservableResult): void {\n observableResult.observe(readAvailableMemory());\n }\n\n private getTotalCombinedCpu(cpus: os.CpuInfo[], lastCpus: os.CpuInfo[]) {\n let totalUser = 0;\n let totalSys = 0;\n let totalNice = 0;\n let totalIdle = 0;\n let totalIrq = 0;\n for (let i = 0; !!cpus && i < cpus.length; i++) {\n const cpu = cpus[i];\n const lastCpu = lastCpus[i];\n const times = cpu.times;\n const lastTimes = lastCpu.times;\n // user cpu time (or) % CPU time spent in user space\n let user = times.user - lastTimes.user;\n user = user > 0 ? user : 0; // Avoid negative values\n totalUser += user;\n // system cpu time (or) % CPU time spent in kernel space\n let sys = times.sys - lastTimes.sys;\n sys = sys > 0 ? sys : 0; // Avoid negative values\n totalSys += sys;\n // user nice cpu time (or) % CPU time spent on low priority processes\n let nice = times.nice - lastTimes.nice;\n nice = nice > 0 ? nice : 0; // Avoid negative values\n totalNice += nice;\n // idle cpu time (or) % CPU time spent idle\n let idle = times.idle - lastTimes.idle;\n idle = idle > 0 ? idle : 0; // Avoid negative values\n totalIdle += idle;\n // irq (or) % CPU time spent servicing/handling hardware interrupts\n let irq = times.irq - lastTimes.irq;\n irq = irq > 0 ? irq : 0; // Avoid negative values\n totalIrq += irq;\n }\n const combinedTotal = totalUser + totalSys + totalNice + totalIdle + totalIrq;\n return {\n combinedTotal: combinedTotal,\n totalUser: totalUser,\n totalIdle: totalIdle,\n };\n }\n\n private getProcessorTime(observableResult: ObservableResult): void {\n // this reports total ms spent in each category since the OS was booted, to calculate percent it is necessary\n // to find the delta since the last measurement\n const cpus = os.cpus();\n if (cpus && cpus.length && this.lastCpus && cpus.length === this.lastCpus.length) {\n const cpuTotals = this.getTotalCombinedCpu(cpus, this.lastCpus);\n\n const value =\n cpuTotals.combinedTotal > 0\n ? ((cpuTotals.combinedTotal - cpuTotals.totalIdle) / cpuTotals.combinedTotal) * 100\n : 0;\n observableResult.observe(value);\n }\n this.lastCpus = cpus;\n }\n\n private getNormalizedProcessTime(observableResult: ObservableResult): void {\n // this reports total ms spent in each category since the OS was booted, to calculate percent it is necessary\n // to find the delta since the last measurement\n const cpus = os.cpus();\n if (\n cpus &&\n cpus.length &&\n this.lastCpusProcess &&\n cpus.length === this.lastCpusProcess.length\n ) {\n // Calculate % of total cpu time (user + system) this App Process used (Only supported by node v6.1.0+)\n let appCpuPercent: number | undefined = undefined;\n const appCpuUsage = process.cpuUsage();\n const hrtime = process.hrtime();\n const totalApp =\n appCpuUsage.user -\n this.lastAppCpuUsage.user +\n (appCpuUsage.system - this.lastAppCpuUsage.system) || 0;\n\n if (typeof this.lastHrtime !== \"undefined\" && this.lastHrtime.length === 2) {\n const elapsedTime =\n (hrtime[0] - this.lastHrtime[0]) * 1e6 + (hrtime[1] - this.lastHrtime[1]) / 1e3 || 0; // convert to microseconds\n\n appCpuPercent = (100 * totalApp) / (elapsedTime * cpus.length);\n }\n // Set previous\n this.lastAppCpuUsage = appCpuUsage;\n this.lastHrtime = hrtime;\n const cpuTotals = this.getTotalCombinedCpu(cpus, this.lastCpusProcess);\n let value = 0;\n if (appCpuPercent !== undefined) {\n value = appCpuPercent;\n } else {\n value = (cpuTotals.totalUser / cpuTotals.combinedTotal) * 100;\n }\n observableResult.observe(value);\n }\n this.lastCpusProcess = cpus;\n }\n\n private getProcessTime(observableResult: ObservableResult): void {\n // this reports total ms spent in each category since the OS was booted, to calculate percent it is necessary\n // to find the delta since the last measurement\n if (process) {\n const cpus = os.cpus();\n if (\n cpus &&\n cpus.length &&\n this.lastCpusProcess &&\n cpus.length === this.lastCpusProcess.length\n ) {\n // Calculate % of total cpu time (user + system) this App Process used (Only supported by node v6.1.0+)\n let appCpuPercent: number | undefined = undefined;\n const appCpuUsage = process.cpuUsage();\n const hrtime = process.hrtime();\n const totalApp =\n appCpuUsage.user -\n this.lastAppCpuUsage.user +\n (appCpuUsage.system - this.lastAppCpuUsage.system) || 0;\n\n if (typeof this.lastHrtime !== \"undefined\" && this.lastHrtime.length === 2) {\n const elapsedTime =\n (hrtime[0] - this.lastHrtime[0]) * 1e6 + (hrtime[1] - this.lastHrtime[1]) / 1e3 || 0; // convert to microseconds\n appCpuPercent = (100 * totalApp) / elapsedTime;\n }\n // Set previous\n this.lastAppCpuUsage = appCpuUsage;\n this.lastHrtime = hrtime;\n const cpuTotals = this.getTotalCombinedCpu(cpus, this.lastCpusProcess);\n let value = 0;\n if (appCpuPercent !== undefined) {\n value = appCpuPercent;\n } else {\n value = (cpuTotals.totalUser / cpuTotals.combinedTotal) * 100;\n }\n observableResult.observe(value);\n }\n this.lastCpusProcess = cpus;\n } else {\n Logger.getInstance().debug(\"Couldn't report process time. Process is not defined.\");\n }\n }\n\n private getExceptionRate(observableResult: ObservableResult): void {\n const currentTime = +new Date();\n const intervalData = this.totalExceptionCount - this.lastExceptionRate.count || 0;\n const elapsedMs = currentTime - this.lastExceptionRate.time;\n if (elapsedMs > 0) {\n const elapsedSeconds = elapsedMs / 1000;\n const dataPerSec = intervalData / elapsedSeconds;\n observableResult.observe(dataPerSec);\n }\n this.lastExceptionRate = {\n count: this.totalExceptionCount,\n time: currentTime,\n };\n }\n\n // TODO: Add Process I/O Rate\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/export/exporter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAU/C;;GAEG;AACH,qBAAa,wBAAyB,YAAW,kBAAkB;IACjE,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,YAAY,CAAkD;IACtE,OAAO,CAAC,cAAc,CAA0B;IAEhD,OAAO,CAAC,uBAAuB,CAAsB;IACrD,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,WAAW,CAAuC;IAC1D,OAAO,CAAC,wBAAwB,CAA4B;IAE5D;;;OAGG;gBAES,OAAO,EAAE,yBAAyB;IAgB9C;;;;OAIG;IAEG,MAAM,CACV,OAAO,EAAE,eAAe,EACxB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAC7C,OAAO,CAAC,IAAI,CAAC;IAyBhB;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC;;OAEG;IACI,4BAA4B,CAAC,cAAc,EAAE,cAAc,GAAG,sBAAsB;IAU3F;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC;;OAEG;IACI,SAAS,IAAI,gBAAgB;IAI7B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAGnC"}
1
+ {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/export/exporter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAU/C;;GAEG;AACH,qBAAa,wBAAyB,YAAW,kBAAkB;IACjE,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,YAAY,CAAqD;IACzE,OAAO,CAAC,cAAc,CAA0B;IAEhD,OAAO,CAAC,uBAAuB,CAAsB;IACrD,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,WAAW,CAAuC;IAC1D,OAAO,CAAC,wBAAwB,CAA4B;IAE5D;;;OAGG;gBAES,OAAO,EAAE,yBAAyB;IAgB9C;;;;OAIG;IAEG,MAAM,CACV,OAAO,EAAE,eAAe,EACxB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAC7C,OAAO,CAAC,IAAI,CAAC;IAyBhB;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC;;OAEG;IACI,4BAA4B,CAAC,cAAc,EAAE,cAAc,GAAG,sBAAsB;IAU3F;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC;;OAEG;IACI,SAAS,IAAI,gBAAgB;IAI7B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAGnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/export/exporter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { context, diag } from \"@opentelemetry/api\";\nimport type { PushMetricExporter, ResourceMetrics } from \"@opentelemetry/sdk-metrics\";\nimport { AggregationTemporality, InstrumentType } from \"@opentelemetry/sdk-metrics\";\nimport type { ExportResult } from \"@opentelemetry/core\";\nimport { ExportResultCode, suppressTracing } from \"@opentelemetry/core\";\nimport type { QuickpulseExporterOptions } from \"../types.js\";\nimport { QuickpulseSender } from \"./sender.js\";\nimport type {\n DocumentIngress,\n MonitoringDataPoint,\n PublishOptionalParams,\n PublishResponse,\n CollectionConfigurationError,\n} from \"../../../generated/index.js\";\nimport { getTransmissionTime, resourceMetricsToQuickpulseDataPoint } from \"../utils.js\";\n\n/**\n * Quickpulse Metric Exporter.\n */\nexport class QuickpulseMetricExporter implements PushMetricExporter {\n private sender: QuickpulseSender;\n private postCallback: (response: PublishResponse | undefined) => void;\n private getDocumentsFn: () => DocumentIngress[];\n // Monitoring data point with common properties\n private baseMonitoringDataPoint: MonitoringDataPoint;\n private etag: string;\n private getErrorsFn: () => CollectionConfigurationError[];\n private getDerivedMetricValuesFn: () => Map<string, number>;\n\n /**\n * Initializes a new instance of the AzureMonitorMetricExporter class.\n * @param AzureExporterConfig - Exporter configuration.\n */\n\n constructor(options: QuickpulseExporterOptions) {\n this.sender = new QuickpulseSender({\n endpointUrl: options.endpointUrl,\n instrumentationKey: options.instrumentationKey,\n credential: options.credential,\n credentialScopes: options.credentialScopes,\n });\n this.postCallback = options.postCallback;\n this.getDocumentsFn = options.getDocumentsFn;\n this.baseMonitoringDataPoint = options.baseMonitoringDataPoint;\n this.getErrorsFn = options.getErrorsFn;\n this.etag = \"\";\n this.getDerivedMetricValuesFn = options.getDerivedMetricValuesFn;\n diag.debug(\"QuickpulseMetricExporter was successfully setup\");\n }\n\n /**\n * Export OpenTelemetry resource metrics.\n * @param metrics - Resource metrics to export.\n * @param resultCallback - Result callback.\n */\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n async export(\n metrics: ResourceMetrics,\n resultCallback: (result: ExportResult) => void,\n ): Promise<void> {\n diag.info(`Exporting Live metrics(s). Converting to envelopes...`);\n const optionalParams: PublishOptionalParams = {\n monitoringDataPoints: resourceMetricsToQuickpulseDataPoint(\n metrics,\n this.baseMonitoringDataPoint,\n this.getDocumentsFn(),\n this.getErrorsFn(),\n this.getDerivedMetricValuesFn(),\n ),\n transmissionTime: getTransmissionTime(),\n configurationEtag: this.etag,\n };\n // Supress tracing until OpenTelemetry Metrics SDK support it\n await context.with(suppressTracing(context.active()), async () => {\n try {\n this.postCallback(await this.sender.publish(optionalParams));\n resultCallback({ code: ExportResultCode.SUCCESS });\n } catch (error) {\n this.postCallback(undefined);\n resultCallback({ code: ExportResultCode.FAILED });\n }\n });\n }\n\n /**\n * Shutdown Exporter.\n */\n public async shutdown(): Promise<void> {\n diag.info(\"QuickpulseMetricExporter shutting down\");\n return Promise.resolve();\n }\n\n /**\n * Select aggregation temporality\n */\n public selectAggregationTemporality(instrumentType: InstrumentType): AggregationTemporality {\n if (\n instrumentType === InstrumentType.UP_DOWN_COUNTER ||\n instrumentType === InstrumentType.OBSERVABLE_UP_DOWN_COUNTER\n ) {\n return AggregationTemporality.CUMULATIVE;\n }\n return AggregationTemporality.DELTA;\n }\n\n /**\n * Force flush\n */\n public async forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Get Sender\n */\n public getSender(): QuickpulseSender {\n return this.sender;\n }\n\n public setEtag(etag: string): void {\n this.etag = etag;\n }\n}\n"]}
1
+ {"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/export/exporter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { context, diag } from \"@opentelemetry/api\";\nimport type { PushMetricExporter, ResourceMetrics } from \"@opentelemetry/sdk-metrics\";\nimport { AggregationTemporality, InstrumentType } from \"@opentelemetry/sdk-metrics\";\nimport type { ExportResult } from \"@opentelemetry/core\";\nimport { ExportResultCode, suppressTracing } from \"@opentelemetry/core\";\nimport type { QuickpulseExporterOptions } from \"../types.js\";\nimport { QuickpulseSender } from \"./sender.js\";\nimport type {\n DocumentIngress,\n MonitoringDataPoint,\n PublishOptionalParams,\n CollectionConfigurationError,\n} from \"../../../generated/index.js\";\nimport type { QuickpulseResponse } from \"./sender.js\";\nimport { getTransmissionTime, resourceMetricsToQuickpulseDataPoint } from \"../utils.js\";\n\n/**\n * Quickpulse Metric Exporter.\n */\nexport class QuickpulseMetricExporter implements PushMetricExporter {\n private sender: QuickpulseSender;\n private postCallback: (response: QuickpulseResponse | undefined) => void;\n private getDocumentsFn: () => DocumentIngress[];\n // Monitoring data point with common properties\n private baseMonitoringDataPoint: MonitoringDataPoint;\n private etag: string;\n private getErrorsFn: () => CollectionConfigurationError[];\n private getDerivedMetricValuesFn: () => Map<string, number>;\n\n /**\n * Initializes a new instance of the AzureMonitorMetricExporter class.\n * @param AzureExporterConfig - Exporter configuration.\n */\n\n constructor(options: QuickpulseExporterOptions) {\n this.sender = new QuickpulseSender({\n endpointUrl: options.endpointUrl,\n instrumentationKey: options.instrumentationKey,\n credential: options.credential,\n credentialScopes: options.credentialScopes,\n });\n this.postCallback = options.postCallback;\n this.getDocumentsFn = options.getDocumentsFn;\n this.baseMonitoringDataPoint = options.baseMonitoringDataPoint;\n this.getErrorsFn = options.getErrorsFn;\n this.etag = \"\";\n this.getDerivedMetricValuesFn = options.getDerivedMetricValuesFn;\n diag.debug(\"QuickpulseMetricExporter was successfully setup\");\n }\n\n /**\n * Export OpenTelemetry resource metrics.\n * @param metrics - Resource metrics to export.\n * @param resultCallback - Result callback.\n */\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n async export(\n metrics: ResourceMetrics,\n resultCallback: (result: ExportResult) => void,\n ): Promise<void> {\n diag.info(`Exporting Live metrics(s). Converting to envelopes...`);\n const optionalParams: PublishOptionalParams = {\n monitoringDataPoints: resourceMetricsToQuickpulseDataPoint(\n metrics,\n this.baseMonitoringDataPoint,\n this.getDocumentsFn(),\n this.getErrorsFn(),\n this.getDerivedMetricValuesFn(),\n ),\n transmissionTime: getTransmissionTime(),\n configurationEtag: this.etag,\n };\n // Supress tracing until OpenTelemetry Metrics SDK support it\n await context.with(suppressTracing(context.active()), async () => {\n try {\n this.postCallback(await this.sender.publish(optionalParams));\n resultCallback({ code: ExportResultCode.SUCCESS });\n } catch (error) {\n this.postCallback(undefined);\n resultCallback({ code: ExportResultCode.FAILED });\n }\n });\n }\n\n /**\n * Shutdown Exporter.\n */\n public async shutdown(): Promise<void> {\n diag.info(\"QuickpulseMetricExporter shutting down\");\n return Promise.resolve();\n }\n\n /**\n * Select aggregation temporality\n */\n public selectAggregationTemporality(instrumentType: InstrumentType): AggregationTemporality {\n if (\n instrumentType === InstrumentType.UP_DOWN_COUNTER ||\n instrumentType === InstrumentType.OBSERVABLE_UP_DOWN_COUNTER\n ) {\n return AggregationTemporality.CUMULATIVE;\n }\n return AggregationTemporality.DELTA;\n }\n\n /**\n * Force flush\n */\n public async forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Get Sender\n */\n public getSender(): QuickpulseSender {\n return this.sender;\n }\n\n public setEtag(etag: string): void {\n this.etag = etag;\n }\n}\n"]}
@@ -1,30 +1,47 @@
1
1
  import type { TokenCredential } from "@azure/core-auth";
2
- import type { IsSubscribedOptionalParams, IsSubscribedResponse, PublishOptionalParams, PublishResponse } from "../../../generated/index.js";
2
+ import type { IsSubscribedOptionalParams, PublishOptionalParams, CollectionConfigurationInfo } from "../../../generated/index.js";
3
+ /**
4
+ * Response type that includes the body and response headers from the Live Metrics service.
5
+ * @internal
6
+ */
7
+ export interface QuickpulseResponse extends CollectionConfigurationInfo {
8
+ /** Whether the instrumentation key is subscribed. */
9
+ xMsQpsSubscribed?: string;
10
+ /** Configuration ETag. */
11
+ xMsQpsConfigurationEtag?: string;
12
+ /** Polling interval hint (only for ping). */
13
+ xMsQpsServicePollingIntervalHint?: string;
14
+ /** Endpoint redirect (only for ping). */
15
+ xMsQpsServiceEndpointRedirectV2?: string;
16
+ }
3
17
  /**
4
18
  * Quickpulse sender class
5
19
  * @internal
6
20
  */
7
21
  export declare class QuickpulseSender {
8
- private readonly quickpulseClient;
9
- private quickpulseClientOptions;
22
+ private quickpulseClient;
10
23
  private instrumentationKey;
11
24
  private endpointUrl;
25
+ private credential;
26
+ private credentialScopes;
27
+ private quickpulseClientOptions;
12
28
  constructor(options: {
13
29
  endpointUrl: string;
14
30
  instrumentationKey: string;
15
31
  credential?: TokenCredential;
16
32
  credentialScopes?: string | string[];
17
33
  });
34
+ private createQuickpulseClient;
18
35
  /**
19
36
  * isSubscribed Quickpulse service
20
37
  * @internal
21
38
  */
22
- isSubscribed(optionalParams: IsSubscribedOptionalParams): Promise<IsSubscribedResponse | undefined>;
39
+ isSubscribed(optionalParams: IsSubscribedOptionalParams): Promise<QuickpulseResponse | undefined>;
23
40
  /**
24
41
  * publish Quickpulse service
25
42
  * @internal
26
43
  */
27
- publish(optionalParams: PublishOptionalParams): Promise<PublishResponse | undefined>;
44
+ publish(optionalParams: PublishOptionalParams): Promise<QuickpulseResponse | undefined>;
28
45
  handlePermanentRedirect(location: string | undefined): void;
29
46
  }
30
47
  //# sourceMappingURL=sender.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/export/sender.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EACV,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EAEhB,MAAM,6BAA6B,CAAC;AAKrC;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,uBAAuB,CAAiC;IAChE,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,UAAU,CAAC,EAAE,eAAe,CAAC;QAC7B,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KACtC;IAyBD;;;OAGG;IACG,YAAY,CAChB,cAAc,EAAE,0BAA0B,GACzC,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAe5C;;;OAGG;IACG,OAAO,CAAC,cAAc,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAe1F,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;CAQ5D"}
1
+ {"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/export/sender.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EACV,0BAA0B,EAC1B,qBAAqB,EAErB,2BAA2B,EAC5B,MAAM,6BAA6B,CAAC;AAKrC;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,2BAA2B;IACrE,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0BAA0B;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,6CAA6C;IAC7C,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,yCAAyC;IACzC,+BAA+B,CAAC,EAAE,MAAM,CAAC;CAC1C;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,gBAAgB,CAAW;IAEnC,OAAO,CAAC,uBAAuB,CAG7B;gBAEU,OAAO,EAAE;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,UAAU,CAAC,EAAE,eAAe,CAAC;QAC7B,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KACtC;IA+BD,OAAO,CAAC,sBAAsB;IAO9B;;;OAGG;IACG,YAAY,CAChB,cAAc,EAAE,0BAA0B,GACzC,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAuB1C;;;OAGG;IACG,OAAO,CAAC,cAAc,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAqB7F,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;CAa5D"}
@@ -8,37 +8,51 @@ const url_1 = tslib_1.__importDefault(require("url"));
8
8
  const core_rest_pipeline_1 = require("@azure/core-rest-pipeline");
9
9
  const api_1 = require("@opentelemetry/api");
10
10
  const index_js_1 = require("../../../generated/index.js");
11
- const applicationInsightsResource = "https://monitor.azure.com//.default";
11
+ const applicationInsightsResource = "https://monitor.azure.com/.default";
12
12
  /**
13
13
  * Quickpulse sender class
14
14
  * @internal
15
15
  */
16
16
  class QuickpulseSender {
17
17
  quickpulseClient;
18
- quickpulseClientOptions;
19
18
  instrumentationKey;
20
19
  endpointUrl;
20
+ credential;
21
+ credentialScopes;
22
+ // @ts-expect-error - assigned in constructor, accessed by tests via bracket notation
23
+ quickpulseClientOptions;
21
24
  constructor(options) {
22
25
  // Build endpoint using provided configuration or default values
23
26
  this.endpointUrl = options.endpointUrl;
24
- this.quickpulseClientOptions = {
27
+ const clientOptions = {
25
28
  endpoint: this.endpointUrl,
26
29
  };
27
30
  this.instrumentationKey = options.instrumentationKey;
31
+ this.credential = options.credential;
32
+ // Configure credential scopes
33
+ if (options.credentialScopes) {
34
+ this.credentialScopes = Array.isArray(options.credentialScopes)
35
+ ? options.credentialScopes
36
+ : [options.credentialScopes];
37
+ }
38
+ else {
39
+ this.credentialScopes = [applicationInsightsResource];
40
+ }
28
41
  if (options.credential) {
29
- this.quickpulseClientOptions.credential = options.credential;
30
- // Add credentialScopes
31
- if (options.credentialScopes) {
32
- this.quickpulseClientOptions.credentialScopes = options.credentialScopes;
33
- }
34
- else {
35
- // Default
36
- this.quickpulseClientOptions.credentialScopes = [applicationInsightsResource];
37
- }
42
+ clientOptions.credentials = { scopes: this.credentialScopes };
38
43
  }
39
- this.quickpulseClient = new index_js_1.QuickpulseClient(this.quickpulseClientOptions);
44
+ // Store credential info for testability
45
+ this.quickpulseClientOptions = {
46
+ credential: options.credential,
47
+ credentialScopes: this.credentialScopes,
48
+ };
49
+ this.quickpulseClient = this.createQuickpulseClient(clientOptions);
50
+ }
51
+ createQuickpulseClient(clientOptions) {
52
+ const client = new index_js_1.QuickpulseClient(this.credential, clientOptions);
40
53
  // Handle redirects in HTTP Sender
41
- this.quickpulseClient.pipeline.removePolicy({ name: core_rest_pipeline_1.redirectPolicyName });
54
+ client.pipeline.removePolicy({ name: core_rest_pipeline_1.redirectPolicyName });
55
+ return client;
42
56
  }
43
57
  /**
44
58
  * isSubscribed Quickpulse service
@@ -46,8 +60,20 @@ class QuickpulseSender {
46
60
  */
47
61
  async isSubscribed(optionalParams) {
48
62
  try {
49
- const response = await this.quickpulseClient.isSubscribed(this.endpointUrl, this.instrumentationKey, optionalParams);
50
- return response;
63
+ let responseHeaders = {};
64
+ const body = await this.quickpulseClient.isSubscribed(this.instrumentationKey, {
65
+ ...optionalParams,
66
+ onResponse: (rawResponse) => {
67
+ responseHeaders = rawResponse.headers.toJSON();
68
+ },
69
+ });
70
+ return {
71
+ ...body,
72
+ xMsQpsSubscribed: responseHeaders["x-ms-qps-subscribed"],
73
+ xMsQpsConfigurationEtag: responseHeaders["x-ms-qps-configuration-etag"],
74
+ xMsQpsServicePollingIntervalHint: responseHeaders["x-ms-qps-service-polling-interval-hint"],
75
+ xMsQpsServiceEndpointRedirectV2: responseHeaders["x-ms-qps-service-endpoint-redirect-v2"],
76
+ };
51
77
  }
52
78
  catch (error) {
53
79
  const restError = error;
@@ -61,8 +87,18 @@ class QuickpulseSender {
61
87
  */
62
88
  async publish(optionalParams) {
63
89
  try {
64
- const response = await this.quickpulseClient.publish(this.endpointUrl, this.instrumentationKey, optionalParams);
65
- return response;
90
+ let responseHeaders = {};
91
+ const body = await this.quickpulseClient.publish(this.instrumentationKey, {
92
+ ...optionalParams,
93
+ onResponse: (rawResponse) => {
94
+ responseHeaders = rawResponse.headers.toJSON();
95
+ },
96
+ });
97
+ return {
98
+ ...body,
99
+ xMsQpsSubscribed: responseHeaders["x-ms-qps-subscribed"],
100
+ xMsQpsConfigurationEtag: responseHeaders["x-ms-qps-configuration-etag"],
101
+ };
66
102
  }
67
103
  catch (error) {
68
104
  const restError = error;
@@ -75,6 +111,11 @@ class QuickpulseSender {
75
111
  const locUrl = new url_1.default.URL(location);
76
112
  if (locUrl && locUrl.host) {
77
113
  this.endpointUrl = "https://" + locUrl.host;
114
+ // Recreate the client so subsequent requests use the new endpoint
115
+ this.quickpulseClient = this.createQuickpulseClient({
116
+ endpoint: this.endpointUrl,
117
+ credentials: { scopes: this.credentialScopes },
118
+ });
78
119
  }
79
120
  }
80
121
  }