@azure/monitor-opentelemetry 1.16.0 → 1.17.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 +23 -27
  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
@@ -1 +1 @@
1
- {"version":3,"file":"sender.js","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/export/sender.ts"],"names":[],"mappings":";;;;AAAA,uCAAuC;AACvC,kCAAkC;AAClC,sDAAsB;AAEtB,kEAA+D;AAE/D,4CAA0C;AAQ1C,0DAA+D;AAE/D,MAAM,2BAA2B,GAAG,qCAAqC,CAAC;AAE1E;;;GAGG;AACH,MAAa,gBAAgB;IACV,gBAAgB,CAAmB;IAC5C,uBAAuB,CAAiC;IACxD,kBAAkB,CAAS;IAC3B,WAAW,CAAS;IAE5B,YAAY,OAKX;QACC,gEAAgE;QAChE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,uBAAuB,GAAG;YAC7B,QAAQ,EAAE,IAAI,CAAC,WAAW;SAC3B,CAAC;QAEF,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAErD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,CAAC,uBAAuB,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YAC7D,uBAAuB;YACvB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBAC7B,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,UAAU;gBACV,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,GAAG,CAAC,2BAA2B,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,2BAAgB,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAE3E,kCAAkC;QAClC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,uCAAkB,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAChB,cAA0C;QAE1C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CACvD,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,kBAAkB,EACvB,cAAc,CACf,CAAC;YACF,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,KAAkB,CAAC;YACrC,UAAI,CAAC,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACpE,CAAC;QACD,OAAO;IACT,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,cAAqC;QACjD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAClD,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,kBAAkB,EACvB,cAAc,CACf,CAAC;YACF,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,KAAkB,CAAC;YACrC,UAAI,CAAC,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACpE,CAAC;QACD,OAAO;IACT,CAAC;IAED,uBAAuB,CAAC,QAA4B;QAClD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,IAAI,aAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;CACF;AApFD,4CAoFC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport url from \"url\";\nimport type { RestError } from \"@azure/core-rest-pipeline\";\nimport { redirectPolicyName } from \"@azure/core-rest-pipeline\";\nimport type { TokenCredential } from \"@azure/core-auth\";\nimport { diag } from \"@opentelemetry/api\";\nimport type {\n IsSubscribedOptionalParams,\n IsSubscribedResponse,\n PublishOptionalParams,\n PublishResponse,\n QuickpulseClientOptionalParams,\n} from \"../../../generated/index.js\";\nimport { QuickpulseClient } from \"../../../generated/index.js\";\n\nconst applicationInsightsResource = \"https://monitor.azure.com//.default\";\n\n/**\n * Quickpulse sender class\n * @internal\n */\nexport class QuickpulseSender {\n private readonly quickpulseClient: QuickpulseClient;\n private quickpulseClientOptions: QuickpulseClientOptionalParams;\n private instrumentationKey: string;\n private endpointUrl: string;\n\n constructor(options: {\n endpointUrl: string;\n instrumentationKey: string;\n credential?: TokenCredential;\n credentialScopes?: string | string[];\n }) {\n // Build endpoint using provided configuration or default values\n this.endpointUrl = options.endpointUrl;\n this.quickpulseClientOptions = {\n endpoint: this.endpointUrl,\n };\n\n this.instrumentationKey = options.instrumentationKey;\n\n if (options.credential) {\n this.quickpulseClientOptions.credential = options.credential;\n // Add credentialScopes\n if (options.credentialScopes) {\n this.quickpulseClientOptions.credentialScopes = options.credentialScopes;\n } else {\n // Default\n this.quickpulseClientOptions.credentialScopes = [applicationInsightsResource];\n }\n }\n this.quickpulseClient = new QuickpulseClient(this.quickpulseClientOptions);\n\n // Handle redirects in HTTP Sender\n this.quickpulseClient.pipeline.removePolicy({ name: redirectPolicyName });\n }\n\n /**\n * isSubscribed Quickpulse service\n * @internal\n */\n async isSubscribed(\n optionalParams: IsSubscribedOptionalParams,\n ): Promise<IsSubscribedResponse | undefined> {\n try {\n const response = await this.quickpulseClient.isSubscribed(\n this.endpointUrl,\n this.instrumentationKey,\n optionalParams,\n );\n return response;\n } catch (error: any) {\n const restError = error as RestError;\n diag.info(\"Failed to ping Quickpulse service\", restError.message);\n }\n return;\n }\n\n /**\n * publish Quickpulse service\n * @internal\n */\n async publish(optionalParams: PublishOptionalParams): Promise<PublishResponse | undefined> {\n try {\n const response = await this.quickpulseClient.publish(\n this.endpointUrl,\n this.instrumentationKey,\n optionalParams,\n );\n return response;\n } catch (error: any) {\n const restError = error as RestError;\n diag.warn(\"Failed to post Quickpulse service\", restError.message);\n }\n return;\n }\n\n handlePermanentRedirect(location: string | undefined): void {\n if (location) {\n const locUrl = new url.URL(location);\n if (locUrl && locUrl.host) {\n this.endpointUrl = \"https://\" + locUrl.host;\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"sender.js","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/export/sender.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport url from \"url\";\nimport type { RestError } from \"@azure/core-rest-pipeline\";\nimport { redirectPolicyName } from \"@azure/core-rest-pipeline\";\nimport type { TokenCredential } from \"@azure/core-auth\";\nimport { diag } from \"@opentelemetry/api\";\nimport type {\n IsSubscribedOptionalParams,\n PublishOptionalParams,\n QuickpulseClientOptionalParams,\n CollectionConfigurationInfo,\n} from \"../../../generated/index.js\";\nimport { QuickpulseClient } from \"../../../generated/index.js\";\n\nconst applicationInsightsResource = \"https://monitor.azure.com/.default\";\n\n/**\n * Response type that includes the body and response headers from the Live Metrics service.\n * @internal\n */\nexport interface QuickpulseResponse extends CollectionConfigurationInfo {\n /** Whether the instrumentation key is subscribed. */\n xMsQpsSubscribed?: string;\n /** Configuration ETag. */\n xMsQpsConfigurationEtag?: string;\n /** Polling interval hint (only for ping). */\n xMsQpsServicePollingIntervalHint?: string;\n /** Endpoint redirect (only for ping). */\n xMsQpsServiceEndpointRedirectV2?: string;\n}\n\n/**\n * Quickpulse sender class\n * @internal\n */\nexport class QuickpulseSender {\n private quickpulseClient: QuickpulseClient;\n private instrumentationKey: string;\n private endpointUrl: string;\n private credential: TokenCredential;\n private credentialScopes: string[];\n // @ts-expect-error - assigned in constructor, accessed by tests via bracket notation\n private quickpulseClientOptions: {\n credential?: TokenCredential;\n credentialScopes?: string[];\n };\n\n constructor(options: {\n endpointUrl: string;\n instrumentationKey: string;\n credential?: TokenCredential;\n credentialScopes?: string | string[];\n }) {\n // Build endpoint using provided configuration or default values\n this.endpointUrl = options.endpointUrl;\n const clientOptions: QuickpulseClientOptionalParams = {\n endpoint: this.endpointUrl,\n };\n\n this.instrumentationKey = options.instrumentationKey;\n this.credential = options.credential as TokenCredential;\n\n // Configure credential scopes\n if (options.credentialScopes) {\n this.credentialScopes = Array.isArray(options.credentialScopes)\n ? options.credentialScopes\n : [options.credentialScopes];\n } else {\n this.credentialScopes = [applicationInsightsResource];\n }\n if (options.credential) {\n clientOptions.credentials = { scopes: this.credentialScopes };\n }\n\n // Store credential info for testability\n this.quickpulseClientOptions = {\n credential: options.credential,\n credentialScopes: this.credentialScopes,\n };\n\n this.quickpulseClient = this.createQuickpulseClient(clientOptions);\n }\n\n private createQuickpulseClient(clientOptions: QuickpulseClientOptionalParams): QuickpulseClient {\n const client = new QuickpulseClient(this.credential, clientOptions);\n // Handle redirects in HTTP Sender\n client.pipeline.removePolicy({ name: redirectPolicyName });\n return client;\n }\n\n /**\n * isSubscribed Quickpulse service\n * @internal\n */\n async isSubscribed(\n optionalParams: IsSubscribedOptionalParams,\n ): Promise<QuickpulseResponse | undefined> {\n try {\n let responseHeaders: Record<string, string> = {};\n const body = await this.quickpulseClient.isSubscribed(this.instrumentationKey, {\n ...optionalParams,\n onResponse: (rawResponse) => {\n responseHeaders = rawResponse.headers.toJSON();\n },\n });\n return {\n ...body,\n xMsQpsSubscribed: responseHeaders[\"x-ms-qps-subscribed\"],\n xMsQpsConfigurationEtag: responseHeaders[\"x-ms-qps-configuration-etag\"],\n xMsQpsServicePollingIntervalHint: responseHeaders[\"x-ms-qps-service-polling-interval-hint\"],\n xMsQpsServiceEndpointRedirectV2: responseHeaders[\"x-ms-qps-service-endpoint-redirect-v2\"],\n };\n } catch (error: any) {\n const restError = error as RestError;\n diag.info(\"Failed to ping Quickpulse service\", restError.message);\n }\n return;\n }\n\n /**\n * publish Quickpulse service\n * @internal\n */\n async publish(optionalParams: PublishOptionalParams): Promise<QuickpulseResponse | undefined> {\n try {\n let responseHeaders: Record<string, string> = {};\n const body = await this.quickpulseClient.publish(this.instrumentationKey, {\n ...optionalParams,\n onResponse: (rawResponse) => {\n responseHeaders = rawResponse.headers.toJSON();\n },\n });\n return {\n ...body,\n xMsQpsSubscribed: responseHeaders[\"x-ms-qps-subscribed\"],\n xMsQpsConfigurationEtag: responseHeaders[\"x-ms-qps-configuration-etag\"],\n };\n } catch (error: any) {\n const restError = error as RestError;\n diag.warn(\"Failed to post Quickpulse service\", restError.message);\n }\n return;\n }\n\n handlePermanentRedirect(location: string | undefined): void {\n if (location) {\n const locUrl = new url.URL(location);\n if (locUrl && locUrl.host) {\n this.endpointUrl = \"https://\" + locUrl.host;\n // Recreate the client so subsequent requests use the new endpoint\n this.quickpulseClient = this.createQuickpulseClient({\n endpoint: this.endpointUrl,\n credentials: { scopes: this.credentialScopes },\n });\n }\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/filtering/filter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,iBAAiB,EAEjB,0BAA0B,EAC3B,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAEV,aAAa,EAId,MAAM,aAAa,CAAC;AAUrB,qBAAa,MAAM;IACV,qCAAqC,CAC1C,0BAA0B,EAAE,0BAA0B,GACrD,IAAI;IAQA,kBAAkB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO;IAetF,2BAA2B,CAChC,0BAA0B,EAAE,0BAA0B,EACtD,IAAI,EAAE,aAAa,GAClB,OAAO;IAUV,OAAO,CAAC,WAAW;IA4DnB,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,aAAa;CAoBtB"}
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/filtering/filter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,iBAAiB,EAEjB,0BAA0B,EAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAEV,aAAa,EAId,MAAM,aAAa,CAAC;AAUrB,qBAAa,MAAM;IACV,qCAAqC,CAC1C,0BAA0B,EAAE,0BAA0B,GACrD,IAAI;IAQA,kBAAkB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO;IAetF,2BAA2B,CAChC,0BAA0B,EAAE,0BAA0B,EACtD,IAAI,EAAE,aAAa,GAClB,OAAO;IAUV,OAAO,CAAC,WAAW;IA4DnB,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,aAAa;CAoBtB"}
@@ -3,7 +3,6 @@
3
3
  // Licensed under the MIT License.
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.Filter = void 0;
6
- const index_js_1 = require("../../../generated/index.js");
7
6
  const types_js_1 = require("../types.js");
