@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
@@ -1 +1 @@
1
- {"version":3,"file":"sender.js","sourceRoot":"","sources":["../../../../../src/metrics/quickpulse/export/sender.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAQ1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,2BAA2B,GAAG,qCAAqC,CAAC;AAE1E;;;GAGG;AACH,MAAM,OAAO,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,gBAAgB,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAE3E,kCAAkC;QAClC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,kBAAkB,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,IAAI,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,IAAI,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,GAAG,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","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"}
@@ -1,6 +1,5 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
- import { KnownPredicateType } from "../../../generated/index.js";
4
3
  import { KnownDependencyColumns, KnownRequestColumns } from "../types.js";
5
4
  import { isRequestData, isDependencyData, isExceptionData, isTraceData, getMsFromFilterTimestampString, } from "../utils.js";
6
5
  export class Filter {
@@ -61,10 +60,10 @@ export class Filter {
61
60
  return false; // should not reach here
62
61
  }
63
62
  if (filter.fieldName === KnownRequestColumns.Success.toString()) {
64
- if (filter.predicate === KnownPredicateType.Equal.toString()) {
63
+ if (filter.predicate === "Equal") {
65
64
  return dataValue === (filter.comparand.toLowerCase() === "true");
66
65
  }
67
- else if (filter.predicate === KnownPredicateType.NotEqual.toString()) {
66
+ else if (filter.predicate === "NotEqual") {
68
67
  return dataValue !== (filter.comparand.toLowerCase() === "true");
69
68
  }
70
69
  }
@@ -75,17 +74,17 @@ export class Filter {
75
74
  ? getMsFromFilterTimestampString(filter.comparand)
76
75
  : parseFloat(filter.comparand);
77
76
  switch (filter.predicate) {
78
- case KnownPredicateType.Equal.toString():
77
+ case "Equal":
79
78
  return dataValue === comparand;
80
- case KnownPredicateType.NotEqual.toString():
79
+ case "NotEqual":
81
80
  return dataValue !== comparand;
82
- case KnownPredicateType.GreaterThan.toString():
81
+ case "GreaterThan":
83
82
  return dataValue > comparand;
84
- case KnownPredicateType.GreaterThanOrEqual.toString():
83
+ case "GreaterThanOrEqual":
85
84
  return dataValue >= comparand;
86
- case KnownPredicateType.LessThan.toString():
85
+ case "LessThan":
87
86
  return dataValue < comparand;
88
- case KnownPredicateType.LessThanOrEqual.toString():
87
+ case "LessThanOrEqual":
89
88
  return dataValue <= comparand;
90
89
  default:
91
90
  return false;
@@ -133,16 +132,16 @@ export class Filter {
133
132
  }
134
133
  stringCompare(dataValue, comparand, predicate) {
135
134
  switch (predicate) {
136
- case KnownPredicateType.Equal.toString():
135
+ case "Equal":
137
136
  return dataValue === comparand;
138
- case KnownPredicateType.NotEqual.toString():
137
+ case "NotEqual":
139
138
  return dataValue !== comparand;
140
- case KnownPredicateType.Contains.toString(): {
139
+ case "Contains": {
141
140
  const lowerDataValue = dataValue.toLowerCase();
142
141
  const lowerComparand = comparand.toLowerCase();
143
142
  return lowerDataValue.includes(lowerComparand);
144
143
  }
145
- case KnownPredicateType.DoesNotContain.toString(): {
144
+ case "DoesNotContain": {
146
145
  const lowerDataValue = dataValue.toLowerCase();
147
146
  const lowerComparand = comparand.toLowerCase();
148
147
  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"}
@@ -1,6 +1,5 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
- import { KnownAggregationType } from "../../../generated/index.js";
4
3
  import { isRequestData, isDependencyData } from "../utils.js";
5
4
  import { MetricFailureToCreateError } from "./quickpulseErrors.js";
6
5
  export class Projection {
@@ -14,19 +13,19 @@ export class Projection {
14
13
  }
15
14
  // This method is intended to be called upon configuration change for every valid derivedMetricInfo.
16
15
  initDerivedMetricProjection(derivedMetricInfo) {
17
- if (derivedMetricInfo.aggregation === KnownAggregationType.Min.toString()) {
16
+ if (derivedMetricInfo.aggregation === "Min") {
18
17
  // set to max value so that the value from the first telemetry item will always be less than it
19
- this.projectionMap.set(derivedMetricInfo.id, [Number.MAX_VALUE, KnownAggregationType.Min]);
18
+ this.projectionMap.set(derivedMetricInfo.id, [Number.MAX_VALUE, "Min"]);
20
19
  }
21
- else if (derivedMetricInfo.aggregation === KnownAggregationType.Max.toString()) {
20
+ else if (derivedMetricInfo.aggregation === "Max") {
22
21
  // set to min value so that the value from the first telemetry item will always be more than it
23
- this.projectionMap.set(derivedMetricInfo.id, [Number.MIN_VALUE, KnownAggregationType.Max]);
22
+ this.projectionMap.set(derivedMetricInfo.id, [Number.MIN_VALUE, "Max"]);
24
23
  }
25
- else if (derivedMetricInfo.aggregation === KnownAggregationType.Sum.toString()) {
26
- this.projectionMap.set(derivedMetricInfo.id, [0, KnownAggregationType.Sum]);
24
+ else if (derivedMetricInfo.aggregation === "Sum") {
25
+ this.projectionMap.set(derivedMetricInfo.id, [0, "Sum"]);
27
26
  }
28
27
  else {
29
- this.projectionMap.set(derivedMetricInfo.id, [0, KnownAggregationType.Avg]);
28
+ this.projectionMap.set(derivedMetricInfo.id, [0, "Avg"]);
30
29
  this.avgMap.set(derivedMetricInfo.id, [0, 0]);
31
30
  }
32
31
  }
@@ -71,18 +70,18 @@ export class Projection {
71
70
  const result = new Map();
72
71
  for (const [key, value] of this.projectionMap.entries()) {
73
72
  let projection;
74
- if (value[1] === KnownAggregationType.Min.toString()) {
73
+ if (value[1] === "Min") {
75
74
  projection = value[0] === Number.MAX_VALUE ? 0 : value[0];
76
75
  value[0] = Number.MAX_VALUE; // reset for next 1s interval
77
76
  }
78
- else if (value[1] === KnownAggregationType.Max.toString()) {
77
+ else if (value[1] === "Max") {
79
78
  projection = value[0] === Number.MIN_VALUE ? 0 : value[0];
80
79
  value[0] = Number.MIN_VALUE; // reset for next 1s interval
81
80
  }
82
81
  else {
83
82
  projection = value[0];
84
83
  value[0] = 0; // reset for next 1s interval
85
- if (value[1] === KnownAggregationType.Avg.toString()) {
84
+ if (value[1] === "Avg") {
86
85
  this.avgMap.set(key, [0, 0]); // reset for next 1s interval
87
86
  }
88
87
  }
@@ -98,13 +97,13 @@ export class Projection {
98
97
  calculateAggregation(aggregation, id, incrementBy) {
99
98
  const prevValue = this.projectionMap.get(id)[0];
100
99
  switch (aggregation) {
101
- case KnownAggregationType.Sum.toString():
100
+ case "Sum":
102
101
  return prevValue + incrementBy;
103
- case KnownAggregationType.Min.toString():
102
+ case "Min":
104
103
  return Math.min(prevValue, incrementBy);
105
- case KnownAggregationType.Max.toString():
104
+ case "Max":
106
105
  return Math.max(prevValue, incrementBy);
107
- case KnownAggregationType.Avg.toString(): {
106
+ case "Avg": {
108
107
  const [prevSum, prevCount] = this.avgMap.get(id);
109
108
  this.avgMap.set(id, [prevSum + incrementBy, prevCount + 1]);
110
109
  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"}
@@ -2,8 +2,28 @@
2
2
  // Licensed under the MIT License.
3
3
  import { TelemetryTypeError, UnexpectedFilterCreateError } from "./quickpulseErrors.js";
4
4
  import { KnownRequestColumns, KnownDependencyColumns } from "../types.js";
5
- import { KnownTelemetryType, KnownPredicateType } from "../../../generated/index.js";
6
5
  import { getMsFromFilterTimestampString } from "../utils.js";
6
+ /** Valid telemetry types for validation */
7
+ const validTelemetryTypes = new Set([
8
+ "Request",
9
+ "Dependency",
10
+ "Exception",
11
+ "Event",
12
+ "Metric",
13
+ "PerformanceCounter",
14
+ "Trace",
15
+ ]);
16
+ /** Valid predicate types for validation */
17
+ const validPredicateTypes = new Set([
18
+ "Equal",
19
+ "NotEqual",
20
+ "LessThan",
21
+ "GreaterThan",
22
+ "LessThanOrEqual",
23
+ "GreaterThanOrEqual",
24
+ "Contains",
25
+ "DoesNotContain",
26
+ ]);
7
27
  const knownStringColumns = new Set([
8
28
  KnownRequestColumns.Url,
9
29
  KnownRequestColumns.Name,
@@ -16,16 +36,16 @@ const knownStringColumns = new Set([
16
36
  ]);
17
37
  export class Validator {
18
38
  validateTelemetryType(telemetryType) {
19
- if (telemetryType === KnownTelemetryType.PerformanceCounter.toString()) {
39
+ if (telemetryType === "PerformanceCounter") {
20
40
  throw new TelemetryTypeError("The telemetry type PerformanceCounter was specified, but this distro does not send performance counters to quickpulse.");
21
41
  }
22
- else if (telemetryType === KnownTelemetryType.Event.toString()) {
42
+ else if (telemetryType === "Event") {
23
43
  throw new TelemetryTypeError("The telemetry type Event was specified, but this telemetry type is not supported via OpenTelemetry.");
24
44
  }
25
- else if (telemetryType === KnownTelemetryType.Metric.toString()) {
45
+ else if (telemetryType === "Metric") {
26
46
  throw new TelemetryTypeError("The telemetry type Metric was specified, but this distro does not send custom live metrics to quickpulse.");
27
47
  }
28
- else if (!(telemetryType in KnownTelemetryType)) {
48
+ else if (!validTelemetryTypes.has(telemetryType)) {
29
49
  throw new TelemetryTypeError(`'${telemetryType}' is not a valid telemetry type.`);
30
50
  }
31
51
  }
@@ -60,24 +80,24 @@ export class Validator {
60
80
  throw new UnexpectedFilterCreateError("Filtering of a customMetric property is not supported via OpenTelemetry.");
61
81
  }
62
82
  switch (telemetryType) {
63
- case KnownTelemetryType.Request.toString():
83
+ case "Request":
64
84
  if (!this.isCustomDimOrAnyField(fieldName) && !(fieldName in KnownRequestColumns)) {
65
85
  throw new UnexpectedFilterCreateError(`'${fieldName}' is not a valid field name for the telemetry type Request.`);
66
86
  }
67
87
  break;
68
- case KnownTelemetryType.Dependency.toString():
88
+ case "Dependency":
69
89
  if (!this.isCustomDimOrAnyField(fieldName) && !(fieldName in KnownDependencyColumns)) {
70
90
  throw new UnexpectedFilterCreateError(`'${fieldName}' is not a valid field name for the telemetry type Dependency.`);
71
91
  }
72
92
  break;
73
- case KnownTelemetryType.Exception.toString():
93
+ case "Exception":
74
94
  if (!this.isCustomDimOrAnyField(fieldName) &&
75
95
  fieldName !== "Exception.Message" &&
76
96
  fieldName !== "Exception.StackTrace") {
77
97
  throw new UnexpectedFilterCreateError(`'${fieldName}' is not a valid field name for the telemetry type Exception.`);
78
98
  }
79
99
  break;
80
- case KnownTelemetryType.Trace.toString():
100
+ case "Trace":
81
101
  if (!this.isCustomDimOrAnyField(fieldName) && fieldName !== "Message") {
82
102
  throw new UnexpectedFilterCreateError(`'${fieldName}' is not a valid field name for the telemetry type Trace.`);
83
103
  }
@@ -87,22 +107,20 @@ export class Validator {
87
107
  }
88
108
  }
89
109
  validatePredicateAndComparand(filter) {
90
- if (!(filter.predicate in KnownPredicateType)) {
110
+ if (!validPredicateTypes.has(filter.predicate)) {
91
111
  throw new UnexpectedFilterCreateError(`'${filter.predicate}' is not a valid predicate.`);
92
112
  }
93
113
  else if (filter.comparand === "") {
94
114
  throw new UnexpectedFilterCreateError(`A filter must have a comparand. FilterName: '${filter.fieldName}' Predicate: '${filter.predicate}' Comparand: '${filter.comparand}'`);
95
115
  }
96
116
  else if (filter.fieldName === "*" &&
97
- !(filter.predicate === KnownPredicateType.Contains.toString() ||
98
- filter.predicate === KnownPredicateType.DoesNotContain.toString())) {
117
+ !(filter.predicate === "Contains" || filter.predicate === "DoesNotContain")) {
99
118
  throw new UnexpectedFilterCreateError(`The predicate '${filter.predicate}' is not supported for the field name '*'`);
100
119
  }
101
120
  else if (filter.fieldName === KnownDependencyColumns.ResultCode.toString() ||
102
121
  filter.fieldName === KnownRequestColumns.ResponseCode.toString() ||
103
122
  filter.fieldName === KnownDependencyColumns.Duration.toString()) {
104
- if (filter.predicate === KnownPredicateType.Contains.toString() ||
105
- filter.predicate === KnownPredicateType.DoesNotContain.toString()) {
123
+ if (filter.predicate === "Contains" || filter.predicate === "DoesNotContain") {
106
124
  throw new UnexpectedFilterCreateError(`The predicate '${filter.predicate}' is not supported for the field name '${filter.fieldName}'`);
107
125
  }
108
126
  // Duration comparand should be a timestamp; Response/ResultCode comparand should be interpreted as double.
@@ -117,16 +135,15 @@ export class Validator {
117
135
  }
118
136
  else if (knownStringColumns.has(filter.fieldName) ||
119
137
  filter.fieldName.startsWith("CustomDimensions.")) {
120
- if (filter.predicate === KnownPredicateType.GreaterThan.toString() ||
121
- filter.predicate === KnownPredicateType.GreaterThanOrEqual.toString() ||
122
- filter.predicate === KnownPredicateType.LessThan.toString() ||
123
- filter.predicate === KnownPredicateType.LessThanOrEqual.toString()) {
138
+ if (filter.predicate === "GreaterThan" ||
139
+ filter.predicate === "GreaterThanOrEqual" ||
140
+ filter.predicate === "LessThan" ||
141
+ filter.predicate === "LessThanOrEqual") {
124
142
  throw new 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.`);
125
143
  }
126
144
  }
127
145
  else if (filter.fieldName === KnownRequestColumns.Success.toString()) {
128
- if (filter.predicate !== KnownPredicateType.Equal.toString() &&
129
- filter.predicate !== KnownPredicateType.NotEqual.toString()) {
146
+ if (filter.predicate !== "Equal" && filter.predicate !== "NotEqual") {
130
147
  throw new UnexpectedFilterCreateError(`The predicate '${filter.predicate}' is not supported for the field name '${filter.fieldName}'.`);
131
148
  }
132
149
  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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"}