unleash-server 7.2.2 → 7.3.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 (501) hide show
  1. package/README.md +21 -10
  2. package/dist/lib/create-config.d.ts.map +1 -1
  3. package/dist/lib/create-config.js +8 -0
  4. package/dist/lib/create-config.js.map +1 -1
  5. package/dist/lib/db/client-applications-store.d.ts.map +1 -1
  6. package/dist/lib/db/client-applications-store.js +32 -2
  7. package/dist/lib/db/client-applications-store.js.map +1 -1
  8. package/dist/lib/db/feature-environment-store.d.ts +1 -1
  9. package/dist/lib/db/feature-environment-store.d.ts.map +1 -1
  10. package/dist/lib/db/feature-environment-store.js +42 -35
  11. package/dist/lib/db/feature-environment-store.js.map +1 -1
  12. package/dist/lib/db/index.d.ts.map +1 -1
  13. package/dist/lib/db/index.js +2 -0
  14. package/dist/lib/db/index.js.map +1 -1
  15. package/dist/lib/error/unleash-error.d.ts.map +1 -1
  16. package/dist/lib/error/unleash-error.js +2 -2
  17. package/dist/lib/error/unleash-error.js.map +1 -1
  18. package/dist/lib/events/index.d.ts +8 -1
  19. package/dist/lib/events/index.d.ts.map +1 -1
  20. package/dist/lib/events/index.js +14 -0
  21. package/dist/lib/events/index.js.map +1 -1
  22. package/dist/lib/features/api-tokens/createApiTokenService.d.ts +2 -0
  23. package/dist/lib/features/api-tokens/createApiTokenService.d.ts.map +1 -1
  24. package/dist/lib/features/api-tokens/createApiTokenService.js +6 -2
  25. package/dist/lib/features/api-tokens/createApiTokenService.js.map +1 -1
  26. package/dist/lib/features/client-feature-toggles/client-feature-toggle.controller.d.ts.map +1 -1
  27. package/dist/lib/features/client-feature-toggles/client-feature-toggle.controller.js +2 -9
  28. package/dist/lib/features/client-feature-toggles/client-feature-toggle.controller.js.map +1 -1
  29. package/dist/lib/features/dependent-features/dependent.features.e2e.test.js +28 -29
  30. package/dist/lib/features/dependent-features/dependent.features.e2e.test.js.map +1 -1
  31. package/dist/lib/features/feature-links/feature-link-service.js +1 -1
  32. package/dist/lib/features/feature-links/feature-link-service.js.map +1 -1
  33. package/dist/lib/features/feature-toggle/createFeatureToggleService.d.ts.map +1 -1
  34. package/dist/lib/features/feature-toggle/createFeatureToggleService.js +14 -4
  35. package/dist/lib/features/feature-toggle/createFeatureToggleService.js.map +1 -1
  36. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.d.ts.map +1 -1
  37. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.js +2 -1
  38. package/dist/lib/features/feature-toggle/fakes/fake-feature-strategies-store.js.map +1 -1
  39. package/dist/lib/features/feature-toggle/feature-toggle-service.d.ts +9 -3
  40. package/dist/lib/features/feature-toggle/feature-toggle-service.d.ts.map +1 -1
  41. package/dist/lib/features/feature-toggle/feature-toggle-service.js +23 -7
  42. package/dist/lib/features/feature-toggle/feature-toggle-service.js.map +1 -1
  43. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.d.ts.map +1 -1
  44. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.js +3 -3
  45. package/dist/lib/features/feature-toggle/feature-toggle-strategies-store.js.map +1 -1
  46. package/dist/lib/features/feature-toggle/tests/feature-toggles.e2e.test.js +34 -35
  47. package/dist/lib/features/feature-toggle/tests/feature-toggles.e2e.test.js.map +1 -1
  48. package/dist/lib/features/instance-stats/createInstanceStatsService.d.ts.map +1 -1
  49. package/dist/lib/features/instance-stats/createInstanceStatsService.js +5 -2
  50. package/dist/lib/features/instance-stats/createInstanceStatsService.js.map +1 -1
  51. package/dist/lib/features/instance-stats/getEdgeInstances.d.ts +6 -0
  52. package/dist/lib/features/instance-stats/getEdgeInstances.d.ts.map +1 -0
  53. package/dist/lib/features/instance-stats/getEdgeInstances.e2e.test.d.ts +2 -0
  54. package/dist/lib/features/instance-stats/getEdgeInstances.e2e.test.d.ts.map +1 -0
  55. package/dist/lib/features/instance-stats/getEdgeInstances.e2e.test.js +137 -0
  56. package/dist/lib/features/instance-stats/getEdgeInstances.e2e.test.js.map +1 -0
  57. package/dist/lib/features/instance-stats/getEdgeInstances.js +36 -0
  58. package/dist/lib/features/instance-stats/getEdgeInstances.js.map +1 -0
  59. package/dist/lib/features/instance-stats/instance-stats-service.d.ts +4 -1
  60. package/dist/lib/features/instance-stats/instance-stats-service.d.ts.map +1 -1
  61. package/dist/lib/features/instance-stats/instance-stats-service.js +8 -3
  62. package/dist/lib/features/instance-stats/instance-stats-service.js.map +1 -1
  63. package/dist/lib/features/instance-stats/instance-stats-service.test.js +2 -1
  64. package/dist/lib/features/instance-stats/instance-stats-service.test.js.map +1 -1
  65. package/dist/lib/features/metrics/client-metrics/metrics-service-v2.js +1 -1
  66. package/dist/lib/features/metrics/client-metrics/metrics-service-v2.js.map +1 -1
  67. package/dist/lib/features/metrics/impact/batch-histogram.d.ts +36 -0
  68. package/dist/lib/features/metrics/impact/batch-histogram.d.ts.map +1 -0
  69. package/dist/lib/features/metrics/impact/batch-histogram.js +87 -0
  70. package/dist/lib/features/metrics/impact/batch-histogram.js.map +1 -0
  71. package/dist/lib/features/metrics/impact/batch-histogram.test.d.ts +2 -0
  72. package/dist/lib/features/metrics/impact/batch-histogram.test.d.ts.map +1 -0
  73. package/dist/lib/features/metrics/impact/batch-histogram.test.js +137 -0
  74. package/dist/lib/features/metrics/impact/batch-histogram.test.js.map +1 -0
  75. package/dist/lib/features/metrics/impact/define-impact-metrics.d.ts +2 -0
  76. package/dist/lib/features/metrics/impact/define-impact-metrics.d.ts.map +1 -1
  77. package/dist/lib/features/metrics/impact/define-impact-metrics.js +4 -0
  78. package/dist/lib/features/metrics/impact/define-impact-metrics.js.map +1 -1
  79. package/dist/lib/features/metrics/impact/impact-metrics.e2e.test.js +49 -0
  80. package/dist/lib/features/metrics/impact/impact-metrics.e2e.test.js.map +1 -1
  81. package/dist/lib/features/metrics/impact/metrics-translator.d.ts +22 -4
  82. package/dist/lib/features/metrics/impact/metrics-translator.d.ts.map +1 -1
  83. package/dist/lib/features/metrics/impact/metrics-translator.js +58 -2
  84. package/dist/lib/features/metrics/impact/metrics-translator.js.map +1 -1
  85. package/dist/lib/features/metrics/impact/metrics-translator.test.js +83 -0
  86. package/dist/lib/features/metrics/impact/metrics-translator.test.js.map +1 -1
  87. package/dist/lib/features/metrics/shared/schema.d.ts +1 -0
  88. package/dist/lib/features/metrics/shared/schema.d.ts.map +1 -1
  89. package/dist/lib/features/metrics/shared/schema.js +27 -1
  90. package/dist/lib/features/metrics/shared/schema.js.map +1 -1
  91. package/dist/lib/features/project/createProjectService.d.ts.map +1 -1
  92. package/dist/lib/features/project/createProjectService.js +7 -5
  93. package/dist/lib/features/project/createProjectService.js.map +1 -1
  94. package/dist/lib/features/project/project-service.d.ts +3 -2
  95. package/dist/lib/features/project/project-service.d.ts.map +1 -1
  96. package/dist/lib/features/project/project-service.js +4 -3
  97. package/dist/lib/features/project/project-service.js.map +1 -1
  98. package/dist/lib/features/release-plans/release-plan-milestone-store.d.ts +2 -2
  99. package/dist/lib/features/release-plans/release-plan-milestone-store.d.ts.map +1 -1
  100. package/dist/lib/features/release-plans/release-plan-milestone-store.js +3 -0
  101. package/dist/lib/features/release-plans/release-plan-milestone-store.js.map +1 -1
  102. package/dist/lib/features/release-plans/release-plan-milestone.d.ts +6 -0
  103. package/dist/lib/features/release-plans/release-plan-milestone.d.ts.map +1 -1
  104. package/dist/lib/features/release-plans/release-plan-read-model-type.d.ts +5 -0
  105. package/dist/lib/features/release-plans/release-plan-read-model-type.d.ts.map +1 -0
  106. package/dist/lib/features/release-plans/release-plan-read-model-type.js +2 -0
  107. package/dist/lib/features/release-plans/release-plan-read-model-type.js.map +1 -0
  108. package/dist/lib/features/release-plans/release-plan-read-model.d.ts +11 -0
  109. package/dist/lib/features/release-plans/release-plan-read-model.d.ts.map +1 -0
  110. package/dist/lib/features/release-plans/release-plan-read-model.js +133 -0
  111. package/dist/lib/features/release-plans/release-plan-read-model.js.map +1 -0
  112. package/dist/lib/features/release-plans/release-plan-read-model.test.d.ts +2 -0
  113. package/dist/lib/features/release-plans/release-plan-read-model.test.d.ts.map +1 -0
  114. package/dist/lib/features/release-plans/release-plan-read-model.test.js +165 -0
  115. package/dist/lib/features/release-plans/release-plan-read-model.test.js.map +1 -0
  116. package/dist/lib/features/release-plans/release-plan-store.d.ts +1 -1
  117. package/dist/lib/features/release-plans/release-plan-store.d.ts.map +1 -1
  118. package/dist/lib/features/release-plans/release-plan-store.js +16 -15
  119. package/dist/lib/features/release-plans/release-plan-store.js.map +1 -1
  120. package/dist/lib/features/release-plans/release-plan-template.d.ts +2 -2
  121. package/dist/lib/features/release-plans/release-plan-template.d.ts.map +1 -1
  122. package/dist/lib/features/release-plans/release-plan.d.ts +1 -1
  123. package/dist/lib/features/release-plans/release-plan.d.ts.map +1 -1
  124. package/dist/lib/features/resource-limits/resource-limits-service.d.ts +8 -0
  125. package/dist/lib/features/resource-limits/resource-limits-service.d.ts.map +1 -0
  126. package/dist/lib/features/resource-limits/resource-limits-service.js +9 -0
  127. package/dist/lib/features/resource-limits/resource-limits-service.js.map +1 -0
  128. package/dist/lib/features/scheduler/schedule-services.js +1 -1
  129. package/dist/lib/features/scheduler/schedule-services.js.map +1 -1
  130. package/dist/lib/features/segment/createSegmentService.d.ts.map +1 -1
  131. package/dist/lib/features/segment/createSegmentService.js +5 -3
  132. package/dist/lib/features/segment/createSegmentService.js.map +1 -1
  133. package/dist/lib/features/segment/segment-service.d.ts +3 -2
  134. package/dist/lib/features/segment/segment-service.d.ts.map +1 -1
  135. package/dist/lib/features/segment/segment-service.js +3 -3
  136. package/dist/lib/features/segment/segment-service.js.map +1 -1
  137. package/dist/lib/features/users/user-store.d.ts +2 -0
  138. package/dist/lib/features/users/user-store.d.ts.map +1 -1
  139. package/dist/lib/features/users/user-store.js +3 -2
  140. package/dist/lib/features/users/user-store.js.map +1 -1
  141. package/dist/lib/features/users/user-updates-read-model.d.ts +27 -0
  142. package/dist/lib/features/users/user-updates-read-model.d.ts.map +1 -0
  143. package/dist/lib/features/users/user-updates-read-model.js +68 -0
  144. package/dist/lib/features/users/user-updates-read-model.js.map +1 -0
  145. package/dist/lib/features/users/user-updates-read-model.test.d.ts +2 -0
  146. package/dist/lib/features/users/user-updates-read-model.test.d.ts.map +1 -0
  147. package/dist/lib/features/users/user-updates-read-model.test.js +50 -0
  148. package/dist/lib/features/users/user-updates-read-model.test.js.map +1 -0
  149. package/dist/lib/metrics.d.ts.map +1 -1
  150. package/dist/lib/metrics.js +8 -6
  151. package/dist/lib/metrics.js.map +1 -1
  152. package/dist/lib/metrics.test.js +2 -1
  153. package/dist/lib/metrics.test.js.map +1 -1
  154. package/dist/lib/middleware/origin-middleware.d.ts +1 -1
  155. package/dist/lib/middleware/origin-middleware.d.ts.map +1 -1
  156. package/dist/lib/middleware/origin-middleware.js +2 -9
  157. package/dist/lib/middleware/origin-middleware.js.map +1 -1
  158. package/dist/lib/middleware/origin-middleware.test.js +0 -16
  159. package/dist/lib/middleware/origin-middleware.test.js.map +1 -1
  160. package/dist/lib/openapi/spec/application-schema.d.ts +1 -1
  161. package/dist/lib/openapi/spec/application-schema.js +1 -1
  162. package/dist/lib/openapi/spec/application-schema.js.map +1 -1
  163. package/dist/lib/openapi/spec/applications-schema.d.ts +1 -1
  164. package/dist/lib/openapi/spec/bulk-metrics-schema.d.ts +126 -39
  165. package/dist/lib/openapi/spec/bulk-metrics-schema.d.ts.map +1 -1
  166. package/dist/lib/openapi/spec/create-application-schema.d.ts +1 -1
  167. package/dist/lib/openapi/spec/create-application-schema.js +1 -1
  168. package/dist/lib/openapi/spec/create-application-schema.js.map +1 -1
  169. package/dist/lib/openapi/spec/create-strategy-schema.d.ts +2 -2
  170. package/dist/lib/openapi/spec/create-strategy-schema.js +2 -2
  171. package/dist/lib/openapi/spec/create-strategy-schema.js.map +1 -1
  172. package/dist/lib/openapi/spec/event-schema.d.ts +1 -1
  173. package/dist/lib/openapi/spec/event-search-response-schema.d.ts +1 -1
  174. package/dist/lib/openapi/spec/events-schema.d.ts +1 -1
  175. package/dist/lib/openapi/spec/export-result-schema.d.ts +12304 -1250
  176. package/dist/lib/openapi/spec/export-result-schema.d.ts.map +1 -1
  177. package/dist/lib/openapi/spec/export-result-schema.js +12 -0
  178. package/dist/lib/openapi/spec/export-result-schema.js.map +1 -1
  179. package/dist/lib/openapi/spec/feature-environment-schema.d.ts +2767 -0
  180. package/dist/lib/openapi/spec/feature-environment-schema.d.ts.map +1 -1
  181. package/dist/lib/openapi/spec/feature-environment-schema.js +19 -0
  182. package/dist/lib/openapi/spec/feature-environment-schema.js.map +1 -1
  183. package/dist/lib/openapi/spec/feature-events-schema.d.ts +1 -1
  184. package/dist/lib/openapi/spec/feature-schema.d.ts +5808 -281
  185. package/dist/lib/openapi/spec/feature-schema.d.ts.map +1 -1
  186. package/dist/lib/openapi/spec/feature-schema.js +12 -0
  187. package/dist/lib/openapi/spec/feature-schema.js.map +1 -1
  188. package/dist/lib/openapi/spec/feature-search-environment-schema.d.ts +5613 -79
  189. package/dist/lib/openapi/spec/feature-search-environment-schema.d.ts.map +1 -1
  190. package/dist/lib/openapi/spec/feature-search-environment-schema.js +12 -0
  191. package/dist/lib/openapi/spec/feature-search-environment-schema.js.map +1 -1
  192. package/dist/lib/openapi/spec/feature-search-query-parameters.d.ts +2 -1
  193. package/dist/lib/openapi/spec/feature-search-query-parameters.d.ts.map +1 -1
  194. package/dist/lib/openapi/spec/feature-search-query-parameters.js +2 -1
  195. package/dist/lib/openapi/spec/feature-search-query-parameters.js.map +1 -1
  196. package/dist/lib/openapi/spec/feature-search-response-schema.d.ts +5613 -79
  197. package/dist/lib/openapi/spec/feature-search-response-schema.d.ts.map +1 -1
  198. package/dist/lib/openapi/spec/health-overview-schema.d.ts +11432 -605
  199. package/dist/lib/openapi/spec/health-overview-schema.d.ts.map +1 -1
  200. package/dist/lib/openapi/spec/health-overview-schema.js +8 -0
  201. package/dist/lib/openapi/spec/health-overview-schema.js.map +1 -1
  202. package/dist/lib/openapi/spec/health-report-schema.d.ts +11432 -605
  203. package/dist/lib/openapi/spec/health-report-schema.d.ts.map +1 -1
  204. package/dist/lib/openapi/spec/impact-metrics-schema.d.ts +126 -39
  205. package/dist/lib/openapi/spec/impact-metrics-schema.d.ts.map +1 -1
  206. package/dist/lib/openapi/spec/impact-metrics-schema.js +128 -39
  207. package/dist/lib/openapi/spec/impact-metrics-schema.js.map +1 -1
  208. package/dist/lib/openapi/spec/import-toggles-schema.d.ts +24822 -2714
  209. package/dist/lib/openapi/spec/import-toggles-schema.d.ts.map +1 -1
  210. package/dist/lib/openapi/spec/import-toggles-schema.js +12 -0
  211. package/dist/lib/openapi/spec/import-toggles-schema.js.map +1 -1
  212. package/dist/lib/openapi/spec/index.d.ts +7 -0
  213. package/dist/lib/openapi/spec/index.d.ts.map +1 -1
  214. package/dist/lib/openapi/spec/index.js +7 -0
  215. package/dist/lib/openapi/spec/index.js.map +1 -1
  216. package/dist/lib/openapi/spec/instance-admin-stats-schema.d.ts +13 -0
  217. package/dist/lib/openapi/spec/instance-admin-stats-schema.d.ts.map +1 -1
  218. package/dist/lib/openapi/spec/instance-admin-stats-schema.js +13 -0
  219. package/dist/lib/openapi/spec/instance-admin-stats-schema.js.map +1 -1
  220. package/dist/lib/openapi/spec/integration-event-schema.d.ts +1 -1
  221. package/dist/lib/openapi/spec/integration-events-schema.d.ts +2 -2
  222. package/dist/lib/openapi/spec/me-schema.d.ts +1 -1
  223. package/dist/lib/openapi/spec/patch-schema.d.ts +1 -1
  224. package/dist/lib/openapi/spec/patch-schema.js +1 -1
  225. package/dist/lib/openapi/spec/patch-schema.js.map +1 -1
  226. package/dist/lib/openapi/spec/patches-schema.d.ts +1 -1
  227. package/dist/lib/openapi/spec/permission-schema.d.ts +1 -1
  228. package/dist/lib/openapi/spec/permission-schema.js +1 -1
  229. package/dist/lib/openapi/spec/permission-schema.js.map +1 -1
  230. package/dist/lib/openapi/spec/profile-schema.d.ts +5808 -281
  231. package/dist/lib/openapi/spec/profile-schema.d.ts.map +1 -1
  232. package/dist/lib/openapi/spec/project-overview-schema.d.ts +11641 -814
  233. package/dist/lib/openapi/spec/project-overview-schema.d.ts.map +1 -1
  234. package/dist/lib/openapi/spec/project-overview-schema.js +8 -0
  235. package/dist/lib/openapi/spec/project-overview-schema.js.map +1 -1
  236. package/dist/lib/openapi/spec/ready-check-schema.d.ts +19 -0
  237. package/dist/lib/openapi/spec/ready-check-schema.d.ts.map +1 -0
  238. package/dist/lib/openapi/spec/ready-check-schema.js +17 -0
  239. package/dist/lib/openapi/spec/ready-check-schema.js.map +1 -0
  240. package/dist/lib/openapi/spec/release-plan-milestone-schema.d.ts +716 -0
  241. package/dist/lib/openapi/spec/release-plan-milestone-schema.d.ts.map +1 -0
  242. package/dist/lib/openapi/spec/release-plan-milestone-schema.js +72 -0
  243. package/dist/lib/openapi/spec/release-plan-milestone-schema.js.map +1 -0
  244. package/dist/lib/openapi/spec/release-plan-milestone-strategy-schema.d.ts +361 -0
  245. package/dist/lib/openapi/spec/release-plan-milestone-strategy-schema.d.ts.map +1 -0
  246. package/dist/lib/openapi/spec/release-plan-milestone-strategy-schema.js +40 -0
  247. package/dist/lib/openapi/spec/release-plan-milestone-strategy-schema.js.map +1 -0
  248. package/dist/lib/openapi/spec/release-plan-schema.d.ts +1449 -0
  249. package/dist/lib/openapi/spec/release-plan-schema.d.ts.map +1 -0
  250. package/dist/lib/openapi/spec/release-plan-schema.js +74 -0
  251. package/dist/lib/openapi/spec/release-plan-schema.js.map +1 -0
  252. package/dist/lib/openapi/spec/release-plan-template-id-schema.d.ts +19 -0
  253. package/dist/lib/openapi/spec/release-plan-template-id-schema.d.ts.map +1 -0
  254. package/dist/lib/openapi/spec/release-plan-template-id-schema.js +17 -0
  255. package/dist/lib/openapi/spec/release-plan-template-id-schema.js.map +1 -0
  256. package/dist/lib/openapi/spec/release-plan-template-schema.d.ts +1434 -0
  257. package/dist/lib/openapi/spec/release-plan-template-schema.d.ts.map +1 -0
  258. package/dist/lib/openapi/spec/release-plan-template-schema.js +79 -0
  259. package/dist/lib/openapi/spec/release-plan-template-schema.js.map +1 -0
  260. package/dist/lib/openapi/spec/search-features-schema.d.ts +11793 -725
  261. package/dist/lib/openapi/spec/search-features-schema.d.ts.map +1 -1
  262. package/dist/lib/openapi/spec/transition-condition-schema.d.ts +19 -0
  263. package/dist/lib/openapi/spec/transition-condition-schema.d.ts.map +1 -0
  264. package/dist/lib/openapi/spec/transition-condition-schema.js +17 -0
  265. package/dist/lib/openapi/spec/transition-condition-schema.js.map +1 -0
  266. package/dist/lib/openapi/spec/update-strategy-schema.d.ts +1 -1
  267. package/dist/lib/openapi/spec/update-strategy-schema.js +1 -1
  268. package/dist/lib/openapi/spec/update-strategy-schema.js.map +1 -1
  269. package/dist/lib/openapi/util/openapi-tags.d.ts +2 -2
  270. package/dist/lib/openapi/util/openapi-tags.js +1 -1
  271. package/dist/lib/openapi/util/openapi-tags.js.map +1 -1
  272. package/dist/lib/routes/admin-api/index.js +2 -2
  273. package/dist/lib/routes/admin-api/index.js.map +1 -1
  274. package/dist/lib/routes/admin-api/instance-admin.d.ts.map +1 -1
  275. package/dist/lib/routes/admin-api/instance-admin.js +5 -0
  276. package/dist/lib/routes/admin-api/instance-admin.js.map +1 -1
  277. package/dist/lib/routes/admin-api/strategy.js +1 -1
  278. package/dist/lib/routes/admin-api/strategy.js.map +1 -1
  279. package/dist/lib/routes/admin-api/strategy.test.js +25 -1
  280. package/dist/lib/routes/admin-api/strategy.test.js.map +1 -1
  281. package/dist/lib/routes/backstage.test.js +17 -5
  282. package/dist/lib/routes/backstage.test.js.map +1 -1
  283. package/dist/lib/routes/health-check.test.js +2 -2
  284. package/dist/lib/routes/health-check.test.js.map +1 -1
  285. package/dist/lib/routes/index.d.ts.map +1 -1
  286. package/dist/lib/routes/index.js +2 -0
  287. package/dist/lib/routes/index.js.map +1 -1
  288. package/dist/lib/routes/ready-check.d.ts +14 -0
  289. package/dist/lib/routes/ready-check.d.ts.map +1 -0
  290. package/dist/lib/routes/ready-check.js +86 -0
  291. package/dist/lib/routes/ready-check.js.map +1 -0
  292. package/dist/lib/routes/util.d.ts.map +1 -1
  293. package/dist/lib/routes/util.js +19 -1
  294. package/dist/lib/routes/util.js.map +1 -1
  295. package/dist/lib/server-impl.d.ts +9 -3
  296. package/dist/lib/server-impl.d.ts.map +1 -1
  297. package/dist/lib/server-impl.js +6 -1
  298. package/dist/lib/server-impl.js.map +1 -1
  299. package/dist/lib/services/api-token-service.d.ts +3 -2
  300. package/dist/lib/services/api-token-service.d.ts.map +1 -1
  301. package/dist/lib/services/api-token-service.js +3 -3
  302. package/dist/lib/services/api-token-service.js.map +1 -1
  303. package/dist/lib/services/index.d.ts +5 -1
  304. package/dist/lib/services/index.d.ts.map +1 -1
  305. package/dist/lib/services/index.js +16 -2
  306. package/dist/lib/services/index.js.map +1 -1
  307. package/dist/lib/services/strategy-service.d.ts +4 -1
  308. package/dist/lib/services/strategy-service.d.ts.map +1 -1
  309. package/dist/lib/services/strategy-service.js +15 -2
  310. package/dist/lib/services/strategy-service.js.map +1 -1
  311. package/dist/lib/services/user-service.d.ts.map +1 -1
  312. package/dist/lib/services/user-service.js +19 -3
  313. package/dist/lib/services/user-service.js.map +1 -1
  314. package/dist/lib/services/user-splash-service.d.ts.map +1 -1
  315. package/dist/lib/services/user-splash-service.js +7 -1
  316. package/dist/lib/services/user-splash-service.js.map +1 -1
  317. package/dist/lib/services/version-service.d.ts +2 -0
  318. package/dist/lib/services/version-service.d.ts.map +1 -1
  319. package/dist/lib/services/version-service.js.map +1 -1
  320. package/dist/lib/services/version-service.test.js +1 -0
  321. package/dist/lib/services/version-service.test.js.map +1 -1
  322. package/dist/lib/types/events.d.ts +28 -0
  323. package/dist/lib/types/events.d.ts.map +1 -1
  324. package/dist/lib/types/events.js +20 -1
  325. package/dist/lib/types/events.js.map +1 -1
  326. package/dist/lib/types/experimental.d.ts +3 -1
  327. package/dist/lib/types/experimental.d.ts.map +1 -1
  328. package/dist/lib/types/experimental.js +7 -8
  329. package/dist/lib/types/experimental.js.map +1 -1
  330. package/dist/lib/types/option.d.ts +8 -0
  331. package/dist/lib/types/option.d.ts.map +1 -1
  332. package/dist/lib/types/stores/feature-environment-store.d.ts +1 -1
  333. package/dist/lib/types/stores/feature-environment-store.d.ts.map +1 -1
  334. package/dist/lib/types/stores.d.ts +2 -0
  335. package/dist/lib/types/stores.d.ts.map +1 -1
  336. package/dist/lib/types/stores.js.map +1 -1
  337. package/dist/lib/ui-config/ui-config-controller.d.ts +18 -0
  338. package/dist/lib/ui-config/ui-config-controller.d.ts.map +1 -0
  339. package/dist/lib/ui-config/ui-config-controller.js +62 -0
  340. package/dist/lib/ui-config/ui-config-controller.js.map +1 -0
  341. package/dist/lib/ui-config/ui-config-service.d.ts +18 -0
  342. package/dist/lib/ui-config/ui-config-service.d.ts.map +1 -0
  343. package/dist/lib/ui-config/ui-config-service.js +64 -0
  344. package/dist/lib/ui-config/ui-config-service.js.map +1 -0
  345. package/dist/lib/ui-config/ui-config.test.d.ts +2 -0
  346. package/dist/lib/ui-config/ui-config.test.d.ts.map +1 -0
  347. package/dist/lib/{routes/admin-api/config.test.js → ui-config/ui-config.test.js} +6 -6
  348. package/dist/lib/ui-config/ui-config.test.js.map +1 -0
  349. package/dist/lib/util/metrics/createGauge.d.ts +17 -1
  350. package/dist/lib/util/metrics/createGauge.d.ts.map +1 -1
  351. package/dist/lib/util/metrics/createGauge.js +49 -4
  352. package/dist/lib/util/metrics/createGauge.js.map +1 -1
  353. package/dist/lib/util/random-id.js +2 -2
  354. package/dist/lib/util/random-id.js.map +1 -1
  355. package/dist/lib/util/random-id.test.d.ts +2 -0
  356. package/dist/lib/util/random-id.test.d.ts.map +1 -0
  357. package/dist/lib/util/random-id.test.js +7 -0
  358. package/dist/lib/util/random-id.test.js.map +1 -0
  359. package/dist/migrations/20210218090213-generate-server-identifier.js +2 -2
  360. package/dist/migrations/20210218090213-generate-server-identifier.js.map +1 -1
  361. package/dist/migrations/20210615115226-migrate-strategies-to-feature-strategies.js +2 -2
  362. package/dist/migrations/20210615115226-migrate-strategies-to-feature-strategies.js.map +1 -1
  363. package/dist/migrations/20250923130348-add-users-updated-at.d.ts +3 -0
  364. package/dist/migrations/20250923130348-add-users-updated-at.d.ts.map +1 -0
  365. package/dist/migrations/20250923130348-add-users-updated-at.js +40 -0
  366. package/dist/migrations/20250923130348-add-users-updated-at.js.map +1 -0
  367. package/dist/migrations/20251002095623-not-null-constraints.d.ts +3 -0
  368. package/dist/migrations/20251002095623-not-null-constraints.d.ts.map +1 -0
  369. package/dist/migrations/20251002095623-not-null-constraints.js +20 -0
  370. package/dist/migrations/20251002095623-not-null-constraints.js.map +1 -0
  371. package/dist/migrations/20251003105758-add-milestone-started-at.d.ts +3 -0
  372. package/dist/migrations/20251003105758-add-milestone-started-at.d.ts.map +1 -0
  373. package/dist/migrations/20251003105758-add-milestone-started-at.js +8 -0
  374. package/dist/migrations/20251003105758-add-milestone-started-at.js.map +1 -0
  375. package/dist/migrations/20251006111609-add-milestone-progressions.d.ts +3 -0
  376. package/dist/migrations/20251006111609-add-milestone-progressions.d.ts.map +1 -0
  377. package/dist/migrations/20251006111609-add-milestone-progressions.js +15 -0
  378. package/dist/migrations/20251006111609-add-milestone-progressions.js.map +1 -0
  379. package/dist/migrations/20251009081052-add-milestone-progression-executed-at.d.ts +3 -0
  380. package/dist/migrations/20251009081052-add-milestone-progression-executed-at.d.ts.map +1 -0
  381. package/dist/migrations/20251009081052-add-milestone-progression-executed-at.js +14 -0
  382. package/dist/migrations/20251009081052-add-milestone-progression-executed-at.js.map +1 -0
  383. package/dist/migrations/20251009132935-add-edge-node-presence.d.ts +3 -0
  384. package/dist/migrations/20251009132935-add-edge-node-presence.d.ts.map +1 -0
  385. package/dist/migrations/20251009132935-add-edge-node-presence.js +29 -0
  386. package/dist/migrations/20251009132935-add-edge-node-presence.js.map +1 -0
  387. package/dist/migrations/20251013131405-milestone-progression-uniqueness.d.ts +3 -0
  388. package/dist/migrations/20251013131405-milestone-progression-uniqueness.d.ts.map +1 -0
  389. package/dist/migrations/20251013131405-milestone-progression-uniqueness.js +9 -0
  390. package/dist/migrations/20251013131405-milestone-progression-uniqueness.js.map +1 -0
  391. package/dist/migrations/20251027094509-milestone-progression-natural-pk.d.ts +3 -0
  392. package/dist/migrations/20251027094509-milestone-progression-natural-pk.d.ts.map +1 -0
  393. package/dist/migrations/20251027094509-milestone-progression-natural-pk.js +22 -0
  394. package/dist/migrations/20251027094509-milestone-progression-natural-pk.js.map +1 -0
  395. package/dist/migrations/20251103114221-milestone-progression-paused-at.d.ts +3 -0
  396. package/dist/migrations/20251103114221-milestone-progression-paused-at.d.ts.map +1 -0
  397. package/dist/migrations/20251103114221-milestone-progression-paused-at.js +14 -0
  398. package/dist/migrations/20251103114221-milestone-progression-paused-at.js.map +1 -0
  399. package/dist/migrations/20251105153729-create-safeguards-table.d.ts +3 -0
  400. package/dist/migrations/20251105153729-create-safeguards-table.d.ts.map +1 -0
  401. package/dist/migrations/20251105153729-create-safeguards-table.js +17 -0
  402. package/dist/migrations/20251105153729-create-safeguards-table.js.map +1 -0
  403. package/dist/server-dev.js +5 -3
  404. package/dist/server-dev.js.map +1 -1
  405. package/dist/test/e2e/api/admin/context.e2e.test.js +2 -3
  406. package/dist/test/e2e/api/admin/context.e2e.test.js.map +1 -1
  407. package/dist/test/e2e/api/admin/user-admin.e2e.test.js +2 -3
  408. package/dist/test/e2e/api/admin/user-admin.e2e.test.js.map +1 -1
  409. package/dist/test/e2e/api/client/feature.optimal304.e2e.test.js +17 -41
  410. package/dist/test/e2e/api/client/feature.optimal304.e2e.test.js.map +1 -1
  411. package/dist/test/e2e/helpers/database-init.js +2 -2
  412. package/dist/test/e2e/helpers/database-init.js.map +1 -1
  413. package/dist/test/e2e/ready.e2e.test.d.ts +2 -0
  414. package/dist/test/e2e/ready.e2e.test.d.ts.map +1 -0
  415. package/dist/test/e2e/ready.e2e.test.js +66 -0
  416. package/dist/test/e2e/ready.e2e.test.js.map +1 -0
  417. package/dist/test/e2e/services/user-service.e2e.test.js +129 -99
  418. package/dist/test/e2e/services/user-service.e2e.test.js.map +1 -1
  419. package/dist/test/e2e/stores/client-application-store.e2e.test.js +0 -1
  420. package/dist/test/e2e/stores/client-application-store.e2e.test.js.map +1 -1
  421. package/dist/test/e2e/stores/feature-environment-store.e2e.test.js +3 -1
  422. package/dist/test/e2e/stores/feature-environment-store.e2e.test.js.map +1 -1
  423. package/dist/test/e2e/users/user-store.e2e.test.d.ts.map +1 -0
  424. package/dist/test/e2e/users/user-store.e2e.test.js.map +1 -0
  425. package/dist/test/e2e/users/user-updates-read-model.e2e.test.d.ts +2 -0
  426. package/dist/test/e2e/users/user-updates-read-model.e2e.test.d.ts.map +1 -0
  427. package/dist/test/e2e/users/user-updates-read-model.e2e.test.js +88 -0
  428. package/dist/test/e2e/users/user-updates-read-model.e2e.test.js.map +1 -0
  429. package/dist/test/fixtures/fake/fake-release-plan-read-model.d.ts +8 -0
  430. package/dist/test/fixtures/fake/fake-release-plan-read-model.d.ts.map +1 -0
  431. package/dist/test/fixtures/fake/fake-release-plan-read-model.js +9 -0
  432. package/dist/test/fixtures/fake/fake-release-plan-read-model.js.map +1 -0
  433. package/dist/test/fixtures/fake-impact-metrics.d.ts +12 -4
  434. package/dist/test/fixtures/fake-impact-metrics.d.ts.map +1 -1
  435. package/dist/test/fixtures/fake-impact-metrics.js +50 -26
  436. package/dist/test/fixtures/fake-impact-metrics.js.map +1 -1
  437. package/dist/test/fixtures/store.d.ts.map +1 -1
  438. package/dist/test/fixtures/store.js +1 -0
  439. package/dist/test/fixtures/store.js.map +1 -1
  440. package/frontend/build/index.html +1 -1
  441. package/frontend/build/static/{AdvancedPlayground-D2Y0O_LK.js → AdvancedPlayground-BMmRjlFK.js} +1 -1
  442. package/frontend/build/static/BackendConnections-C4TwFekS.js +1 -0
  443. package/frontend/build/static/{CreateProject-jRfRrbUO.js → CreateProject-De6TDUjF.js} +1 -1
  444. package/frontend/build/static/FeatureMetricsChart-CQOjOGdB.js +2 -0
  445. package/frontend/build/static/FeatureStaleDialog-DFBMJIHQ.js +7 -0
  446. package/frontend/build/static/FeatureViewLazyExport-CUraS5Co.js +10 -0
  447. package/frontend/build/static/{FlagMetricsChart-oDTQTkxU.js → FlagMetricsChart-BqT9hgdO.js} +2 -2
  448. package/frontend/build/static/FrontendNetworkTrafficUsage-BzwFAGbK.js +1 -0
  449. package/frontend/build/static/GridLayoutWrapper-DY9lNz0U.js +3 -0
  450. package/frontend/build/static/ImpactMetricsPage-Bqewvmqu.js +1 -0
  451. package/frontend/build/static/LazyAdminExport-DSSpZhpf.js +38 -0
  452. package/frontend/build/static/LazyProjectExport-Cd5au6uN.js +728 -0
  453. package/frontend/build/static/{LifecycleChartComponent-Dz1wdYkW.js → LifecycleChartComponent-iH7Xwal_.js} +3 -3
  454. package/frontend/build/static/LineChartComponent-BnogHewS.js +1 -0
  455. package/frontend/build/static/{MarkCompletedDialogue-Bw9Iccid.js → MarkCompletedDialogue-BOSV3MHM.js} +1 -1
  456. package/frontend/build/static/{NetworkConnectedEdges-HU923-QZ.js → NetworkConnectedEdges-d0ZBRss5.js} +1 -1
  457. package/frontend/build/static/{NetworkOverview-_igGCPCJ.js → NetworkOverview-DivQ4b83.js} +1 -1
  458. package/frontend/build/static/{NetworkPrometheusAPIWarning-BS9PGbzI.js → NetworkPrometheusAPIWarning-2jclDnfE.js} +1 -1
  459. package/frontend/build/static/{NetworkTraffic-BpNEMFBl.js → NetworkTraffic-DDSLmVgI.js} +1 -1
  460. package/frontend/build/static/NetworkTrafficUsage-DYNGGkkm.js +1 -0
  461. package/frontend/build/static/PercentageDonut-aa1oSbho.js +1 -0
  462. package/frontend/build/static/{ReactJSONEditor-DZ9l5V9S.js → ReactJSONEditor-BKB6MheT.js} +1 -1
  463. package/frontend/build/static/{RoleCell-C-hJFmul.js → RoleCell-CkV0Kf4-.js} +1 -1
  464. package/frontend/build/static/{aggregateFeatureMetrics-Dli6i5No.js → aggregateFeatureMetrics-CrQXQAeM.js} +1 -1
  465. package/frontend/build/static/{formatTickValue-D3KZyzeb.js → formatTickValue-BCAqKqmg.js} +2 -2
  466. package/frontend/build/static/index-B33kIVre.js +542 -0
  467. package/frontend/build/static/metricsFormatters-C7iN2dDH.js +1 -0
  468. package/frontend/build/static/{networkTrafficUsageHighlightPlugin-DLE_BBMN.js → networkTrafficUsageHighlightPlugin-o9kHeQ2O.js} +1 -1
  469. package/frontend/build/static/strategyCustom-Db-ZtYWl.svg +23 -0
  470. package/frontend/build/static/strategyDefault-LnSyH2eZ.svg +17 -0
  471. package/frontend/build/static/strategyGradual-oCA99tj3.svg +18 -0
  472. package/frontend/build/static/strategyHosts-4lVYC2Bf.svg +23 -0
  473. package/frontend/build/static/strategyIPs-BHaXsOYV.svg +24 -0
  474. package/frontend/build/static/strategyOn-CX-xL0oK.svg +18 -0
  475. package/frontend/build/static/{useApiTokens-DNIDLJlc.js → useApiTokens-eXyUbKcO.js} +1 -1
  476. package/frontend/package.json +3 -4
  477. package/package.json +7 -9
  478. package/dist/lib/routes/admin-api/config.d.ts +0 -24
  479. package/dist/lib/routes/admin-api/config.d.ts.map +0 -1
  480. package/dist/lib/routes/admin-api/config.js +0 -114
  481. package/dist/lib/routes/admin-api/config.js.map +0 -1
  482. package/dist/lib/routes/admin-api/config.test.d.ts +0 -2
  483. package/dist/lib/routes/admin-api/config.test.d.ts.map +0 -1
  484. package/dist/lib/routes/admin-api/config.test.js.map +0 -1
  485. package/dist/test/e2e/stores/user-store.e2e.test.d.ts.map +0 -1
  486. package/dist/test/e2e/stores/user-store.e2e.test.js.map +0 -1
  487. package/frontend/build/static/BackendConnections-C9HcQ9To.js +0 -1
  488. package/frontend/build/static/ChartItem-COMyVdgD.js +0 -1
  489. package/frontend/build/static/FeatureMetricsChart-CQkGp91T.js +0 -2
  490. package/frontend/build/static/FeatureStaleDialog-DKeGFuL1.js +0 -7
  491. package/frontend/build/static/FeatureViewLazyExport-CgntSCvS.js +0 -10
  492. package/frontend/build/static/FrontendNetworkTrafficUsage-E4pIeMFQ.js +0 -1
  493. package/frontend/build/static/ImpactMetricsPage-B3STis_H.js +0 -3
  494. package/frontend/build/static/LazyAdminExport-CsCsRIwk.js +0 -38
  495. package/frontend/build/static/LazyProjectExport-DkN0UegC.js +0 -728
  496. package/frontend/build/static/LineChartComponent-DG1LdcL_.js +0 -1
  497. package/frontend/build/static/NetworkTrafficUsage-bSUVPjoc.js +0 -1
  498. package/frontend/build/static/index-A5We7bvX.js +0 -542
  499. package/frontend/build/static/merge-C7IT0rZd.svg +0 -3
  500. /package/dist/test/e2e/{stores → users}/user-store.e2e.test.d.ts +0 -0
  501. /package/dist/test/e2e/{stores → users}/user-store.e2e.test.js +0 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=batch-histogram.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-histogram.test.d.ts","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/impact/batch-histogram.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,137 @@
