@oneuptime/common 14.0.9 → 14.0.11

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 (1146) hide show
  1. package/Models/DatabaseModels/AIConversation.ts +127 -1
  2. package/Models/DatabaseModels/AutoRemediationSuggestion.ts +60 -0
  3. package/Models/DatabaseModels/CephCluster.ts +225 -0
  4. package/Models/DatabaseModels/CloudResource.ts +12 -0
  5. package/Models/DatabaseModels/DatabaseServer.ts +225 -0
  6. package/Models/DatabaseModels/DockerHost.ts +225 -0
  7. package/Models/DatabaseModels/DockerSwarmCluster.ts +225 -0
  8. package/Models/DatabaseModels/GlobalConfig.ts +1 -1
  9. package/Models/DatabaseModels/GlobalOidc.ts +0 -4
  10. package/Models/DatabaseModels/GlobalOidcProject.ts +0 -4
  11. package/Models/DatabaseModels/GlobalSso.ts +0 -4
  12. package/Models/DatabaseModels/GlobalSsoProject.ts +0 -4
  13. package/Models/DatabaseModels/Host.ts +225 -0
  14. package/Models/DatabaseModels/IncidentForm.ts +594 -0
  15. package/Models/DatabaseModels/IncidentFormSubmission.ts +283 -0
  16. package/Models/DatabaseModels/IncidentTemplate.ts +59 -0
  17. package/Models/DatabaseModels/Index.ts +16 -0
  18. package/Models/DatabaseModels/IoTFleet.ts +12 -0
  19. package/Models/DatabaseModels/KubernetesCluster.ts +12 -0
  20. package/Models/DatabaseModels/MessageQueue.ts +1102 -0
  21. package/Models/DatabaseModels/MessageQueueLabelRule.ts +553 -0
  22. package/Models/DatabaseModels/MessageQueueOwnerRule.ts +633 -0
  23. package/Models/DatabaseModels/MessageQueueOwnerTeam.ts +491 -0
  24. package/Models/DatabaseModels/MessageQueueOwnerUser.ts +490 -0
  25. package/Models/DatabaseModels/PodmanHost.ts +225 -0
  26. package/Models/DatabaseModels/Project.ts +59 -0
  27. package/Models/DatabaseModels/ProjectOidc.ts +0 -4
  28. package/Models/DatabaseModels/ProjectSso.ts +0 -4
  29. package/Models/DatabaseModels/ProxmoxCluster.ts +225 -0
  30. package/Models/DatabaseModels/ResourceAiAgent.ts +419 -0
  31. package/Models/DatabaseModels/RumApplication.ts +12 -0
  32. package/Models/DatabaseModels/RunnerJob.ts +144 -0
  33. package/Models/DatabaseModels/ServerlessFunction.ts +12 -0
  34. package/Models/DatabaseModels/Service.ts +12 -0
  35. package/Models/DatabaseModels/StatusPageOidc.ts +0 -4
  36. package/Models/DatabaseModels/StatusPageSso.ts +0 -4
  37. package/Models/DatabaseModels/TeamComplianceSetting.ts +47 -2
  38. package/Models/DatabaseModels/VMwareVCenter.ts +225 -0
  39. package/Server/API/AIChatAPI.ts +13 -114
  40. package/Server/API/AIInvestigationAPI.ts +3 -3
  41. package/Server/API/AIInvestigationConversationAPI.ts +266 -0
  42. package/Server/API/AutoRemediationAPI.ts +392 -1
  43. package/Server/API/IncidentFormAPI.ts +376 -0
  44. package/Server/API/ProjectOIDC.ts +16 -25
  45. package/Server/API/ProjectSSO.ts +16 -24
  46. package/Server/API/ResourceAiAccessAPI.ts +1669 -0
  47. package/Server/API/StatusPageAPI.ts +42 -77
  48. package/Server/Enterprise/EnterpriseEdition.ts +93 -28
  49. package/Server/Enterprise/EnterpriseFeature.ts +25 -3
  50. package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +1 -1
  51. package/Server/Enterprise/EnterpriseServerModule.ts +4 -1
  52. package/Server/EnvironmentConfig.ts +1 -1
  53. package/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.ts +423 -0
  54. package/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.ts +129 -0
  55. package/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.ts +52 -0
  56. package/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.ts +75 -0
  57. package/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.ts +477 -0
  58. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  59. package/Server/Infrastructure/Semaphore.ts +22 -0
  60. package/Server/Middleware/IncidentFormRateLimit.ts +847 -0
  61. package/Server/Middleware/TelemetryIngest.ts +15 -5
  62. package/Server/Middleware/UserAuthorization.ts +16 -38
  63. package/Server/Services/AIService.ts +10 -13
  64. package/Server/Services/AnalyticsDatabaseService.ts +45 -1
  65. package/Server/Services/AutoRemediationRuleEngineService.ts +940 -112
  66. package/Server/Services/CephClusterService.ts +109 -1
  67. package/Server/Services/DatabaseServerService.ts +116 -1
  68. package/Server/Services/DockerHostService.ts +109 -1
  69. package/Server/Services/DockerSwarmClusterService.ts +113 -1
  70. package/Server/Services/HostService.ts +126 -4
  71. package/Server/Services/IncidentCustomFieldService.ts +112 -2
  72. package/Server/Services/IncidentEpisodeMemberService.ts +24 -4
  73. package/Server/Services/IncidentEpisodeService.ts +10 -1
  74. package/Server/Services/IncidentFormService.ts +1566 -0
  75. package/Server/Services/IncidentFormSubmissionService.ts +97 -0
  76. package/Server/Services/IncidentGroupingEngineService.ts +45 -8
  77. package/Server/Services/IncidentService.ts +123 -5
  78. package/Server/Services/IncidentTemplateService.ts +22 -0
  79. package/Server/Services/Index.ts +14 -0
  80. package/Server/Services/MessageQueueLabelRuleEngineService.ts +321 -0
  81. package/Server/Services/MessageQueueLabelRuleService.ts +14 -0
  82. package/Server/Services/MessageQueueOwnerRuleEngineService.ts +412 -0
  83. package/Server/Services/MessageQueueOwnerRuleService.ts +14 -0
  84. package/Server/Services/MessageQueueOwnerTeamService.ts +62 -0
  85. package/Server/Services/MessageQueueOwnerUserService.ts +62 -0
  86. package/Server/Services/MessageQueueService.ts +1463 -0
  87. package/Server/Services/MetricRecordingRuleService.ts +47 -0
  88. package/Server/Services/OpenTelemetryIngestService.ts +37 -4
  89. package/Server/Services/PodmanHostService.ts +109 -1
  90. package/Server/Services/ProjectService.ts +0 -59
  91. package/Server/Services/ProxmoxClusterService.ts +110 -1
  92. package/Server/Services/ResourceAiAccessService.ts +1439 -0
  93. package/Server/Services/ResourceAiAgentJobService.ts +202 -0
  94. package/Server/Services/ResourceAiAgentService.ts +2432 -0
  95. package/Server/Services/RunnerJobService.ts +611 -4
  96. package/Server/Services/StatusPagePrivateUserService.ts +1 -4
  97. package/Server/Services/StatusPageService.ts +1 -51
  98. package/Server/Services/TeamComplianceSettingService.ts +163 -42
  99. package/Server/Services/TelemetryUsageBillingService.ts +28 -0
  100. package/Server/Services/TraceRecordingRuleService.ts +33 -0
  101. package/Server/Services/UserNotificationRuleService.ts +8 -1
  102. package/Server/Services/VMwareVCenterService.ts +110 -1
  103. package/Server/Services/WorkspaceNotificationSummaryService.ts +12 -3
  104. package/Server/Types/Database/Permissions/CreatePermission.ts +17 -3
  105. package/Server/Types/Database/Permissions/EditionPermission.ts +140 -38
  106. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +16 -0
  107. package/Server/Types/Database/Permissions/TablePermission.ts +3 -3
  108. package/Server/Types/Database/Permissions/UpdatePermission.ts +20 -6
  109. package/Server/Utils/AI/Chat/AgentContextCompactor.ts +200 -0
  110. package/Server/Utils/AI/Chat/ChatAgentRunner.ts +307 -48
  111. package/Server/Utils/AI/Chat/ChatRunCancellation.ts +156 -0
  112. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +78 -18
  113. package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +1 -1
  114. package/Server/Utils/AI/Chat/ToolOutputPager.ts +322 -0
  115. package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +88 -30
  116. package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +13 -1
  117. package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +0 -32
  118. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +27 -25
  119. package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +1442 -34
  120. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +968 -34
  121. package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +25 -1
  122. package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +622 -0
  123. package/Server/Utils/AI/ResourceAccess/ResourceAccessContext.ts +271 -0
  124. package/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.ts +45 -0
  125. package/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.ts +964 -0
  126. package/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.ts +333 -0
  127. package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +882 -0
  128. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +125 -12
  129. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +99 -15
  130. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +99 -15
  131. package/Server/Utils/AI/SRE/InvestigationQueue.ts +16 -19
  132. package/Server/Utils/AI/SRE/InvestigationThread.ts +646 -0
  133. package/Server/Utils/AI/SRE/InvestigationThreadService.ts +715 -0
  134. package/Server/Utils/AI/Toolbox/Serializer.ts +10 -3
  135. package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +396 -13
  136. package/Server/Utils/AutoRemediation/RemediationVerifier.ts +35 -2
  137. package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +9 -1
  138. package/Server/Utils/EditionEnforcement.ts +19 -202
  139. package/Server/Utils/LLM/LLMService.ts +259 -63
  140. package/Server/Utils/RelaxedScimTeamLocksReport.ts +245 -0
  141. package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +25 -0
  142. package/Server/Utils/SameOriginRequest.ts +203 -0
  143. package/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.ts +920 -0
  144. package/Server/Utils/SessionReplay/SessionReplayUsage.ts +84 -6
  145. package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +2 -0
  146. package/Server/Utils/Telemetry/EntityRegistry.ts +4 -1
  147. package/Server/Utils/Telemetry/MessageQueueDiscovery.ts +1402 -0
  148. package/Server/Utils/Telemetry/ResourceEntityFilter.ts +4 -1
  149. package/Server/Utils/VendorAssets.ts +3 -3
  150. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +35 -15
  151. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +33 -15
  152. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +21 -1
  153. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +301 -225
  154. package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +38 -16
  155. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +389 -175
  156. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +376 -144
  157. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.ts +163 -0
  158. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.ts +396 -0
  159. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.ts +418 -0
  160. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.ts +152 -0
  161. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.ts +251 -0
  162. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.ts +214 -0
  163. package/Tests/App/Accounts/IncidentFormPage.test.tsx +2036 -0
  164. package/Tests/App/Accounts/IncidentFormServerMessages.test.ts +119 -0
  165. package/Tests/App/Accounts/IncidentFormUtils.test.ts +1157 -0
  166. package/Tests/App/Accounts/LoginPasskey.test.tsx +6 -4
  167. package/Tests/App/Accounts/LoginSso.test.tsx +724 -0
  168. package/Tests/App/AdminDashboard/AdminAuthenticationRequireSso.test.tsx +338 -0
  169. package/Tests/App/AdminDashboard/AdminAuthenticationSsoCardLocales.test.tsx +331 -0
  170. package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +47 -33
  171. package/Tests/App/AdminDashboard/GlobalSsoOidcPages.test.tsx +1021 -0
  172. package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +876 -78
  173. package/Tests/App/Dashboard/AffectedResourcesSlo.test.tsx +20 -3
  174. package/Tests/App/Dashboard/CephProxmoxVMwareDocumentationCards.test.tsx +359 -0
  175. package/Tests/App/Dashboard/CephSetupGuide.test.ts +961 -0
  176. package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +381 -95
  177. package/Tests/App/Dashboard/CloudSetupGuide.test.ts +1463 -0
  178. package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +267 -12
  179. package/Tests/App/Dashboard/ContainerSetupGuideCards.test.tsx +345 -0
  180. package/Tests/App/Dashboard/CoreListEmptyStates.test.tsx +501 -0
  181. package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +0 -1
  182. package/Tests/App/Dashboard/DatabaseDocumentationCard.test.tsx +400 -0
  183. package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +23 -6
  184. package/Tests/App/Dashboard/DatabaseSetupGuide.test.ts +1869 -0
  185. package/Tests/App/Dashboard/DatabaseTelemetryScope.test.ts +44 -0
  186. package/Tests/App/Dashboard/DatabaseTelemetryTabs.test.tsx +50 -9
  187. package/Tests/App/Dashboard/DockerSetupGuide.test.ts +899 -0
  188. package/Tests/App/Dashboard/DockerSwarmSetupGuide.test.ts +964 -0
  189. package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +141 -7
  190. package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +52 -39
  191. package/Tests/App/Dashboard/EventOverviewPages.test.tsx +7 -1
  192. package/Tests/App/Dashboard/GettingStartedTaskRoutes.test.tsx +331 -0
  193. package/Tests/App/Dashboard/HomeOverviewStatsFirstRun.test.tsx +925 -0
  194. package/Tests/App/Dashboard/HostDocumentationCard.test.tsx +225 -0
  195. package/Tests/App/Dashboard/HostSetupGuide.test.ts +1183 -0
  196. package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +69 -45
  197. package/Tests/App/Dashboard/IncidentCreateTemplateCustomFieldSettings.test.tsx +745 -0
  198. package/Tests/App/Dashboard/IncidentCreateTemplateOwners.test.tsx +414 -0
  199. package/Tests/App/Dashboard/IncidentCustomFieldCreateSettingsForm.test.ts +1042 -0
  200. package/Tests/App/Dashboard/IncidentCustomFieldSettingsCard.test.tsx +1816 -0
  201. package/Tests/App/Dashboard/IncidentFormPlan.test.ts +89 -0
  202. package/Tests/App/Dashboard/IncidentFormShareLinkCard.test.tsx +846 -0
  203. package/Tests/App/Dashboard/IncidentFormsPages.test.tsx +1324 -0
  204. package/Tests/App/Dashboard/IncidentTemplateCustomFieldSettings.test.tsx +630 -0
  205. package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +13 -0
  206. package/Tests/App/Dashboard/IncomingEmailMonitorLinkVerifyHint.test.tsx +104 -0
  207. package/Tests/App/Dashboard/InvestigationConversation.test.tsx +1107 -0
  208. package/Tests/App/Dashboard/InvestigationConversationData.test.ts +546 -0
  209. package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +170 -5
  210. package/Tests/App/Dashboard/InvestigationInfrastructureTools.test.tsx +506 -0
  211. package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +207 -2
  212. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +729 -34
  213. package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +9 -21
  214. package/Tests/App/Dashboard/InvestigationReportView.test.tsx +274 -37
  215. package/Tests/App/Dashboard/InvestigationStatusBadge.test.tsx +130 -0
  216. package/Tests/App/Dashboard/IoTDocumentationCard.test.tsx +218 -0
  217. package/Tests/App/Dashboard/IoTSetupGuide.test.ts +1124 -0
  218. package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +20 -6
  219. package/Tests/App/Dashboard/KubernetesClusterAiDocumentationMarkdown.test.ts +107 -83
  220. package/Tests/App/Dashboard/KubernetesSetupGuide.test.ts +787 -0
  221. package/Tests/App/Dashboard/MessageQueueBreadcrumbs.test.tsx +228 -0
  222. package/Tests/App/Dashboard/MessageQueueBrokerHealth.test.tsx +1538 -0
  223. package/Tests/App/Dashboard/MessageQueueBrokerHealthMetricChart.test.tsx +969 -0
  224. package/Tests/App/Dashboard/MessageQueueBrokerHealthReads.test.ts +889 -0
  225. package/Tests/App/Dashboard/MessageQueueBrokerMetricsReach.test.ts +236 -0
  226. package/Tests/App/Dashboard/MessageQueueDocumentationCard.test.tsx +479 -0
  227. package/Tests/App/Dashboard/MessageQueueListPages.test.tsx +1232 -0
  228. package/Tests/App/Dashboard/MessageQueueMetricDescriptions.test.ts +244 -0
  229. package/Tests/App/Dashboard/MessageQueueMonitorLink.test.ts +952 -0
  230. package/Tests/App/Dashboard/MessageQueueMonitorLinkMonitorCreate.test.tsx +859 -0
  231. package/Tests/App/Dashboard/MessageQueueOverview.test.tsx +1773 -0
  232. package/Tests/App/Dashboard/MessageQueueOverviewPresentation.test.ts +196 -0
  233. package/Tests/App/Dashboard/MessageQueuePresentation.test.ts +799 -0
  234. package/Tests/App/Dashboard/MessageQueueProducersConsumers.test.tsx +680 -0
  235. package/Tests/App/Dashboard/MessageQueueRoutes.test.tsx +383 -0
  236. package/Tests/App/Dashboard/MessageQueueRulePages.test.tsx +278 -0
  237. package/Tests/App/Dashboard/MessageQueueSetupGuide.test.ts +2778 -0
  238. package/Tests/App/Dashboard/MessageQueueSideMenus.test.tsx +273 -0
  239. package/Tests/App/Dashboard/MessageQueueSpanPopulations.test.ts +930 -0
  240. package/Tests/App/Dashboard/MessageQueueSpanStore.ts +351 -0
  241. package/Tests/App/Dashboard/MessageQueueTelemetryScope.test.ts +375 -0
  242. package/Tests/App/Dashboard/MessageQueueTelemetryScopeTabs.test.tsx +668 -0
  243. package/Tests/App/Dashboard/MessageQueueViewPages.test.tsx +685 -0
  244. package/Tests/App/Dashboard/MonitorAndHomeNotOperationalMenus.test.tsx +342 -0
  245. package/Tests/App/Dashboard/MonitorCreateFirstRunDefaults.test.tsx +623 -0
  246. package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +442 -0
  247. package/Tests/App/Dashboard/MonitorLogsPageViewSummary.test.tsx +814 -0
  248. package/Tests/App/Dashboard/MonitorSetupCardBodies.test.tsx +246 -0
  249. package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +8 -0
  250. package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +27 -12
  251. package/Tests/App/Dashboard/PlanGatedPage.test.tsx +292 -0
  252. package/Tests/App/Dashboard/PodmanSetupGuide.test.ts +948 -0
  253. package/Tests/App/Dashboard/ProductOrientation.test.tsx +5 -4
  254. package/Tests/App/Dashboard/ProductSettingsSectionCollapsed.test.tsx +266 -0
  255. package/Tests/App/Dashboard/ProxmoxSetupGuide.test.ts +1318 -0
  256. package/Tests/App/Dashboard/RemediationSuggestionCardDescription.test.tsx +209 -0
  257. package/Tests/App/Dashboard/RemediationSuggestionCardResource.test.tsx +317 -0
  258. package/Tests/App/Dashboard/ResourceAiAccessSettingsUtil.test.ts +921 -0
  259. package/Tests/App/Dashboard/ResourceAiAgentAttentionServerParity.test.ts +555 -0
  260. package/Tests/App/Dashboard/ResourceAiAgentInstall.test.ts +860 -0
  261. package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +2010 -0
  262. package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +1455 -0
  263. package/Tests/App/Dashboard/ResourceAiInsightsPage.test.tsx +931 -0
  264. package/Tests/App/Dashboard/ResourceAiNavigation.test.tsx +575 -0
  265. package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +16 -0
  266. package/Tests/App/Dashboard/ResourceConnectionGuideCard.test.tsx +444 -0
  267. package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsInfra.test.tsx +798 -0
  268. package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsPlatforms.test.tsx +717 -0
  269. package/Tests/App/Dashboard/ResourceConnectionGuides.test.ts +981 -0
  270. package/Tests/App/Dashboard/ResourceConnectionState.test.ts +132 -0
  271. package/Tests/App/Dashboard/RumDocumentationCard.test.tsx +293 -0
  272. package/Tests/App/Dashboard/RumSessionReplayRetentionSettings.test.tsx +467 -0
  273. package/Tests/App/Dashboard/RumSetupGuide.test.ts +758 -0
  274. package/Tests/App/Dashboard/RunbookStepTypeMaps.test.ts +38 -7
  275. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +25 -0
  276. package/Tests/App/Dashboard/ServerlessDocumentationCard.test.tsx +254 -0
  277. package/Tests/App/Dashboard/ServerlessSetupGuide.test.ts +1074 -0
  278. package/Tests/App/Dashboard/SetupGuide.test.ts +246 -0
  279. package/Tests/App/Dashboard/SetupGuideCard.test.tsx +756 -0
  280. package/Tests/App/Dashboard/SloListSideMenu.test.tsx +120 -0
  281. package/Tests/App/Dashboard/SsoPages.test.tsx +833 -0
  282. package/Tests/App/Dashboard/TelemetryDocumentation.test.tsx +253 -0
  283. package/Tests/App/Dashboard/TelemetryRetentionShells.test.tsx +730 -0
  284. package/Tests/App/Dashboard/VMwareSetupGuide.test.ts +1033 -0
  285. package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +87 -7
  286. package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +61 -10
  287. package/Tests/Models/DatabaseModels/IncidentFormModel.test.ts +1250 -0
  288. package/Tests/Models/DatabaseModels/MessageQueueModels.test.ts +1983 -0
  289. package/Tests/Models/DatabaseModels/ResourceAiAccessColumns.test.ts +738 -0
  290. package/Tests/Models/DatabaseModels/ResourceAiAgentModel.test.ts +842 -0
  291. package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
  292. package/Tests/Models/DatabaseModels/TeamComplianceSettingModel.test.ts +190 -14
  293. package/Tests/Models/IncidentTemplateCustomFieldSettingsColumn.test.ts +291 -0
  294. package/Tests/Server/API/AIInvestigationConversationAPI.test.ts +412 -0
  295. package/Tests/Server/API/AutoRemediationApproveResourceRound.test.ts +835 -0
  296. package/Tests/Server/API/GlobalConfigLicense.test.ts +38 -9
  297. package/Tests/Server/API/IncidentFormAPI.test.ts +942 -0
  298. package/Tests/Server/API/IncidentFormPublicRoutes.test.ts +1653 -0
  299. package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +2 -1
  300. package/Tests/Server/API/ResourceAiAccessAPI.test.ts +2730 -0
  301. package/Tests/Server/API/{SsoProviderListingsEdition.test.ts → SsoProviderListings.test.ts} +164 -110
  302. package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +76 -54
  303. package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +125 -42
  304. package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +36 -10
  305. package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +51 -9
  306. package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +13 -8
  307. package/Tests/Server/Enterprise/SsoInCommunityEdition.test.ts +540 -0
  308. package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
  309. package/Tests/Server/Infrastructure/Postgres/AddDatabaseServerTablesMigration.test.ts +60 -0
  310. package/Tests/Server/Infrastructure/Postgres/AddIncidentFormsMigration.test.ts +438 -0
  311. package/Tests/Server/Infrastructure/Postgres/AddResourceAiAgentsMigration.test.ts +659 -0
  312. package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleNotificationChannelsMigration.test.ts +255 -0
  313. package/Tests/Server/Infrastructure/Postgres/MessageQueueTablesMigration.test.ts +637 -0
  314. package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +31 -0
  315. package/Tests/Server/Middleware/IncidentFormRateLimit.test.ts +1630 -0
  316. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +63 -5
  317. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +103 -5
  318. package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +19 -1
  319. package/Tests/Server/Middleware/UserAuthorization.test.ts +16 -17
  320. package/Tests/Server/Middleware/UserAuthorizationSsoEnforcement.test.ts +544 -0
  321. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +37 -8
  322. package/Tests/Server/Services/AutoRemediationResourceRuleEngine.test.ts +1279 -0
  323. package/Tests/Server/Services/DatabaseServerService.test.ts +55 -0
  324. package/Tests/Server/Services/GroupTelemetryUsageExcludeNames.test.ts +299 -0
  325. package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +44 -0
  326. package/Tests/Server/Services/IncidentCreatedFeedTitle.test.ts +212 -0
  327. package/Tests/Server/Services/IncidentCustomFieldDeleteFormQuestions.test.ts +297 -0
  328. package/Tests/Server/Services/IncidentFormOwnersCreatedNotification.test.ts +497 -0
  329. package/Tests/Server/Services/IncidentFormPostgres.test.ts +958 -0
  330. package/Tests/Server/Services/IncidentFormPublicForm.test.ts +1260 -0
  331. package/Tests/Server/Services/IncidentFormPublicSubmission.test.ts +2520 -0
  332. package/Tests/Server/Services/IncidentFormRegistration.test.ts +159 -0
  333. package/Tests/Server/Services/IncidentFormService.test.ts +663 -0
  334. package/Tests/Server/Services/IncidentFormSubmissionService.test.ts +430 -0
  335. package/Tests/Server/Services/IncidentFormSubmissionTemplateBranch.test.ts +473 -0
  336. package/Tests/Server/Services/IncidentGroupingTemplateSubstitution.test.ts +81 -0
  337. package/Tests/Server/Services/IncidentTemplateCustomFieldSettings.test.ts +262 -0
  338. package/Tests/Server/Services/IncidentTemplateOwnersOnDeclare.test.ts +566 -0
  339. package/Tests/Server/Services/IncidentTitleMarkdownSinks.test.ts +640 -0
  340. package/Tests/Server/Services/LlmLogServiceTokenAggregateParams.test.ts +3 -3
  341. package/Tests/Server/Services/MessageQueueOwnerServices.test.ts +440 -0
  342. package/Tests/Server/Services/MessageQueueRegistries.test.ts +577 -0
  343. package/Tests/Server/Services/MessageQueueRuleEngines.test.ts +900 -0
  344. package/Tests/Server/Services/MessageQueueService.test.ts +2210 -0
  345. package/Tests/Server/Services/MessageQueueSqlPostgres.test.ts +1271 -0
  346. package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +45 -6
  347. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +28 -1
  348. package/Tests/Server/Services/OpenTelemetryRetentionOverrideEdition.test.ts +474 -0
  349. package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +21 -0
  350. package/Tests/Server/Services/OwnerRowUniqueness.test.ts +3 -0
  351. package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +0 -1
  352. package/Tests/Server/Services/RecordingRuleReservedMetricName.test.ts +171 -0
  353. package/Tests/Server/Services/ResourceAiAccessChangeAuthorization.test.ts +256 -0
  354. package/Tests/Server/Services/ResourceAiAccessService.test.ts +1373 -0
  355. package/Tests/Server/Services/ResourceAiAgentJobService.test.ts +375 -0
  356. package/Tests/Server/Services/ResourceAiAgentServiceHelpers.test.ts +1114 -0
  357. package/Tests/Server/Services/ResourceAiAgentServiceLifecycle.test.ts +1050 -0
  358. package/Tests/Server/Services/ResourceAiAgentServiceRegister.test.ts +2251 -0
  359. package/Tests/Server/Services/ResourceAiSettingsCreate.test.ts +373 -0
  360. package/Tests/Server/Services/ResourceAiSettingsPermission.test.ts +1042 -0
  361. package/Tests/Server/Services/ResourceServiceDeleteCleansUpAi.test.ts +319 -0
  362. package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +56 -6
  363. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +30 -1
  364. package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +105 -0
  365. package/Tests/Server/Services/RunnerJobEnqueueResourceCommand.test.ts +986 -0
  366. package/Tests/Server/Services/RunnerJobResourceCommandLane.test.ts +211 -0
  367. package/Tests/Server/Services/RunnerJobResourceCommandTimeoutAndRedaction.test.ts +352 -0
  368. package/Tests/Server/Services/SsoRequirementReads.test.ts +454 -0
  369. package/Tests/Server/Services/SsoRequirementWrites.test.ts +529 -0
  370. package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +3 -3
  371. package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +107 -89
  372. package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +1068 -176
  373. package/Tests/Server/Services/TeamComplianceSettingService.test.ts +1962 -200
  374. package/Tests/Server/Services/TelemetryUsageBillingSloExclusion.test.ts +218 -0
  375. package/Tests/Server/TestingUtils/Services/FakeRunnerJobCount.ts +145 -0
  376. package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +654 -297
  377. package/Tests/Server/Types/Database/Permissions/RetentionOverrideColumns.test.ts +784 -0
  378. package/Tests/Server/Types/Database/Permissions/SsoScalePlanGate.test.ts +418 -0
  379. package/Tests/Server/Utils/AI/AIAlertGating.test.ts +0 -1
  380. package/Tests/Server/Utils/AI/AIInvestigationEngineRunLimits.test.ts +136 -0
  381. package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +15 -14
  382. package/Tests/Server/Utils/AI/AgentContextCompactor.test.ts +351 -0
  383. package/Tests/Server/Utils/AI/ChatAgentRunnerSharedThread.test.ts +842 -0
  384. package/Tests/Server/Utils/AI/ChatRunCancellation.test.ts +195 -0
  385. package/Tests/Server/Utils/AI/CodeFixReadiness.test.ts +10 -57
  386. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +20 -24
  387. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +7 -30
  388. package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +225 -29
  389. package/Tests/Server/Utils/AI/InvestigationInfrastructureAccessWiring.test.ts +694 -0
  390. package/Tests/Server/Utils/AI/InvestigationInfrastructureReport.test.ts +721 -0
  391. package/Tests/Server/Utils/AI/InvestigationThread.test.ts +580 -0
  392. package/Tests/Server/Utils/AI/InvestigationThreadService.test.ts +801 -0
  393. package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +525 -43
  394. package/Tests/Server/Utils/AI/KubectlJobRunner.test.ts +4 -2
  395. package/Tests/Server/Utils/AI/LLMServiceUnreachableProvider.test.ts +435 -0
  396. package/Tests/Server/Utils/AI/ObservabilityAssistantLimits.test.ts +462 -0
  397. package/Tests/Server/Utils/AI/RemediationCommandTools.test.ts +94 -1
  398. package/Tests/Server/Utils/AI/RemediationCommandToolsResource.test.ts +1530 -0
  399. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +14 -25
  400. package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +1251 -0
  401. package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +117 -0
  402. package/Tests/Server/Utils/AI/RemediationResourceCopyParity.test.ts +463 -0
  403. package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +1004 -0
  404. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAccessContext.test.ts +266 -0
  405. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.test.ts +1220 -0
  406. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.test.ts +569 -0
  407. package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +834 -0
  408. package/Tests/Server/Utils/AI/ToolOutputPager.test.ts +382 -0
  409. package/Tests/Server/Utils/AI/ToolResultSerializer.test.ts +23 -4
  410. package/Tests/Server/Utils/AI/Toolbox/LogTools.test.ts +25 -6
  411. package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +14 -3
  412. package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorResource.test.ts +717 -0
  413. package/Tests/Server/Utils/AutoRemediation/RemediationVerifierResourceFollowUp.test.ts +338 -0
  414. package/Tests/Server/Utils/EditionEnforcement.test.ts +107 -147
  415. package/Tests/Server/Utils/Monitor/Criteria/SessionReplayBudgetTemplateCriteria.test.ts +422 -0
  416. package/Tests/Server/Utils/{CommunityEditionSsoReport.test.ts → RelaxedScimTeamLocksReport.test.ts} +212 -208
  417. package/Tests/Server/Utils/SameOriginRequest.test.ts +372 -0
  418. package/Tests/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.test.ts +1647 -0
  419. package/Tests/Server/Utils/SessionReplay/SessionReplayUsage.test.ts +143 -1
  420. package/Tests/Server/Utils/Telemetry/EntityRegistry.test.ts +20 -0
  421. package/Tests/Server/Utils/Telemetry/MessageQueueDiscovery.test.ts +2590 -0
  422. package/Tests/Server/Utils/Telemetry/MessageQueueSpanQueryTwin.ts +246 -0
  423. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +23 -0
  424. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +33 -3
  425. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsAccountNotLinked.test.ts +1093 -0
  426. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.test.ts +1049 -0
  427. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.test.ts +1676 -0
  428. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCards.test.ts +2884 -0
  429. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.test.ts +2490 -0
  430. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmit.test.ts +2293 -0
  431. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmitServerTimezone.test.ts +386 -0
  432. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.test.ts +1477 -0
  433. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.test.ts +1967 -0
  434. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsStripHtmlTags.test.ts +92 -0
  435. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsSubmittedFormRemoval.test.ts +1819 -0
  436. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.test.ts +1033 -0
  437. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezoneServerZone.test.ts +610 -0
  438. package/Tests/Server/Utils/Workspace/MicrosoftTeamsBotMessageHandling.test.ts +2610 -0
  439. package/Tests/Server/Utils/Workspace/MicrosoftTeamsCreateCommandsEndToEnd.test.ts +4672 -0
  440. package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +190 -65
  441. package/Tests/Types/AI/AIAgentRunLimits.test.ts +255 -0
  442. package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +10 -4
  443. package/Tests/Types/AutoRemediation/AiRemediationCommandPlanResourceCommand.test.ts +305 -0
  444. package/Tests/Types/Code/JsonSyntax.test.ts +1300 -0
  445. package/Tests/Types/CustomField/CustomFieldCreateSettings.test.ts +1113 -0
  446. package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +91 -0
  447. package/Tests/Types/CustomField/CustomFieldValueValidator.test.ts +30 -0
  448. package/Tests/Types/Incident/IncidentFormIpAllowlist.test.ts +227 -0
  449. package/Tests/Types/Incident/IncidentFormPublic.test.ts +1916 -0
  450. package/Tests/Types/MessageQueue/MessageQueueEntityKey.test.ts +916 -0
  451. package/Tests/Types/MessageQueue/MessageQueueIdentity.test.ts +567 -0
  452. package/Tests/Types/MessageQueue/MessageQueueManualIdentity.test.ts +686 -0
  453. package/Tests/Types/MessageQueue/MessageQueueMetricCatalog.test.ts +1726 -0
  454. package/Tests/Types/MessageQueue/MessageQueueMetricResolution.test.ts +1758 -0
  455. package/Tests/Types/MessageQueue/MessagingInstrumentationFixtures.test.ts +4686 -0
  456. package/Tests/Types/MessageQueue/MessagingSystem.test.ts +840 -0
  457. package/Tests/Types/MessageQueue/MessagingTelemetryFixtures.ts +3287 -0
  458. package/Tests/Types/MessageQueue/MessagingTelemetryResolver.test.ts +2966 -0
  459. package/Tests/Types/Monitor/MessageQueueAlertTemplates.test.ts +5401 -0
  460. package/Tests/Types/Monitor/MetricEngineFold.ts +154 -0
  461. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +277 -13
  462. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +113 -0
  463. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +773 -2
  464. package/Tests/Types/ResourceAiAgent/AiResourceType.test.ts +419 -0
  465. package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +519 -0
  466. package/Tests/Types/Runbook/RunbookStepType.test.ts +147 -8
  467. package/Tests/Types/Team/ComplianceRule.test.ts +588 -37
  468. package/Tests/Types/Team/TeamComplianceStatus.test.ts +64 -11
  469. package/Tests/Types/XML.test.ts +51 -0
  470. package/Tests/UI/Components/CodeEditor/CodeEditor.test.tsx +2362 -0
  471. package/Tests/UI/Components/CodeEditor/CodeEditorCommands.test.ts +810 -0
  472. package/Tests/UI/Components/CodeEditor/CodeEditorHighlight.test.ts +338 -0
  473. package/Tests/UI/Components/CodeEditor/CodeEditorLanguages.test.ts +222 -0
  474. package/Tests/UI/Components/CodeEditor/CodeEditorStyles.test.ts +807 -0
  475. package/Tests/UI/Components/CodeEditor/NoMonaco.test.ts +245 -0
  476. package/Tests/UI/Components/CodeEditor/YamlEditor.test.tsx +729 -0
  477. package/Tests/UI/Components/CopyTextButton.test.tsx +76 -0
  478. package/Tests/UI/Components/EditionLabelLapseCopy.ts +51 -14
  479. package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +131 -23
  480. package/Tests/UI/Components/ErrorMessageAction.test.tsx +142 -0
  481. package/Tests/UI/Components/FacetSidebarInScope.test.tsx +459 -0
  482. package/Tests/UI/Components/FacetValuesInScope.test.ts +270 -0
  483. package/Tests/UI/Components/Forms/FormFieldCodeEditors.test.tsx +294 -0
  484. package/Tests/UI/Components/Forms/FormFieldMarkdown.test.tsx +126 -0
  485. package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +22 -75
  486. package/Tests/UI/Components/Forms/ModelFormOnBeforeCreateMiscData.test.tsx +254 -0
  487. package/Tests/UI/Components/Icon.test.tsx +32 -0
  488. package/Tests/UI/Components/Input.test.tsx +31 -0
  489. package/Tests/UI/Components/LockedFilterChipScope.test.tsx +501 -0
  490. package/Tests/UI/Components/MarkdownConverters.test.ts +253 -1
  491. package/Tests/UI/Components/MarkdownEditor.test.tsx +2785 -2
  492. package/Tests/UI/Components/MarkdownEditorHistory.test.ts +243 -0
  493. package/Tests/UI/Components/MarkdownListEditing.test.ts +1118 -0
  494. package/Tests/UI/Components/MarkdownPaste.test.ts +1180 -0
  495. package/Tests/UI/Components/MarkdownViewerCopy.test.tsx +466 -0
  496. package/Tests/UI/Components/MarkdownVisualEditing.test.ts +1089 -0
  497. package/Tests/UI/Components/ModelTable/BaseModelTableEmptyStateAction.test.tsx +623 -0
  498. package/Tests/UI/Components/ResetObjectID.test.tsx +282 -0
  499. package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
  500. package/Tests/UI/Components/Table/EmptyTableMessage.test.ts +439 -0
  501. package/Tests/UI/Components/Table/TableEmptyState.test.tsx +352 -0
  502. package/Tests/UI/Components/TableRowMobileTitles.test.tsx +78 -0
  503. package/Tests/UI/Components/TextArea.test.tsx +19 -0
  504. package/Tests/UI/Components/Workflow/ModelColumnEditor.render.test.tsx +12 -29
  505. package/Tests/UI/Components/fixtures/MarkdownPasteFixtures.ts +460 -0
  506. package/Tests/UI/EsbuildConfig.test.ts +115 -39
  507. package/Tests/UI/EsbuildEnterpriseAlias.test.ts +4 -4
  508. package/Tests/UI/Monitor/MonitorLogSummaryRender.test.tsx +377 -0
  509. package/Tests/UI/Rum/RecordingHealthDashboard.test.tsx +769 -1
  510. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +81 -1
  511. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +17 -0
  512. package/Tests/Utils/AiRemediation/Resource/CephCommandPolicy.test.ts +1653 -0
  513. package/Tests/Utils/AiRemediation/Resource/CephOutputRedaction.test.ts +204 -0
  514. package/Tests/Utils/AiRemediation/Resource/DatabaseCommandPolicy.test.ts +1077 -0
  515. package/Tests/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.test.ts +558 -0
  516. package/Tests/Utils/AiRemediation/Resource/DatabaseQueryRedactor.test.ts +834 -0
  517. package/Tests/Utils/AiRemediation/Resource/DockerCliGrammar.test.ts +747 -0
  518. package/Tests/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.test.ts +1259 -0
  519. package/Tests/Utils/AiRemediation/Resource/DockerOutputRedaction.test.ts +386 -0
  520. package/Tests/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.test.ts +782 -0
  521. package/Tests/Utils/AiRemediation/Resource/GovcCommandPolicy.test.ts +2259 -0
  522. package/Tests/Utils/AiRemediation/Resource/HostCommandPolicy.test.ts +2019 -0
  523. package/Tests/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.test.ts +2497 -0
  524. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicy.test.ts +1305 -0
  525. package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.test.ts +585 -0
  526. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactor.test.ts +334 -0
  527. package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactorCopyParity.test.ts +98 -0
  528. package/Tests/Utils/AiRemediation/Resource/ResourcePolicyImportClosure.test.ts +391 -0
  529. package/Tests/Utils/AiRemediation/ResourceAiAgentPolicyCopyParity.test.ts +497 -0
  530. package/Tests/Utils/LabelRuleImportExport.test.ts +5 -0
  531. package/Tests/Utils/Markdown/DashboardMarkdownRenderer.ts +81 -0
  532. package/Tests/Utils/Markdown/UntrustedMarkdown.test.ts +1339 -0
  533. package/Tests/Utils/Monitor/MonitorLogSummaryUtil.test.ts +862 -0
  534. package/Tests/Utils/SessionReplay/SessionReplayBudgetMetricType.test.ts +383 -0
  535. package/Types/AI/AIAgentRunLimits.ts +146 -0
  536. package/Types/AI/ResourceAiAccessApi.ts +140 -0
  537. package/Types/AI/ResourceAiAccessPermissions.ts +126 -0
  538. package/Types/AutoRemediation/AiRemediationCommandPlan.ts +183 -2
  539. package/Types/Code/CodeType.ts +2 -0
  540. package/Types/Code/JsonSyntax.ts +923 -0
  541. package/Types/CustomField/CustomFieldCreateSettings.ts +549 -0
  542. package/Types/CustomField/CustomFieldMappingCatalog.ts +77 -0
  543. package/Types/CustomField/CustomFieldValueValidator.ts +10 -7
  544. package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +1 -1
  545. package/Types/Icon/IconProp.ts +2 -0
  546. package/Types/Incident/IncidentFormIpAllowlist.ts +206 -0
  547. package/Types/Incident/IncidentFormPublic.ts +1145 -0
  548. package/Types/Kubernetes/KubernetesClusterAiAccess.ts +10 -3
  549. package/Types/MessageQueue/MessageQueueIdentity.ts +256 -0
  550. package/Types/MessageQueue/MessageQueueManualIdentity.ts +325 -0
  551. package/Types/MessageQueue/MessageQueueMetricCatalog.ts +1357 -0
  552. package/Types/MessageQueue/MessagingSystem.ts +518 -0
  553. package/Types/MessageQueue/MessagingTelemetryResolver.ts +2311 -0
  554. package/Types/Monitor/MessageQueueAlertTemplates.ts +2128 -0
  555. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +55 -22
  556. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +35 -3
  557. package/Types/Monitor/RumAlertTemplates.ts +351 -4
  558. package/Types/Permission.ts +310 -0
  559. package/Types/ResourceAiAgent/AiResourceType.ts +310 -0
  560. package/Types/ResourceAiAgent/ResourceAiAccess.ts +580 -0
  561. package/Types/Rules/RuleCriteriaFieldRegistry.ts +12 -0
  562. package/Types/Rules/RuleRun.ts +4 -0
  563. package/Types/Rum/SessionReplayBudgetMetricType.ts +47 -0
  564. package/Types/Runbook/RunbookStepType.ts +29 -0
  565. package/Types/Team/ComplianceNotificationChannel.ts +4 -3
  566. package/Types/Team/ComplianceRule.ts +71 -18
  567. package/Types/Team/ComplianceRuleType.ts +2 -2
  568. package/Types/Team/TeamComplianceStatus.ts +6 -2
  569. package/Types/Telemetry/EntityType.ts +16 -0
  570. package/Types/Telemetry/LockedFilterDetail.ts +22 -0
  571. package/Types/Telemetry/TelemetryIngestSurface.ts +14 -2
  572. package/Types/XML.ts +26 -0
  573. package/UI/Components/CodeEditor/CodeEditor.css +379 -0
  574. package/UI/Components/CodeEditor/CodeEditor.tsx +1128 -294
  575. package/UI/Components/CodeEditor/CodeEditorCommands.ts +774 -0
  576. package/UI/Components/CodeEditor/CodeEditorHighlight.ts +106 -0
  577. package/UI/Components/CodeEditor/CodeEditorLanguages.ts +164 -0
  578. package/UI/Components/CodeEditor/YamlEditor.tsx +28 -326
  579. package/UI/Components/CopyTextButton/CopyTextButton.tsx +5 -1
  580. package/UI/Components/CustomFields/CustomFieldModelFormFields.tsx +6 -25
  581. package/UI/Components/EditionLabel/EditionLabel.tsx +14 -13
  582. package/UI/Components/ErrorMessage/ErrorMessage.tsx +11 -1
  583. package/UI/Components/Forms/Fields/FormField.tsx +8 -0
  584. package/UI/Components/Forms/Types/Field.ts +8 -0
  585. package/UI/Components/Icon/Icon.tsx +18 -0
  586. package/UI/Components/Input/Input.tsx +11 -4
  587. package/UI/Components/LogsViewer/LogsViewer.tsx +4 -0
  588. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +21 -3
  589. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  590. package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +877 -79
  591. package/UI/Components/Markdown.tsx/MarkdownEditorHistory.ts +284 -0
  592. package/UI/Components/Markdown.tsx/MarkdownListEditing.ts +1362 -0
  593. package/UI/Components/Markdown.tsx/MarkdownPaste.ts +1326 -0
  594. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +106 -10
  595. package/UI/Components/Markdown.tsx/MarkdownVisualEditing.ts +1032 -0
  596. package/UI/Components/ModelTable/BaseModelTable.tsx +85 -7
  597. package/UI/Components/ResetObjectID/ResetObjectID.tsx +35 -9
  598. package/UI/Components/Table/EmptyTableMessage.ts +81 -0
  599. package/UI/Components/Table/Table.tsx +50 -21
  600. package/UI/Components/Table/TableRow.tsx +9 -1
  601. package/UI/Components/TelemetryViewer/FacetVisibility.ts +97 -2
  602. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +13 -0
  603. package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +214 -7
  604. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +21 -3
  605. package/UI/Components/TextArea/TextArea.tsx +9 -2
  606. package/UI/Components/Workflow/ModelFieldPicker.tsx +10 -12
  607. package/UI/Styles/Theme.css +8 -0
  608. package/UI/esbuild-config.js +2 -32
  609. package/Utils/AI/InvestigationReport.ts +121 -15
  610. package/Utils/AiRemediation/Resource/CephCommandPolicy.ts +1936 -0
  611. package/Utils/AiRemediation/Resource/DatabaseCommandPolicy.ts +166 -0
  612. package/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.ts +1532 -0
  613. package/Utils/AiRemediation/Resource/DatabaseQueryRedactor.ts +1394 -0
  614. package/Utils/AiRemediation/Resource/DockerCliGrammar.ts +1839 -0
  615. package/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.ts +490 -0
  616. package/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.ts +687 -0
  617. package/Utils/AiRemediation/Resource/GovcCommandPolicy.ts +2096 -0
  618. package/Utils/AiRemediation/Resource/HostCommandPolicy.ts +2982 -0
  619. package/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.ts +1679 -0
  620. package/Utils/AiRemediation/Resource/ResourceCommandPolicy.ts +851 -0
  621. package/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.ts +593 -0
  622. package/Utils/AiRemediation/Resource/ResourceOutputRedactor.ts +2812 -0
  623. package/Utils/LabelRuleImportExport.ts +2 -0
  624. package/Utils/Markdown/UntrustedMarkdown.ts +1513 -0
  625. package/Utils/Monitor/IncomingEmailMonitorRequestUtil.ts +41 -0
  626. package/Utils/Monitor/MonitorLogSummaryUtil.ts +212 -0
  627. package/Utils/SessionReplay/SessionReplayBudgetMetricType.ts +184 -0
  628. package/Utils/Telemetry/EntityKey.ts +48 -0
  629. package/build/dist/Models/DatabaseModels/AIConversation.js +125 -1
  630. package/build/dist/Models/DatabaseModels/AIConversation.js.map +1 -1
  631. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js +62 -0
  632. package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
  633. package/build/dist/Models/DatabaseModels/CephCluster.js +231 -0
  634. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
  635. package/build/dist/Models/DatabaseModels/CloudResource.js +12 -0
  636. package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
  637. package/build/dist/Models/DatabaseModels/DatabaseServer.js +231 -0
  638. package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
  639. package/build/dist/Models/DatabaseModels/DockerHost.js +231 -0
  640. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  641. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +231 -0
  642. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
  643. package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
  644. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  645. package/build/dist/Models/DatabaseModels/GlobalOidc.js +0 -4
  646. package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -1
  647. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +0 -4
  648. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -1
  649. package/build/dist/Models/DatabaseModels/GlobalSso.js +0 -4
  650. package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -1
  651. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +0 -4
  652. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js.map +1 -1
  653. package/build/dist/Models/DatabaseModels/Host.js +231 -0
  654. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  655. package/build/dist/Models/DatabaseModels/IncidentForm.js +605 -0
  656. package/build/dist/Models/DatabaseModels/IncidentForm.js.map +1 -0
  657. package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js +299 -0
  658. package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js.map +1 -0
  659. package/build/dist/Models/DatabaseModels/IncidentTemplate.js +60 -0
  660. package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
  661. package/build/dist/Models/DatabaseModels/Index.js +16 -0
  662. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  663. package/build/dist/Models/DatabaseModels/IoTFleet.js +12 -0
  664. package/build/dist/Models/DatabaseModels/IoTFleet.js.map +1 -1
  665. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +12 -0
  666. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  667. package/build/dist/Models/DatabaseModels/MessageQueue.js +1106 -0
  668. package/build/dist/Models/DatabaseModels/MessageQueue.js.map +1 -0
  669. package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js +562 -0
  670. package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js.map +1 -0
  671. package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js +643 -0
  672. package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js.map +1 -0
  673. package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js +506 -0
  674. package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js.map +1 -0
  675. package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js +505 -0
  676. package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js.map +1 -0
  677. package/build/dist/Models/DatabaseModels/PodmanHost.js +231 -0
  678. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
  679. package/build/dist/Models/DatabaseModels/Project.js +61 -0
  680. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  681. package/build/dist/Models/DatabaseModels/ProjectOidc.js +0 -4
  682. package/build/dist/Models/DatabaseModels/ProjectOidc.js.map +1 -1
  683. package/build/dist/Models/DatabaseModels/ProjectSso.js +0 -4
  684. package/build/dist/Models/DatabaseModels/ProjectSso.js.map +1 -1
  685. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +231 -0
  686. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
  687. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js +439 -0
  688. package/build/dist/Models/DatabaseModels/ResourceAiAgent.js.map +1 -0
  689. package/build/dist/Models/DatabaseModels/RumApplication.js +12 -0
  690. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  691. package/build/dist/Models/DatabaseModels/RunnerJob.js +145 -0
  692. package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
  693. package/build/dist/Models/DatabaseModels/ServerlessFunction.js +12 -0
  694. package/build/dist/Models/DatabaseModels/ServerlessFunction.js.map +1 -1
  695. package/build/dist/Models/DatabaseModels/Service.js +12 -0
  696. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  697. package/build/dist/Models/DatabaseModels/StatusPageOidc.js +0 -4
  698. package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -1
  699. package/build/dist/Models/DatabaseModels/StatusPageSso.js +0 -4
  700. package/build/dist/Models/DatabaseModels/StatusPageSso.js.map +1 -1
  701. package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js +49 -3
  702. package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js.map +1 -1
  703. package/build/dist/Models/DatabaseModels/VMwareVCenter.js +231 -0
  704. package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -1
  705. package/build/dist/Server/API/AIChatAPI.js +9 -103
  706. package/build/dist/Server/API/AIChatAPI.js.map +1 -1
  707. package/build/dist/Server/API/AIInvestigationAPI.js +3 -3
  708. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  709. package/build/dist/Server/API/AIInvestigationConversationAPI.js +162 -0
  710. package/build/dist/Server/API/AIInvestigationConversationAPI.js.map +1 -0
  711. package/build/dist/Server/API/AutoRemediationAPI.js +231 -1
  712. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
  713. package/build/dist/Server/API/IncidentFormAPI.js +245 -0
  714. package/build/dist/Server/API/IncidentFormAPI.js.map +1 -0
  715. package/build/dist/Server/API/ProjectOIDC.js +16 -24
  716. package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
  717. package/build/dist/Server/API/ProjectSSO.js +16 -24
  718. package/build/dist/Server/API/ProjectSSO.js.map +1 -1
  719. package/build/dist/Server/API/ResourceAiAccessAPI.js +1119 -0
  720. package/build/dist/Server/API/ResourceAiAccessAPI.js.map +1 -0
  721. package/build/dist/Server/API/StatusPageAPI.js +42 -75
  722. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  723. package/build/dist/Server/Enterprise/EnterpriseEdition.js +79 -25
  724. package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -1
  725. package/build/dist/Server/Enterprise/EnterpriseFeature.js +24 -3
  726. package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -1
  727. package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +1 -1
  728. package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -1
  729. package/build/dist/Server/EnvironmentConfig.js +1 -1
  730. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js +168 -0
  731. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js.map +1 -0
  732. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js +63 -0
  733. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js.map +1 -0
  734. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js +41 -0
  735. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js.map +1 -0
  736. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js +40 -0
  737. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js.map +1 -0
  738. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js +183 -0
  739. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js.map +1 -0
  740. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  741. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  742. package/build/dist/Server/Infrastructure/Semaphore.js +6 -0
  743. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  744. package/build/dist/Server/Middleware/IncidentFormRateLimit.js +559 -0
  745. package/build/dist/Server/Middleware/IncidentFormRateLimit.js.map +1 -0
  746. package/build/dist/Server/Middleware/TelemetryIngest.js +12 -5
  747. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  748. package/build/dist/Server/Middleware/UserAuthorization.js +11 -30
  749. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  750. package/build/dist/Server/Services/AIService.js +10 -13
  751. package/build/dist/Server/Services/AIService.js.map +1 -1
  752. package/build/dist/Server/Services/AnalyticsDatabaseService.js +26 -1
  753. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  754. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +601 -3
  755. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  756. package/build/dist/Server/Services/CephClusterService.js +104 -0
  757. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  758. package/build/dist/Server/Services/DatabaseServerService.js +99 -0
  759. package/build/dist/Server/Services/DatabaseServerService.js.map +1 -1
  760. package/build/dist/Server/Services/DockerHostService.js +104 -0
  761. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  762. package/build/dist/Server/Services/DockerSwarmClusterService.js +104 -0
  763. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  764. package/build/dist/Server/Services/HostService.js +114 -2
  765. package/build/dist/Server/Services/HostService.js.map +1 -1
  766. package/build/dist/Server/Services/IncidentCustomFieldService.js +83 -0
  767. package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
  768. package/build/dist/Server/Services/IncidentEpisodeMemberService.js +8 -4
  769. package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -1
  770. package/build/dist/Server/Services/IncidentEpisodeService.js +10 -1
  771. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  772. package/build/dist/Server/Services/IncidentFormService.js +1202 -0
  773. package/build/dist/Server/Services/IncidentFormService.js.map +1 -0
  774. package/build/dist/Server/Services/IncidentFormSubmissionService.js +91 -0
  775. package/build/dist/Server/Services/IncidentFormSubmissionService.js.map +1 -0
  776. package/build/dist/Server/Services/IncidentGroupingEngineService.js +20 -8
  777. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  778. package/build/dist/Server/Services/IncidentService.js +106 -4
  779. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  780. package/build/dist/Server/Services/IncidentTemplateService.js +18 -0
  781. package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
  782. package/build/dist/Server/Services/Index.js +14 -0
  783. package/build/dist/Server/Services/Index.js.map +1 -1
  784. package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js +262 -0
  785. package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js.map +1 -0
  786. package/build/dist/Server/Services/MessageQueueLabelRuleService.js +13 -0
  787. package/build/dist/Server/Services/MessageQueueLabelRuleService.js.map +1 -0
  788. package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js +334 -0
  789. package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js.map +1 -0
  790. package/build/dist/Server/Services/MessageQueueOwnerRuleService.js +13 -0
  791. package/build/dist/Server/Services/MessageQueueOwnerRuleService.js.map +1 -0
  792. package/build/dist/Server/Services/MessageQueueOwnerTeamService.js +62 -0
  793. package/build/dist/Server/Services/MessageQueueOwnerTeamService.js.map +1 -0
  794. package/build/dist/Server/Services/MessageQueueOwnerUserService.js +62 -0
  795. package/build/dist/Server/Services/MessageQueueOwnerUserService.js.map +1 -0
  796. package/build/dist/Server/Services/MessageQueueService.js +1140 -0
  797. package/build/dist/Server/Services/MessageQueueService.js.map +1 -0
  798. package/build/dist/Server/Services/MetricRecordingRuleService.js +46 -0
  799. package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -1
  800. package/build/dist/Server/Services/OpenTelemetryIngestService.js +25 -4
  801. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  802. package/build/dist/Server/Services/PodmanHostService.js +104 -0
  803. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  804. package/build/dist/Server/Services/ProjectService.js +0 -54
  805. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  806. package/build/dist/Server/Services/ProxmoxClusterService.js +104 -0
  807. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  808. package/build/dist/Server/Services/ResourceAiAccessService.js +1028 -0
  809. package/build/dist/Server/Services/ResourceAiAccessService.js.map +1 -0
  810. package/build/dist/Server/Services/ResourceAiAgentJobService.js +173 -0
  811. package/build/dist/Server/Services/ResourceAiAgentJobService.js.map +1 -0
  812. package/build/dist/Server/Services/ResourceAiAgentService.js +1687 -0
  813. package/build/dist/Server/Services/ResourceAiAgentService.js.map +1 -0
  814. package/build/dist/Server/Services/RunnerJobService.js +344 -5
  815. package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
  816. package/build/dist/Server/Services/StatusPagePrivateUserService.js +1 -4
  817. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  818. package/build/dist/Server/Services/StatusPageService.js +0 -46
  819. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  820. package/build/dist/Server/Services/TeamComplianceSettingService.js +120 -31
  821. package/build/dist/Server/Services/TeamComplianceSettingService.js.map +1 -1
  822. package/build/dist/Server/Services/TelemetryUsageBillingService.js +26 -0
  823. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  824. package/build/dist/Server/Services/TraceRecordingRuleService.js +37 -0
  825. package/build/dist/Server/Services/TraceRecordingRuleService.js.map +1 -1
  826. package/build/dist/Server/Services/UserNotificationRuleService.js +8 -1
  827. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  828. package/build/dist/Server/Services/VMwareVCenterService.js +104 -0
  829. package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -1
  830. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js +12 -3
  831. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js.map +1 -1
  832. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +6 -3
  833. package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
  834. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +109 -37
  835. package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
  836. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +16 -0
  837. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  838. package/build/dist/Server/Types/Database/Permissions/TablePermission.js +3 -3
  839. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +9 -6
  840. package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
  841. package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js +128 -0
  842. package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js.map +1 -0
  843. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +192 -50
  844. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
  845. package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js +133 -0
  846. package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js.map +1 -0
  847. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +53 -13
  848. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  849. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +1 -1
  850. package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js +206 -0
  851. package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js.map +1 -0
  852. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +53 -26
  853. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -1
  854. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +4 -2
  855. package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -1
  856. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +1 -29
  857. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
  858. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +24 -24
  859. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
  860. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +1036 -32
  861. package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
  862. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +661 -41
  863. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  864. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +21 -1
  865. package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
  866. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +354 -0
  867. package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -0
  868. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js +160 -0
  869. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js.map +1 -0
  870. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js +33 -0
  871. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js.map +1 -0
  872. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js +640 -0
  873. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js.map +1 -0
  874. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js +226 -0
  875. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js.map +1 -0
  876. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +602 -0
  877. package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -0
  878. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +90 -14
  879. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  880. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +73 -10
  881. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  882. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +73 -10
  883. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  884. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +15 -18
  885. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  886. package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js +412 -0
  887. package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js.map +1 -0
  888. package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js +495 -0
  889. package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js.map +1 -0
  890. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js +10 -3
  891. package/build/dist/Server/Utils/AI/Toolbox/Serializer.js.map +1 -1
  892. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +290 -13
  893. package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
  894. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +29 -1
  895. package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
  896. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +9 -1
  897. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
  898. package/build/dist/Server/Utils/EditionEnforcement.js +20 -158
  899. package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -1
  900. package/build/dist/Server/Utils/LLM/LLMService.js +193 -54
  901. package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
  902. package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js +160 -0
  903. package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js.map +1 -0
  904. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +25 -0
  905. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
  906. package/build/dist/Server/Utils/SameOriginRequest.js +151 -0
  907. package/build/dist/Server/Utils/SameOriginRequest.js.map +1 -0
  908. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js +627 -0
  909. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js.map +1 -0
  910. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js +60 -5
  911. package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js.map +1 -1
  912. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +2 -0
  913. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -1
  914. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +4 -1
  915. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  916. package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js +1015 -0
  917. package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js.map +1 -0
  918. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +4 -1
  919. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
  920. package/build/dist/Server/Utils/VendorAssets.js +3 -3
  921. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +19 -15
  922. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
  923. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +19 -15
  924. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
  925. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +17 -1
  926. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
  927. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +186 -210
  928. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  929. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +22 -16
  930. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
  931. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +233 -167
  932. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
  933. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +273 -111
  934. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  935. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js +129 -0
  936. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js.map +1 -0
  937. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js +266 -0
  938. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js.map +1 -0
  939. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js +258 -0
  940. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js.map +1 -0
  941. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js +104 -0
  942. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js.map +1 -0
  943. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js +183 -0
  944. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js.map +1 -0
  945. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js +123 -0
  946. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js.map +1 -0
  947. package/build/dist/Types/AI/AIAgentRunLimits.js +91 -0
  948. package/build/dist/Types/AI/AIAgentRunLimits.js.map +1 -0
  949. package/build/dist/Types/AI/ResourceAiAccessApi.js +30 -0
  950. package/build/dist/Types/AI/ResourceAiAccessApi.js.map +1 -0
  951. package/build/dist/Types/AI/ResourceAiAccessPermissions.js +98 -0
  952. package/build/dist/Types/AI/ResourceAiAccessPermissions.js.map +1 -0
  953. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +116 -29
  954. package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
  955. package/build/dist/Types/Code/CodeType.js +2 -0
  956. package/build/dist/Types/Code/CodeType.js.map +1 -1
  957. package/build/dist/Types/Code/JsonSyntax.js +604 -0
  958. package/build/dist/Types/Code/JsonSyntax.js.map +1 -0
  959. package/build/dist/Types/CustomField/CustomFieldCreateSettings.js +310 -0
  960. package/build/dist/Types/CustomField/CustomFieldCreateSettings.js.map +1 -0
  961. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +38 -0
  962. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -1
  963. package/build/dist/Types/CustomField/CustomFieldValueValidator.js +10 -7
  964. package/build/dist/Types/CustomField/CustomFieldValueValidator.js.map +1 -1
  965. package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +1 -1
  966. package/build/dist/Types/Icon/IconProp.js +2 -0
  967. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  968. package/build/dist/Types/Incident/IncidentFormIpAllowlist.js +119 -0
  969. package/build/dist/Types/Incident/IncidentFormIpAllowlist.js.map +1 -0
  970. package/build/dist/Types/Incident/IncidentFormPublic.js +678 -0
  971. package/build/dist/Types/Incident/IncidentFormPublic.js.map +1 -0
  972. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +10 -3
  973. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -1
  974. package/build/dist/Types/MessageQueue/MessageQueueIdentity.js +184 -0
  975. package/build/dist/Types/MessageQueue/MessageQueueIdentity.js.map +1 -0
  976. package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js +190 -0
  977. package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js.map +1 -0
  978. package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js +1057 -0
  979. package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js.map +1 -0
  980. package/build/dist/Types/MessageQueue/MessagingSystem.js +394 -0
  981. package/build/dist/Types/MessageQueue/MessagingSystem.js.map +1 -0
  982. package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js +1768 -0
  983. package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js.map +1 -0
  984. package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js +1207 -0
  985. package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js.map +1 -0
  986. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +47 -21
  987. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  988. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +5 -0
  989. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  990. package/build/dist/Types/Monitor/RumAlertTemplates.js +199 -3
  991. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
  992. package/build/dist/Types/Permission.js +274 -0
  993. package/build/dist/Types/Permission.js.map +1 -1
  994. package/build/dist/Types/ResourceAiAgent/AiResourceType.js +242 -0
  995. package/build/dist/Types/ResourceAiAgent/AiResourceType.js.map +1 -0
  996. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +281 -0
  997. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -0
  998. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +12 -0
  999. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
  1000. package/build/dist/Types/Rules/RuleRun.js +4 -0
  1001. package/build/dist/Types/Rules/RuleRun.js.map +1 -1
  1002. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js +45 -0
  1003. package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js.map +1 -0
  1004. package/build/dist/Types/Runbook/RunbookStepType.js +27 -0
  1005. package/build/dist/Types/Runbook/RunbookStepType.js.map +1 -1
  1006. package/build/dist/Types/Team/ComplianceNotificationChannel.js +4 -3
  1007. package/build/dist/Types/Team/ComplianceNotificationChannel.js.map +1 -1
  1008. package/build/dist/Types/Team/ComplianceRule.js +48 -14
  1009. package/build/dist/Types/Team/ComplianceRule.js.map +1 -1
  1010. package/build/dist/Types/Team/ComplianceRuleType.js +2 -2
  1011. package/build/dist/Types/Telemetry/EntityType.js +16 -0
  1012. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  1013. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +13 -2
  1014. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
  1015. package/build/dist/Types/XML.js +23 -0
  1016. package/build/dist/Types/XML.js.map +1 -1
  1017. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +641 -266
  1018. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  1019. package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js +464 -0
  1020. package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js.map +1 -0
  1021. package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js +69 -0
  1022. package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js.map +1 -0
  1023. package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js +108 -0
  1024. package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js.map +1 -0
  1025. package/build/dist/UI/Components/CodeEditor/YamlEditor.js +14 -186
  1026. package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -1
  1027. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -1
  1028. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
  1029. package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js +5 -14
  1030. package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js.map +1 -1
  1031. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +14 -13
  1032. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  1033. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +1 -1
  1034. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
  1035. package/build/dist/UI/Components/Forms/Fields/FormField.js +8 -3
  1036. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  1037. package/build/dist/UI/Components/Icon/Icon.js +8 -0
  1038. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  1039. package/build/dist/UI/Components/Input/Input.js +11 -3
  1040. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  1041. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +2 -1
  1042. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  1043. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +14 -4
  1044. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  1045. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  1046. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  1047. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +710 -65
  1048. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
  1049. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js +238 -0
  1050. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js.map +1 -0
  1051. package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js +1028 -0
  1052. package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js.map +1 -0
  1053. package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js +1088 -0
  1054. package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js.map +1 -0
  1055. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +70 -10
  1056. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  1057. package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js +887 -0
  1058. package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js.map +1 -0
  1059. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +57 -6
  1060. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  1061. package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js +7 -5
  1062. package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js.map +1 -1
  1063. package/build/dist/UI/Components/Table/EmptyTableMessage.js +51 -0
  1064. package/build/dist/UI/Components/Table/EmptyTableMessage.js.map +1 -0
  1065. package/build/dist/UI/Components/Table/Table.js +30 -11
  1066. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  1067. package/build/dist/UI/Components/Table/TableRow.js +9 -2
  1068. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  1069. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +63 -1
  1070. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -1
  1071. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +4 -2
  1072. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  1073. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +91 -10
  1074. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -1
  1075. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +14 -4
  1076. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  1077. package/build/dist/UI/Components/TextArea/TextArea.js +9 -3
  1078. package/build/dist/UI/Components/TextArea/TextArea.js.map +1 -1
  1079. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js +1 -2
  1080. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js.map +1 -1
  1081. package/build/dist/Utils/AI/InvestigationReport.js +71 -11
  1082. package/build/dist/Utils/AI/InvestigationReport.js.map +1 -1
  1083. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js +1462 -0
  1084. package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js.map +1 -0
  1085. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js +122 -0
  1086. package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js.map +1 -0
  1087. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js +1139 -0
  1088. package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js.map +1 -0
  1089. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js +1060 -0
  1090. package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js.map +1 -0
  1091. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js +1301 -0
  1092. package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js.map +1 -0
  1093. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js +370 -0
  1094. package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js.map +1 -0
  1095. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js +498 -0
  1096. package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js.map +1 -0
  1097. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js +1565 -0
  1098. package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js.map +1 -0
  1099. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js +2206 -0
  1100. package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js.map +1 -0
  1101. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js +1129 -0
  1102. package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js.map +1 -0
  1103. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js +565 -0
  1104. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js.map +1 -0
  1105. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js +408 -0
  1106. package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js.map +1 -0
  1107. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js +1910 -0
  1108. package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js.map +1 -0
  1109. package/build/dist/Utils/LabelRuleImportExport.js +2 -0
  1110. package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
  1111. package/build/dist/Utils/Markdown/UntrustedMarkdown.js +988 -0
  1112. package/build/dist/Utils/Markdown/UntrustedMarkdown.js.map +1 -0
  1113. package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js +34 -0
  1114. package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js.map +1 -0
  1115. package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js +148 -0
  1116. package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js.map +1 -0
  1117. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js +160 -0
  1118. package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.js.map +1 -0
  1119. package/build/dist/Utils/Telemetry/EntityKey.js +36 -0
  1120. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  1121. package/package.json +1 -3
  1122. package/Server/Utils/CommunityEditionSsoReport.ts +0 -361
  1123. package/Tests/App/Accounts/LoginSsoEdition.test.tsx +0 -616
  1124. package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +0 -217
  1125. package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +0 -271
  1126. package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +0 -215
  1127. package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +0 -784
  1128. package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +0 -518
  1129. package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +0 -419
  1130. package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +0 -769
  1131. package/Tests/UI/Components/CodeEditor.test.tsx +0 -638
  1132. package/Tests/UI/Components/MonacoLoader.test.ts +0 -67
  1133. package/Tests/UI/Components/MonacoRuntime.test.ts +0 -121
  1134. package/Tests/UI/Components/Telemetry/TelemetryRetentionConfigForm.test.tsx +0 -329
  1135. package/Tests/UI/Components/YamlEditor.test.tsx +0 -847
  1136. package/UI/Components/CodeEditor/MonacoLoader.ts +0 -36
  1137. package/UI/Components/Telemetry/TelemetryRetentionConfigForm.tsx +0 -319
  1138. package/UI/Components/Telemetry/TelemetryRetentionConfigSummary.tsx +0 -223
  1139. package/build/dist/Server/Utils/CommunityEditionSsoReport.js +0 -223
  1140. package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +0 -1
  1141. package/build/dist/UI/Components/CodeEditor/MonacoLoader.js +0 -34
  1142. package/build/dist/UI/Components/CodeEditor/MonacoLoader.js.map +0 -1
  1143. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js +0 -171
  1144. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js.map +0 -1
  1145. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js +0 -119
  1146. package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js.map +0 -1