8
7
  const utils_js_1 = require("../utils.js");
9
8
  class Filter {
@@ -64,10 +63,10 @@ class Filter {
64
63
  return false; // should not reach here
65
64
  }
66
65
  if (filter.fieldName === types_js_1.KnownRequestColumns.Success.toString()) {
67
- if (filter.predicate === index_js_1.KnownPredicateType.Equal.toString()) {
66
+ if (filter.predicate === "Equal") {
68
67
  return dataValue === (filter.comparand.toLowerCase() === "true");
69
68
  }
70
- else if (filter.predicate === index_js_1.KnownPredicateType.NotEqual.toString()) {
69
+ else if (filter.predicate === "NotEqual") {
71
70
  return dataValue !== (filter.comparand.toLowerCase() === "true");
72
71
  }
73
72
  }
@@ -78,17 +77,17 @@ class Filter {
78
77
  ? (0, utils_js_1.getMsFromFilterTimestampString)(filter.comparand)
79
78
  : parseFloat(filter.comparand);
80
79
  switch (filter.predicate) {
81
- case index_js_1.KnownPredicateType.Equal.toString():
80
+ case "Equal":
82
81
  return dataValue === comparand;
83
- case index_js_1.KnownPredicateType.NotEqual.toString():
82
+ case "NotEqual":
84
83
  return dataValue !== comparand;
85
- case index_js_1.KnownPredicateType.GreaterThan.toString():
84
+ case "GreaterThan":
86
85
  return dataValue > comparand;
87
- case index_js_1.KnownPredicateType.GreaterThanOrEqual.toString():
86
+ case "GreaterThanOrEqual":
88
87
  return dataValue >= comparand;
89
- case index_js_1.KnownPredicateType.LessThan.toString():
88
+ case "LessThan":
90
89
  return dataValue < comparand;
91
- case index_js_1.KnownPredicateType.LessThanOrEqual.toString():
90
+ case "LessThanOrEqual":
92
91
  return dataValue <= comparand;
93
92
  default:
94
93
  return false;
@@ -136,16 +135,16 @@ class Filter {
136
135
  }
137
136
  stringCompare(dataValue, comparand, predicate) {
138
137
  switch (predicate) {
139
- case index_js_1.KnownPredicateType.Equal.toString():
138
+ case "Equal":
140
139
  return dataValue === comparand;
141
- case index_js_1.KnownPredicateType.NotEqual.toString():
140
+ case "NotEqual":
142
141
  return dataValue !== comparand;
143
- case index_js_1.KnownPredicateType.Contains.toString(): {
142
+ case "Contains": {
144
143
  const lowerDataValue = dataValue.toLowerCase();
145
144
  const lowerComparand = comparand.toLowerCase();
146
145
  return lowerDataValue.includes(lowerComparand);
147
146
  }
148
- case index_js_1.KnownPredicateType.DoesNotContain.toString(): {
147
+ case "DoesNotContain": {
149
148
  const lowerDataValue = dataValue.toLowerCase();
150
149
  const lowerComparand = comparand.toLowerCase();
151
150
  return !lowerDataValue.includes(lowerComparand);
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/filtering/filter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n DerivedMetricInfo,\n FilterInfo,\n FilterConjunctionGroupInfo,\n} from \"../../../generated/index.js\";\nimport { KnownPredicateType } from \"../../../generated/index.js\";\nimport type {\n RequestData,\n TelemetryData,\n DependencyData,\n ExceptionData,\n TraceData,\n} from \"../types.js\";\nimport { KnownDependencyColumns, KnownRequestColumns } from \"../types.js\";\nimport {\n isRequestData,\n isDependencyData,\n isExceptionData,\n isTraceData,\n getMsFromFilterTimestampString,\n} from \"../utils.js\";\n\nexport class Filter {\n public renameExceptionFieldNamesForFiltering(\n filterConjunctionGroupInfo: FilterConjunctionGroupInfo,\n ): void {\n filterConjunctionGroupInfo.filters.forEach((filter) => {\n if (filter.fieldName.startsWith(\"Exception.\")) {\n filter.fieldName = filter.fieldName.replace(\"Exception.\", \"\");\n }\n });\n }\n\n public checkMetricFilters(derivedMetricInfo: DerivedMetricInfo, data: TelemetryData): boolean {\n if (derivedMetricInfo.filterGroups.length === 0) {\n // This should never happen - even when a user does not add filter pills to the derived metric,\n // the filterGroups array should have one filter group with an empty array of filters.\n return true;\n }\n // Haven't yet seen any case where there is more than one filter group in a derived metric info.\n // Just to be safe, handling the multiple filter conjunction group case as an or operation.\n let matched = false;\n derivedMetricInfo.filterGroups.forEach((filterConjunctionGroup) => {\n matched = matched || this.checkFilterConjunctionGroup(filterConjunctionGroup, data);\n });\n return matched;\n }\n\n public checkFilterConjunctionGroup(\n filterConjunctionGroupInfo: FilterConjunctionGroupInfo,\n data: TelemetryData,\n ): boolean {\n // All of the filters need to match for this to return true (and operation).\n for (const filter of filterConjunctionGroupInfo.filters) {\n if (!this.checkFilter(filter, data)) {\n return false;\n }\n }\n return true;\n }\n\n private checkFilter(filter: FilterInfo, data: TelemetryData): boolean {\n if (filter.fieldName === \"*\") {\n // Any field\n return this.checkAnyFieldFilter(filter, data);\n } else if (filter.fieldName.startsWith(\"CustomDimensions.\")) {\n return this.checkCustomDimFilter(filter, data);\n } else {\n let dataValue: string | number | boolean | Map<string, string>;\n // use filter.fieldname to get the property of data to query\n if (isRequestData(data)) {\n dataValue = data[filter.fieldName as keyof RequestData];\n } else if (isDependencyData(data)) {\n dataValue = data[filter.fieldName as keyof DependencyData];\n } else if (isExceptionData(data)) {\n dataValue = data[filter.fieldName as keyof ExceptionData];\n } else if (isTraceData(data)) {\n dataValue = data[filter.fieldName as keyof TraceData];\n } else {\n return false; // should not reach here\n }\n\n if (filter.fieldName === KnownRequestColumns.Success.toString()) {\n if (filter.predicate === KnownPredicateType.Equal.toString()) {\n return dataValue === (filter.comparand.toLowerCase() === \"true\");\n } else if (filter.predicate === KnownPredicateType.NotEqual.toString()) {\n return dataValue !== (filter.comparand.toLowerCase() === \"true\");\n }\n } else if (\n filter.fieldName === KnownDependencyColumns.ResultCode.toString() ||\n filter.fieldName === KnownRequestColumns.ResponseCode.toString() ||\n filter.fieldName === KnownDependencyColumns.Duration.toString()\n ) {\n const comparand: number =\n filter.fieldName === KnownDependencyColumns.Duration.toString()\n ? getMsFromFilterTimestampString(filter.comparand)\n : parseFloat(filter.comparand);\n switch (filter.predicate) {\n case KnownPredicateType.Equal.toString():\n return dataValue === comparand;\n case KnownPredicateType.NotEqual.toString():\n return dataValue !== comparand;\n case KnownPredicateType.GreaterThan.toString():\n return (dataValue as number) > comparand;\n case KnownPredicateType.GreaterThanOrEqual.toString():\n return (dataValue as number) >= comparand;\n case KnownPredicateType.LessThan.toString():\n return (dataValue as number) < comparand;\n case KnownPredicateType.LessThanOrEqual.toString():\n return (dataValue as number) <= comparand;\n default:\n return false;\n }\n } else {\n // string fields\n return this.stringCompare(dataValue as string, filter.comparand, filter.predicate);\n }\n }\n return false;\n }\n\n private checkAnyFieldFilter(filter: FilterInfo, data: TelemetryData): boolean {\n const properties: string[] = Object.keys(data);\n // At this point, the only predicates possible to pass in are Contains and DoesNotContain\n // At config validation time the predicate is checked to be one of these two.\n for (const property of properties) {\n if (property === \"CustomDimensions\") {\n for (const value of data.CustomDimensions.values()) {\n if (this.stringCompare(value, filter.comparand, filter.predicate)) {\n return true;\n }\n }\n } else {\n // @ts-expect-error - data can be any type of telemetry data and we know property is a valid key\n const value: string = String(data[property]);\n if (this.stringCompare(value, filter.comparand, filter.predicate)) {\n return true;\n }\n }\n }\n return false;\n }\n\n private checkCustomDimFilter(filter: FilterInfo, data: TelemetryData): boolean {\n const fieldName: string = filter.fieldName.replace(\"CustomDimensions.\", \"\");\n let value: string | undefined;\n if (data.CustomDimensions.has(fieldName)) {\n value = data.CustomDimensions.get(fieldName) as string;\n } else {\n return false; // the asked for field is not present in the custom dimensions\n }\n return this.stringCompare(value, filter.comparand, filter.predicate);\n }\n\n private stringCompare(dataValue: string, comparand: string, predicate: string): boolean {\n switch (predicate) {\n case KnownPredicateType.Equal.toString():\n return dataValue === comparand;\n case KnownPredicateType.NotEqual.toString():\n return dataValue !== comparand;\n case KnownPredicateType.Contains.toString(): {\n const lowerDataValue = dataValue.toLowerCase();\n const lowerComparand = comparand.toLowerCase();\n return lowerDataValue.includes(lowerComparand);\n }\n case KnownPredicateType.DoesNotContain.toString(): {\n const lowerDataValue = dataValue.toLowerCase();\n const lowerComparand = comparand.toLowerCase();\n return !lowerDataValue.includes(lowerComparand);\n }\n default:\n return false;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/filtering/filter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n DerivedMetricInfo,\n FilterInfo,\n FilterConjunctionGroupInfo,\n} from \"../../../generated/index.js\";\nimport type {\n RequestData,\n TelemetryData,\n DependencyData,\n ExceptionData,\n TraceData,\n} from \"../types.js\";\nimport { KnownDependencyColumns, KnownRequestColumns } from \"../types.js\";\nimport {\n isRequestData,\n isDependencyData,\n isExceptionData,\n isTraceData,\n getMsFromFilterTimestampString,\n} from \"../utils.js\";\n\nexport class Filter {\n public renameExceptionFieldNamesForFiltering(\n filterConjunctionGroupInfo: FilterConjunctionGroupInfo,\n ): void {\n filterConjunctionGroupInfo.filters.forEach((filter) => {\n if (filter.fieldName.startsWith(\"Exception.\")) {\n filter.fieldName = filter.fieldName.replace(\"Exception.\", \"\");\n }\n });\n }\n\n public checkMetricFilters(derivedMetricInfo: DerivedMetricInfo, data: TelemetryData): boolean {\n if (derivedMetricInfo.filterGroups.length === 0) {\n // This should never happen - even when a user does not add filter pills to the derived metric,\n // the filterGroups array should have one filter group with an empty array of filters.\n return true;\n }\n // Haven't yet seen any case where there is more than one filter group in a derived metric info.\n // Just to be safe, handling the multiple filter conjunction group case as an or operation.\n let matched = false;\n derivedMetricInfo.filterGroups.forEach((filterConjunctionGroup) => {\n matched = matched || this.checkFilterConjunctionGroup(filterConjunctionGroup, data);\n });\n return matched;\n }\n\n public checkFilterConjunctionGroup(\n filterConjunctionGroupInfo: FilterConjunctionGroupInfo,\n data: TelemetryData,\n ): boolean {\n // All of the filters need to match for this to return true (and operation).\n for (const filter of filterConjunctionGroupInfo.filters) {\n if (!this.checkFilter(filter, data)) {\n return false;\n }\n }\n return true;\n }\n\n private checkFilter(filter: FilterInfo, data: TelemetryData): boolean {\n if (filter.fieldName === \"*\") {\n // Any field\n return this.checkAnyFieldFilter(filter, data);\n } else if (filter.fieldName.startsWith(\"CustomDimensions.\")) {\n return this.checkCustomDimFilter(filter, data);\n } else {\n let dataValue: string | number | boolean | Map<string, string>;\n // use filter.fieldname to get the property of data to query\n if (isRequestData(data)) {\n dataValue = data[filter.fieldName as keyof RequestData];\n } else if (isDependencyData(data)) {\n dataValue = data[filter.fieldName as keyof DependencyData];\n } else if (isExceptionData(data)) {\n dataValue = data[filter.fieldName as keyof ExceptionData];\n } else if (isTraceData(data)) {\n dataValue = data[filter.fieldName as keyof TraceData];\n } else {\n return false; // should not reach here\n }\n\n if (filter.fieldName === KnownRequestColumns.Success.toString()) {\n if (filter.predicate === \"Equal\") {\n return dataValue === (filter.comparand.toLowerCase() === \"true\");\n } else if (filter.predicate === \"NotEqual\") {\n return dataValue !== (filter.comparand.toLowerCase() === \"true\");\n }\n } else if (\n filter.fieldName === KnownDependencyColumns.ResultCode.toString() ||\n filter.fieldName === KnownRequestColumns.ResponseCode.toString() ||\n filter.fieldName === KnownDependencyColumns.Duration.toString()\n ) {\n const comparand: number =\n filter.fieldName === KnownDependencyColumns.Duration.toString()\n ? getMsFromFilterTimestampString(filter.comparand)\n : parseFloat(filter.comparand);\n switch (filter.predicate) {\n case \"Equal\":\n return dataValue === comparand;\n case \"NotEqual\":\n return dataValue !== comparand;\n case \"GreaterThan\":\n return (dataValue as number) > comparand;\n case \"GreaterThanOrEqual\":\n return (dataValue as number) >= comparand;\n case \"LessThan\":\n return (dataValue as number) < comparand;\n case \"LessThanOrEqual\":\n return (dataValue as number) <= comparand;\n default:\n return false;\n }\n } else {\n // string fields\n return this.stringCompare(dataValue as string, filter.comparand, filter.predicate);\n }\n }\n return false;\n }\n\n private checkAnyFieldFilter(filter: FilterInfo, data: TelemetryData): boolean {\n const properties: string[] = Object.keys(data);\n // At this point, the only predicates possible to pass in are Contains and DoesNotContain\n // At config validation time the predicate is checked to be one of these two.\n for (const property of properties) {\n if (property === \"CustomDimensions\") {\n for (const value of data.CustomDimensions.values()) {\n if (this.stringCompare(value, filter.comparand, filter.predicate)) {\n return true;\n }\n }\n } else {\n // @ts-expect-error - data can be any type of telemetry data and we know property is a valid key\n const value: string = String(data[property]);\n if (this.stringCompare(value, filter.comparand, filter.predicate)) {\n return true;\n }\n }\n }\n return false;\n }\n\n private checkCustomDimFilter(filter: FilterInfo, data: TelemetryData): boolean {\n const fieldName: string = filter.fieldName.replace(\"CustomDimensions.\", \"\");\n let value: string | undefined;\n if (data.CustomDimensions.has(fieldName)) {\n value = data.CustomDimensions.get(fieldName) as string;\n } else {\n return false; // the asked for field is not present in the custom dimensions\n }\n return this.stringCompare(value, filter.comparand, filter.predicate);\n }\n\n private stringCompare(dataValue: string, comparand: string, predicate: string): boolean {\n switch (predicate) {\n case \"Equal\":\n return dataValue === comparand;\n case \"NotEqual\":\n return dataValue !== comparand;\n case \"Contains\": {\n const lowerDataValue = dataValue.toLowerCase();\n const lowerComparand = comparand.toLowerCase();\n return lowerDataValue.includes(lowerComparand);\n }\n case \"DoesNotContain\": {\n const lowerDataValue = dataValue.toLowerCase();\n const lowerComparand = comparand.toLowerCase();\n return !lowerDataValue.includes(lowerComparand);\n }\n default:\n return false;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/filtering/projection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,qBAAa,UAAU;IAErB,OAAO,CAAC,aAAa,CAAgC;IAErD,OAAO,CAAC,MAAM,CAAgC;;IAQvC,2BAA2B,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI;IAevE,mBAAmB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;IA6CpF,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAuBtC,mBAAmB,IAAI,IAAI;IAKlC,OAAO,CAAC,oBAAoB;CAoB7B"}
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/filtering/projection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,qBAAa,UAAU;IAErB,OAAO,CAAC,aAAa,CAAgC;IAErD,OAAO,CAAC,MAAM,CAAgC;;IAQvC,2BAA2B,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI;IAevE,mBAAmB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;IA6CpF,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAuBtC,mBAAmB,IAAI,IAAI;IAKlC,OAAO,CAAC,oBAAoB;CAoB7B"}
@@ -3,7 +3,6 @@
3
3
  // Licensed under the MIT License.
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.Projection = void 0;
6
- const index_js_1 = require("../../../generated/index.js");
7
6
  const utils_js_1 = require("../utils.js");
8
7
  const quickpulseErrors_js_1 = require("./quickpulseErrors.js");
9
8
  class Projection {
@@ -17,19 +16,19 @@ class Projection {
17
16
  }
18
17
  // This method is intended to be called upon configuration change for every valid derivedMetricInfo.
19
18
  initDerivedMetricProjection(derivedMetricInfo) {
20
- if (derivedMetricInfo.aggregation === index_js_1.KnownAggregationType.Min.toString()) {
19
+ if (derivedMetricInfo.aggregation === "Min") {
21
20
  // set to max value so that the value from the first telemetry item will always be less than it
22
- this.projectionMap.set(derivedMetricInfo.id, [Number.MAX_VALUE, index_js_1.KnownAggregationType.Min]);
21
+ this.projectionMap.set(derivedMetricInfo.id, [Number.MAX_VALUE, "Min"]);
23
22
  }
24
- else if (derivedMetricInfo.aggregation === index_js_1.KnownAggregationType.Max.toString()) {
23
+ else if (derivedMetricInfo.aggregation === "Max") {
25
24
  // set to min value so that the value from the first telemetry item will always be more than it
26
- this.projectionMap.set(derivedMetricInfo.id, [Number.MIN_VALUE, index_js_1.KnownAggregationType.Max]);
25
+ this.projectionMap.set(derivedMetricInfo.id, [Number.MIN_VALUE, "Max"]);
27
26
  }
28
- else if (derivedMetricInfo.aggregation === index_js_1.KnownAggregationType.Sum.toString()) {
29
- this.projectionMap.set(derivedMetricInfo.id, [0, index_js_1.KnownAggregationType.Sum]);
27
+ else if (derivedMetricInfo.aggregation === "Sum") {
28
+ this.projectionMap.set(derivedMetricInfo.id, [0, "Sum"]);
30
29
  }
31
30
  else {
32
- this.projectionMap.set(derivedMetricInfo.id, [0, index_js_1.KnownAggregationType.Avg]);
31
+ this.projectionMap.set(derivedMetricInfo.id, [0, "Avg"]);
33
32
  this.avgMap.set(derivedMetricInfo.id, [0, 0]);
34
33
  }
35
34
  }
@@ -74,18 +73,18 @@ class Projection {
74
73
  const result = new Map();
75
74
  for (const [key, value] of this.projectionMap.entries()) {
76
75
  let projection;
77
- if (value[1] === index_js_1.KnownAggregationType.Min.toString()) {
76
+ if (value[1] === "Min") {
78
77
  projection = value[0] === Number.MAX_VALUE ? 0 : value[0];
79
78
  value[0] = Number.MAX_VALUE; // reset for next 1s interval
80
79
  }
81
- else if (value[1] === index_js_1.KnownAggregationType.Max.toString()) {
80
+ else if (value[1] === "Max") {
82
81
  projection = value[0] === Number.MIN_VALUE ? 0 : value[0];
83
82
  value[0] = Number.MIN_VALUE; // reset for next 1s interval
84
83
  }
85
84
  else {
86
85
  projection = value[0];
87
86
  value[0] = 0; // reset for next 1s interval
88
- if (value[1] === index_js_1.KnownAggregationType.Avg.toString()) {
87
+ if (value[1] === "Avg") {
89
88
  this.avgMap.set(key, [0, 0]); // reset for next 1s interval
90
89
  }
91
90
  }
@@ -101,13 +100,13 @@ class Projection {
101
100
  calculateAggregation(aggregation, id, incrementBy) {
102
101
  const prevValue = this.projectionMap.get(id)[0];
103
102
  switch (aggregation) {
104
- case index_js_1.KnownAggregationType.Sum.toString():
103
+ case "Sum":
105
104
  return prevValue + incrementBy;
106
- case index_js_1.KnownAggregationType.Min.toString():
105
+ case "Min":
107
106
  return Math.min(prevValue, incrementBy);
108
- case index_js_1.KnownAggregationType.Max.toString():
107
+ case "Max":
109
108
  return Math.max(prevValue, incrementBy);
110
- case index_js_1.KnownAggregationType.Avg.toString(): {
109
+ case "Avg": {
111
110
  const [prevSum, prevCount] = this.avgMap.get(id);
112
111
  this.avgMap.set(id, [prevSum + incrementBy, prevCount + 1]);
113
112
  return (prevSum + incrementBy) / (prevCount + 1);
@@ -1 +1 @@
1
- {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/filtering/projection.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { DerivedMetricInfo } from \"../../../generated/index.js\";\nimport { KnownAggregationType } from \"../../../generated/index.js\";\nimport type { TelemetryData } from \"../types.js\";\nimport { isRequestData, isDependencyData } from \"../utils.js\";\nimport { MetricFailureToCreateError } from \"./quickpulseErrors.js\";\n\nexport class Projection {\n // contains the projections for all the derived metrics. key id, value [metric value, aggregation type]\n private projectionMap: Map<string, [number, string]>;\n // for calculation of avgs - key id, value [sum, count]\n private avgMap: Map<string, [number, number]>;\n\n constructor() {\n this.projectionMap = new Map<string, [number, string]>();\n this.avgMap = new Map<string, [number, number]>();\n }\n\n // This method is intended to be called upon configuration change for every valid derivedMetricInfo.\n public initDerivedMetricProjection(derivedMetricInfo: DerivedMetricInfo): void {\n if (derivedMetricInfo.aggregation === KnownAggregationType.Min.toString()) {\n // set to max value so that the value from the first telemetry item will always be less than it\n this.projectionMap.set(derivedMetricInfo.id, [Number.MAX_VALUE, KnownAggregationType.Min]);\n } else if (derivedMetricInfo.aggregation === KnownAggregationType.Max.toString()) {\n // set to min value so that the value from the first telemetry item will always be more than it\n this.projectionMap.set(derivedMetricInfo.id, [Number.MIN_VALUE, KnownAggregationType.Max]);\n } else if (derivedMetricInfo.aggregation === KnownAggregationType.Sum.toString()) {\n this.projectionMap.set(derivedMetricInfo.id, [0, KnownAggregationType.Sum]);\n } else {\n this.projectionMap.set(derivedMetricInfo.id, [0, KnownAggregationType.Avg]);\n this.avgMap.set(derivedMetricInfo.id, [0, 0]);\n }\n }\n\n public calculateProjection(derivedMetricInfo: DerivedMetricInfo, data: TelemetryData): void {\n let incrementBy: number;\n if (derivedMetricInfo.projection === \"Count()\") {\n incrementBy = 1;\n } else if (derivedMetricInfo.projection === \"Duration\") {\n if (isRequestData(data) || isDependencyData(data)) {\n incrementBy = data.Duration;\n } else {\n throw new MetricFailureToCreateError(\n \"The projection Duration is not supported for the telemetry type Exception or Trace.\",\n );\n }\n } else if (derivedMetricInfo.projection.startsWith(\"CustomDimensions.\")) {\n const customDimKey: string = derivedMetricInfo.projection.replace(\"CustomDimensions.\", \"\");\n let customDimValue: number;\n if (data.CustomDimensions.has(customDimKey)) {\n const parsedValue = parseFloat(data.CustomDimensions.get(customDimKey) as string);\n if (isNaN(parsedValue)) {\n throw new MetricFailureToCreateError(\n `Could not calculate the projection because the custom dimension value '${data.CustomDimensions.get(customDimKey)}' for the dimension '${customDimKey}' is not a valid number.`,\n );\n } else {\n customDimValue = parsedValue;\n }\n } else {\n throw new MetricFailureToCreateError(\n `Could not calculate the projection because the custom dimension '${customDimKey}' was not found in the telemetry data.`,\n );\n }\n incrementBy = customDimValue;\n } else {\n throw new MetricFailureToCreateError(\n `The projection '${derivedMetricInfo.projection}' is not supported in this SDK.`,\n );\n }\n\n const projection: number = this.calculateAggregation(\n derivedMetricInfo.aggregation,\n derivedMetricInfo.id,\n incrementBy,\n );\n this.projectionMap.set(derivedMetricInfo.id, [projection, derivedMetricInfo.aggregation]);\n }\n\n // This method is intended to be called every second when export() is called.\n public getMetricValues(): Map<string, number> {\n const result: Map<string, number> = new Map();\n for (const [key, value] of this.projectionMap.entries()) {\n let projection: number;\n if (value[1] === KnownAggregationType.Min.toString()) {\n projection = value[0] === Number.MAX_VALUE ? 0 : value[0];\n value[0] = Number.MAX_VALUE; // reset for next 1s interval\n } else if (value[1] === KnownAggregationType.Max.toString()) {\n projection = value[0] === Number.MIN_VALUE ? 0 : value[0];\n value[0] = Number.MIN_VALUE; // reset for next 1s interval\n } else {\n projection = value[0];\n value[0] = 0; // reset for next 1s interval\n if (value[1] === KnownAggregationType.Avg.toString()) {\n this.avgMap.set(key, [0, 0]); // reset for next 1s interval\n }\n }\n result.set(key, projection);\n }\n return result;\n }\n\n // This method is intended to be called after upon config change or when we return to ping.\n public clearProjectionMaps(): void {\n this.projectionMap.clear();\n this.avgMap.clear();\n }\n\n private calculateAggregation(aggregation: string, id: string, incrementBy: number): number {\n const prevValue: number = (this.projectionMap.get(id) as [number, string])[0];\n switch (aggregation) {\n case KnownAggregationType.Sum.toString():\n return prevValue + incrementBy;\n case KnownAggregationType.Min.toString():\n return Math.min(prevValue, incrementBy);\n case KnownAggregationType.Max.toString():\n return Math.max(prevValue, incrementBy);\n case KnownAggregationType.Avg.toString(): {\n const [prevSum, prevCount] = this.avgMap.get(id) as [number, number];\n this.avgMap.set(id, [prevSum + incrementBy, prevCount + 1]);\n return (prevSum + incrementBy) / (prevCount + 1);\n }\n default:\n throw new MetricFailureToCreateError(\n `The aggregation '${aggregation}' is not supported in this SDK.`,\n );\n }\n }\n}\n"]}
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/filtering/projection.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { DerivedMetricInfo } from \"../../../generated/index.js\";\nimport type { TelemetryData } from \"../types.js\";\nimport { isRequestData, isDependencyData } from \"../utils.js\";\nimport { MetricFailureToCreateError } from \"./quickpulseErrors.js\";\n\nexport class Projection {\n // contains the projections for all the derived metrics. key id, value [metric value, aggregation type]\n private projectionMap: Map<string, [number, string]>;\n // for calculation of avgs - key id, value [sum, count]\n private avgMap: Map<string, [number, number]>;\n\n constructor() {\n this.projectionMap = new Map<string, [number, string]>();\n this.avgMap = new Map<string, [number, number]>();\n }\n\n // This method is intended to be called upon configuration change for every valid derivedMetricInfo.\n public initDerivedMetricProjection(derivedMetricInfo: DerivedMetricInfo): void {\n if (derivedMetricInfo.aggregation === \"Min\") {\n // set to max value so that the value from the first telemetry item will always be less than it\n this.projectionMap.set(derivedMetricInfo.id, [Number.MAX_VALUE, \"Min\"]);\n } else if (derivedMetricInfo.aggregation === \"Max\") {\n // set to min value so that the value from the first telemetry item will always be more than it\n this.projectionMap.set(derivedMetricInfo.id, [Number.MIN_VALUE, \"Max\"]);\n } else if (derivedMetricInfo.aggregation === \"Sum\") {\n this.projectionMap.set(derivedMetricInfo.id, [0, \"Sum\"]);\n } else {\n this.projectionMap.set(derivedMetricInfo.id, [0, \"Avg\"]);\n this.avgMap.set(derivedMetricInfo.id, [0, 0]);\n }\n }\n\n public calculateProjection(derivedMetricInfo: DerivedMetricInfo, data: TelemetryData): void {\n let incrementBy: number;\n if (derivedMetricInfo.projection === \"Count()\") {\n incrementBy = 1;\n } else if (derivedMetricInfo.projection === \"Duration\") {\n if (isRequestData(data) || isDependencyData(data)) {\n incrementBy = data.Duration;\n } else {\n throw new MetricFailureToCreateError(\n \"The projection Duration is not supported for the telemetry type Exception or Trace.\",\n );\n }\n } else if (derivedMetricInfo.projection.startsWith(\"CustomDimensions.\")) {\n const customDimKey: string = derivedMetricInfo.projection.replace(\"CustomDimensions.\", \"\");\n let customDimValue: number;\n if (data.CustomDimensions.has(customDimKey)) {\n const parsedValue = parseFloat(data.CustomDimensions.get(customDimKey) as string);\n if (isNaN(parsedValue)) {\n throw new MetricFailureToCreateError(\n `Could not calculate the projection because the custom dimension value '${data.CustomDimensions.get(customDimKey)}' for the dimension '${customDimKey}' is not a valid number.`,\n );\n } else {\n customDimValue = parsedValue;\n }\n } else {\n throw new MetricFailureToCreateError(\n `Could not calculate the projection because the custom dimension '${customDimKey}' was not found in the telemetry data.`,\n );\n }\n incrementBy = customDimValue;\n } else {\n throw new MetricFailureToCreateError(\n `The projection '${derivedMetricInfo.projection}' is not supported in this SDK.`,\n );\n }\n\n const projection: number = this.calculateAggregation(\n derivedMetricInfo.aggregation,\n derivedMetricInfo.id,\n incrementBy,\n );\n this.projectionMap.set(derivedMetricInfo.id, [projection, derivedMetricInfo.aggregation]);\n }\n\n // This method is intended to be called every second when export() is called.\n public getMetricValues(): Map<string, number> {\n const result: Map<string, number> = new Map();\n for (const [key, value] of this.projectionMap.entries()) {\n let projection: number;\n if (value[1] === \"Min\") {\n projection = value[0] === Number.MAX_VALUE ? 0 : value[0];\n value[0] = Number.MAX_VALUE; // reset for next 1s interval\n } else if (value[1] === \"Max\") {\n projection = value[0] === Number.MIN_VALUE ? 0 : value[0];\n value[0] = Number.MIN_VALUE; // reset for next 1s interval\n } else {\n projection = value[0];\n value[0] = 0; // reset for next 1s interval\n if (value[1] === \"Avg\") {\n this.avgMap.set(key, [0, 0]); // reset for next 1s interval\n }\n }\n result.set(key, projection);\n }\n return result;\n }\n\n // This method is intended to be called after upon config change or when we return to ping.\n public clearProjectionMaps(): void {\n this.projectionMap.clear();\n this.avgMap.clear();\n }\n\n private calculateAggregation(aggregation: string, id: string, incrementBy: number): number {\n const prevValue: number = (this.projectionMap.get(id) as [number, string])[0];\n switch (aggregation) {\n case \"Sum\":\n return prevValue + incrementBy;\n case \"Min\":\n return Math.min(prevValue, incrementBy);\n case \"Max\":\n return Math.max(prevValue, incrementBy);\n case \"Avg\": {\n const [prevSum, prevCount] = this.avgMap.get(id) as [number, number];\n this.avgMap.set(id, [prevSum + incrementBy, prevCount + 1]);\n return (prevSum + incrementBy) / (prevCount + 1);\n }\n default:\n throw new MetricFailureToCreateError(\n `The aggregation '${aggregation}' is not supported in this SDK.`,\n );\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/filtering/validator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,iBAAiB,EAEjB,kCAAkC,EAEnC,MAAM,6BAA6B,CAAC;AAerC,qBAAa,SAAS;IACb,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAkBlD,2BAA2B,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI;IAQvE,qBAAqB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI;IASjE,uBAAuB,CAC5B,iCAAiC,EAAE,kCAAkC,GACpE,IAAI;IASP,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,kBAAkB;IAgD1B,OAAO,CAAC,6BAA6B;CAyEtC"}
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/filtering/validator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,iBAAiB,EAEjB,kCAAkC,EAEnC,MAAM,6BAA6B,CAAC;AAqCrC,qBAAa,SAAS;IACb,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAkBlD,2BAA2B,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI;IAQvE,qBAAqB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI;IASjE,uBAAuB,CAC5B,iCAAiC,EAAE,kCAAkC,GACpE,IAAI;IASP,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,kBAAkB;IAgD1B,OAAO,CAAC,6BAA6B;CAgEtC"}
@@ -5,8 +5,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.Validator = void 0;
6
6
  const quickpulseErrors_js_1 = require("./quickpulseErrors.js");
7
7
  const types_js_1 = require("../types.js");
8
- const index_js_1 = require("../../../generated/index.js");
9
8
  const utils_js_1 = require("../utils.js");
9
+ /** Valid telemetry types for validation */
10
+ const validTelemetryTypes = new Set([
11
+ "Request",
12
+ "Dependency",
13
+ "Exception",
14
+ "Event",
15
+ "Metric",
16
+ "PerformanceCounter",
17
+ "Trace",
18
+ ]);
19
+ /** Valid predicate types for validation */
20
+ const validPredicateTypes = new Set([
21
+ "Equal",
22
+ "NotEqual",
23
+ "LessThan",
24
+ "GreaterThan",
25
+ "LessThanOrEqual",
26
+ "GreaterThanOrEqual",
27
+ "Contains",
28
+ "DoesNotContain",
29
+ ]);
10
30
  const knownStringColumns = new Set([
11
31
  types_js_1.KnownRequestColumns.Url,
12
32
  types_js_1.KnownRequestColumns.Name,
@@ -19,16 +39,16 @@ const knownStringColumns = new Set([
19
39
  ]);
20
40
  class Validator {
21
41
  validateTelemetryType(telemetryType) {
22
- if (telemetryType === index_js_1.KnownTelemetryType.PerformanceCounter.toString()) {
42
+ if (telemetryType === "PerformanceCounter") {
23
43
  throw new quickpulseErrors_js_1.TelemetryTypeError("The telemetry type PerformanceCounter was specified, but this distro does not send performance counters to quickpulse.");
24
44
  }
25
- else if (telemetryType === index_js_1.KnownTelemetryType.Event.toString()) {
45
+ else if (telemetryType === "Event") {
26
46
  throw new quickpulseErrors_js_1.TelemetryTypeError("The telemetry type Event was specified, but this telemetry type is not supported via OpenTelemetry.");
27
47
  }
28
- else if (telemetryType === index_js_1.KnownTelemetryType.Metric.toString()) {
48
+ else if (telemetryType === "Metric") {
29
49
  throw new quickpulseErrors_js_1.TelemetryTypeError("The telemetry type Metric was specified, but this distro does not send custom live metrics to quickpulse.");
30
50
  }
31
- else if (!(telemetryType in index_js_1.KnownTelemetryType)) {
51
+ else if (!validTelemetryTypes.has(telemetryType)) {
32
52
  throw new quickpulseErrors_js_1.TelemetryTypeError(`'${telemetryType}' is not a valid telemetry type.`);
33
53
  }
34
54
  }
@@ -63,24 +83,24 @@ class Validator {
63
83
  throw new quickpulseErrors_js_1.UnexpectedFilterCreateError("Filtering of a customMetric property is not supported via OpenTelemetry.");
64
84
  }
65
85
  switch (telemetryType) {
66
- case index_js_1.KnownTelemetryType.Request.toString():
86
+ case "Request":
67
87
  if (!this.isCustomDimOrAnyField(fieldName) && !(fieldName in types_js_1.KnownRequestColumns)) {
68
88
  throw new quickpulseErrors_js_1.UnexpectedFilterCreateError(`'${fieldName}' is not a valid field name for the telemetry type Request.`);
69
89
  }
70
90
  break;
71
- case index_js_1.KnownTelemetryType.Dependency.toString():
91
+ case "Dependency":
72
92
  if (!this.isCustomDimOrAnyField(fieldName) && !(fieldName in types_js_1.KnownDependencyColumns)) {
73
93
  throw new quickpulseErrors_js_1.UnexpectedFilterCreateError(`'${fieldName}' is not a valid field name for the telemetry type Dependency.`);
74
94
  }
75
95
  break;
76
- case index_js_1.KnownTelemetryType.Exception.toString():
96
+ case "Exception":
77
97
  if (!this.isCustomDimOrAnyField(fieldName) &&
78
98
  fieldName !== "Exception.Message" &&
79
99
  fieldName !== "Exception.StackTrace") {
80
100
  throw new quickpulseErrors_js_1.UnexpectedFilterCreateError(`'${fieldName}' is not a valid field name for the telemetry type Exception.`);
81
101
  }
82
102
  break;
83
- case index_js_1.KnownTelemetryType.Trace.toString():
103
+ case "Trace":
84
104
  if (!this.isCustomDimOrAnyField(fieldName) && fieldName !== "Message") {
85
105
  throw new quickpulseErrors_js_1.UnexpectedFilterCreateError(`'${fieldName}' is not a valid field name for the telemetry type Trace.`);
86
106
  }
@@ -90,22 +110,20 @@ class Validator {
90
110
  }
91
111
  }
92
112
  validatePredicateAndComparand(filter) {
93
- if (!(filter.predicate in index_js_1.KnownPredicateType)) {
113
+ if (!validPredicateTypes.has(filter.predicate)) {
94
114
  throw new quickpulseErrors_js_1.UnexpectedFilterCreateError(`'${filter.predicate}' is not a valid predicate.`);
95
115
  }
96
116
  else if (filter.comparand === "") {
97
117
  throw new quickpulseErrors_js_1.UnexpectedFilterCreateError(`A filter must have a comparand. FilterName: '${filter.fieldName}' Predicate: '${filter.predicate}' Comparand: '${filter.comparand}'`);
98
118
  }
99
119
  else if (filter.fieldName === "*" &&
100
- !(filter.predicate === index_js_1.KnownPredicateType.Contains.toString() ||
101
- filter.predicate === index_js_1.KnownPredicateType.DoesNotContain.toString())) {
120
+ !(filter.predicate === "Contains" || filter.predicate === "DoesNotContain")) {
102
121
  throw new quickpulseErrors_js_1.UnexpectedFilterCreateError(`The predicate '${filter.predicate}' is not supported for the field name '*'`);
103
122
  }
104
123
  else if (filter.fieldName === types_js_1.KnownDependencyColumns.ResultCode.toString() ||
105
124
  filter.fieldName === types_js_1.KnownRequestColumns.ResponseCode.toString() ||
106
125
  filter.fieldName === types_js_1.KnownDependencyColumns.Duration.toString()) {
107
- if (filter.predicate === index_js_1.KnownPredicateType.Contains.toString() ||
108
- filter.predicate === index_js_1.KnownPredicateType.DoesNotContain.toString()) {
126
+ if (filter.predicate === "Contains" || filter.predicate === "DoesNotContain") {
109
127
  throw new quickpulseErrors_js_1.UnexpectedFilterCreateError(`The predicate '${filter.predicate}' is not supported for the field name '${filter.fieldName}'`);
110
128
  }
111
129
  // Duration comparand should be a timestamp; Response/ResultCode comparand should be interpreted as double.
@@ -120,16 +138,15 @@ class Validator {
120
138
  }
121
139
  else if (knownStringColumns.has(filter.fieldName) ||
122
140
  filter.fieldName.startsWith("CustomDimensions.")) {
123
- if (filter.predicate === index_js_1.KnownPredicateType.GreaterThan.toString() ||
124
- filter.predicate === index_js_1.KnownPredicateType.GreaterThanOrEqual.toString() ||
125
- filter.predicate === index_js_1.KnownPredicateType.LessThan.toString() ||
126
- filter.predicate === index_js_1.KnownPredicateType.LessThanOrEqual.toString()) {
141
+ if (filter.predicate === "GreaterThan" ||
142
+ filter.predicate === "GreaterThanOrEqual" ||
143
+ filter.predicate === "LessThan" ||
144
+ filter.predicate === "LessThanOrEqual") {
127
145
  throw new quickpulseErrors_js_1.UnexpectedFilterCreateError(`The predicate '${filter.predicate}' is not supported for the field name '${filter.fieldName}'. If this is a custom dimension, it would be treated as string.`);
128
146
  }
129
147
  }
130
148
  else if (filter.fieldName === types_js_1.KnownRequestColumns.Success.toString()) {
131
- if (filter.predicate !== index_js_1.KnownPredicateType.Equal.toString() &&
132
- filter.predicate !== index_js_1.KnownPredicateType.NotEqual.toString()) {
149
+ if (filter.predicate !== "Equal" && filter.predicate !== "NotEqual") {
133
150
  throw new quickpulseErrors_js_1.UnexpectedFilterCreateError(`The predicate '${filter.predicate}' is not supported for the field name '${filter.fieldName}'.`);
134
151
  }
135
152
  filter.comparand = filter.comparand.toLowerCase();
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/filtering/validator.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { TelemetryTypeError, UnexpectedFilterCreateError } from \"./quickpulseErrors.js\";\nimport { KnownRequestColumns, KnownDependencyColumns } from \"../types.js\";\nimport type {\n DerivedMetricInfo,\n FilterInfo,\n DocumentFilterConjunctionGroupInfo,\n FilterConjunctionGroupInfo,\n} from \"../../../generated/index.js\";\nimport { KnownTelemetryType, KnownPredicateType } from \"../../../generated/index.js\";\nimport { getMsFromFilterTimestampString } from \"../utils.js\";\n\nconst knownStringColumns = new Set<string>([\n KnownRequestColumns.Url,\n KnownRequestColumns.Name,\n KnownDependencyColumns.Target,\n KnownDependencyColumns.Type,\n KnownDependencyColumns.Data,\n \"Message\",\n \"Exception.Message\",\n \"Exception.StackTrace\",\n]);\n\nexport class Validator {\n public validateTelemetryType(telemetryType: string): void {\n if (telemetryType === KnownTelemetryType.PerformanceCounter.toString()) {\n throw new TelemetryTypeError(\n \"The telemetry type PerformanceCounter was specified, but this distro does not send performance counters to quickpulse.\",\n );\n } else if (telemetryType === KnownTelemetryType.Event.toString()) {\n throw new TelemetryTypeError(\n \"The telemetry type Event was specified, but this telemetry type is not supported via OpenTelemetry.\",\n );\n } else if (telemetryType === KnownTelemetryType.Metric.toString()) {\n throw new TelemetryTypeError(\n \"The telemetry type Metric was specified, but this distro does not send custom live metrics to quickpulse.\",\n );\n } else if (!(telemetryType in KnownTelemetryType)) {\n throw new TelemetryTypeError(`'${telemetryType}' is not a valid telemetry type.`);\n }\n }\n\n public checkCustomMetricProjection(derivedMetricInfo: DerivedMetricInfo): void {\n if (derivedMetricInfo.projection.startsWith(\"CustomMetrics.\")) {\n throw new UnexpectedFilterCreateError(\n \"The Projection of a customMetric property is not supported via OpenTelemetry.\",\n );\n }\n }\n\n public validateMetricFilters(derivedMetricInfo: DerivedMetricInfo): void {\n derivedMetricInfo.filterGroups.forEach((filterGroup) => {\n filterGroup.filters.forEach((filter) => {\n this.validateFieldNames(filter.fieldName, derivedMetricInfo.telemetryType);\n this.validatePredicateAndComparand(filter);\n });\n });\n }\n\n public validateDocumentFilters(\n documentFilterConjuctionGroupInfo: DocumentFilterConjunctionGroupInfo,\n ): void {\n const filterConjunctionGroupInfo: FilterConjunctionGroupInfo =\n documentFilterConjuctionGroupInfo.filters;\n filterConjunctionGroupInfo.filters.forEach((filter) => {\n this.validateFieldNames(filter.fieldName, documentFilterConjuctionGroupInfo.telemetryType);\n this.validatePredicateAndComparand(filter);\n });\n }\n\n private isCustomDimOrAnyField(fieldName: string): boolean {\n return fieldName.startsWith(\"CustomDimensions.\") || fieldName === \"*\";\n }\n\n private validateFieldNames(fieldName: string, telemetryType: string): void {\n if (fieldName === \"\") {\n throw new UnexpectedFilterCreateError(\"A filter must have a field name.\");\n }\n if (fieldName.startsWith(\"CustomMetrics.\")) {\n throw new UnexpectedFilterCreateError(\n \"Filtering of a customMetric property is not supported via OpenTelemetry.\",\n );\n }\n\n switch (telemetryType) {\n case KnownTelemetryType.Request.toString():\n if (!this.isCustomDimOrAnyField(fieldName) && !(fieldName in KnownRequestColumns)) {\n throw new UnexpectedFilterCreateError(\n `'${fieldName}' is not a valid field name for the telemetry type Request.`,\n );\n }\n break;\n case KnownTelemetryType.Dependency.toString():\n if (!this.isCustomDimOrAnyField(fieldName) && !(fieldName in KnownDependencyColumns)) {\n throw new UnexpectedFilterCreateError(\n `'${fieldName}' is not a valid field name for the telemetry type Dependency.`,\n );\n }\n break;\n case KnownTelemetryType.Exception.toString():\n if (\n !this.isCustomDimOrAnyField(fieldName) &&\n fieldName !== \"Exception.Message\" &&\n fieldName !== \"Exception.StackTrace\"\n ) {\n throw new UnexpectedFilterCreateError(\n `'${fieldName}' is not a valid field name for the telemetry type Exception.`,\n );\n }\n break;\n case KnownTelemetryType.Trace.toString():\n if (!this.isCustomDimOrAnyField(fieldName) && fieldName !== \"Message\") {\n throw new UnexpectedFilterCreateError(\n `'${fieldName}' is not a valid field name for the telemetry type Trace.`,\n );\n }\n break;\n default:\n throw new TelemetryTypeError(`'${telemetryType}' is not a supported telemetry type.`);\n }\n }\n\n private validatePredicateAndComparand(filter: FilterInfo): void {\n if (!(filter.predicate in KnownPredicateType)) {\n throw new UnexpectedFilterCreateError(`'${filter.predicate}' is not a valid predicate.`);\n } else if (filter.comparand === \"\") {\n throw new UnexpectedFilterCreateError(\n `A filter must have a comparand. FilterName: '${filter.fieldName}' Predicate: '${filter.predicate}' Comparand: '${filter.comparand}'`,\n );\n } else if (\n filter.fieldName === \"*\" &&\n !(\n filter.predicate === KnownPredicateType.Contains.toString() ||\n filter.predicate === KnownPredicateType.DoesNotContain.toString()\n )\n ) {\n throw new UnexpectedFilterCreateError(\n `The predicate '${filter.predicate}' is not supported for the field name '*'`,\n );\n } else if (\n filter.fieldName === KnownDependencyColumns.ResultCode.toString() ||\n filter.fieldName === KnownRequestColumns.ResponseCode.toString() ||\n filter.fieldName === KnownDependencyColumns.Duration.toString()\n ) {\n if (\n filter.predicate === KnownPredicateType.Contains.toString() ||\n filter.predicate === KnownPredicateType.DoesNotContain.toString()\n ) {\n throw new UnexpectedFilterCreateError(\n `The predicate '${filter.predicate}' is not supported for the field name '${filter.fieldName}'`,\n );\n }\n // Duration comparand should be a timestamp; Response/ResultCode comparand should be interpreted as double.\n if (filter.fieldName === KnownDependencyColumns.Duration.toString()) {\n if (isNaN(getMsFromFilterTimestampString(filter.comparand))) {\n throw new UnexpectedFilterCreateError(\n `The comparand '${filter.comparand}' can't be converted to a double (ms).`,\n );\n }\n } else if (isNaN(parseFloat(filter.comparand))) {\n throw new UnexpectedFilterCreateError(\n `The comparand '${filter.comparand}' can't be converted to a double.`,\n );\n }\n } else if (\n knownStringColumns.has(filter.fieldName) ||\n filter.fieldName.startsWith(\"CustomDimensions.\")\n ) {\n if (\n filter.predicate === KnownPredicateType.GreaterThan.toString() ||\n filter.predicate === KnownPredicateType.GreaterThanOrEqual.toString() ||\n filter.predicate === KnownPredicateType.LessThan.toString() ||\n filter.predicate === KnownPredicateType.LessThanOrEqual.toString()\n ) {\n throw new UnexpectedFilterCreateError(\n `The predicate '${filter.predicate}' is not supported for the field name '${filter.fieldName}'. If this is a custom dimension, it would be treated as string.`,\n );\n }\n } else if (filter.fieldName === KnownRequestColumns.Success.toString()) {\n if (\n filter.predicate !== KnownPredicateType.Equal.toString() &&\n filter.predicate !== KnownPredicateType.NotEqual.toString()\n ) {\n throw new UnexpectedFilterCreateError(\n `The predicate '${filter.predicate}' is not supported for the field name '${filter.fieldName}'.`,\n );\n }\n filter.comparand = filter.comparand.toLowerCase();\n if (filter.comparand !== \"true\" && filter.comparand !== \"false\") {\n throw new UnexpectedFilterCreateError(\n `The comparand '${filter.comparand}' is not a valid boolean value for the fieldName Success.`,\n );\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/filtering/validator.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { TelemetryTypeError, UnexpectedFilterCreateError } from \"./quickpulseErrors.js\";\nimport { KnownRequestColumns, KnownDependencyColumns } from \"../types.js\";\nimport type {\n DerivedMetricInfo,\n FilterInfo,\n DocumentFilterConjunctionGroupInfo,\n FilterConjunctionGroupInfo,\n} from \"../../../generated/index.js\";\nimport { getMsFromFilterTimestampString } from \"../utils.js\";\n\n/** Valid telemetry types for validation */\nconst validTelemetryTypes = new Set([\n \"Request\",\n \"Dependency\",\n \"Exception\",\n \"Event\",\n \"Metric\",\n \"PerformanceCounter\",\n \"Trace\",\n]);\n\n/** Valid predicate types for validation */\nconst validPredicateTypes = new Set([\n \"Equal\",\n \"NotEqual\",\n \"LessThan\",\n \"GreaterThan\",\n \"LessThanOrEqual\",\n \"GreaterThanOrEqual\",\n \"Contains\",\n \"DoesNotContain\",\n]);\n\nconst knownStringColumns = new Set<string>([\n KnownRequestColumns.Url,\n KnownRequestColumns.Name,\n KnownDependencyColumns.Target,\n KnownDependencyColumns.Type,\n KnownDependencyColumns.Data,\n \"Message\",\n \"Exception.Message\",\n \"Exception.StackTrace\",\n]);\n\nexport class Validator {\n public validateTelemetryType(telemetryType: string): void {\n if (telemetryType === \"PerformanceCounter\") {\n throw new TelemetryTypeError(\n \"The telemetry type PerformanceCounter was specified, but this distro does not send performance counters to quickpulse.\",\n );\n } else if (telemetryType === \"Event\") {\n throw new TelemetryTypeError(\n \"The telemetry type Event was specified, but this telemetry type is not supported via OpenTelemetry.\",\n );\n } else if (telemetryType === \"Metric\") {\n throw new TelemetryTypeError(\n \"The telemetry type Metric was specified, but this distro does not send custom live metrics to quickpulse.\",\n );\n } else if (!validTelemetryTypes.has(telemetryType)) {\n throw new TelemetryTypeError(`'${telemetryType}' is not a valid telemetry type.`);\n }\n }\n\n public checkCustomMetricProjection(derivedMetricInfo: DerivedMetricInfo): void {\n if (derivedMetricInfo.projection.startsWith(\"CustomMetrics.\")) {\n throw new UnexpectedFilterCreateError(\n \"The Projection of a customMetric property is not supported via OpenTelemetry.\",\n );\n }\n }\n\n public validateMetricFilters(derivedMetricInfo: DerivedMetricInfo): void {\n derivedMetricInfo.filterGroups.forEach((filterGroup) => {\n filterGroup.filters.forEach((filter) => {\n this.validateFieldNames(filter.fieldName, derivedMetricInfo.telemetryType);\n this.validatePredicateAndComparand(filter);\n });\n });\n }\n\n public validateDocumentFilters(\n documentFilterConjuctionGroupInfo: DocumentFilterConjunctionGroupInfo,\n ): void {\n const filterConjunctionGroupInfo: FilterConjunctionGroupInfo =\n documentFilterConjuctionGroupInfo.filters;\n filterConjunctionGroupInfo.filters.forEach((filter) => {\n this.validateFieldNames(filter.fieldName, documentFilterConjuctionGroupInfo.telemetryType);\n this.validatePredicateAndComparand(filter);\n });\n }\n\n private isCustomDimOrAnyField(fieldName: string): boolean {\n return fieldName.startsWith(\"CustomDimensions.\") || fieldName === \"*\";\n }\n\n private validateFieldNames(fieldName: string, telemetryType: string): void {\n if (fieldName === \"\") {\n throw new UnexpectedFilterCreateError(\"A filter must have a field name.\");\n }\n if (fieldName.startsWith(\"CustomMetrics.\")) {\n throw new UnexpectedFilterCreateError(\n \"Filtering of a customMetric property is not supported via OpenTelemetry.\",\n );\n }\n\n switch (telemetryType) {\n case \"Request\":\n if (!this.isCustomDimOrAnyField(fieldName) && !(fieldName in KnownRequestColumns)) {\n throw new UnexpectedFilterCreateError(\n `'${fieldName}' is not a valid field name for the telemetry type Request.`,\n );\n }\n break;\n case \"Dependency\":\n if (!this.isCustomDimOrAnyField(fieldName) && !(fieldName in KnownDependencyColumns)) {\n throw new UnexpectedFilterCreateError(\n `'${fieldName}' is not a valid field name for the telemetry type Dependency.`,\n );\n }\n break;\n case \"Exception\":\n if (\n !this.isCustomDimOrAnyField(fieldName) &&\n fieldName !== \"Exception.Message\" &&\n fieldName !== \"Exception.StackTrace\"\n ) {\n throw new UnexpectedFilterCreateError(\n `'${fieldName}' is not a valid field name for the telemetry type Exception.`,\n );\n }\n break;\n case \"Trace\":\n if (!this.isCustomDimOrAnyField(fieldName) && fieldName !== \"Message\") {\n throw new UnexpectedFilterCreateError(\n `'${fieldName}' is not a valid field name for the telemetry type Trace.`,\n );\n }\n break;\n default:\n throw new TelemetryTypeError(`'${telemetryType}' is not a supported telemetry type.`);\n }\n }\n\n private validatePredicateAndComparand(filter: FilterInfo): void {\n if (!validPredicateTypes.has(filter.predicate)) {\n throw new UnexpectedFilterCreateError(`'${filter.predicate}' is not a valid predicate.`);\n } else if (filter.comparand === \"\") {\n throw new UnexpectedFilterCreateError(\n `A filter must have a comparand. FilterName: '${filter.fieldName}' Predicate: '${filter.predicate}' Comparand: '${filter.comparand}'`,\n );\n } else if (\n filter.fieldName === \"*\" &&\n !(filter.predicate === \"Contains\" || filter.predicate === \"DoesNotContain\")\n ) {\n throw new UnexpectedFilterCreateError(\n `The predicate '${filter.predicate}' is not supported for the field name '*'`,\n );\n } else if (\n filter.fieldName === KnownDependencyColumns.ResultCode.toString() ||\n filter.fieldName === KnownRequestColumns.ResponseCode.toString() ||\n filter.fieldName === KnownDependencyColumns.Duration.toString()\n ) {\n if (filter.predicate === \"Contains\" || filter.predicate === \"DoesNotContain\") {\n throw new UnexpectedFilterCreateError(\n `The predicate '${filter.predicate}' is not supported for the field name '${filter.fieldName}'`,\n );\n }\n // Duration comparand should be a timestamp; Response/ResultCode comparand should be interpreted as double.\n if (filter.fieldName === KnownDependencyColumns.Duration.toString()) {\n if (isNaN(getMsFromFilterTimestampString(filter.comparand))) {\n throw new UnexpectedFilterCreateError(\n `The comparand '${filter.comparand}' can't be converted to a double (ms).`,\n );\n }\n } else if (isNaN(parseFloat(filter.comparand))) {\n throw new UnexpectedFilterCreateError(\n `The comparand '${filter.comparand}' can't be converted to a double.`,\n );\n }\n } else if (\n knownStringColumns.has(filter.fieldName) ||\n filter.fieldName.startsWith(\"CustomDimensions.\")\n ) {\n if (\n filter.predicate === \"GreaterThan\" ||\n filter.predicate === \"GreaterThanOrEqual\" ||\n filter.predicate === \"LessThan\" ||\n filter.predicate === \"LessThanOrEqual\"\n ) {\n throw new UnexpectedFilterCreateError(\n `The predicate '${filter.predicate}' is not supported for the field name '${filter.fieldName}'. If this is a custom dimension, it would be treated as string.`,\n );\n }\n } else if (filter.fieldName === KnownRequestColumns.Success.toString()) {\n if (filter.predicate !== \"Equal\" && filter.predicate !== \"NotEqual\") {\n throw new UnexpectedFilterCreateError(\n `The predicate '${filter.predicate}' is not supported for the field name '${filter.fieldName}'.`,\n );\n }\n filter.comparand = filter.comparand.toLowerCase();\n if (filter.comparand !== \"true\" && filter.comparand !== \"false\") {\n throw new UnexpectedFilterCreateError(\n `The comparand '${filter.comparand}' is not a valid boolean value for the fieldName Success.`,\n );\n }\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"liveMetrics.d.ts","sourceRoot":"","sources":["../../../../src/metrics/quickpulse/liveMetrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"liveMetrics.d.ts","sourceRoot":"","sources":["../../../../src/metrics/quickpulse/liveMetrics.ts"],"names":[],"mappings":"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"}