1
+ import { Registry } from 'prom-client';
2
+ import { BatchHistogram } from './batch-histogram.js';
3
+ describe('BatchHistogram', () => {
4
+ let registry;
5
+ let histogram;
6
+ beforeEach(() => {
7
+ registry = new Registry();
8
+ histogram = new BatchHistogram({
9
+ name: 'test_histogram',
10
+ help: 'Test histogram',
11
+ registry: registry,
12
+ });
13
+ });
14
+ test('should record batch data and preserve bucket distribution', async () => {
15
+ histogram.recordBatch({ label1: 'value1' }, {
16
+ count: 10,
17
+ sum: 15.5,
18
+ buckets: [
19
+ { le: 0.1, count: 2 },
20
+ { le: 0.5, count: 5 },
21
+ { le: 1, count: 7 },
22
+ { le: 2.5, count: 9 },
23
+ { le: 5, count: 10 },
24
+ { le: '+Inf', count: 10 },
25
+ ],
26
+ });
27
+ const metrics = await registry.metrics();
28
+ expect(metrics).toContain('# HELP test_histogram Test histogram');
29
+ expect(metrics).toContain('# TYPE test_histogram histogram');
30
+ expect(metrics).toMatch(/test_histogram_bucket{label1="value1",le="0.1"} 2/);
31
+ expect(metrics).toMatch(/test_histogram_bucket{label1="value1",le="0.5"} 5/);
32
+ expect(metrics).toMatch(/test_histogram_bucket{label1="value1",le="1"} 7/);
33
+ expect(metrics).toMatch(/test_histogram_bucket{label1="value1",le="2.5"} 9/);
34
+ expect(metrics).toMatch(/test_histogram_bucket{label1="value1",le="5"} 10/);
35
+ expect(metrics).toMatch(/test_histogram_bucket{label1="value1",le="\+Inf"} 10/);
36
+ expect(metrics).toMatch(/test_histogram_sum{label1="value1"} 15\.5/);
37
+ expect(metrics).toMatch(/test_histogram_count{label1="value1"} 10/);
38
+ });
39
+ test('should aggregate multiple batches correctly', async () => {
40
+ histogram.recordBatch({ label1: 'value1' }, {
41
+ count: 5,
42
+ sum: 7.5,
43
+ buckets: [
44
+ { le: 0.1, count: 1 },
45
+ { le: 0.5, count: 3 },
46
+ { le: 1, count: 4 },
47
+ { le: 2.5, count: 5 },
48
+ { le: 5, count: 5 },
49
+ { le: '+Inf', count: 5 },
50
+ ],
51
+ });
52
+ histogram.recordBatch({ label1: 'value1' }, {
53
+ count: 3,
54
+ sum: 4.2,
55
+ buckets: [
56
+ { le: 0.1, count: 0 },
57
+ { le: 0.5, count: 1 },
58
+ { le: 1, count: 2 },
59
+ { le: 2.5, count: 3 },
60
+ { le: 5, count: 3 },
61
+ { le: '+Inf', count: 3 },
62
+ ],
63
+ });
64
+ const metrics = await registry.metrics();
65
+ expect(metrics).toMatch(/test_histogram_bucket{label1="value1",le="0.1"} 1/);
66
+ expect(metrics).toMatch(/test_histogram_bucket{label1="value1",le="0.5"} 4/);
67
+ expect(metrics).toMatch(/test_histogram_bucket{label1="value1",le="1"} 6/);
68
+ expect(metrics).toMatch(/test_histogram_bucket{label1="value1",le="2.5"} 8/);
69
+ expect(metrics).toMatch(/test_histogram_bucket{label1="value1",le="5"} 8/);
70
+ expect(metrics).toMatch(/test_histogram_bucket{label1="value1",le="\+Inf"} 8/);
71
+ expect(metrics).toMatch(/test_histogram_sum{label1="value1"} 11\.7/);
72
+ expect(metrics).toMatch(/test_histogram_count{label1="value1"} 8/);
73
+ });
74
+ test('should record different labels separately and handle special characters', async () => {
75
+ histogram.recordBatch({ service: 'api', url: 'http://example.com:8080/api' }, {
76
+ count: 3,
77
+ sum: 1.5,
78
+ buckets: [
79
+ { le: 1, count: 2 },
80
+ { le: '+Inf', count: 3 },
81
+ ],
82
+ });
83
+ histogram.recordBatch({ service: 'web', url: 'https://app.example.com/dashboard' }, {
84
+ count: 2,
85
+ sum: 3.0,
86
+ buckets: [
87
+ { le: 1, count: 1 },
88
+ { le: '+Inf', count: 2 },
89
+ ],
90
+ });
91
+ const metrics = await registry.metrics();
92
+ expect(metrics).toMatch(/test_histogram_bucket{service="api",url="http:\/\/example\.com:8080\/api",le="1"} 2/);
93
+ expect(metrics).toMatch(/test_histogram_bucket{service="api",url="http:\/\/example\.com:8080\/api",le="\+Inf"} 3/);
94
+ expect(metrics).toMatch(/test_histogram_sum{service="api",url="http:\/\/example\.com:8080\/api"} 1\.5/);
95
+ expect(metrics).toMatch(/test_histogram_count{service="api",url="http:\/\/example\.com:8080\/api"} 3/);
96
+ // Web service metrics (with HTTPS URL)
97
+ expect(metrics).toMatch(/test_histogram_bucket{service="web",url="https:\/\/app\.example\.com\/dashboard",le="1"} 1/);
98
+ expect(metrics).toMatch(/test_histogram_bucket{service="web",url="https:\/\/app\.example\.com\/dashboard",le="\+Inf"} 2/);
99
+ expect(metrics).toMatch(/test_histogram_sum{service="web",url="https:\/\/app\.example\.com\/dashboard"} 3/);
100
+ expect(metrics).toMatch(/test_histogram_count{service="web",url="https:\/\/app\.example\.com\/dashboard"} 2/);
101
+ });
102
+ test('should handle "+Inf" string from SDK serialization', async () => {
103
+ histogram.recordBatch({ client: 'sdk' }, {
104
+ count: 5,
105
+ sum: 12.3,
106
+ buckets: [
107
+ { le: 1, count: 3 },
108
+ { le: '+Inf', count: 5 }, // String instead of Infinity
109
+ ],
110
+ });
111
+ const metrics = await registry.metrics();
112
+ expect(metrics).toMatch(/test_histogram_bucket{client="sdk",le="1"} 3/);
113
+ expect(metrics).toMatch(/test_histogram_bucket{client="sdk",le="\+Inf"} 5/);
114
+ expect(metrics).toMatch(/test_histogram_sum{client="sdk"} 12\.3/);
115
+ expect(metrics).toMatch(/test_histogram_count{client="sdk"} 5/);
116
+ });
117
+ test('should handle unsorted bucket input', async () => {
118
+ histogram.recordBatch({ service: 'test' }, {
119
+ count: 5,
120
+ sum: 7.5,
121
+ buckets: [
122
+ { le: '+Inf', count: 5 }, // Infinity first (unsorted)
123
+ { le: 2.5, count: 4 }, // Out of order
124
+ { le: 0.5, count: 2 }, // Out of order
125
+ { le: 1, count: 3 }, // Out of order
126
+ ],
127
+ });
128
+ const metrics = await registry.metrics();
129
+ expect(metrics).toMatch(/test_histogram_bucket{service="test",le="0.5"} 2/);
130
+ expect(metrics).toMatch(/test_histogram_bucket{service="test",le="1"} 3/);
131
+ expect(metrics).toMatch(/test_histogram_bucket{service="test",le="2.5"} 4/);
132
+ expect(metrics).toMatch(/test_histogram_bucket{service="test",le="\+Inf"} 5/);
133
+ expect(metrics).toMatch(/test_histogram_sum{service="test"} 7\.5/);
134
+ expect(metrics).toMatch(/test_histogram_count{service="test"} 5/);
135
+ });
136
+ });
137
+ //# sourceMappingURL=batch-histogram.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-histogram.test.js","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/impact/batch-histogram.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC5B,IAAI,QAAkB,CAAC;IACvB,IAAI,SAAyB,CAAC;IAE9B,UAAU,CAAC,GAAG,EAAE;QACZ,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,SAAS,GAAG,IAAI,cAAc,CAAC;YAC3B,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,QAAQ;SACrB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,SAAS,CAAC,WAAW,CACjB,EAAE,MAAM,EAAE,QAAQ,EAAE,EACpB;YACI,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,IAAI;YACT,OAAO,EAAE;gBACL,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;gBACrB,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;gBACrB,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;gBACnB,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;gBACrB,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBACpB,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;aAC5B;SACJ,CACJ,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEzC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QAClE,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAE7D,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,mDAAmD,CACtD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,mDAAmD,CACtD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,iDAAiD,CACpD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,mDAAmD,CACtD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,kDAAkD,CACrD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,sDAAsD,CACzD,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QACrE,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,SAAS,CAAC,WAAW,CACjB,EAAE,MAAM,EAAE,QAAQ,EAAE,EACpB;YACI,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,GAAG;YACR,OAAO,EAAE;gBACL,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;gBACrB,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;gBACrB,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;gBACnB,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;gBACrB,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;gBACnB,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;aAC3B;SACJ,CACJ,CAAC;QAEF,SAAS,CAAC,WAAW,CACjB,EAAE,MAAM,EAAE,QAAQ,EAAE,EACpB;YACI,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,GAAG;YACR,OAAO,EAAE;gBACL,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;gBACrB,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;gBACrB,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;gBACnB,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;gBACrB,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;gBACnB,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;aAC3B;SACJ,CACJ,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEzC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,mDAAmD,CACtD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,mDAAmD,CACtD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,iDAAiD,CACpD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,mDAAmD,CACtD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,iDAAiD,CACpD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,qDAAqD,CACxD,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QACrE,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,SAAS,CAAC,WAAW,CACjB,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,6BAA6B,EAAE,EACtD;YACI,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,GAAG;YACR,OAAO,EAAE;gBACL,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;gBACnB,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;aAC3B;SACJ,CACJ,CAAC;QAEF,SAAS,CAAC,WAAW,CACjB,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,mCAAmC,EAAE,EAC5D;YACI,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,GAAG;YACR,OAAO,EAAE;gBACL,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;gBACnB,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;aAC3B;SACJ,CACJ,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEzC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,qFAAqF,CACxF,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,yFAAyF,CAC5F,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,8EAA8E,CACjF,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,6EAA6E,CAChF,CAAC;QAEF,uCAAuC;QACvC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,4FAA4F,CAC/F,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,gGAAgG,CACnG,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,kFAAkF,CACrF,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,oFAAoF,CACvF,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,SAAS,CAAC,WAAW,CACjB,EAAE,MAAM,EAAE,KAAK,EAAE,EACjB;YACI,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,IAAI;YACT,OAAO,EAAE;gBACL,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;gBACnB,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,6BAA6B;aAC1D;SACJ,CACJ,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEzC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,kDAAkD,CACrD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;QAClE,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,SAAS,CAAC,WAAW,CACjB,EAAE,OAAO,EAAE,MAAM,EAAE,EACnB;YACI,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,GAAG;YACR,OAAO,EAAE;gBACL,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,4BAA4B;gBACtD,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,eAAe;gBACtC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,eAAe;gBACtC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,eAAe;aACvC;SACJ,CACJ,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEzC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,kDAAkD,CACrD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,gDAAgD,CACnD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,kDAAkD,CACrD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACnB,oDAAoD,CACvD,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;QACnE,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -4,5 +4,7 @@ export declare const CLIENT_ERROR_COUNT = "client_error_count";
4
4
  export declare const SERVER_ERROR_COUNT = "server_error_count";