@@ -0,0 +1,1726 @@
1
+ import {
2
+ getMessageQueueMetricDescriptorsByName,
3
+ getMessageQueueMetricId,
4
+ getMessageQueueMetricsForSystem,
5
+ MESSAGE_QUEUE_BROKER_METRIC_NAMES,
6
+ MESSAGE_QUEUE_METRICS,
7
+ MessageQueueMetricDescriptor,
8
+ MESSAGING_CLIENT_METRIC_NAMES,
9
+ MESSAGING_SDK_METRIC_SYSTEMS,
10
+ } from "../../../Types/MessageQueue/MessageQueueMetricCatalog";
11
+ import {
12
+ getMessagingBrokerMetricsReceivers,
13
+ getMessagingBrokerScope,
14
+ getMessagingSystemDescriptor,
15
+ MESSAGING_SYSTEMS,
16
+ MessagingSystemDescriptor,
17
+ normalizeMessagingSystem,
18
+ } from "../../../Types/MessageQueue/MessagingSystem";
19
+ import AggregationType from "../../../Types/BaseDatabase/AggregationType";
20
+ import { METRIC_FIXTURES, MetricFixture } from "./MessagingTelemetryFixtures";
21
+ import { describe, expect, test } from "@jest/globals";
22
+
23
+ /*
24
+ * Every curated metric, exactly: what its tile and chart compute. A wrong
25
+ * aggregation, series combine or unit still draws a plausible chart — the
26
+ * lag of every consumer group added up instead of the worst one, a CloudWatch
27
+ * average summed, a Pub/Sub backlog in the wrong unit — so each is pinned
28
+ * here, checked against the descriptor's description when it was written.
29
+ * The design's minimum set (DESIGN.md §2.4) is part of it.
30
+ */
31
+ interface ExpectedMetricRow {
32
+ system: string;
33
+ metricName: string;
34
+ signal: MessageQueueMetricDescriptor["signal"];
35
+ kind: MessageQueueMetricDescriptor["kind"];
36
+ unit: string;
37
+ aggregation: AggregationType;
38
+ seriesCombine: MessageQueueMetricDescriptor["seriesCombine"];
39
+ seriesKeys: ReadonlyArray<string> | null;
40
+ excludeSeriesWithAttributes: ReadonlyArray<string> | null;
41
+ }
42
+
43
+ function row(
44
+ system: string,
45
+ metricName: string,
46
+ signal: MessageQueueMetricDescriptor["signal"],
47
+ kind: MessageQueueMetricDescriptor["kind"],
48
+ unit: string,
49
+ aggregation: AggregationType,
50
+ seriesCombine: MessageQueueMetricDescriptor["seriesCombine"],
51
+ seriesKeys: ReadonlyArray<string> | null = null,
52
+ excludeSeriesWithAttributes: ReadonlyArray<string> | null = null,
53
+ ): ExpectedMetricRow {
54
+ return {
55
+ system,
56
+ metricName,
57
+ signal,
58
+ kind,
59
+ unit,
60
+ aggregation,
61
+ seriesCombine,
62
+ seriesKeys,
63
+ excludeSeriesWithAttributes,
64
+ };
65
+ }
66
+
67
+ function rowOf(descriptor: MessageQueueMetricDescriptor): ExpectedMetricRow {
68
+ return row(
69
+ descriptor.system,
70
+ descriptor.metricName,
71
+ descriptor.signal,
72
+ descriptor.kind,
73
+ descriptor.unit,
74
+ descriptor.aggregation,
75
+ descriptor.seriesCombine,
76
+ descriptor.seriesKeys || null,
77
+ descriptor.excludeSeriesWithAttributes || null,
78
+ );
79
+ }
80
+
81
+ const AZURE_RESULT: ReadonlyArray<string> = [
82
+ "metadata_operationresult",
83
+ "metadata_OperationResult",
84
+ ];
85
+
86
+ const EXPECTED_METRICS: ReadonlyArray<ExpectedMetricRow> = [
87
+ // Kafka: the group (or partition) furthest behind, never the total.
88
+ row(
89
+ "kafka",
90
+ "kafka.consumer_group.lag_sum",
91
+ "consumerLag",
92
+ "gauge",
93
+ "messages",
94
+ AggregationType.Max,
95
+ "max",
96
+ ["group"],
97
+ ),
98
+ row(
99
+ "kafka",
100
+ "kafka.consumer_group.lag",
101
+ "consumerLag",
102
+ "gauge",
103
+ "messages",
104
+ AggregationType.Max,
105
+ "max",
106
+ ["group", "partition"],
107
+ ),
108
+ row(
109
+ "kafka",
110
+ "kafka.consumer_group.offset_sum",
111
+ "consumed",
112
+ "counter",
113
+ "messages",
114
+ AggregationType.Max,
115
+ "sum",
116
+ ),
117
+ row(
118
+ "kafka",
119
+ "kafka.partition.current_offset",
120
+ "published",
121
+ "counter",
122
+ "messages",
123
+ AggregationType.Max,
124
+ "sum",
125
+ ),
126
+ // RabbitMQ: ready + unacknowledged; the fewest consumers seen in a bucket.
127
+ row(
128
+ "rabbitmq",
129
+ "rabbitmq.message.current",
130
+ "backlog",
131
+ "gauge",
132
+ "messages",
133
+ AggregationType.Avg,
134
+ "sum",
135
+ ["state"],
136
+ ),
137
+ row(
138
+ "rabbitmq",
139
+ "rabbitmq.message.published",
140
+ "published",
141
+ "counter",
142
+ "messages",
143
+ AggregationType.Max,
144
+ "sum",
145
+ ),
146
+ row(
147
+ "rabbitmq",
148
+ "rabbitmq.message.delivered",
149
+ "consumed",
150
+ "counter",
151
+ "messages",
152
+ AggregationType.Max,
153
+ "sum",
154
+ ),
155
+ row(
156
+ "rabbitmq",
157
+ "rabbitmq.message.acknowledged",
158
+ "consumed",
159
+ "counter",
160
+ "messages",
161
+ AggregationType.Max,
162
+ "sum",
163
+ ),
164
+ row(
165
+ "rabbitmq",
166
+ "rabbitmq.message.dropped",
167
+ "errors",
168
+ "counter",
169
+ "messages",
170
+ AggregationType.Max,
171
+ "sum",
172
+ ),
173
+ row(
174
+ "rabbitmq",
175
+ "rabbitmq.consumer.count",
176
+ "consumers",
177
+ "gauge",
178
+ "consumers",
179
+ AggregationType.Min,
180
+ "sum",
181
+ ),
182
+ // ActiveMQ: added up across brokers; AverageEnqueueTime in s, legacy in ms.
183
+ row(
184
+ "activemq",
185
+ "activemq.message.queue.size",
186
+ "backlog",
187
+ "gauge",
188
+ "messages",
189
+ AggregationType.Avg,
190
+ "sum",
191
+ ["activemq.broker.name", "activemq.destination.type"],
192
+ ),
193
+ row(
194
+ "activemq",
195
+ "activemq.message.current",
196
+ "backlog",
197
+ "gauge",
198
+ "messages",
199
+ AggregationType.Avg,
200
+ "sum",
201
+ ["broker"],
202
+ ),
203
+ row(
204
+ "activemq",
205
+ "activemq.message.enqueued",
206
+ "published",
207
+ "counter",
208
+ "messages",
209
+ AggregationType.Max,
210
+ "sum",
211
+ ),
212
+ row(
213
+ "activemq",
214
+ "activemq.message.dequeued",
215
+ "consumed",
216
+ "counter",
217
+ "messages",
218
+ AggregationType.Max,
219
+ "sum",
220
+ ),
221
+ row(
222
+ "activemq",
223
+ "activemq.message.expired",
224
+ "errors",
225
+ "counter",
226
+ "messages",
227
+ AggregationType.Max,
228
+ "sum",
229
+ ),
230
+ row(
231
+ "activemq",
232
+ "activemq.consumer.count",
233
+ "consumers",
234
+ "gauge",
235
+ "consumers",
236
+ AggregationType.Min,
237
+ "sum",
238
+ ["activemq.broker.name", "activemq.destination.type", "broker"],
239
+ ),
240
+ row(
241
+ "activemq",
242
+ "activemq.message.enqueue.average_duration",
243
+ "oldestMessageAge",
244
+ "gauge",
245
+ "s",
246
+ AggregationType.Max,
247
+ "max",
248
+ ),
249
+ row(
250
+ "activemq",
251
+ "activemq.message.wait_time.avg",
252
+ "oldestMessageAge",
253
+ "gauge",
254
+ "ms",
255
+ AggregationType.Max,
256
+ "max",
257
+ ),
258
+ // Service Bus: levels at their worst, per-minute counts summed.
259
+ row(
260
+ "servicebus",
261
+ "azure_activemessages_average",
262
+ "backlog",
263
+ "gauge",
264
+ "messages",
265
+ AggregationType.Max,
266
+ "max",
267
+ ),
268
+ row(
269
+ "servicebus",
270
+ "azure_deadletteredmessages_average",
271
+ "deadLetter",
272
+ "gauge",
273
+ "messages",
274
+ AggregationType.Max,
275
+ "max",
276
+ ),
277
+ row(
278
+ "servicebus",
279
+ "azure_incomingmessages_total",
280
+ "published",
281
+ "gauge",
282
+ "messages",
283
+ AggregationType.Sum,
284
+ "sum",
285
+ ),
286
+ row(
287
+ "servicebus",
288
+ "azure_outgoingmessages_total",
289
+ "consumed",
290
+ "gauge",
291
+ "messages",
292
+ AggregationType.Sum,
293
+ "sum",
294
+ ),
295
+ row(
296
+ "servicebus",
297
+ "azure_completemessage_total",
298
+ "consumed",
299
+ "gauge",
300
+ "messages",
301
+ AggregationType.Sum,
302
+ "sum",
303
+ ),
304
+ row(
305
+ "servicebus",
306
+ "azure_abandonmessage_total",
307
+ "errors",
308
+ "gauge",
309
+ "messages",
310
+ AggregationType.Sum,
311
+ "sum",
312
+ ),
313
+ row(
314
+ "servicebus",
315
+ "azure_servererrors_total",
316
+ "errors",
317
+ "gauge",
318
+ "requests",
319
+ AggregationType.Sum,
320
+ "sum",
321
+ AZURE_RESULT,
322
+ ),
323
+ row(
324
+ "servicebus",
325
+ "azure_usererrors_total",
326
+ "errors",
327
+ "gauge",
328
+ "requests",
329
+ AggregationType.Sum,
330
+ "sum",
331
+ AZURE_RESULT,
332
+ ),
333
+ row(
334
+ "servicebus",
335
+ "azure_throttledrequests_total",
336
+ "throttled",
337
+ "gauge",
338
+ "requests",
339
+ AggregationType.Sum,
340
+ "sum",
341
+ [
342
+ ...AZURE_RESULT,
343
+ "metadata_messagingerrorsubcode",
344
+ "metadata_MessagingErrorSubCode",
345
+ ],
346
+ ),
347
+ // Event Hubs.
348
+ row(
349
+ "eventhubs",
350
+ "azure_incomingmessages_total",
351
+ "published",
352
+ "gauge",
353
+ "messages",
354
+ AggregationType.Sum,
355
+ "sum",
356
+ ),
357
+ row(
358
+ "eventhubs",
359
+ "azure_outgoingmessages_total",
360
+ "consumed",
361
+ "gauge",
362
+ "messages",
363
+ AggregationType.Sum,
364
+ "sum",
365
+ ),
366
+ row(
367
+ "eventhubs",
368
+ "azure_servererrors_total",
369
+ "errors",
370
+ "gauge",
371
+ "requests",
372
+ AggregationType.Sum,
373
+ "sum",
374
+ AZURE_RESULT,
375
+ ),
376
+ row(
377
+ "eventhubs",
378
+ "azure_usererrors_total",
379
+ "errors",
380
+ "gauge",
381
+ "requests",
382
+ AggregationType.Sum,
383
+ "sum",
384
+ AZURE_RESULT,
385
+ ),
386
+ row(
387
+ "eventhubs",
388
+ "azure_quotaexceedederrors_total",
389
+ "errors",
390
+ "gauge",
391
+ "requests",
392
+ AggregationType.Sum,
393
+ "sum",
394
+ AZURE_RESULT,
395
+ ),
396
+ row(
397
+ "eventhubs",
398
+ "azure_throttledrequests_total",
399
+ "throttled",
400
+ "gauge",
401
+ "requests",
402
+ AggregationType.Sum,
403
+ "sum",
404
+ AZURE_RESULT,
405
+ ),
406
+ // Amazon SQS: CloudWatch's Average of a level, its Sum of a count; one series per queue.
407
+ row(
408
+ "aws_sqs",
409
+ "amazonaws.com/aws/sqs/approximatenumberofmessagesvisible",
410
+ "backlog",
411
+ "gauge",
412
+ "messages",
413
+ AggregationType.Avg,
414
+ "max",
415
+ ),
416
+ row(
417
+ "aws_sqs",
418
+ "approximatenumberofmessagesvisible",
419
+ "backlog",
420
+ "gauge",
421
+ "messages",
422
+ AggregationType.Avg,
423
+ "max",
424
+ ),
425
+ row(
426
+ "aws_sqs",
427
+ "amazonaws.com/aws/sqs/approximateageofoldestmessage",
428
+ "oldestMessageAge",
429
+ "gauge",
430
+ "s",
431
+ AggregationType.Max,
432
+ "max",
433
+ ),
434
+ row(
435
+ "aws_sqs",
436
+ "approximateageofoldestmessage",
437
+ "oldestMessageAge",
438
+ "gauge",
439
+ "s",
440
+ AggregationType.Max,
441
+ "max",
442
+ ),
443
+ row(
444
+ "aws_sqs",
445
+ "amazonaws.com/aws/sqs/approximatenumberofmessagesnotvisible",
446
+ "backlog",
447
+ "gauge",
448
+ "messages",
449
+ AggregationType.Avg,
450
+ "max",
451
+ ),
452
+ row(
453
+ "aws_sqs",
454
+ "approximatenumberofmessagesnotvisible",
455
+ "backlog",
456
+ "gauge",
457
+ "messages",
458
+ AggregationType.Avg,
459
+ "max",
460
+ ),
461
+ row(
462
+ "aws_sqs",
463
+ "amazonaws.com/aws/sqs/numberofmessagessent",
464
+ "published",
465
+ "gauge",
466
+ "messages",
467
+ AggregationType.Sum,
468
+ "max",
469
+ ),
470
+ row(
471
+ "aws_sqs",
472
+ "numberofmessagessent",
473
+ "published",
474
+ "gauge",
475
+ "messages",
476
+ AggregationType.Sum,
477
+ "max",
478
+ ),
479
+ row(
480
+ "aws_sqs",
481
+ "amazonaws.com/aws/sqs/numberofmessagesreceived",
482
+ "consumed",
483
+ "gauge",
484
+ "messages",
485
+ AggregationType.Sum,
486
+ "max",
487
+ ),
488
+ row(
489
+ "aws_sqs",
490
+ "numberofmessagesreceived",
491
+ "consumed",
492
+ "gauge",
493
+ "messages",
494
+ AggregationType.Sum,
495
+ "max",
496
+ ),
497
+ row(
498
+ "aws_sqs",
499
+ "amazonaws.com/aws/sqs/numberofmessagesdeleted",
500
+ "consumed",
501
+ "gauge",
502
+ "messages",
503
+ AggregationType.Sum,
504
+ "max",
505
+ ),
506
+ row(
507
+ "aws_sqs",
508
+ "numberofmessagesdeleted",
509
+ "consumed",
510
+ "gauge",
511
+ "messages",
512
+ AggregationType.Sum,
513
+ "max",
514
+ ),
515
+ // Amazon SNS.
516
+ row(
517
+ "aws.sns",
518
+ "amazonaws.com/aws/sns/numberofmessagespublished",
519
+ "published",
520
+ "gauge",
521
+ "messages",
522
+ AggregationType.Sum,
523
+ "max",
524
+ ),
525
+ row(
526
+ "aws.sns",
527
+ "numberofmessagespublished",
528
+ "published",
529
+ "gauge",
530
+ "messages",
531
+ AggregationType.Sum,
532
+ "max",
533
+ ),
534
+ row(
535
+ "aws.sns",
536
+ "amazonaws.com/aws/sns/numberofnotificationsdelivered",
537
+ "consumed",
538
+ "gauge",
539
+ "messages",
540
+ AggregationType.Sum,
541
+ "max",
542
+ ),
543
+ row(
544
+ "aws.sns",
545
+ "numberofnotificationsdelivered",
546
+ "consumed",
547
+ "gauge",
548
+ "messages",
549
+ AggregationType.Sum,
550
+ "max",
551
+ ),
552
+ row(
553
+ "aws.sns",
554
+ "amazonaws.com/aws/sns/numberofnotificationsfailed",
555
+ "errors",
556
+ "gauge",
557
+ "messages",
558
+ AggregationType.Sum,
559
+ "max",
560
+ ),
561
+ row(
562
+ "aws.sns",
563
+ "numberofnotificationsfailed",
564
+ "errors",
565
+ "gauge",
566
+ "messages",
567
+ AggregationType.Sum,
568
+ "max",
569
+ ),
570
+ row(
571
+ "aws.sns",
572
+ "amazonaws.com/aws/sns/numberofnotificationsredriventodlq",
573
+ "deadLetter",
574
+ "gauge",
575
+ "messages",
576
+ AggregationType.Sum,
577
+ "max",
578
+ ),
579
+ row(
580
+ "aws.sns",
581
+ "numberofnotificationsredriventodlq",
582
+ "deadLetter",
583
+ "gauge",
584
+ "messages",
585
+ AggregationType.Sum,
586
+ "max",
587
+ ),
588
+ // Google Cloud Pub/Sub: levels at their worst, DELTA counts summed.
589
+ row(
590
+ "gcp_pubsub",
591
+ "pubsub.googleapis.com/subscription/num_undelivered_messages",
592
+ "backlog",
593
+ "gauge",
594
+ "messages",
595
+ AggregationType.Max,
596
+ "max",
597
+ ),
598
+ row(
599
+ "gcp_pubsub",
600
+ "pubsub.googleapis.com/subscription/oldest_unacked_message_age",
601
+ "oldestMessageAge",
602
+ "gauge",
603
+ "s",
604
+ AggregationType.Max,
605
+ "max",
606
+ ),
607
+ row(
608
+ "gcp_pubsub",
609
+ "pubsub.googleapis.com/subscription/dead_letter_message_count",
610
+ "deadLetter",
611
+ "gauge",
612
+ "messages",
613
+ AggregationType.Sum,
614
+ "sum",
615
+ ["response_code", "resource.response_code"],
616
+ ),
617
+ row(
618
+ "gcp_pubsub",
619
+ "pubsub.googleapis.com/subscription/ack_message_count",
620
+ "consumed",
621
+ "gauge",
622
+ "messages",
623
+ AggregationType.Sum,
624
+ "sum",
625
+ ["delivery_type", "resource.delivery_type"],
626
+ ),
627
+ row(
628
+ "gcp_pubsub",
629
+ "pubsub.googleapis.com/topic/send_request_count",
630
+ "published",
631
+ "gauge",
632
+ "requests",
633
+ AggregationType.Sum,
634
+ "sum",
635
+ [
636
+ "response_class",
637
+ "response_code",
638
+ "resource.response_class",
639
+ "resource.response_code",
640
+ ],
641
+ ),
642
+ // Apache Pulsar: a topic's partitions add up; lag and age at their worst.
643
+ row(
644
+ "pulsar",
645
+ "pulsar_msg_backlog",
646
+ "backlog",
647
+ "gauge",
648
+ "messages",
649
+ AggregationType.Avg,
650
+ "sum",
651
+ ["cluster", "topic", "partition"],
652
+ ),
653
+ row(
654
+ "pulsar",
655
+ "pulsar_subscription_back_log",
656
+ "consumerLag",
657
+ "gauge",
658
+ "messages",
659
+ AggregationType.Max,
660
+ "max",
661
+ ["cluster", "topic", "partition", "subscription"],
662
+ ),
663
+ row(
664
+ "pulsar",
665
+ "pulsar_storage_backlog_age_seconds",
666
+ "oldestMessageAge",
667
+ "gauge",
668
+ "s",
669
+ AggregationType.Max,
670
+ "max",
671
+ ["cluster", "topic", "partition"],
672
+ ),
673
+ row(
674
+ "pulsar",
675
+ "pulsar_in_messages_total",
676
+ "published",
677
+ "counter",
678
+ "messages",
679
+ AggregationType.Max,
680
+ "sum",
681
+ ),
682
+ row(
683
+ "pulsar",
684
+ "pulsar_out_messages_total",
685
+ "consumed",
686
+ "counter",
687
+ "messages",
688
+ AggregationType.Max,
689
+ "sum",
690
+ null,
691
+ ["consumer_name", "consumer_id"],
692
+ ),
693
+ // Apache RocketMQ: the group furthest behind.
694
+ row(
695
+ "rocketmq",
696
+ "rocketmq_consumer_lag_messages",
697
+ "consumerLag",
698
+ "gauge",
699
+ "messages",
700
+ AggregationType.Max,
701
+ "max",
702
+ ["consumer_group", "is_retry"],
703
+ ),
704
+ row(
705
+ "rocketmq",
706
+ "rocketmq_consumer_ready_messages",
707
+ "backlog",
708
+ "gauge",
709
+ "messages",
710
+ AggregationType.Max,
711
+ "max",
712
+ ["consumer_group", "is_retry"],
713
+ ),
714
+ row(
715
+ "rocketmq",
716
+ "rocketmq_send_to_dlq_messages_total",
717
+ "deadLetter",
718
+ "counter",
719
+ "messages",
720
+ AggregationType.Max,
721
+ "sum",
722
+ ),
723
+ row(
724
+ "rocketmq",
725
+ "rocketmq_messages_in_total",
726
+ "published",
727
+ "counter",
728
+ "messages",
729
+ AggregationType.Max,
730
+ "sum",
731
+ ),
732
+ ];
733
+
734
+ /*
735
+ * Running totals — each MUST be a counter (charting the raw value would
736
+ * draw an ever-rising line): monotonic cumulative Sums per the receivers'
737
+ * metadata.yaml, offsets that only grow, and Pulsar's `*_total` gauges that
738
+ * hold running totals (live: `# TYPE pulsar_in_messages_total gauge`).
739
+ */
740
+ const KNOWN_RUNNING_TOTALS: ReadonlyArray<string> = [
741
+ "kafka.consumer_group.offset_sum",
742
+ "kafka.partition.current_offset",
743
+ "rabbitmq.message.published",
744
+ "rabbitmq.message.delivered",
745
+ "rabbitmq.message.acknowledged",
746
+ "rabbitmq.message.dropped",
747
+ "activemq.message.enqueued",
748
+ "activemq.message.dequeued",
749
+ "activemq.message.expired",
750
+ "pulsar_in_messages_total",
751
+ "pulsar_out_messages_total",
752
+ "rocketmq_send_to_dlq_messages_total",
753
+ "rocketmq_messages_in_total",
754
+ ];
755
+
756
+ /*
757
+ * Never counters: levels, and the per-period counts cloud monitoring
758
+ * reports (Azure's `_total` is one minute's sum, a CloudWatch point one
759
+ * period's, a Pub/Sub DELTA one sample's) — their rate would be meaningless.
760
+ */
761
+ const KNOWN_LEVELS_AND_PERIOD_COUNTS: ReadonlyArray<string> = [
762
+ "kafka.consumer_group.lag_sum",
763
+ "kafka.consumer_group.lag",
764
+ "rabbitmq.message.current",
765
+ "rabbitmq.consumer.count",
766
+ "activemq.message.queue.size",
767
+ "activemq.message.current",
768
+ "activemq.consumer.count",
769
+ "activemq.message.enqueue.average_duration",
770
+ "activemq.message.wait_time.avg",
771
+ "azure_activemessages_average",
772
+ "azure_deadletteredmessages_average",
773
+ "azure_incomingmessages_total",
774
+ "azure_outgoingmessages_total",
775
+ "azure_completemessage_total",
776
+ "azure_abandonmessage_total",
777
+ "azure_servererrors_total",
778
+ "azure_usererrors_total",
779
+ "azure_throttledrequests_total",
780
+ "azure_quotaexceedederrors_total",
781
+ "amazonaws.com/aws/sqs/numberofmessagessent",
782
+ "numberofmessagessent",
783
+ "amazonaws.com/aws/sns/numberofmessagespublished",
784
+ "pubsub.googleapis.com/subscription/num_undelivered_messages",
785
+ "pubsub.googleapis.com/subscription/dead_letter_message_count",
786
+ "pubsub.googleapis.com/subscription/ack_message_count",
787
+ "pubsub.googleapis.com/topic/send_request_count",
788
+ "pulsar_msg_backlog",
789
+ "pulsar_subscription_back_log",
790
+ "pulsar_storage_backlog_age_seconds",
791
+ "rocketmq_consumer_lag_messages",
792
+ "rocketmq_consumer_ready_messages",
793
+ ];
794
+
795
+ /*
796
+ * The datapoint attributes that split each curated GAUGE into several
797
+ * series, from the receivers' source and live captures (stored keys). Each
798
+ * must be handled: a destination or scope key, a required key, a series key
799
+ * (added up or maxed) — or listed in CONSTANT_PER_DESTINATION (the same
800
+ * value for every series of one destination, so pooling it is harmless).
801
+ */
802
+ const GAUGE_SPLITTING_ATTRIBUTES: Readonly<
803
+ Record<string, ReadonlyArray<string>>
804
+ > = {
805
+ "kafka.consumer_group.lag_sum": ["group", "topic"],
806
+ "kafka.consumer_group.lag": ["group", "topic", "partition"],
807
+ "rabbitmq.message.current": ["state", "resource.rabbitmq.queue.name"],
808
+ "rabbitmq.consumer.count": ["resource.rabbitmq.queue.name"],
809
+ "activemq.message.queue.size": [
810
+ "messaging.destination.name",
811
+ "activemq.destination.type",
812
+ "activemq.broker.name",
813
+ ],
814
+ "activemq.message.current": ["destination", "broker"],
815
+ "activemq.consumer.count": [
816
+ "messaging.destination.name",
817
+ "activemq.destination.type",
818
+ "activemq.broker.name",
819
+ "destination",
820
+ "broker",
821
+ ],
822
+ azure_servererrors_total: ["metadata_entityname", "metadata_operationresult"],
823
+ azure_usererrors_total: ["metadata_entityname", "metadata_operationresult"],
824
+ azure_throttledrequests_total: [
825
+ "metadata_entityname",
826
+ "metadata_operationresult",
827
+ ],
828
+ "pubsub.googleapis.com/subscription/dead_letter_message_count": [
829
+ "response_code",
830
+ ],
831
+ "pubsub.googleapis.com/subscription/ack_message_count": ["delivery_type"],
832
+ "pubsub.googleapis.com/topic/send_request_count": [
833
+ "response_class",
834
+ "response_code",
835
+ ],
836
+ pulsar_msg_backlog: ["cluster", "namespace", "topic"],
837
+ pulsar_subscription_back_log: [
838
+ "cluster",
839
+ "namespace",
840
+ "topic",
841
+ "subscription",
842
+ ],
843
+ pulsar_storage_backlog_age_seconds: ["cluster", "namespace", "topic"],
844
+ rocketmq_consumer_lag_messages: [
845
+ "topic",
846
+ "consumer_group",
847
+ "is_retry",
848
+ "is_system",
849
+ ],
850
+ rocketmq_consumer_ready_messages: [
851
+ "topic",
852
+ "consumer_group",
853
+ "is_retry",
854
+ "is_system",
855
+ ],
856
+ };
857
+
858
+ /*
859
+ * Attributes that never differ between the series of one destination: a
860
+ * Pulsar topic lives in exactly one namespace; a RocketMQ topic is a system
861
+ * topic or not.
862
+ */
863
+ const CONSTANT_PER_DESTINATION: ReadonlyArray<string> = [
864
+ "namespace",
865
+ "is_system",
866
+ ];
867
+
868
+ /*
869
+ * Resource attributes the curated sources emit, by their bare OTel name. A
870
+ * catalog key naming one without the `resource.` prefix would never match
871
+ * a stored datapoint.
872
+ */
873
+ const KNOWN_RESOURCE_ATTRIBUTES: ReadonlyArray<string> = [
874
+ "rabbitmq.queue.name",
875
+ "rabbitmq.vhost.name",
876
+ "rabbitmq.node.name",
877
+ "kafka.cluster.alias",
878
+ "kafka.cluster.id",
879
+ "subscription_id",
880
+ "topic_id",
881
+ "project_id",
882
+ "gcp.resource_type",
883
+ "service.name",
884
+ "service.namespace",
885
+ "service.instance.id",
886
+ "server.address",
887
+ "server.port",
888
+ "cloud.provider",
889
+ "cloud.account.id",
890
+ "cloud.region",
891
+ "azuremonitor.subscription_id",
892
+ "azuremonitor.tenant_id",
893
+ ];
894
+
895
+ const ALLOWED_UNITS: ReadonlyArray<string> = [
896
+ "messages",
897
+ "s",
898
+ "ms",
899
+ "requests",
900
+ "consumers",
901
+ ];
902
+
903
+ const ALLOWED_AGGREGATIONS: ReadonlyArray<AggregationType> = [
904
+ AggregationType.Avg,
905
+ AggregationType.Sum,
906
+ AggregationType.Max,
907
+ AggregationType.Min,
908
+ ];
909
+
910
+ function keysOf(descriptor: MessageQueueMetricDescriptor): Array<string> {
911
+ return [
912
+ ...descriptor.destinationAttributes,
913
+ ...(descriptor.scopeAttributes || []),
914
+ ...Object.keys(descriptor.requiredAttributes || {}),
915
+ ...(descriptor.seriesKeys || []),
916
+ ];
917
+ }
918
+
919
+ function descriptorsNamed(
920
+ metricName: string,
921
+ ): Array<MessageQueueMetricDescriptor> {
922
+ return MESSAGE_QUEUE_METRICS.filter(
923
+ (descriptor: MessageQueueMetricDescriptor): boolean => {
924
+ return descriptor.metricName === metricName;
925
+ },
926
+ );
927
+ }
928
+
929
+ describe("MESSAGE_QUEUE_METRICS catalog", () => {
930
+ test.each(
931
+ EXPECTED_METRICS.map(
932
+ (expected: ExpectedMetricRow): [string, ExpectedMetricRow] => {
933
+ return [`${expected.system} ${expected.metricName}`, expected];
934
+ },
935
+ ),
936
+ )(
937
+ "%s is curated exactly as expected",
938
+ (_name: string, expected: ExpectedMetricRow) => {
939
+ const match: MessageQueueMetricDescriptor | undefined =
940
+ MESSAGE_QUEUE_METRICS.find(
941
+ (descriptor: MessageQueueMetricDescriptor): boolean => {
942
+ return (
943
+ descriptor.system === expected.system &&
944
+ descriptor.metricName === expected.metricName
945
+ );
946
+ },
947
+ );
948
+ expect(match).toBeDefined();
949
+ expect(rowOf(match!)).toEqual(expected);
950
+ },
951
+ );
952
+
953
+ test("every curated metric is pinned above, and nothing more", () => {
954
+ expect(MESSAGE_QUEUE_METRICS.map(rowOf)).toEqual(EXPECTED_METRICS);
955
+ });
956
+
957
+ test("consumer lag always shows the consumer furthest behind, never a total", () => {
958
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
959
+ if (descriptor.signal !== "consumerLag") {
960
+ continue;
961
+ }
962
+ expect({
963
+ metric: descriptor.metricName,
964
+ kind: descriptor.kind,
965
+ aggregation: descriptor.aggregation,
966
+ seriesCombine: descriptor.seriesCombine,
967
+ }).toEqual({
968
+ metric: descriptor.metricName,
969
+ kind: "gauge",
970
+ aggregation: AggregationType.Max,
971
+ seriesCombine: "max",
972
+ });
973
+ }
974
+ });
975
+
976
+ test("a cloud provider's per-period count is summed within a bucket; its levels never are", () => {
977
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
978
+ const bare: string = descriptor.metricName.substring(
979
+ descriptor.metricName.lastIndexOf("/") + 1,
980
+ );
981
+ const isPeriodCount: boolean =
982
+ (descriptor.receiver === "azure_monitor" && bare.endsWith("_total")) ||
983
+ (["aws_cloudwatch", "awsfirehose"].includes(descriptor.receiver) &&
984
+ bare.startsWith("numberof")) ||
985
+ (descriptor.receiver === "googlecloudmonitoring" &&
986
+ bare.endsWith("_count"));
987
+ const isCloudLevel: boolean =
988
+ (descriptor.receiver === "azure_monitor" &&
989
+ bare.endsWith("_average")) ||
990
+ (["aws_cloudwatch", "awsfirehose"].includes(descriptor.receiver) &&
991
+ bare.startsWith("approximate")) ||
992
+ (descriptor.receiver === "googlecloudmonitoring" &&
993
+ !bare.endsWith("_count"));
994
+ if (isPeriodCount) {
995
+ expect({
996
+ metric: descriptor.metricName,
997
+ aggregation: descriptor.aggregation,
998
+ }).toEqual({
999
+ metric: descriptor.metricName,
1000
+ aggregation: AggregationType.Sum,
1001
+ });
1002
+ }
1003
+ if (isCloudLevel) {
1004
+ expect({
1005
+ metric: descriptor.metricName,
1006
+ summed: descriptor.aggregation === AggregationType.Sum,
1007
+ }).toEqual({ metric: descriptor.metricName, summed: false });
1008
+ }
1009
+ }
1010
+ });
1011
+
1012
+ test("a message's age is in seconds everywhere but the JMX Scraper's legacy name", () => {
1013
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1014
+ if (descriptor.signal !== "oldestMessageAge") {
1015
+ continue;
1016
+ }
1017
+ expect({ metric: descriptor.metricName, unit: descriptor.unit }).toEqual({
1018
+ metric: descriptor.metricName,
1019
+ unit:
1020
+ descriptor.metricName === "activemq.message.wait_time.avg"
1021
+ ? "ms"
1022
+ : "s",
1023
+ });
1024
+ }
1025
+ });
1026
+
1027
+ test("a backlog made of parts adds them up: RabbitMQ's states, Pulsar's partitions, ActiveMQ's brokers", () => {
1028
+ for (const metricName of [
1029
+ "rabbitmq.message.current",
1030
+ "pulsar_msg_backlog",
1031
+ "activemq.message.queue.size",
1032
+ "activemq.message.current",
1033
+ ]) {
1034
+ for (const descriptor of descriptorsNamed(metricName)) {
1035
+ expect(descriptor.signal).toBe("backlog");
1036
+ expect(descriptor.seriesCombine).toBe("sum");
1037
+ expect((descriptor.seriesKeys || []).length).toBeGreaterThan(0);
1038
+ }
1039
+ }
1040
+ });
1041
+
1042
+ test("a consumer count shows the fewest consumers a bucket saw", () => {
1043
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1044
+ if (descriptor.signal === "consumers") {
1045
+ expect(descriptor.aggregation).toBe(AggregationType.Min);
1046
+ }
1047
+ }
1048
+ });
1049
+
1050
+ test("repeat markers are datapoint keys no other role of the entry uses", () => {
1051
+ let marked: number = 0;
1052
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1053
+ const markers: ReadonlyArray<string> =
1054
+ descriptor.excludeSeriesWithAttributes || [];
1055
+ if (markers.length === 0) {
1056
+ expect(descriptor.excludeSeriesWithAttributes).toBeUndefined();
1057
+ continue;
1058
+ }
1059
+ marked++;
1060
+ const used: Set<string> = new Set<string>(keysOf(descriptor));
1061
+ for (const key of markers) {
1062
+ expect(key).toBe(key.trim());
1063
+ expect(key.startsWith("resource.")).toBe(false);
1064
+ expect({ key, alsoUsed: used.has(key) }).toEqual({
1065
+ key,
1066
+ alsoUsed: false,
1067
+ });
1068
+ }
1069
+ }
1070
+ expect(marked).toBe(1);
1071
+ });
1072
+
1073
+ test("names are lowercase and trimmed, exactly as ingest stores them", () => {
1074
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1075
+ expect(descriptor.metricName).toBe(
1076
+ descriptor.metricName.trim().toLowerCase(),
1077
+ );
1078
+ expect(descriptor.metricName).not.toMatch(/\s/);
1079
+ expect(descriptor.metricName.length).toBeGreaterThan(0);
1080
+ }
1081
+ });
1082
+
1083
+ test("every system is a canonical catalog system", () => {
1084
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1085
+ expect(normalizeMessagingSystem(descriptor.system)).toBe(
1086
+ descriptor.system,
1087
+ );
1088
+ expect(getMessagingSystemDescriptor(descriptor.system)).not.toBeNull();
1089
+ }
1090
+ });
1091
+
1092
+ test("a system has a name at most once", () => {
1093
+ const ids: Array<string> = MESSAGE_QUEUE_METRICS.map(
1094
+ (descriptor: MessageQueueMetricDescriptor): string => {
1095
+ return `${descriptor.system}|${descriptor.metricName}`;
1096
+ },
1097
+ );
1098
+ expect(new Set(ids).size).toBe(ids.length);
1099
+ });
1100
+
1101
+ test("titles are non-empty, trimmed and unique per system", () => {
1102
+ const seen: Map<string, Set<string>> = new Map<string, Set<string>>();
1103
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1104
+ expect(descriptor.title.length).toBeGreaterThan(0);
1105
+ expect(descriptor.title).toBe(descriptor.title.trim());
1106
+ const titles: Set<string> =
1107
+ seen.get(descriptor.system) || new Set<string>();
1108
+ expect({
1109
+ system: descriptor.system,
1110
+ title: descriptor.title,
1111
+ duplicate: titles.has(descriptor.title.toLowerCase()),
1112
+ }).toEqual({
1113
+ system: descriptor.system,
1114
+ title: descriptor.title,
1115
+ duplicate: false,
1116
+ });
1117
+ titles.add(descriptor.title.toLowerCase());
1118
+ seen.set(descriptor.system, titles);
1119
+ }
1120
+ });
1121
+
1122
+ test("descriptions are full sentences", () => {
1123
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1124
+ const text: string = descriptor.description;
1125
+ expect({ metric: descriptor.metricName, text: text.trim() }).toEqual({
1126
+ metric: descriptor.metricName,
1127
+ text,
1128
+ });
1129
+ expect(text.length).toBeGreaterThan(20);
1130
+ expect(text).toMatch(/^[A-Z]/);
1131
+ expect(text.endsWith(".")).toBe(true);
1132
+ }
1133
+ });
1134
+
1135
+ test("units, signals, aggregations and combines come from the allowed sets", () => {
1136
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1137
+ expect(ALLOWED_UNITS).toContain(descriptor.unit);
1138
+ expect([
1139
+ "backlog",
1140
+ "deadLetter",
1141
+ "consumerLag",
1142
+ "published",
1143
+ "consumed",
1144
+ "errors",
1145
+ "throttled",
1146
+ "oldestMessageAge",
1147
+ "consumers",
1148
+ ]).toContain(descriptor.signal);
1149
+ expect(["gauge", "counter"]).toContain(descriptor.kind);
1150
+ expect(ALLOWED_AGGREGATIONS).toContain(descriptor.aggregation);
1151
+ expect(["sum", "max", "avg"]).toContain(descriptor.seriesCombine);
1152
+ }
1153
+ });
1154
+
1155
+ test("a time signal is in seconds or milliseconds, and only a time signal is", () => {
1156
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1157
+ const isTime: boolean =
1158
+ descriptor.unit === "s" || descriptor.unit === "ms";
1159
+ expect({
1160
+ metric: descriptor.metricName,
1161
+ isTime,
1162
+ }).toEqual({
1163
+ metric: descriptor.metricName,
1164
+ isTime: descriptor.signal === "oldestMessageAge",
1165
+ });
1166
+ }
1167
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1168
+ if (descriptor.signal === "consumers") {
1169
+ expect(descriptor.unit).toBe("consumers");
1170
+ }
1171
+ }
1172
+ });
1173
+
1174
+ test("counters use aggregation Max and seriesCombine sum, and carry no series keys", () => {
1175
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1176
+ if (descriptor.kind !== "counter") {
1177
+ continue;
1178
+ }
1179
+ expect({
1180
+ metric: descriptor.metricName,
1181
+ aggregation: descriptor.aggregation,
1182
+ seriesCombine: descriptor.seriesCombine,
1183
+ seriesKeys: descriptor.seriesKeys,
1184
+ }).toEqual({
1185
+ metric: descriptor.metricName,
1186
+ aggregation: AggregationType.Max,
1187
+ seriesCombine: "sum",
1188
+ seriesKeys: undefined,
1189
+ });
1190
+ }
1191
+ });
1192
+
1193
+ test.each(
1194
+ KNOWN_RUNNING_TOTALS.map((name: string): [string] => {
1195
+ return [name];
1196
+ }),
1197
+ )("%s is a counter", (metricName: string) => {
1198
+ const matches: Array<MessageQueueMetricDescriptor> =
1199
+ descriptorsNamed(metricName);
1200
+ expect(matches.length).toBeGreaterThan(0);
1201
+ for (const descriptor of matches) {
1202
+ expect(descriptor.kind).toBe("counter");
1203
+ }
1204
+ });
1205
+
1206
+ test.each(
1207
+ KNOWN_LEVELS_AND_PERIOD_COUNTS.map((name: string): [string] => {
1208
+ return [name];
1209
+ }),
1210
+ )("%s is a gauge", (metricName: string) => {
1211
+ const matches: Array<MessageQueueMetricDescriptor> =
1212
+ descriptorsNamed(metricName);
1213
+ expect(matches.length).toBeGreaterThan(0);
1214
+ for (const descriptor of matches) {
1215
+ expect(descriptor.kind).toBe("gauge");
1216
+ }
1217
+ });
1218
+
1219
+ test("every cloud-monitoring metric is a gauge: providers report per-period values, never running totals", () => {
1220
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1221
+ if (
1222
+ [
1223
+ "azure_monitor",
1224
+ "aws_cloudwatch",
1225
+ "awsfirehose",
1226
+ "googlecloudmonitoring",
1227
+ ].includes(descriptor.receiver)
1228
+ ) {
1229
+ expect({
1230
+ metric: descriptor.metricName,
1231
+ kind: descriptor.kind,
1232
+ }).toEqual({ metric: descriptor.metricName, kind: "gauge" });
1233
+ }
1234
+ }
1235
+ });
1236
+
1237
+ test("destination keys are non-empty, unique and trimmed", () => {
1238
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1239
+ expect(descriptor.destinationAttributes.length).toBeGreaterThan(0);
1240
+ expect(new Set(descriptor.destinationAttributes).size).toBe(
1241
+ descriptor.destinationAttributes.length,
1242
+ );
1243
+ for (const key of keysOf(descriptor)) {
1244
+ expect(key).toBe(key.trim());
1245
+ expect(key.length).toBeGreaterThan(0);
1246
+ }
1247
+ }
1248
+ });
1249
+
1250
+ test("resource keys carry the stored `resource.` prefix", () => {
1251
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1252
+ for (const key of keysOf(descriptor)) {
1253
+ expect({
1254
+ metric: descriptor.metricName,
1255
+ key,
1256
+ unprefixedResourceKey: KNOWN_RESOURCE_ATTRIBUTES.includes(key),
1257
+ }).toEqual({
1258
+ metric: descriptor.metricName,
1259
+ key,
1260
+ unprefixedResourceKey: false,
1261
+ });
1262
+ if (key.startsWith("resource.")) {
1263
+ expect(key.length).toBeGreaterThan("resource.".length);
1264
+ }
1265
+ }
1266
+ }
1267
+ });
1268
+
1269
+ test("every receiver is named by its system's broker-metrics source", () => {
1270
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1271
+ const system: MessagingSystemDescriptor | null =
1272
+ getMessagingSystemDescriptor(descriptor.system);
1273
+ expect({
1274
+ metric: descriptor.metricName,
1275
+ receiver: descriptor.receiver,
1276
+ named: getMessagingBrokerMetricsReceivers(
1277
+ system!.brokerMetrics,
1278
+ ).includes(descriptor.receiver),
1279
+ }).toEqual({
1280
+ metric: descriptor.metricName,
1281
+ receiver: descriptor.receiver,
1282
+ named: true,
1283
+ });
1284
+ }
1285
+ });
1286
+
1287
+ test("only a namespace-scoped system reads a scope, and it always does", () => {
1288
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1289
+ const scoped: boolean =
1290
+ getMessagingBrokerScope(descriptor.system) === "azure-namespace";
1291
+ expect({
1292
+ metric: descriptor.metricName,
1293
+ system: descriptor.system,
1294
+ hasScope: Boolean(
1295
+ descriptor.scopeAttributes && descriptor.scopeAttributes.length > 0,
1296
+ ),
1297
+ }).toEqual({
1298
+ metric: descriptor.metricName,
1299
+ system: descriptor.system,
1300
+ hasScope: scoped,
1301
+ });
1302
+ }
1303
+ });
1304
+
1305
+ test("required values are lowercase and non-empty", () => {
1306
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1307
+ for (const [key, values] of Object.entries(
1308
+ descriptor.requiredAttributes || {},
1309
+ )) {
1310
+ expect(key.length).toBeGreaterThan(0);
1311
+ expect(values.length).toBeGreaterThan(0);
1312
+ for (const value of values) {
1313
+ expect(value).toBe(value.trim().toLowerCase());
1314
+ expect(value.length).toBeGreaterThan(0);
1315
+ }
1316
+ }
1317
+ }
1318
+ });
1319
+
1320
+ test("a name several systems share is told apart by disjoint required values", () => {
1321
+ const byName: Map<string, Array<MessageQueueMetricDescriptor>> = new Map<
1322
+ string,
1323
+ Array<MessageQueueMetricDescriptor>
1324
+ >();
1325
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1326
+ byName.set(descriptor.metricName, [
1327
+ ...(byName.get(descriptor.metricName) || []),
1328
+ descriptor,
1329
+ ]);
1330
+ }
1331
+ let shared: number = 0;
1332
+ for (const [name, descriptors] of byName) {
1333
+ if (descriptors.length < 2) {
1334
+ continue;
1335
+ }
1336
+ shared++;
1337
+ const claimed: Set<string> = new Set<string>();
1338
+ for (const descriptor of descriptors) {
1339
+ expect({
1340
+ name,
1341
+ required: Boolean(descriptor.requiredAttributes),
1342
+ }).toEqual({ name, required: true });
1343
+ for (const [key, values] of Object.entries(
1344
+ descriptor.requiredAttributes || {},
1345
+ )) {
1346
+ for (const value of values) {
1347
+ const claim: string = `${key}=${value}`;
1348
+ expect({ name, claim, taken: claimed.has(claim) }).toEqual({
1349
+ name,
1350
+ claim,
1351
+ taken: false,
1352
+ });
1353
+ claimed.add(claim);
1354
+ }
1355
+ }
1356
+ }
1357
+ }
1358
+ // Service Bus and Event Hubs share Azure Monitor's names.
1359
+ expect(shared).toBeGreaterThanOrEqual(5);
1360
+ });
1361
+
1362
+ test("every Azure metric requires its namespace type and reads both EntityName spellings", () => {
1363
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1364
+ if (descriptor.receiver !== "azure_monitor") {
1365
+ continue;
1366
+ }
1367
+ expect(descriptor.metricName.startsWith("azure_")).toBe(true);
1368
+ expect(descriptor.destinationAttributes).toEqual([
1369
+ "metadata_entityname",
1370
+ "metadata_EntityName",
1371
+ ]);
1372
+ expect(descriptor.scopeAttributes).toEqual(["name"]);
1373
+ expect(descriptor.requiredAttributes).toEqual({
1374
+ type: [
1375
+ descriptor.system === "servicebus"
1376
+ ? "microsoft.servicebus/namespaces"
1377
+ : "microsoft.eventhub/namespaces",
1378
+ ],
1379
+ });
1380
+ // A breakdown dimension is read under both spellings too.
1381
+ for (const key of descriptor.seriesKeys || []) {
1382
+ expect(key.startsWith("metadata_")).toBe(true);
1383
+ const lower: string = key.toLowerCase();
1384
+ expect(
1385
+ (descriptor.seriesKeys || []).filter((other: string): boolean => {
1386
+ return other.toLowerCase() === lower;
1387
+ }).length,
1388
+ ).toBe(2);
1389
+ }
1390
+ }
1391
+ });
1392
+
1393
+ test("every CloudWatch metric exists in both shapes, alike but for the name, key and title", () => {
1394
+ const aws: Array<MessageQueueMetricDescriptor> =
1395
+ MESSAGE_QUEUE_METRICS.filter(
1396
+ (descriptor: MessageQueueMetricDescriptor): boolean => {
1397
+ return (
1398
+ descriptor.system === "aws_sqs" || descriptor.system === "aws.sns"
1399
+ );
1400
+ },
1401
+ );
1402
+ const pulled: Array<MessageQueueMetricDescriptor> = aws.filter(
1403
+ (descriptor: MessageQueueMetricDescriptor): boolean => {
1404
+ return descriptor.receiver === "aws_cloudwatch";
1405
+ },
1406
+ );
1407
+ expect(pulled.length * 2).toBe(aws.length);
1408
+ for (const namespaced of pulled) {
1409
+ const prefix: string =
1410
+ namespaced.system === "aws_sqs"
1411
+ ? "amazonaws.com/aws/sqs/"
1412
+ : "amazonaws.com/aws/sns/";
1413
+ expect(namespaced.metricName.startsWith(prefix)).toBe(true);
1414
+ const bare: string = namespaced.metricName.substring(prefix.length);
1415
+ const json: MessageQueueMetricDescriptor | undefined = aws.find(
1416
+ (descriptor: MessageQueueMetricDescriptor): boolean => {
1417
+ return (
1418
+ descriptor.system === namespaced.system &&
1419
+ descriptor.metricName === bare
1420
+ );
1421
+ },
1422
+ );
1423
+ expect(json).toBeDefined();
1424
+ const dimension: string =
1425
+ namespaced.system === "aws_sqs" ? "QueueName" : "TopicName";
1426
+ expect(namespaced.destinationAttributes).toEqual([
1427
+ `Dimensions.${dimension}`,
1428
+ ]);
1429
+ expect(namespaced.requiredAttributes).toBeUndefined();
1430
+ expect(json!.destinationAttributes).toEqual([dimension]);
1431
+ expect(json!.requiredAttributes).toEqual({
1432
+ "resource.service.name": [
1433
+ namespaced.system === "aws_sqs" ? "sqs" : "sns",
1434
+ ],
1435
+ });
1436
+ expect(json!.receiver).toBe("awsfirehose");
1437
+ expect(json!.title).toBe(`${namespaced.title} (JSON stream)`);
1438
+ expect({
1439
+ signal: json!.signal,
1440
+ kind: json!.kind,
1441
+ unit: json!.unit,
1442
+ aggregation: json!.aggregation,
1443
+ seriesCombine: json!.seriesCombine,
1444
+ description: json!.description,
1445
+ }).toEqual({
1446
+ signal: namespaced.signal,
1447
+ kind: namespaced.kind,
1448
+ unit: namespaced.unit,
1449
+ aggregation: namespaced.aggregation,
1450
+ seriesCombine: namespaced.seriesCombine,
1451
+ description: namespaced.description,
1452
+ });
1453
+ }
1454
+ });
1455
+
1456
+ test("every splitting attribute of a curated gauge is handled", () => {
1457
+ for (const [metricName, attributes] of Object.entries(
1458
+ GAUGE_SPLITTING_ATTRIBUTES,
1459
+ )) {
1460
+ const matches: Array<MessageQueueMetricDescriptor> =
1461
+ descriptorsNamed(metricName);
1462
+ expect({ metricName, curated: matches.length > 0 }).toEqual({
1463
+ metricName,
1464
+ curated: true,
1465
+ });
1466
+ for (const descriptor of matches) {
1467
+ expect(descriptor.kind).toBe("gauge");
1468
+ const handled: Set<string> = new Set<string>(keysOf(descriptor));
1469
+ for (const attribute of attributes) {
1470
+ expect({
1471
+ metricName,
1472
+ system: descriptor.system,
1473
+ attribute,
1474
+ handled:
1475
+ handled.has(attribute) ||
1476
+ CONSTANT_PER_DESTINATION.includes(attribute),
1477
+ }).toEqual({
1478
+ metricName,
1479
+ system: descriptor.system,
1480
+ attribute,
1481
+ handled: true,
1482
+ });
1483
+ }
1484
+ }
1485
+ }
1486
+ });
1487
+
1488
+ test("the RabbitMQ queue depth adds its ready and unacknowledged series", () => {
1489
+ expect(descriptorsNamed("rabbitmq.message.current")[0]).toMatchObject({
1490
+ seriesKeys: ["state"],
1491
+ seriesCombine: "sum",
1492
+ });
1493
+ });
1494
+
1495
+ test("only Pub/Sub is off by default: the receiver reads only listed metric types", () => {
1496
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1497
+ expect({
1498
+ metric: descriptor.metricName,
1499
+ enabledByDefault: descriptor.enabledByDefault,
1500
+ }).toEqual({
1501
+ metric: descriptor.metricName,
1502
+ enabledByDefault: descriptor.receiver !== "googlecloudmonitoring",
1503
+ });
1504
+ }
1505
+ });
1506
+
1507
+ test("every curated system has 4 to 12 entries; the others have none", () => {
1508
+ for (const system of MESSAGING_SYSTEMS) {
1509
+ const count: number = getMessageQueueMetricsForSystem(
1510
+ system.system,
1511
+ ).length;
1512
+ if (["jms", "nats", "bullmq", "eventgrid"].includes(system.system)) {
1513
+ expect({ system: system.system, count }).toEqual({
1514
+ system: system.system,
1515
+ count: 0,
1516
+ });
1517
+ } else {
1518
+ expect(count).toBeGreaterThanOrEqual(4);
1519
+ expect(count).toBeLessThanOrEqual(12);
1520
+ }
1521
+ }
1522
+ });
1523
+
1524
+ test("every curated metric has a realistic datapoint fixture that resolves to a queue", () => {
1525
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1526
+ const fixture: MetricFixture | undefined = METRIC_FIXTURES.find(
1527
+ (candidate: MetricFixture): boolean => {
1528
+ return (
1529
+ candidate.metricName === descriptor.metricName &&
1530
+ candidate.expected !== null &&
1531
+ candidate.expected.system === descriptor.system
1532
+ );
1533
+ },
1534
+ );
1535
+ expect({
1536
+ system: descriptor.system,
1537
+ metric: descriptor.metricName,
1538
+ covered: fixture !== undefined,
1539
+ }).toEqual({
1540
+ system: descriptor.system,
1541
+ metric: descriptor.metricName,
1542
+ covered: true,
1543
+ });
1544
+ }
1545
+ });
1546
+ });
1547
+
1548
+ describe("getMessageQueueMetricsForSystem", () => {
1549
+ test("returns a system's entries in catalog order", () => {
1550
+ for (const system of MESSAGING_SYSTEMS) {
1551
+ expect(getMessageQueueMetricsForSystem(system.system)).toEqual(
1552
+ MESSAGE_QUEUE_METRICS.filter(
1553
+ (descriptor: MessageQueueMetricDescriptor): boolean => {
1554
+ return descriptor.system === system.system;
1555
+ },
1556
+ ),
1557
+ );
1558
+ }
1559
+ expect(
1560
+ getMessageQueueMetricsForSystem("rabbitmq").map(
1561
+ (descriptor: MessageQueueMetricDescriptor): string => {
1562
+ return descriptor.metricName;
1563
+ },
1564
+ ),
1565
+ ).toEqual([
1566
+ "rabbitmq.message.current",
1567
+ "rabbitmq.message.published",
1568
+ "rabbitmq.message.delivered",
1569
+ "rabbitmq.message.acknowledged",
1570
+ "rabbitmq.message.dropped",
1571
+ "rabbitmq.consumer.count",
1572
+ ]);
1573
+ });
1574
+
1575
+ test("accepts aliases and any casing", () => {
1576
+ expect(getMessageQueueMetricsForSystem("AmazonSQS")).toEqual(
1577
+ getMessageQueueMetricsForSystem("aws_sqs"),
1578
+ );
1579
+ expect(getMessageQueueMetricsForSystem("azure_servicebus")).toEqual(
1580
+ getMessageQueueMetricsForSystem("servicebus"),
1581
+ );
1582
+ expect(getMessageQueueMetricsForSystem(" KAFKA ")).toEqual(
1583
+ getMessageQueueMetricsForSystem("kafka"),
1584
+ );
1585
+ expect(getMessageQueueMetricsForSystem("artemis").length).toBeGreaterThan(
1586
+ 0,
1587
+ );
1588
+ });
1589
+
1590
+ test("an unknown, excluded or empty system has no curated metrics", () => {
1591
+ expect(getMessageQueueMetricsForSystem("ibmmq")).toEqual([]);
1592
+ expect(getMessageQueueMetricsForSystem("spring_integration")).toEqual([]);
1593
+ expect(getMessageQueueMetricsForSystem("")).toEqual([]);
1594
+ expect(getMessageQueueMetricsForSystem(null)).toEqual([]);
1595
+ expect(getMessageQueueMetricsForSystem(undefined)).toEqual([]);
1596
+ expect(getMessageQueueMetricsForSystem("constructor")).toEqual([]);
1597
+ });
1598
+ });
1599
+
1600
+ describe("getMessageQueueMetricDescriptorsByName", () => {
1601
+ test("finds each name's entries, trimmed and case-insensitively", () => {
1602
+ for (const descriptor of MESSAGE_QUEUE_METRICS) {
1603
+ expect(
1604
+ getMessageQueueMetricDescriptorsByName(descriptor.metricName),
1605
+ ).toContain(descriptor);
1606
+ expect(
1607
+ getMessageQueueMetricDescriptorsByName(
1608
+ ` ${descriptor.metricName.toUpperCase()} `,
1609
+ ),
1610
+ ).toContain(descriptor);
1611
+ }
1612
+ });
1613
+
1614
+ test("Azure Monitor's shared names return one entry per service", () => {
1615
+ expect(
1616
+ getMessageQueueMetricDescriptorsByName(
1617
+ "azure_incomingmessages_total",
1618
+ ).map((descriptor: MessageQueueMetricDescriptor): string => {
1619
+ return descriptor.system;
1620
+ }),
1621
+ ).toEqual(["servicebus", "eventhubs"]);
1622
+ expect(
1623
+ getMessageQueueMetricDescriptorsByName(
1624
+ "azure_activemessages_average",
1625
+ ).map((descriptor: MessageQueueMetricDescriptor): string => {
1626
+ return descriptor.system;
1627
+ }),
1628
+ ).toEqual(["servicebus"]);
1629
+ });
1630
+
1631
+ test("an unknown name, an own-property name or a non-string finds nothing", () => {
1632
+ for (const name of [
1633
+ "",
1634
+ "system.cpu.utilization",
1635
+ "constructor",
1636
+ "__proto__",
1637
+ "toString",
1638
+ "hasOwnProperty",
1639
+ ]) {
1640
+ expect(getMessageQueueMetricDescriptorsByName(name)).toEqual([]);
1641
+ }
1642
+ expect(
1643
+ getMessageQueueMetricDescriptorsByName(null as unknown as string),
1644
+ ).toEqual([]);
1645
+ expect(
1646
+ getMessageQueueMetricDescriptorsByName(42 as unknown as string),
1647
+ ).toEqual([]);
1648
+ });
1649
+ });
1650
+
1651
+ describe("metric name sets", () => {
1652
+ test("MESSAGE_QUEUE_BROKER_METRIC_NAMES is exactly the catalog's names", () => {
1653
+ expect([...MESSAGE_QUEUE_BROKER_METRIC_NAMES].sort()).toEqual(
1654
+ [
1655
+ ...new Set(
1656
+ MESSAGE_QUEUE_METRICS.map(
1657
+ (descriptor: MessageQueueMetricDescriptor): string => {
1658
+ return descriptor.metricName;
1659
+ },
1660
+ ),
1661
+ ),
1662
+ ].sort(),
1663
+ );
1664
+ });
1665
+
1666
+ test("MESSAGING_CLIENT_METRIC_NAMES is the semconv client metrics, current and deprecated, and the SDK metrics that name no system", () => {
1667
+ expect([...MESSAGING_CLIENT_METRIC_NAMES].sort()).toEqual(
1668
+ [
1669
+ "messaging.client.sent.messages",
1670
+ "messaging.client.consumed.messages",
1671
+ "messaging.client.operation.duration",
1672
+ "messaging.process.duration",
1673
+ "messaging.publish.duration",
1674
+ "messaging.receive.duration",
1675
+ "messaging.publish.messages",
1676
+ "messaging.receive.messages",
1677
+ "messaging.process.messages",
1678
+ "messaging.client.published.messages",
1679
+ // The Azure SDK for Java's ServiceBusMeter.
1680
+ "messaging.servicebus.messages.sent",
1681
+ "messaging.servicebus.receiver.lag",
1682
+ "messaging.servicebus.settlement.request.duration",
1683
+ "messaging.servicebus.settlement.sequence_number",
1684
+ ].sort(),
1685
+ );
1686
+ for (const name of MESSAGING_CLIENT_METRIC_NAMES) {
1687
+ expect(name).toBe(name.toLowerCase());
1688
+ expect(name.startsWith("messaging.")).toBe(true);
1689
+ }
1690
+ });
1691
+
1692
+ test("an SDK metric's implied system is a canonical catalog system, and ingest selects it", () => {
1693
+ expect(MESSAGING_SDK_METRIC_SYSTEMS.size).toBeGreaterThan(0);
1694
+ for (const [name, system] of MESSAGING_SDK_METRIC_SYSTEMS) {
1695
+ expect(normalizeMessagingSystem(system)).toBe(system);
1696
+ expect(getMessagingSystemDescriptor(system)).not.toBeNull();
1697
+ expect(MESSAGING_CLIENT_METRIC_NAMES.has(name)).toBe(true);
1698
+ expect(name).toBe(name.trim().toLowerCase());
1699
+ }
1700
+ });
1701
+
1702
+ test("a client metric is never a curated broker metric", () => {
1703
+ for (const name of MESSAGING_CLIENT_METRIC_NAMES) {
1704
+ expect(MESSAGE_QUEUE_BROKER_METRIC_NAMES.has(name)).toBe(false);
1705
+ expect(getMessageQueueMetricDescriptorsByName(name)).toEqual([]);
1706
+ }
1707
+ });
1708
+ });
1709
+
1710
+ describe("getMessageQueueMetricId", () => {
1711
+ test("is `${system}:${metricName}` and unique across the catalog", () => {
1712
+ const ids: Array<string> = MESSAGE_QUEUE_METRICS.map(
1713
+ (descriptor: MessageQueueMetricDescriptor): string => {
1714
+ return getMessageQueueMetricId(descriptor);
1715
+ },
1716
+ );
1717
+ expect(new Set(ids).size).toBe(ids.length);
1718
+ expect(
1719
+ getMessageQueueMetricId(
1720
+ getMessageQueueMetricDescriptorsByName(
1721
+ "azure_incomingmessages_total",
1722
+ )[1]!,
1723
+ ),
1724
+ ).toBe("eventhubs:azure_incomingmessages_total");
1725
+ });
1726
+ });