5
5
  export declare const REQUEST_COUNT = "request_count";
6
6
  export declare const HEAP_MEMORY_TOTAL = "heap_memory_total";
7
+ export declare const REQUEST_TIME_MS = "request_time_ms";
8
+ export declare const SCHEDULER_JOB_TIME_SECONDS = "scheduler_job_time_seconds";
7
9
  export declare const defineImpactMetrics: (flagResolver: IFlagResolver) => void;
8
10
  //# sourceMappingURL=define-impact-metrics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"define-impact-metrics.d.ts","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/impact/define-impact-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAC7C,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD,eAAO,MAAM,mBAAmB,GAAI,cAAc,aAAa,SAqB9D,CAAC"}
1
+ {"version":3,"file":"define-impact-metrics.d.ts","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/impact/define-impact-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAC7C,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AACrD,eAAO,MAAM,eAAe,oBAAoB,CAAC;AACjD,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAEvE,eAAO,MAAM,mBAAmB,GAAI,cAAc,aAAa,SA+B9D,CAAC"}
@@ -3,11 +3,15 @@ export const CLIENT_ERROR_COUNT = 'client_error_count';
3
3
  export const SERVER_ERROR_COUNT = 'server_error_count';
4
4
  export const REQUEST_COUNT = 'request_count';
5
5
  export const HEAP_MEMORY_TOTAL = 'heap_memory_total';
6
+ export const REQUEST_TIME_MS = 'request_time_ms';
7
+ export const SCHEDULER_JOB_TIME_SECONDS = 'scheduler_job_time_seconds';
6
8
  export const defineImpactMetrics = (flagResolver) => {
7
9
  flagResolver.impactMetrics?.defineCounter(FEAUTRE_LINK_COUNT, 'Count of feature links');
8
10
  flagResolver.impactMetrics?.defineCounter(CLIENT_ERROR_COUNT, 'Count of 4xx errors');
9
11
  flagResolver.impactMetrics?.defineCounter(SERVER_ERROR_COUNT, 'Count of 5xx errors');
10
12
  flagResolver.impactMetrics?.defineCounter(REQUEST_COUNT, 'Count of all requests');
11
13
  flagResolver.impactMetrics?.defineGauge(HEAP_MEMORY_TOTAL, 'Total heap memory used by the application process');
14
+ flagResolver.impactMetrics?.defineHistogram(REQUEST_TIME_MS, 'Request handling time', [10, 25, 50, 100, 200, 500, 1000, 2000, 5000]);
15
+ flagResolver.impactMetrics?.defineHistogram(SCHEDULER_JOB_TIME_SECONDS, 'Job execution time', [1, 2, 3, 4, 5, 7, 10, 15, 20, 30, 45, 60, 120]);
12
16
  };
13
17
  //# sourceMappingURL=define-impact-metrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"define-impact-metrics.js","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/impact/define-impact-metrics.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAC7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAErD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,YAA2B,EAAE,EAAE;IAC/D,YAAY,CAAC,aAAa,EAAE,aAAa,CACrC,kBAAkB,EAClB,wBAAwB,CAC3B,CAAC;IACF,YAAY,CAAC,aAAa,EAAE,aAAa,CACrC,kBAAkB,EAClB,qBAAqB,CACxB,CAAC;IACF,YAAY,CAAC,aAAa,EAAE,aAAa,CACrC,kBAAkB,EAClB,qBAAqB,CACxB,CAAC;IACF,YAAY,CAAC,aAAa,EAAE,aAAa,CACrC,aAAa,EACb,uBAAuB,CAC1B,CAAC;IACF,YAAY,CAAC,aAAa,EAAE,WAAW,CACnC,iBAAiB,EACjB,mDAAmD,CACtD,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"define-impact-metrics.js","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/impact/define-impact-metrics.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAC7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AACrD,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC;AACjD,MAAM,CAAC,MAAM,0BAA0B,GAAG,4BAA4B,CAAC;AAEvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,YAA2B,EAAE,EAAE;IAC/D,YAAY,CAAC,aAAa,EAAE,aAAa,CACrC,kBAAkB,EAClB,wBAAwB,CAC3B,CAAC;IACF,YAAY,CAAC,aAAa,EAAE,aAAa,CACrC,kBAAkB,EAClB,qBAAqB,CACxB,CAAC;IACF,YAAY,CAAC,aAAa,EAAE,aAAa,CACrC,kBAAkB,EAClB,qBAAqB,CACxB,CAAC;IACF,YAAY,CAAC,aAAa,EAAE,aAAa,CACrC,aAAa,EACb,uBAAuB,CAC1B,CAAC;IACF,YAAY,CAAC,aAAa,EAAE,WAAW,CACnC,iBAAiB,EACjB,mDAAmD,CACtD,CAAC;IACF,YAAY,CAAC,aAAa,EAAE,eAAe,CACvC,eAAe,EACf,uBAAuB,EACvB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAChD,CAAC;IACF,YAAY,CAAC,aAAa,EAAE,eAAe,CACvC,0BAA0B,EAC1B,oBAAoB,EACpB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAClD,CAAC;AACN,CAAC,CAAC"}
@@ -128,4 +128,53 @@ test('should store impact metrics sent via bulk metrics endpoint', async () => {
128
128
  expect(metricsText).toContain('# TYPE unleash_counter_bulk_counter counter');
129
129
  expect(metricsText).toMatch(/unleash_counter_bulk_counter{unleash_source="bulk",unleash_origin="sdk"} 15/);
130
130
  });
131
+ test('should store histogram metrics with batch data', async () => {
132
+ await sendImpactMetrics([
133
+ {
134
+ name: 'response_time',
135
+ help: 'Response time histogram',
136
+ type: 'histogram',
137
+ samples: [
138
+ {
139
+ labels: { foo: 'bar' },
140
+ count: 10,
141
+ sum: 8.5,
142
+ buckets: [
143
+ { le: 1, count: 7 },
144
+ { le: '+Inf', count: 10 },
145
+ ],
146
+ },
147
+ ],
148
+ },
149
+ ]);
150
+ await sendImpactMetrics([
151
+ {
152
+ name: 'response_time',
153
+ help: 'Response time histogram',
154
+ type: 'histogram',
155
+ samples: [
156
+ {
157
+ labels: { foo: 'bar' },
158
+ count: 5,
159
+ sum: 3.2,
160
+ buckets: [
161
+ { le: 1, count: 3 },
162
+ { le: '+Inf', count: 5 },
163
+ ],
164
+ },
165
+ ],
166
+ },
167
+ ]);
168
+ const response = await app.request
169
+ .get('/internal-backstage/impact/metrics')
170
+ .expect('Content-Type', /text/)
171
+ .expect(200);
172
+ const metricsText = response.text;
173
+ expect(metricsText).toContain('# HELP unleash_histogram_response_time Response time histogram');
174
+ expect(metricsText).toContain('# TYPE unleash_histogram_response_time histogram');
175
+ expect(metricsText).toContain('unleash_histogram_response_time_bucket{unleash_foo="bar",unleash_origin="sdk",le="1"} 10');
176
+ expect(metricsText).toContain('unleash_histogram_response_time_bucket{unleash_foo="bar",unleash_origin="sdk",le="+Inf"} 15');
177
+ expect(metricsText).toContain('unleash_histogram_response_time_sum{unleash_foo="bar",unleash_origin="sdk"} 11.7');
178
+ expect(metricsText).toContain('unleash_histogram_response_time_count{unleash_foo="bar",unleash_origin="sdk"} 15');
179
+ });
131
180
  //# sourceMappingURL=impact-metrics.e2e.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"impact-metrics.e2e.test.js","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/impact/impact-metrics.e2e.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"impact-metrics.e2e.test.js","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/impact/impact-metrics.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,40 @@
1
1
  import { Counter, Gauge, type Registry } from 'prom-client';
2
- export interface MetricSample {
2
+ import { BatchHistogram } from './batch-histogram.js';
3
+ export interface NumericMetricSample {
3
4
  labels?: Record<string, string | number>;
4
5
  value: number;
5
6
  }
6
- export interface Metric {
7
+ export interface BucketMetricSample {
8
+ labels?: Record<string, string | number>;
9
+ count: number;
10
+ sum: number;
11
+ buckets: Array<{
12
+ le: number | '+Inf';
13
+ count: number;
14
+ }>;
15
+ }
16
+ export interface NumericMetric {
7
17
  name: string;
8
18
  help: string;
9
19
  type: 'counter' | 'gauge';
10
- samples: MetricSample[];
20
+ samples: NumericMetricSample[];
21
+ }
22
+ export interface BucketMetric {
23
+ name: string;
24
+ help: string;
25
+ type: 'histogram';
26
+ samples: BucketMetricSample[];
11
27
  }
28
+ export type Metric = NumericMetric | BucketMetric;
12
29
  export declare class MetricsTranslator {
13
30
  private registry;
14
31
  constructor(registry: Registry);
15
32
  sanitizeName(name: string): string;
16
33
  private hasNewLabels;
34
+ private hasNewBuckets;
17
35
  private transformLabels;
18
36
  private addOriginLabel;
19
- translateMetric(metric: Metric): Counter<string> | Gauge<string> | null;
37
+ translateMetric(metric: Metric): Counter<string> | Gauge<string> | BatchHistogram | null;
20
38
  translateMetrics(metrics: Metric[]): Registry;
21
39
  serializeMetrics(): Promise<string>;
22
40
  translateAndSerializeMetrics(metrics: Metric[]): Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-translator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/impact/metrics-translator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,WAAW,YAAY;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,OAAO,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,QAAQ,CAAW;gBAEf,QAAQ,EAAE,QAAQ;IAI9B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQlC,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,cAAc;IAStB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI;IAyFvE,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ;IAQ7C,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAInE"}
1
+ {"version":3,"file":"metrics-translator.d.ts","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/impact/metrics-translator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,MAAM,MAAM,MAAM,GAAG,aAAa,GAAG,YAAY,CAAC;AAElD,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,QAAQ,CAAW;gBAEf,QAAQ,EAAE,QAAQ;IAI9B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAMlC,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,cAAc;IAStB,eAAe,CACX,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,cAAc,GAAG,IAAI;IA0I1D,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ;IAQ7C,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAInE"}
@@ -1,17 +1,29 @@
1
1
  import { Counter, Gauge } from 'prom-client';
2
+ import { BatchHistogram } from './batch-histogram.js';
2
3
  export class MetricsTranslator {
3
4
  constructor(registry) {
4
5
  this.registry = registry;
5
6
  }
6
7
  sanitizeName(name) {
7
8
  const regex = /[^a-zA-Z0-9_]/g;
8
- const sanitized = name.replace(regex, '_');
9
- return sanitized;
9
+ return name.replace(regex, '_');
10
10
  }
11
11
  hasNewLabels(existingMetric, newLabelNames) {
12
12
  const existingLabelNames = existingMetric.labelNames || [];
13
13
  return newLabelNames.some((label) => !existingLabelNames.includes(label));
14
14
  }
15
+ hasNewBuckets(existingHistogram, newBuckets) {
16
+ const existingBoundaries = existingHistogram.bucketBoundaries;
17
+ if (existingBoundaries.size !== newBuckets.length) {
18
+ return true;
19
+ }
20
+ for (const bucket of newBuckets) {
21
+ if (!existingBoundaries.has(bucket.le)) {
22
+ return true;
23
+ }
24
+ }
25
+ return false;
26
+ }
15
27
  transformLabels(labels) {
16
28
  return Object.fromEntries(Object.entries(labels).map(([labelKey, value]) => [
17
29
  `unleash_${this.sanitizeName(labelKey)}`,
@@ -94,6 +106,50 @@ export class MetricsTranslator {
94
106
  }
95
107
  return gauge;
96
108
  }
109
+ else if (metric.type === 'histogram') {
110
+ if (!metric.samples || metric.samples.length === 0) {
111
+ return null;
112
+ }
113
+ let histogram;
114
+ if (existingMetric && existingMetric instanceof BatchHistogram) {
115
+ const firstSample = metric.samples[0]; // all samples should have same buckets
116
+ const needsRecreation = !firstSample?.buckets ||
117
+ this.hasNewLabels(existingMetric, labelNames) ||
118
+ this.hasNewBuckets(existingMetric, firstSample.buckets);
119
+ if (needsRecreation) {
120
+ this.registry.removeSingleMetric(prefixedName);
121
+ histogram = new BatchHistogram({
122
+ name: prefixedName,
123
+ help: metric.help,
124
+ registry: this.registry,
125
+ labelNames,
126
+ });
127
+ }
128
+ else {
129
+ histogram = existingMetric;
130
+ }
131
+ }
132
+ else {
133
+ histogram = new BatchHistogram({
134
+ name: prefixedName,
135
+ help: metric.help,
136
+ registry: this.registry,
137
+ labelNames,
138
+ });
139
+ }
140
+ for (const sample of metric.samples) {
141
+ const transformedLabels = this.transformLabels({
142
+ ...sample.labels,
143
+ origin: sample.labels?.origin || 'sdk',
144
+ });
145
+ histogram.recordBatch(transformedLabels, {
146
+ count: sample.count,
147
+ sum: sample.sum,
148
+ buckets: sample.buckets,
149
+ });
150
+ }
151
+ return histogram;
152
+ }
97
153
  return null;
98
154
  }
99
155
  translateMetrics(metrics) {
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-translator.js","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/impact/metrics-translator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics-translator.js","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/impact/metrics-translator.ts"],"names":[],"mappings":"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"}
@@ -149,10 +149,27 @@ describe('MetricsTranslator', () => {
149
149
  },
150
150
  ],
151
151
  },
152
+ {
153
+ name: 'histogram_with_labels',
154
+ help: 'histogram with labels',
155
+ type: 'histogram',
156
+ samples: [
157
+ {
158
+ labels: { service: 'api' },
159
+ count: 5,
160
+ sum: 2.5,
161
+ buckets: [
162
+ { le: 1, count: 3 },
163
+ { le: '+Inf', count: 5 },
164
+ ],
165
+ },
166
+ ],
167
+ },
152
168
  ];
153
169
  const result1 = await translator.translateAndSerializeMetrics(metrics1);
154
170
  expect(result1).toContain('unleash_counter_counter_with_labels{unleash_foo="bar",unleash_origin="sdk"} 5');
155
171
  expect(result1).toContain('unleash_gauge_gauge_with_labels{unleash_env="prod",unleash_origin="sdk"} 10');
172
+ expect(result1).toContain('unleash_histogram_histogram_with_labels_count{unleash_origin="sdk",unleash_service="api"} 5');
156
173
  const metrics2 = [
157
174
  {
158
175
  name: 'counter_with_labels',
@@ -176,10 +193,76 @@ describe('MetricsTranslator', () => {
176
193
  },
177
194
  ],
178
195
  },
196
+ {
197
+ name: 'histogram_with_labels',
198
+ help: 'histogram with labels',
199
+ type: 'histogram',
200
+ buckets: [1],
201
+ samples: [
202
+ {
203
+ labels: { service: 'api', region: 'us-east' }, // Added a new label
204
+ count: 3,
205
+ sum: 1.8,
206
+ buckets: [
207
+ { le: 1, count: 2 },
208
+ { le: '+Inf', count: 3 },
209
+ ],
210
+ },
211
+ ],
212
+ },
179
213
  ];
180
214
  const result2 = await translator.translateAndSerializeMetrics(metrics2);
181
215
  expect(result2).toContain('unleash_counter_counter_with_labels{unleash_foo="bar",unleash_baz="qux",unleash_origin="sdk"} 15');
182
216
  expect(result2).toContain('unleash_gauge_gauge_with_labels{unleash_env="prod",unleash_region="us-east",unleash_origin="sdk"} 20');
217
+ expect(result2).toContain('unleash_histogram_histogram_with_labels_count{unleash_origin="sdk",unleash_region="us-east",unleash_service="api"} 3');
218
+ expect(result2).not.toContain('unleash_histogram_histogram_with_labels_count{unleash_origin="sdk",unleash_service="api"} 5');
219
+ });
220
+ it('should handle histogram bucket changes', async () => {
221
+ const registry = new Registry();
222
+ const translator = new MetricsTranslator(registry);
223
+ // Initial histogram with 2 buckets
224
+ const metrics1 = [
225
+ {
226
+ name: 'test_histogram',
227
+ help: 'test histogram',
228
+ type: 'histogram',
229
+ samples: [
230
+ {
231
+ count: 5,
232
+ sum: 2.5,
233
+ buckets: [
234
+ { le: 1, count: 3 },
235
+ { le: '+Inf', count: 5 },
236
+ ],
237
+ },
238
+ ],
239
+ },
240
+ ];
241
+ const result1 = await translator.translateAndSerializeMetrics(metrics1);
242
+ expect(result1).toContain('unleash_histogram_test_histogram_bucket{unleash_origin="sdk",le="1"} 3');
243
+ expect(result1).toContain('unleash_histogram_test_histogram_count{unleash_origin="sdk"} 5');
244
+ // Same histogram with different bucket (0.5 instead of 1)
245
+ const metrics2 = [
246
+ {
247
+ name: 'test_histogram',
248
+ help: 'test histogram',
249
+ type: 'histogram',
250
+ samples: [
251
+ {
252
+ count: 7,
253
+ sum: 3.5,
254
+ buckets: [
255
+ { le: 0.5, count: 4 }, // Different bucket boundary
256
+ { le: '+Inf', count: 7 },
257
+ ],
258
+ },
259
+ ],
260
+ },
261
+ ];
262
+ const result2 = await translator.translateAndSerializeMetrics(metrics2);
263
+ expect(result2).toContain('unleash_histogram_test_histogram_bucket{unleash_origin="sdk",le="0.5"} 4');
264
+ expect(result2).toContain('unleash_histogram_test_histogram_count{unleash_origin="sdk"} 7');
265
+ expect(result2).not.toContain('unleash_histogram_test_histogram_count{unleash_origin="sdk"} 5');
183
266
  });
184
267
  });
185
268
  //# sourceMappingURL=metrics-translator.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-translator.test.js","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/impact/metrics-translator.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics-translator.test.js","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/impact/metrics-translator.test.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ export declare const applicationSchema: joi.ObjectSchema<any>;
13
13
  export declare const customMetricSchema: joi.ObjectSchema<any>;
14
14
  export declare const customMetricsSchema: joi.ObjectSchema<any>;
15
15
  export declare const metricSampleSchema: joi.ObjectSchema<any>;
16
+ export declare const histogramSampleSchema: joi.ObjectSchema<any>;
16
17
  export declare const impactMetricSchema: joi.ObjectSchema<any>;
17
18
  export declare const impactMetricsSchema: joi.ArraySchema<any[]>;
18
19
  export declare const batchMetricsSchema: joi.ObjectSchema<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/shared/schema.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAY9D,MAAM,MAAM,sBAAsB,GAAG;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,0CAe1B,CAAC;AAEP,eAAO,MAAM,sBAAsB,uBAW7B,CAAC;AACP,eAAO,MAAM,0BAA0B,wBAG3B,CAAC;AAEb,eAAO,MAAM,iBAAiB,uBAexB,CAAC;AAEP,eAAO,MAAM,kBAAkB,uBAOzB,CAAC;AAEP,eAAO,MAAM,mBAAmB,uBAK1B,CAAC;AAEP,eAAO,MAAM,kBAAkB,uBAYzB,CAAC;AAEP,eAAO,MAAM,kBAAkB,uBAQzB,CAAC;AAEP,eAAO,MAAM,mBAAmB,wBAGpB,CAAC;AAEb,eAAO,MAAM,kBAAkB,uBAMzB,CAAC;AAEP,eAAO,MAAM,oBAAoB,uBAa3B,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../src/lib/features/metrics/shared/schema.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAY9D,MAAM,MAAM,sBAAsB,GAAG;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,0CAe1B,CAAC;AAEP,eAAO,MAAM,sBAAsB,uBAW7B,CAAC;AACP,eAAO,MAAM,0BAA0B,wBAG3B,CAAC;AAEb,eAAO,MAAM,iBAAiB,uBAexB,CAAC;AAEP,eAAO,MAAM,kBAAkB,uBAOzB,CAAC;AAEP,eAAO,MAAM,mBAAmB,uBAK1B,CAAC;AAEP,eAAO,MAAM,kBAAkB,uBAYzB,CAAC;AAEP,eAAO,MAAM,qBAAqB,uBAyB5B,CAAC;AAEP,eAAO,MAAM,kBAAkB,uBAazB,CAAC;AAEP,eAAO,MAAM,mBAAmB,wBAGpB,CAAC;AAEb,eAAO,MAAM,kBAAkB,uBAMzB,CAAC;AAEP,eAAO,MAAM,oBAAoB,uBAa3B,CAAC"}
@@ -79,6 +79,27 @@ export const metricSampleSchema = joi
79
79
  .pattern(joi.string(), joi.alternatives().try(joi.string(), joi.number()))
80
80
  .optional(),
81
81
  });
82
+ export const histogramSampleSchema = joi
83
+ .object()
84
+ .options({ stripUnknown: true })
85
+ .keys({
86
+ count: joi.number().required(),
87
+ sum: joi.number().required(),
88
+ buckets: joi
89
+ .array()
90
+ .items(joi.object({
91
+ le: joi
92
+ .alternatives()
93
+ .try(joi.number(), joi.string().valid('+Inf'))
94
+ .required(),
95
+ count: joi.number().required(),
96
+ }))
97
+ .required(),
98
+ labels: joi
99
+ .object()
100
+ .pattern(joi.string(), joi.alternatives().try(joi.string(), joi.number()))
101
+ .optional(),
102
+ });
82
103
  export const impactMetricSchema = joi
83
104
  .object()
84
105
  .options({ stripUnknown: true })
@@ -86,7 +107,12 @@ export const impactMetricSchema = joi
86
107
  name: joi.string().required(),
87
108
  help: joi.string().required(),
88
109
  type: joi.string().required(),
89
- samples: joi.array().items(metricSampleSchema).required(),
110
+ buckets: joi.array().items(joi.number()).optional(),
111
+ samples: joi.when('type', {
112
+ is: 'histogram',
113
+ then: joi.array().items(histogramSampleSchema).required(),
114
+ otherwise: joi.array().items(metricSampleSchema).required(),
115
+ }),
90
116
  });
91
117
  export const impactMetricsSchema = joi
92
118
  .array()