@oneuptime/common 13.0.6 → 13.0.7

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 (589) hide show
  1. package/Models/DatabaseModels/AIAgentOwnerTeam.ts +6 -0
  2. package/Models/DatabaseModels/AIAgentOwnerUser.ts +6 -0
  3. package/Models/DatabaseModels/Alert.ts +12 -0
  4. package/Models/DatabaseModels/AlertEpisodeOwnerTeam.ts +6 -1
  5. package/Models/DatabaseModels/AlertEpisodeOwnerUser.ts +6 -1
  6. package/Models/DatabaseModels/AlertOwnerTeam.ts +6 -1
  7. package/Models/DatabaseModels/AlertOwnerUser.ts +6 -1
  8. package/Models/DatabaseModels/CephClusterOwnerTeam.ts +6 -0
  9. package/Models/DatabaseModels/CephClusterOwnerUser.ts +6 -0
  10. package/Models/DatabaseModels/CloudResourceOwnerTeam.ts +6 -0
  11. package/Models/DatabaseModels/CloudResourceOwnerUser.ts +6 -0
  12. package/Models/DatabaseModels/DashboardOwnerTeam.ts +6 -1
  13. package/Models/DatabaseModels/DashboardOwnerUser.ts +6 -1
  14. package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +8 -0
  15. package/Models/DatabaseModels/DockerHostOwnerTeam.ts +6 -0
  16. package/Models/DatabaseModels/DockerHostOwnerUser.ts +6 -0
  17. package/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.ts +6 -0
  18. package/Models/DatabaseModels/DockerSwarmClusterOwnerUser.ts +6 -0
  19. package/Models/DatabaseModels/HostOwnerTeam.ts +6 -0
  20. package/Models/DatabaseModels/HostOwnerUser.ts +6 -0
  21. package/Models/DatabaseModels/Incident.ts +12 -0
  22. package/Models/DatabaseModels/IncidentEpisodeOwnerTeam.ts +6 -1
  23. package/Models/DatabaseModels/IncidentEpisodeOwnerUser.ts +6 -1
  24. package/Models/DatabaseModels/IncidentOwnerTeam.ts +6 -1
  25. package/Models/DatabaseModels/IncidentOwnerUser.ts +6 -1
  26. package/Models/DatabaseModels/IncidentTemplateOwnerTeam.ts +6 -0
  27. package/Models/DatabaseModels/IncidentTemplateOwnerUser.ts +6 -0
  28. package/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.ts +6 -1
  29. package/Models/DatabaseModels/IncomingCallPolicyOwnerUser.ts +6 -1
  30. package/Models/DatabaseModels/IoTFleetOwnerTeam.ts +6 -0
  31. package/Models/DatabaseModels/IoTFleetOwnerUser.ts +6 -0
  32. package/Models/DatabaseModels/KubernetesClusterOwnerTeam.ts +6 -0
  33. package/Models/DatabaseModels/KubernetesClusterOwnerUser.ts +6 -0
  34. package/Models/DatabaseModels/Monitor.ts +2 -3
  35. package/Models/DatabaseModels/MonitorGroupOwnerTeam.ts +6 -0
  36. package/Models/DatabaseModels/MonitorGroupOwnerUser.ts +6 -0
  37. package/Models/DatabaseModels/MonitorOwnerTeam.ts +6 -1
  38. package/Models/DatabaseModels/MonitorOwnerUser.ts +6 -1
  39. package/Models/DatabaseModels/MonitorTemplate.ts +2 -3
  40. package/Models/DatabaseModels/NetworkDeviceOwnerTeam.ts +6 -0
  41. package/Models/DatabaseModels/NetworkDeviceOwnerUser.ts +6 -0
  42. package/Models/DatabaseModels/OnCallDutyPolicyOwnerTeam.ts +6 -1
  43. package/Models/DatabaseModels/OnCallDutyPolicyOwnerUser.ts +6 -1
  44. package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.ts +6 -1
  45. package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.ts +6 -1
  46. package/Models/DatabaseModels/PodmanHostOwnerTeam.ts +6 -0
  47. package/Models/DatabaseModels/PodmanHostOwnerUser.ts +6 -0
  48. package/Models/DatabaseModels/ProbeOwnerTeam.ts +6 -0
  49. package/Models/DatabaseModels/ProbeOwnerUser.ts +6 -0
  50. package/Models/DatabaseModels/ProxmoxClusterOwnerTeam.ts +6 -0
  51. package/Models/DatabaseModels/ProxmoxClusterOwnerUser.ts +6 -0
  52. package/Models/DatabaseModels/RumApplicationOwnerTeam.ts +6 -0
  53. package/Models/DatabaseModels/RumApplicationOwnerUser.ts +6 -0
  54. package/Models/DatabaseModels/RunbookOwnerTeam.ts +6 -1
  55. package/Models/DatabaseModels/RunbookOwnerUser.ts +6 -1
  56. package/Models/DatabaseModels/RunnerOwnerTeam.ts +6 -1
  57. package/Models/DatabaseModels/RunnerOwnerUser.ts +6 -1
  58. package/Models/DatabaseModels/ScheduledMaintenanceOwnerTeam.ts +6 -1
  59. package/Models/DatabaseModels/ScheduledMaintenanceOwnerUser.ts +6 -1
  60. package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerTeam.ts +8 -0
  61. package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.ts +8 -0
  62. package/Models/DatabaseModels/ServerlessFunctionOwnerTeam.ts +6 -0
  63. package/Models/DatabaseModels/ServerlessFunctionOwnerUser.ts +6 -0
  64. package/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.ts +6 -1
  65. package/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.ts +6 -1
  66. package/Models/DatabaseModels/ServiceOwnerTeam.ts +6 -0
  67. package/Models/DatabaseModels/ServiceOwnerUser.ts +6 -0
  68. package/Models/DatabaseModels/StatusPageOwnerTeam.ts +6 -1
  69. package/Models/DatabaseModels/StatusPageOwnerUser.ts +6 -1
  70. package/Models/DatabaseModels/VMwareVCenterOwnerTeam.ts +6 -0
  71. package/Models/DatabaseModels/VMwareVCenterOwnerUser.ts +6 -0
  72. package/Models/DatabaseModels/WorkflowOwnerTeam.ts +6 -1
  73. package/Models/DatabaseModels/WorkflowOwnerUser.ts +6 -1
  74. package/Scripts/benchmark-fanin-capacity.js +2 -2
  75. package/Server/API/AIAgentDataAPI.ts +1 -1
  76. package/Server/API/AIChatAPI.ts +6 -4
  77. package/Server/API/AIInvestigationAPI.ts +7 -0
  78. package/Server/API/StatusPageAPI.ts +13 -0
  79. package/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.ts +1 -1
  80. package/Server/Infrastructure/Postgres/SchemaMigrations/1793500000000-MakeOwnerRowsUnique.ts +1057 -0
  81. package/Server/Infrastructure/Postgres/SchemaMigrations/1793700000000-AddAIInvestigationDecision.ts +25 -0
  82. package/Server/Infrastructure/Postgres/SchemaMigrations/1793800000000-RemoveMonitorDescriptionLengthLimit.ts +31 -0
  83. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  84. package/Server/Infrastructure/Postgres/SchemaMigrations/Readme.md +6 -4
  85. package/Server/Middleware/IdentityRateLimit.ts +34 -1
  86. package/Server/Middleware/PublicDashboardRateLimit.ts +169 -39
  87. package/Server/Services/AlertEpisodeService.ts +13 -34
  88. package/Server/Services/AlertGroupingEngineService.ts +7 -4
  89. package/Server/Services/AlertService.ts +13 -32
  90. package/Server/Services/CephClusterOwnerRuleEngineService.ts +18 -10
  91. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +18 -10
  92. package/Server/Services/DashboardOwnerRuleEngineService.ts +18 -10
  93. package/Server/Services/DatabaseService.ts +101 -1
  94. package/Server/Services/DockerHostOwnerRuleEngineService.ts +18 -10
  95. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +18 -10
  96. package/Server/Services/HostOwnerRuleEngineService.ts +18 -10
  97. package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +6 -4
  98. package/Server/Services/IncidentEpisodeService.ts +15 -75
  99. package/Server/Services/IncidentGroupingEngineService.ts +7 -4
  100. package/Server/Services/IncidentService.ts +13 -32
  101. package/Server/Services/IncidentTemplateService.ts +13 -36
  102. package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +18 -10
  103. package/Server/Services/IoTFleetOwnerRuleEngineService.ts +18 -10
  104. package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +18 -10
  105. package/Server/Services/MonitorService.ts +13 -32
  106. package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +18 -10
  107. package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +18 -10
  108. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +18 -10
  109. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +18 -10
  110. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +18 -10
  111. package/Server/Services/RumApplicationOwnerRuleEngineService.ts +18 -10
  112. package/Server/Services/RunbookOwnerRuleEngineService.ts +18 -10
  113. package/Server/Services/ScheduledMaintenanceService.ts +13 -34
  114. package/Server/Services/ScheduledMaintenanceTemplateService.ts +12 -34
  115. package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +18 -10
  116. package/Server/Services/ServiceOwnerRuleEngineService.ts +18 -10
  117. package/Server/Services/StatusPagePrivateUserService.ts +38 -29
  118. package/Server/Services/StatusPagePrivateUserSessionService.ts +49 -1
  119. package/Server/Services/StatusPageService.ts +59 -36
  120. package/Server/Services/UserSessionService.ts +6 -0
  121. package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +18 -10
  122. package/Server/Services/WorkflowOwnerRuleEngineService.ts +18 -10
  123. package/Server/Static/Brand/README.md +7 -7
  124. package/Server/Static/Vendor/README.md +7 -7
  125. package/Server/Types/Database/Permissions/OwnedScopePermission.ts +18 -9
  126. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +82 -0
  127. package/Server/Utils/AI/Chat/ChatAgentRunner.ts +21 -8
  128. package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +41 -4
  129. package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +1 -1
  130. package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +1 -1
  131. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +13 -5
  132. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +53 -13
  133. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +51 -14
  134. package/Server/Utils/AI/SRE/InvestigationEligibility.ts +292 -0
  135. package/Server/Utils/AI/SRE/InvestigationQueue.ts +25 -0
  136. package/Server/Utils/AI/Toolbox/Index.ts +43 -13
  137. package/Server/Utils/AI/Toolbox/ResourceTools.ts +952 -0
  138. package/Server/Utils/AI/Toolbox/RumTools.ts +424 -0
  139. package/Server/Utils/AI/Toolbox/ToolTypes.ts +10 -0
  140. package/Server/Utils/AI/Toolbox/TraceTools.ts +2 -1
  141. package/Server/Utils/Database/PostgresErrorTranslator.ts +14 -0
  142. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +137 -126
  143. package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +4 -1
  144. package/Server/Utils/Rules/OwnerRuleAssignment.ts +157 -6
  145. package/Server/Utils/Telemetry/TelemetryEntity.ts +205 -6
  146. package/SslCertificates/GlobalSign.crt +26 -0
  147. package/SslCertificates/Readme.md +3 -0
  148. package/Tests/App/AdminDashboard/EnterpriseLicenseInstanceActivity.test.tsx +451 -0
  149. package/Tests/App/Dashboard/AIInsightsChatPanel.test.tsx +881 -0
  150. package/Tests/App/Dashboard/AIInsightsPageContext.test.ts +458 -0
  151. package/Tests/App/Dashboard/AIInsightsResourceCitations.test.ts +124 -0
  152. package/Tests/App/Dashboard/AIInsightsResourcePageContext.test.ts +798 -0
  153. package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +7 -0
  154. package/Tests/App/Dashboard/DashboardChartWidgetZoom.test.tsx +104 -0
  155. package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +156 -64
  156. package/Tests/App/Dashboard/DiscoveryScanStatusMessage.test.tsx +970 -0
  157. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +406 -12
  158. package/Tests/App/Dashboard/EmbeddedMetricEventScope.test.tsx +358 -0
  159. package/Tests/App/Dashboard/ErrorPatternEventScope.test.tsx +148 -0
  160. package/Tests/App/Dashboard/EventOverlayAdditionalResourceScope.test.ts +255 -0
  161. package/Tests/App/Dashboard/EventOverlayScope.test.ts +845 -0
  162. package/Tests/App/Dashboard/EventOverlayScopeHook.test.tsx +903 -0
  163. package/Tests/App/Dashboard/ExternalStatusPageCriteriaFilter.test.ts +3 -3
  164. package/Tests/App/Dashboard/InvestigationDrawer.test.tsx +21 -0
  165. package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +761 -0
  166. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +7 -4
  167. package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +15 -7
  168. package/Tests/App/Dashboard/MetricsViewerEventScopeNavigation.test.tsx +264 -0
  169. package/Tests/App/Dashboard/MonitorSummaryTestMonitorButton.test.tsx +342 -0
  170. package/Tests/App/Dashboard/MonitorTestForm.test.tsx +612 -0
  171. package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +301 -0
  172. package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +74 -2
  173. package/Tests/App/Dashboard/TextClampLayoutHarness.ts +224 -0
  174. package/Tests/Models/InventoryItemNaming.test.ts +54 -0
  175. package/Tests/Server/API/AIChatRouteAuthorization.test.ts +161 -0
  176. package/Tests/Server/API/AIInvestigationAPI.test.ts +14 -0
  177. package/Tests/Server/API/AIInvestigationAvailabilityAuthorization.test.ts +260 -0
  178. package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +133 -0
  179. package/Tests/Server/API/StatusPageMasterPasswordRateLimit.test.ts +482 -0
  180. package/Tests/Server/EnvironmentConfigOnCallCalendarFeed.test.ts +1 -1
  181. package/Tests/Server/Infrastructure/ClickhouseKeepAliveOptions.test.ts +1 -1
  182. package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +38 -16
  183. package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +106 -31
  184. package/Tests/Server/Infrastructure/ExampleDockerfiles.test.ts +46 -12
  185. package/Tests/Server/Infrastructure/Postgres/MonitorDescriptionMigration.test.ts +422 -0
  186. package/Tests/Server/Infrastructure/TelemetryExporterDeploymentConfig.test.ts +1 -1
  187. package/Tests/Server/Infrastructure/ValkeyDeploymentConfig.test.ts +25 -4
  188. package/Tests/Server/Middleware/IdentityRateLimit.test.ts +72 -0
  189. package/Tests/Server/Middleware/PublicDashboardRateLimit.test.ts +12 -12
  190. package/Tests/Server/Middleware/PublicDashboardRateLimitStatusPage.test.ts +800 -0
  191. package/Tests/Server/Services/AIInvestigationDecisionPostgres.test.ts +346 -0
  192. package/Tests/Server/Services/AddOwnersIdempotency.test.ts +471 -0
  193. package/Tests/Server/Services/DatabaseServiceAutoOwnerOnCreate.test.ts +250 -0
  194. package/Tests/Server/Services/DatabaseServiceUniqueColumnsTogether.test.ts +622 -0
  195. package/Tests/Server/Services/MonitorDescriptionValidation.test.ts +211 -0
  196. package/Tests/Server/Services/MonitorTemplateDescriptionPropagation.test.ts +269 -0
  197. package/Tests/Server/Services/OwnerRowUniqueness.test.ts +504 -0
  198. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupARun.test.ts +43 -0
  199. package/Tests/Server/Services/SessionRetention.test.ts +334 -0
  200. package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +172 -0
  201. package/Tests/Server/Services/StatusPagePrivateUserReadAccess.test.ts +178 -0
  202. package/Tests/Server/Services/StatusPagePrivateUserReadAccessPostgres.test.ts +311 -0
  203. package/Tests/Server/Services/StatusPagePrivateUserSessionService.test.ts +216 -1
  204. package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +1 -1
  205. package/Tests/Server/Services/UserOnCallLogNoNotificationRules.test.ts +1 -1
  206. package/Tests/Server/Types/Database/EventOverlayScopePostgres.test.ts +626 -0
  207. package/Tests/Server/Types/Database/Permissions/InfrastructureOwnershipScope.test.ts +668 -0
  208. package/Tests/Server/Types/Database/Permissions/SelectRejectionMessageContract.test.ts +1 -0
  209. package/Tests/Server/Types/Database/Permissions/UserNotificationRuleScoping.test.ts +1 -1
  210. package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +16 -9
  211. package/Tests/Server/Utils/AI/ChatAgentRunner.test.ts +137 -1
  212. package/Tests/Server/Utils/AI/InvestigationEligibility.test.ts +697 -0
  213. package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +105 -0
  214. package/Tests/Server/Utils/AI/RemediationHandoff.test.ts +16 -5
  215. package/Tests/Server/Utils/AI/ResourceTools.test.ts +1304 -0
  216. package/Tests/Server/Utils/AI/RumTools.test.ts +769 -0
  217. package/Tests/Server/Utils/Database/PostgresErrorTranslator.test.ts +63 -0
  218. package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaEvaluateOverTime.test.ts +11 -9
  219. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +62 -45
  220. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +25 -24
  221. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaHumanMessages.test.ts +513 -0
  222. package/Tests/Server/Utils/Monitor/Criteria/CustomCodeMonitorCriteria.test.ts +2 -2
  223. package/Tests/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.test.ts +1 -1
  224. package/Tests/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.test.ts +9 -9
  225. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +7 -5
  226. package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +2 -2
  227. package/Tests/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.test.ts +4 -3
  228. package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +2 -2
  229. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorMetricUnits.test.ts +3 -2
  230. package/Tests/Server/Utils/Monitor/MonitorCriteriaHumanMessages.test.ts +529 -0
  231. package/Tests/Server/Utils/Rules/OwnerRuleAssignment.test.ts +412 -4
  232. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingClickhouseIntegration.test.ts +1 -1
  233. package/Tests/Server/Utils/TailwindBuildCopy.test.ts +14 -2
  234. package/Tests/Server/Utils/Telemetry/HostAssetAttributesFromOtlp.test.ts +235 -0
  235. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +385 -2
  236. package/Tests/Server/Utils/VendorAssets.test.ts +17 -3
  237. package/Tests/Types/AI/AIChatPageContext.test.ts +0 -0
  238. package/Tests/Types/AI/AIResourceContext.test.ts +312 -0
  239. package/Tests/Types/Database/UniqueColumnsTogether.test.ts +100 -0
  240. package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +4 -4
  241. package/Tests/Types/Monitor/MonitorStepRetryPersistence.test.ts +125 -0
  242. package/Tests/Types/WebsiteRequest.test.ts +44 -0
  243. package/Tests/UI/Components/Forms/MonitorDescriptionForm.test.tsx +410 -0
  244. package/Tests/UI/Components/ModelTable/BaseModelTableReadPermissions.test.tsx +439 -0
  245. package/Tests/UI/Components/NavBarMenuSearch.test.tsx +372 -0
  246. package/Tests/UI/EsbuildConfig.test.ts +1 -1
  247. package/Tests/UI/Monitor/MonitorStepRetrySettings.test.tsx +616 -0
  248. package/Tests/UI/ReactRouterSingletonBuild.test.ts +4 -2
  249. package/Tests/UI/Rum/ReplayEngine.test.ts +179 -0
  250. package/Tests/UI/Rum/ReplayHeader.test.tsx +23 -0
  251. package/Tests/UI/Rum/ReplayScrubber.test.tsx +88 -0
  252. package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +83 -0
  253. package/Tests/UI/Rum/ReplayTabSwitcher.test.tsx +33 -0
  254. package/Tests/Utils/API.test.ts +96 -0
  255. package/Tests/Utils/HTTPResponseBodyReader.test.ts +188 -1
  256. package/Tests/Utils/Metrics/MetricEventScopeUrl.test.ts +101 -0
  257. package/Tests/Utils/Monitor/MonitorTestAvailabilityUtil.test.ts +256 -0
  258. package/Tests/Utils/Telemetry/HostIpAddresses.test.ts +105 -0
  259. package/Types/AI/AIChatPageContext.ts +87 -2
  260. package/Types/AI/AIChatTypes.ts +4 -0
  261. package/Types/AI/AIResourceContext.ts +198 -0
  262. package/Types/AI/InvestigationNotStartedReason.ts +30 -0
  263. package/Types/Database/UniqueColumnsTogether.ts +55 -0
  264. package/Types/Metrics/MetricQueryConfigData.ts +8 -0
  265. package/Types/Rum/WebVitals.ts +71 -0
  266. package/Types/WebsiteRequest.ts +2 -0
  267. package/UI/Components/EditionLabel/EditionLabel.tsx +7 -5
  268. package/UI/Components/KeyboardShortcut/Screenshots/README.md +1 -1
  269. package/UI/Components/ModelTable/BaseModelTable.tsx +8 -0
  270. package/UI/Components/Navbar/NavBar.tsx +2 -0
  271. package/UI/Components/Navbar/NavBarMenuModal.tsx +6 -2
  272. package/UI/esbuild-config.js +4 -4
  273. package/Utils/API.ts +10 -1
  274. package/Utils/Dashboard/HtmlWidgetDocument.ts +1 -1
  275. package/Utils/HTTPResponseBodyReader.ts +64 -8
  276. package/Utils/Metrics/MetricExplorerUrl.ts +19 -0
  277. package/Utils/Monitor/MonitorTestAvailabilityUtil.ts +92 -0
  278. package/Utils/Telemetry/HostIpAddresses.ts +46 -2
  279. package/build/dist/Models/DatabaseModels/AIAgentOwnerTeam.js +4 -1
  280. package/build/dist/Models/DatabaseModels/AIAgentOwnerTeam.js.map +1 -1
  281. package/build/dist/Models/DatabaseModels/AIAgentOwnerUser.js +4 -1
  282. package/build/dist/Models/DatabaseModels/AIAgentOwnerUser.js.map +1 -1
  283. package/build/dist/Models/DatabaseModels/Alert.js +12 -0
  284. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  285. package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerTeam.js +3 -1
  286. package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerTeam.js.map +1 -1
  287. package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerUser.js +3 -1
  288. package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerUser.js.map +1 -1
  289. package/build/dist/Models/DatabaseModels/AlertOwnerTeam.js +3 -1
  290. package/build/dist/Models/DatabaseModels/AlertOwnerTeam.js.map +1 -1
  291. package/build/dist/Models/DatabaseModels/AlertOwnerUser.js +3 -1
  292. package/build/dist/Models/DatabaseModels/AlertOwnerUser.js.map +1 -1
  293. package/build/dist/Models/DatabaseModels/CephClusterOwnerTeam.js +4 -1
  294. package/build/dist/Models/DatabaseModels/CephClusterOwnerTeam.js.map +1 -1
  295. package/build/dist/Models/DatabaseModels/CephClusterOwnerUser.js +4 -1
  296. package/build/dist/Models/DatabaseModels/CephClusterOwnerUser.js.map +1 -1
  297. package/build/dist/Models/DatabaseModels/CloudResourceOwnerTeam.js +4 -1
  298. package/build/dist/Models/DatabaseModels/CloudResourceOwnerTeam.js.map +1 -1
  299. package/build/dist/Models/DatabaseModels/CloudResourceOwnerUser.js +4 -1
  300. package/build/dist/Models/DatabaseModels/CloudResourceOwnerUser.js.map +1 -1
  301. package/build/dist/Models/DatabaseModels/DashboardOwnerTeam.js +3 -1
  302. package/build/dist/Models/DatabaseModels/DashboardOwnerTeam.js.map +1 -1
  303. package/build/dist/Models/DatabaseModels/DashboardOwnerUser.js +3 -1
  304. package/build/dist/Models/DatabaseModels/DashboardOwnerUser.js.map +1 -1
  305. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +3 -0
  306. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
  307. package/build/dist/Models/DatabaseModels/DockerHostOwnerTeam.js +4 -1
  308. package/build/dist/Models/DatabaseModels/DockerHostOwnerTeam.js.map +1 -1
  309. package/build/dist/Models/DatabaseModels/DockerHostOwnerUser.js +4 -1
  310. package/build/dist/Models/DatabaseModels/DockerHostOwnerUser.js.map +1 -1
  311. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js +4 -1
  312. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js.map +1 -1
  313. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js +4 -1
  314. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js.map +1 -1
  315. package/build/dist/Models/DatabaseModels/HostOwnerTeam.js +4 -1
  316. package/build/dist/Models/DatabaseModels/HostOwnerTeam.js.map +1 -1
  317. package/build/dist/Models/DatabaseModels/HostOwnerUser.js +4 -1
  318. package/build/dist/Models/DatabaseModels/HostOwnerUser.js.map +1 -1
  319. package/build/dist/Models/DatabaseModels/Incident.js +12 -0
  320. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  321. package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerTeam.js +3 -1
  322. package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerTeam.js.map +1 -1
  323. package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerUser.js +3 -1
  324. package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerUser.js.map +1 -1
  325. package/build/dist/Models/DatabaseModels/IncidentOwnerTeam.js +3 -1
  326. package/build/dist/Models/DatabaseModels/IncidentOwnerTeam.js.map +1 -1
  327. package/build/dist/Models/DatabaseModels/IncidentOwnerUser.js +3 -1
  328. package/build/dist/Models/DatabaseModels/IncidentOwnerUser.js.map +1 -1
  329. package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerTeam.js +4 -1
  330. package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerTeam.js.map +1 -1
  331. package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerUser.js +4 -1
  332. package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerUser.js.map +1 -1
  333. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.js +3 -1
  334. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.js.map +1 -1
  335. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerUser.js +3 -1
  336. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerUser.js.map +1 -1
  337. package/build/dist/Models/DatabaseModels/IoTFleetOwnerTeam.js +4 -1
  338. package/build/dist/Models/DatabaseModels/IoTFleetOwnerTeam.js.map +1 -1
  339. package/build/dist/Models/DatabaseModels/IoTFleetOwnerUser.js +4 -1
  340. package/build/dist/Models/DatabaseModels/IoTFleetOwnerUser.js.map +1 -1
  341. package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerTeam.js +4 -1
  342. package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerTeam.js.map +1 -1
  343. package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerUser.js +4 -1
  344. package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerUser.js.map +1 -1
  345. package/build/dist/Models/DatabaseModels/Monitor.js +2 -3
  346. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  347. package/build/dist/Models/DatabaseModels/MonitorGroupOwnerTeam.js +4 -1
  348. package/build/dist/Models/DatabaseModels/MonitorGroupOwnerTeam.js.map +1 -1
  349. package/build/dist/Models/DatabaseModels/MonitorGroupOwnerUser.js +4 -1
  350. package/build/dist/Models/DatabaseModels/MonitorGroupOwnerUser.js.map +1 -1
  351. package/build/dist/Models/DatabaseModels/MonitorOwnerTeam.js +3 -1
  352. package/build/dist/Models/DatabaseModels/MonitorOwnerTeam.js.map +1 -1
  353. package/build/dist/Models/DatabaseModels/MonitorOwnerUser.js +3 -1
  354. package/build/dist/Models/DatabaseModels/MonitorOwnerUser.js.map +1 -1
  355. package/build/dist/Models/DatabaseModels/MonitorTemplate.js +2 -3
  356. package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
  357. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerTeam.js +4 -1
  358. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerTeam.js.map +1 -1
  359. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerUser.js +4 -1
  360. package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerUser.js.map +1 -1
  361. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerTeam.js +3 -1
  362. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerTeam.js.map +1 -1
  363. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerUser.js +3 -1
  364. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerUser.js.map +1 -1
  365. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.js +3 -1
  366. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.js.map +1 -1
  367. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.js +3 -1
  368. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.js.map +1 -1
  369. package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js +4 -1
  370. package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js.map +1 -1
  371. package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js +4 -1
  372. package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js.map +1 -1
  373. package/build/dist/Models/DatabaseModels/ProbeOwnerTeam.js +4 -1
  374. package/build/dist/Models/DatabaseModels/ProbeOwnerTeam.js.map +1 -1
  375. package/build/dist/Models/DatabaseModels/ProbeOwnerUser.js +4 -1
  376. package/build/dist/Models/DatabaseModels/ProbeOwnerUser.js.map +1 -1
  377. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerTeam.js +4 -1
  378. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerTeam.js.map +1 -1
  379. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerUser.js +4 -1
  380. package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerUser.js.map +1 -1
  381. package/build/dist/Models/DatabaseModels/RumApplicationOwnerTeam.js +4 -1
  382. package/build/dist/Models/DatabaseModels/RumApplicationOwnerTeam.js.map +1 -1
  383. package/build/dist/Models/DatabaseModels/RumApplicationOwnerUser.js +4 -1
  384. package/build/dist/Models/DatabaseModels/RumApplicationOwnerUser.js.map +1 -1
  385. package/build/dist/Models/DatabaseModels/RunbookOwnerTeam.js +3 -1
  386. package/build/dist/Models/DatabaseModels/RunbookOwnerTeam.js.map +1 -1
  387. package/build/dist/Models/DatabaseModels/RunbookOwnerUser.js +3 -1
  388. package/build/dist/Models/DatabaseModels/RunbookOwnerUser.js.map +1 -1
  389. package/build/dist/Models/DatabaseModels/RunnerOwnerTeam.js +3 -1
  390. package/build/dist/Models/DatabaseModels/RunnerOwnerTeam.js.map +1 -1
  391. package/build/dist/Models/DatabaseModels/RunnerOwnerUser.js +3 -1
  392. package/build/dist/Models/DatabaseModels/RunnerOwnerUser.js.map +1 -1
  393. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerTeam.js +3 -1
  394. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerTeam.js.map +1 -1
  395. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerUser.js +3 -1
  396. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerUser.js.map +1 -1
  397. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerTeam.js +6 -1
  398. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerTeam.js.map +1 -1
  399. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js +6 -1
  400. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js.map +1 -1
  401. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerTeam.js +4 -1
  402. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerTeam.js.map +1 -1
  403. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerUser.js +4 -1
  404. package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerUser.js.map +1 -1
  405. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js +3 -1
  406. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js.map +1 -1
  407. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js +3 -1
  408. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js.map +1 -1
  409. package/build/dist/Models/DatabaseModels/ServiceOwnerTeam.js +4 -1
  410. package/build/dist/Models/DatabaseModels/ServiceOwnerTeam.js.map +1 -1
  411. package/build/dist/Models/DatabaseModels/ServiceOwnerUser.js +4 -1
  412. package/build/dist/Models/DatabaseModels/ServiceOwnerUser.js.map +1 -1
  413. package/build/dist/Models/DatabaseModels/StatusPageOwnerTeam.js +3 -1
  414. package/build/dist/Models/DatabaseModels/StatusPageOwnerTeam.js.map +1 -1
  415. package/build/dist/Models/DatabaseModels/StatusPageOwnerUser.js +3 -1
  416. package/build/dist/Models/DatabaseModels/StatusPageOwnerUser.js.map +1 -1
  417. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js +4 -1
  418. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js.map +1 -1
  419. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js +4 -1
  420. package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js.map +1 -1
  421. package/build/dist/Models/DatabaseModels/WorkflowOwnerTeam.js +3 -1
  422. package/build/dist/Models/DatabaseModels/WorkflowOwnerTeam.js.map +1 -1
  423. package/build/dist/Models/DatabaseModels/WorkflowOwnerUser.js +3 -1
  424. package/build/dist/Models/DatabaseModels/WorkflowOwnerUser.js.map +1 -1
  425. package/build/dist/Server/API/AIAgentDataAPI.js +1 -1
  426. package/build/dist/Server/API/AIChatAPI.js +3 -1
  427. package/build/dist/Server/API/AIChatAPI.js.map +1 -1
  428. package/build/dist/Server/API/AIInvestigationAPI.js +3 -0
  429. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  430. package/build/dist/Server/API/StatusPageAPI.js +9 -1
  431. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  432. package/build/dist/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.js +1 -1
  433. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793500000000-MakeOwnerRowsUnique.js +602 -0
  434. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793500000000-MakeOwnerRowsUnique.js.map +1 -0
  435. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793700000000-AddAIInvestigationDecision.js +14 -0
  436. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793700000000-AddAIInvestigationDecision.js.map +1 -0
  437. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793800000000-RemoveMonitorDescriptionLengthLimit.js +20 -0
  438. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793800000000-RemoveMonitorDescriptionLengthLimit.js.map +1 -0
  439. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  440. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  441. package/build/dist/Server/Middleware/IdentityRateLimit.js +22 -1
  442. package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
  443. package/build/dist/Server/Middleware/PublicDashboardRateLimit.js +117 -36
  444. package/build/dist/Server/Middleware/PublicDashboardRateLimit.js.map +1 -1
  445. package/build/dist/Server/Services/AlertEpisodeService.js +13 -31
  446. package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
  447. package/build/dist/Server/Services/AlertGroupingEngineService.js +7 -4
  448. package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
  449. package/build/dist/Server/Services/AlertService.js +13 -31
  450. package/build/dist/Server/Services/AlertService.js.map +1 -1
  451. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +12 -8
  452. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
  453. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +12 -8
  454. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
  455. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +12 -8
  456. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
  457. package/build/dist/Server/Services/DatabaseService.js +71 -1
  458. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  459. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +12 -8
  460. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
  461. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +12 -8
  462. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
  463. package/build/dist/Server/Services/HostOwnerRuleEngineService.js +12 -8
  464. package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
  465. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +6 -4
  466. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
  467. package/build/dist/Server/Services/IncidentEpisodeService.js +15 -68
  468. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  469. package/build/dist/Server/Services/IncidentGroupingEngineService.js +7 -4
  470. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  471. package/build/dist/Server/Services/IncidentService.js +13 -31
  472. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  473. package/build/dist/Server/Services/IncidentTemplateService.js +13 -31
  474. package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
  475. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +12 -8
  476. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
  477. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +12 -8
  478. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
  479. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +12 -8
  480. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
  481. package/build/dist/Server/Services/MonitorService.js +13 -31
  482. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  483. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +12 -8
  484. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
  485. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +12 -8
  486. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
  487. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +12 -8
  488. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
  489. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +12 -8
  490. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
  491. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +12 -8
  492. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
  493. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +12 -8
  494. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
  495. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +12 -8
  496. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
  497. package/build/dist/Server/Services/ScheduledMaintenanceService.js +13 -31
  498. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  499. package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js +12 -29
  500. package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js.map +1 -1
  501. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +12 -8
  502. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
  503. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +12 -8
  504. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
  505. package/build/dist/Server/Services/StatusPagePrivateUserService.js +33 -25
  506. package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
  507. package/build/dist/Server/Services/StatusPagePrivateUserSessionService.js +36 -1
  508. package/build/dist/Server/Services/StatusPagePrivateUserSessionService.js.map +1 -1
  509. package/build/dist/Server/Services/StatusPageService.js +50 -35
  510. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  511. package/build/dist/Server/Services/UserSessionService.js +5 -0
  512. package/build/dist/Server/Services/UserSessionService.js.map +1 -1
  513. package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js +12 -8
  514. package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js.map +1 -1
  515. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +12 -8
  516. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
  517. package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js +15 -10
  518. package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js.map +1 -1
  519. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +82 -0
  520. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  521. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +12 -3
  522. package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
  523. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +32 -4
  524. package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
  525. package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +1 -1
  526. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +1 -1
  527. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +8 -5
  528. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  529. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +33 -13
  530. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  531. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +31 -10
  532. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  533. package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js +205 -0
  534. package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js.map +1 -0
  535. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +13 -0
  536. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  537. package/build/dist/Server/Utils/AI/Toolbox/Index.js +30 -6
  538. package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
  539. package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js +721 -0
  540. package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js.map +1 -0
  541. package/build/dist/Server/Utils/AI/Toolbox/RumTools.js +330 -0
  542. package/build/dist/Server/Utils/AI/Toolbox/RumTools.js.map +1 -0
  543. package/build/dist/Server/Utils/AI/Toolbox/ToolTypes.js.map +1 -1
  544. package/build/dist/Server/Utils/AI/Toolbox/TraceTools.js +1 -1
  545. package/build/dist/Server/Utils/AI/Toolbox/TraceTools.js.map +1 -1
  546. package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js +11 -0
  547. package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js.map +1 -1
  548. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +106 -101
  549. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
  550. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +4 -2
  551. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
  552. package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js +94 -0
  553. package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js.map +1 -1
  554. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +171 -6
  555. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  556. package/build/dist/Types/AI/AIChatPageContext.js +68 -2
  557. package/build/dist/Types/AI/AIChatPageContext.js.map +1 -1
  558. package/build/dist/Types/AI/AIChatTypes.js +4 -0
  559. package/build/dist/Types/AI/AIChatTypes.js.map +1 -1
  560. package/build/dist/Types/AI/AIResourceContext.js +162 -0
  561. package/build/dist/Types/AI/AIResourceContext.js.map +1 -0
  562. package/build/dist/Types/AI/InvestigationNotStartedReason.js +2 -0
  563. package/build/dist/Types/AI/InvestigationNotStartedReason.js.map +1 -0
  564. package/build/dist/Types/Database/UniqueColumnsTogether.js +19 -0
  565. package/build/dist/Types/Database/UniqueColumnsTogether.js.map +1 -0
  566. package/build/dist/Types/Metrics/MetricQueryConfigData.js.map +1 -1
  567. package/build/dist/Types/Rum/WebVitals.js +64 -0
  568. package/build/dist/Types/Rum/WebVitals.js.map +1 -0
  569. package/build/dist/Types/WebsiteRequest.js +2 -0
  570. package/build/dist/Types/WebsiteRequest.js.map +1 -1
  571. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +7 -5
  572. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  573. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +7 -0
  574. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  575. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  576. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +4 -2
  577. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  578. package/build/dist/Utils/API.js +8 -4
  579. package/build/dist/Utils/API.js.map +1 -1
  580. package/build/dist/Utils/HTTPResponseBodyReader.js +50 -6
  581. package/build/dist/Utils/HTTPResponseBodyReader.js.map +1 -1
  582. package/build/dist/Utils/Metrics/MetricExplorerUrl.js +14 -3
  583. package/build/dist/Utils/Metrics/MetricExplorerUrl.js.map +1 -1
  584. package/build/dist/Utils/Monitor/MonitorTestAvailabilityUtil.js +68 -0
  585. package/build/dist/Utils/Monitor/MonitorTestAvailabilityUtil.js.map +1 -0
  586. package/build/dist/Utils/Telemetry/HostIpAddresses.js +42 -3
  587. package/build/dist/Utils/Telemetry/HostIpAddresses.js.map +1 -1
  588. package/package.json +5 -5
  589. package/test-setup.sh +2 -2
@@ -307,6 +307,69 @@ describe("PostgresErrorTranslator", () => {
307
307
  });
308
308
  });
309
309
 
310
+ describe("createUniqueViolationException (issue #3394)", () => {
311
+ /*
312
+ * @UniqueColumnsTogether refuses a duplicate owner row before the insert.
313
+ * The callers that add owners in bulk must treat that refusal exactly like
314
+ * the unique index rejecting a racing insert, through one predicate.
315
+ */
316
+ it("is a BadDataException carrying the given message", () => {
317
+ const exception: BadDataException =
318
+ PostgresErrorTranslator.createUniqueViolationException(
319
+ "This team is already an owner of this incident.",
320
+ );
321
+
322
+ expect(exception).toBeInstanceOf(BadDataException);
323
+ expect(exception.message).toBe(
324
+ "This team is already an owner of this incident.",
325
+ );
326
+ });
327
+
328
+ it("is recognised by isUniqueViolation", () => {
329
+ expect(
330
+ PostgresErrorTranslator.isUniqueViolation(
331
+ PostgresErrorTranslator.createUniqueViolationException("Duplicate."),
332
+ ),
333
+ ).toBe(true);
334
+ });
335
+
336
+ it("is tagged with the unique-violation SQLSTATE, like a translated one", () => {
337
+ const exception: TranslatedPostgresException =
338
+ PostgresErrorTranslator.createUniqueViolationException(
339
+ "Duplicate.",
340
+ ) as TranslatedPostgresException;
341
+ const translated: TranslatedPostgresException =
342
+ PostgresErrorTranslator.translate(
343
+ twilioAccountSidCollision(),
344
+ ) as TranslatedPostgresException;
345
+
346
+ expect(exception.postgresErrorCode).toBe("23505");
347
+ expect(exception.postgresErrorCode).toBe(translated.postgresErrorCode);
348
+ });
349
+
350
+ it("keeps the same HTTP-facing code as any other BadDataException", () => {
351
+ expect(
352
+ PostgresErrorTranslator.createUniqueViolationException("Duplicate.")
353
+ .code,
354
+ ).toBe(new BadDataException("Duplicate.").code);
355
+ });
356
+
357
+ it("passes through translate() unchanged", () => {
358
+ const exception: BadDataException =
359
+ PostgresErrorTranslator.createUniqueViolationException("Duplicate.");
360
+
361
+ expect(PostgresErrorTranslator.translate(exception)).toBe(exception);
362
+ });
363
+
364
+ it("returns a new exception on every call", () => {
365
+ expect(
366
+ PostgresErrorTranslator.createUniqueViolationException("Duplicate."),
367
+ ).not.toBe(
368
+ PostgresErrorTranslator.createUniqueViolationException("Duplicate."),
369
+ );
370
+ });
371
+ });
372
+
310
373
  describe("errors it should not touch", () => {
311
374
  it("passes through an unrecognised Postgres error unchanged", () => {
312
375
  const notNullViolation: FakeQueryFailedError = {
@@ -171,10 +171,9 @@ describe("APIRequestCriteria evaluate over time", () => {
171
171
  dataToProcess: buildResponse({ responseCode: 404 }),
172
172
  });
173
173
 
174
- expect(result).toContain("All values of");
175
- expect(result).toContain(CheckOn.ResponseStatusCode as string);
176
- expect(result).toContain("over the last 5 minutes");
177
- expect(result).toContain("not equal to 200");
174
+ expect(result).toBe(
175
+ `${CheckOn.ResponseStatusCode} over the last 5 minutes was 404 in all 5 readings, different from the 200 threshold.`,
176
+ );
178
177
  });
179
178
 
180
179
  /*
@@ -229,8 +228,9 @@ describe("APIRequestCriteria evaluate over time", () => {
229
228
  dataToProcess: buildResponse({ responseTimeInMs: 8800 }),
230
229
  });
231
230
 
232
- expect(result).toContain("All values of");
233
- expect(result).toContain("greater than 8000");
231
+ expect(result).toBe(
232
+ `${CheckOn.ResponseTime} over the last 2 minutes ranged from 8800 to 9171 across all 3 readings, above the 8000 threshold.`,
233
+ );
234
234
  });
235
235
 
236
236
  /*
@@ -251,7 +251,9 @@ describe("APIRequestCriteria evaluate over time", () => {
251
251
  dataToProcess: buildResponse({ responseTimeInMs: 9171 }),
252
252
  });
253
253
 
254
- expect(result).toContain("Any value of");
254
+ expect(result).toBe(
255
+ `${CheckOn.ResponseTime} over the last 2 minutes was 9171 in 1 of 3 readings, above the 8000 threshold.`,
256
+ );
255
257
  });
256
258
 
257
259
  test("Any Value fires off the very first sample", async () => {
@@ -371,7 +373,7 @@ describe("APIRequestCriteria evaluate over time", () => {
371
373
  });
372
374
 
373
375
  // 0 is not equal to 200, so the filter is met.
374
- expect(result).toContain("not equal to 200");
376
+ expect(result).toContain("different from the 200 threshold");
375
377
  });
376
378
  });
377
379
 
@@ -456,7 +458,7 @@ describe("APIRequestCriteria evaluate over time", () => {
456
458
  dataToProcess: buildResponse({ responseCode: 404 }),
457
459
  });
458
460
 
459
- expect(result).toContain("not equal to 200");
461
+ expect(result).toContain("different from the 200 threshold");
460
462
  });
461
463
 
462
464
  test("the metric store is never read for them", async () => {
@@ -580,7 +580,7 @@ describe("CompareCriteria", () => {
580
580
  threshold: 50,
581
581
  criteriaFilter: filter,
582
582
  }),
583
- ).toBe("Response Time (in ms) is 100 which is greater than 50.");
583
+ ).toBe("Response Time (in ms) was 100, above the 50 threshold.");
584
584
  });
585
585
 
586
586
  test("does not fire when the threshold is not breached", () => {
@@ -677,7 +677,7 @@ describe("CompareCriteria", () => {
677
677
  });
678
678
 
679
679
  describe("getCompareMessage formatting", () => {
680
- test("prefixes 'Any value of' / 'All values of' for over-time evaluation", () => {
680
+ test("summarizes the readings when AnyValue and AllValues both match the whole window", () => {
681
681
  const anyFilter: CriteriaFilter = makeFilter({
682
682
  checkOn: CheckOn.ResponseTime,
683
683
  filterType: FilterType.GreaterThan,
@@ -693,7 +693,7 @@ describe("CompareCriteria", () => {
693
693
  criteriaFilter: anyFilter,
694
694
  }),
695
695
  ).toBe(
696
- "Any value of Response Time (in ms) is 10, 20 which is greater than 5.",
696
+ "Response Time (in ms) ranged from 10 to 20 across all 2 readings, above the 5 threshold.",
697
697
  );
698
698
 
699
699
  const allFilter: CriteriaFilter = makeFilter({
@@ -711,7 +711,7 @@ describe("CompareCriteria", () => {
711
711
  criteriaFilter: allFilter,
712
712
  }),
713
713
  ).toBe(
714
- "All values of Response Time (in ms) is 10, 20 which is greater than 5.",
714
+ "Response Time (in ms) ranged from 10 to 20 across all 2 readings, above the 5 threshold.",
715
715
  );
716
716
  });
717
717
 
@@ -727,7 +727,7 @@ describe("CompareCriteria", () => {
727
727
  criteriaFilter: filter,
728
728
  }),
729
729
  ).toBe(
730
- "Response Time (in ms) is 6 samples between 1 and 6 which is greater than 0.",
730
+ "Response Time (in ms) ranged from 1 to 6 across all 6 readings, above the 0 threshold.",
731
731
  );
732
732
  });
733
733
 
@@ -756,7 +756,7 @@ describe("CompareCriteria", () => {
756
756
  threshold: 1.9999,
757
757
  criteriaFilter: filter,
758
758
  }),
759
- ).toBe("Response Time (in ms) is 12.35 which is greater than 2.");
759
+ ).toBe("Response Time (in ms) was 12.35, above the 2 threshold.");
760
760
  });
761
761
 
762
762
  test("appends a unit suffix to both the value and the threshold", () => {
@@ -771,7 +771,7 @@ describe("CompareCriteria", () => {
771
771
  criteriaFilter: filter,
772
772
  unit: "ms",
773
773
  }),
774
- ).toBe("Metric Value is 100 ms which is greater than 50 ms.");
774
+ ).toBe("Metric Value was 100 ms, above the 50 ms threshold.");
775
775
  });
776
776
 
777
777
  /*
@@ -798,7 +798,7 @@ describe("CompareCriteria", () => {
798
798
  criteriaFilter: filter,
799
799
  unit: "By",
800
800
  }),
801
- ).toBe("Metric Value is 1.07 GB which is greater than 1 GB.");
801
+ ).toBe("Metric Value was 1.07 GB, above the 1 GB threshold.");
802
802
  });
803
803
 
804
804
  test("rescales a duration", () => {
@@ -813,10 +813,10 @@ describe("CompareCriteria", () => {
813
813
  criteriaFilter: filter,
814
814
  unit: "ms",
815
815
  }),
816
- ).toBe("Metric Value is 1.5 sec which is greater than 1 sec.");
816
+ ).toBe("Metric Value was 1.5 sec, above the 1 sec threshold.");
817
817
  });
818
818
 
819
- test("gives every listed sample its own scale", () => {
819
+ test("gives each end of a range its own scale", () => {
820
820
  const filter: CriteriaFilter = makeFilter({
821
821
  checkOn: CheckOn.MetricValue,
822
822
  filterType: FilterType.GreaterThan,
@@ -834,11 +834,11 @@ describe("CompareCriteria", () => {
834
834
  unit: "By",
835
835
  }),
836
836
  ).toBe(
837
- "All values of Metric Value over the last 5 minutes is 922 KB, 1.26 MB which is greater than 900 KB.",
837
+ "Metric Value over the last 5 minutes ranged from 922 KB to 1.26 MB across all 2 readings, above the 900 KB threshold.",
838
838
  );
839
839
  });
840
840
 
841
- test("units ride both ends of the 'N samples between X and Y' summary", () => {
841
+ test("units ride both ends of a range summary", () => {
842
842
  const filter: CriteriaFilter = makeFilter({
843
843
  checkOn: CheckOn.MetricValue,
844
844
  filterType: FilterType.GreaterThan,
@@ -854,8 +854,10 @@ describe("CompareCriteria", () => {
854
854
  unit: "By",
855
855
  });
856
856
 
857
- expect(message).toContain("6 samples between 1 GB and 6 GB");
858
- expect(message).toContain("greater than 500 MB");
857
+ expect(message).toContain(
858
+ "ranged from 1 GB to 6 GB across all 6 readings",
859
+ );
860
+ expect(message).toContain("above the 500 MB threshold");
859
861
  });
860
862
 
861
863
  /*
@@ -877,7 +879,7 @@ describe("CompareCriteria", () => {
877
879
  });
878
880
 
879
881
  expect(message).toBe(
880
- "browser.cumulative_layout_shift is 0.31 which is greater than or equal to 0.25.",
882
+ "browser.cumulative_layout_shift was 0.31, at or above the 0.25 threshold.",
881
883
  );
882
884
  expect(message).not.toContain("0.31 1");
883
885
  });
@@ -897,7 +899,7 @@ describe("CompareCriteria", () => {
897
899
  });
898
900
 
899
901
  expect(message).toBe(
900
- "system.cpu.utilization is 5.85% which is greater than 5.00%.",
902
+ "system.cpu.utilization was 5.85%, above the 5.00% threshold.",
901
903
  );
902
904
  });
903
905
 
@@ -913,7 +915,7 @@ describe("CompareCriteria", () => {
913
915
  unit: "{thread}",
914
916
  });
915
917
 
916
- expect(message).toBe("Metric Value is 512 which is greater than 500.");
918
+ expect(message).toBe("Metric Value was 512, above the 500 threshold.");
917
919
  expect(message).not.toContain("{thread}");
918
920
  });
919
921
 
@@ -938,7 +940,7 @@ describe("CompareCriteria", () => {
938
940
  unit: "1",
939
941
  });
940
942
 
941
- expect(message).toBe("a / b_ratio is 0.42 which is greater than 0.4.");
943
+ expect(message).toBe("a / b_ratio was 0.42, above the 0.4 threshold.");
942
944
  expect(message).not.toContain("42.00%");
943
945
  });
944
946
 
@@ -946,16 +948,16 @@ describe("CompareCriteria", () => {
946
948
  * BACKWARD COMPATIBILITY. Only MetricMonitorCriteria and
947
949
  * DatabaseMonitorCriteria pass a unit; every other monitor type
948
950
  * carries its unit inside the CheckOn label ("Response Time (in ms)")
949
- * and must keep byte-identical, unabbreviated output.
951
+ * and must keep its numbers unabbreviated.
950
952
  */
951
- test("a message with no unit is unchanged, digits and all", () => {
953
+ test("a message with no unit preserves its original numeric scale", () => {
952
954
  const filter: CriteriaFilter = makeFilter({
953
955
  checkOn: CheckOn.ResponseTime,
954
956
  filterType: FilterType.GreaterThan,
955
957
  });
956
958
 
957
959
  const expected: string =
958
- "Response Time (in ms) is 5000 which is greater than 4900.";
960
+ "Response Time (in ms) was 5000, above the 4900 threshold.";
959
961
 
960
962
  expect(
961
963
  CompareCriteria.getCompareMessage({
@@ -1028,7 +1030,7 @@ describe("CompareCriteria", () => {
1028
1030
  threshold: 80,
1029
1031
  criteriaFilter: withPath,
1030
1032
  }),
1031
- ).toBe("Disk Usage (in %) on disk /var is 95 which is greater than 80.");
1033
+ ).toBe("Disk Usage (in %) on disk /var was 95, above the 80 threshold.");
1032
1034
 
1033
1035
  const withoutPath: CriteriaFilter = makeFilter({
1034
1036
  checkOn: CheckOn.DiskUsagePercent,
@@ -1074,7 +1076,7 @@ describe("CompareCriteria", () => {
1074
1076
  criteriaFilter: metricFilter,
1075
1077
  metricDisplayName: "http.server.duration",
1076
1078
  }),
1077
- ).toBe("http.server.duration is 100 which is greater than 50.");
1079
+ ).toBe("http.server.duration was 100, above the 50 threshold.");
1078
1080
 
1079
1081
  // For a non-MetricValue check the display name is ignored.
1080
1082
  const responseFilter: CriteriaFilter = makeFilter({
@@ -1088,7 +1090,7 @@ describe("CompareCriteria", () => {
1088
1090
  criteriaFilter: responseFilter,
1089
1091
  metricDisplayName: "http.server.duration",
1090
1092
  }),
1091
- ).toBe("Response Time (in ms) is 100 which is greater than 50.");
1093
+ ).toBe("Response Time (in ms) was 100, above the 50 threshold.");
1092
1094
  });
1093
1095
 
1094
1096
  test("True/False messages omit the 'which is' clause", () => {
@@ -1105,35 +1107,50 @@ describe("CompareCriteria", () => {
1105
1107
  ).toBe("Is Online is true.");
1106
1108
  });
1107
1109
 
1108
- test("renders each comparison verb", () => {
1109
- const verbs: Array<{ filterType: FilterType; verb: string }> = [
1110
- { filterType: FilterType.GreaterThan, verb: "greater than" },
1111
- {
1112
- filterType: FilterType.GreaterThanOrEqualTo,
1113
- verb: "greater than or equal to",
1114
- },
1115
- { filterType: FilterType.LessThan, verb: "less than" },
1116
- {
1117
- filterType: FilterType.LessThanOrEqualTo,
1118
- verb: "less than or equal to",
1119
- },
1120
- { filterType: FilterType.EqualTo, verb: "equal to" },
1121
- { filterType: FilterType.NotEqualTo, verb: "not equal to" },
1122
- ];
1123
-
1124
- for (const { filterType, verb } of verbs) {
1110
+ test.each([
1111
+ { filterType: FilterType.GreaterThan, value: 100, relation: "above" },
1112
+ {
1113
+ filterType: FilterType.GreaterThanOrEqualTo,
1114
+ value: 50,
1115
+ relation: "at or above",
1116
+ },
1117
+ { filterType: FilterType.LessThan, value: 25, relation: "below" },
1118
+ {
1119
+ filterType: FilterType.LessThanOrEqualTo,
1120
+ value: 50,
1121
+ relation: "at or below",
1122
+ },
1123
+ { filterType: FilterType.EqualTo, value: 50, relation: "equal to" },
1124
+ {
1125
+ filterType: FilterType.NotEqualTo,
1126
+ value: 100,
1127
+ relation: "different from",
1128
+ },
1129
+ ])(
1130
+ "renders $filterType as $relation",
1131
+ ({
1132
+ filterType,
1133
+ value,
1134
+ relation,
1135
+ }: {
1136
+ filterType: FilterType;
1137
+ value: number;
1138
+ relation: string;
1139
+ }) => {
1125
1140
  const filter: CriteriaFilter = makeFilter({
1126
1141
  checkOn: CheckOn.ResponseTime,
1127
1142
  filterType,
1128
1143
  });
1129
1144
  expect(
1130
1145
  CompareCriteria.getCompareMessage({
1131
- values: 100,
1146
+ values: value,
1132
1147
  threshold: 50,
1133
1148
  criteriaFilter: filter,
1134
1149
  }),
1135
- ).toContain(verb);
1136
- }
1137
- });
1150
+ ).toBe(
1151
+ `Response Time (in ms) was ${value}, ${relation} the 50 threshold.`,
1152
+ );
1153
+ },
1154
+ );
1138
1155
  });
1139
1156
  });
@@ -295,7 +295,7 @@ describe("CompareCriteria aggregation semantics", () => {
295
295
  */
296
296
  expect(message).toContain("91.53");
297
297
  expect(message).toContain(
298
- "1 of 5 samples in the evaluation window breached this threshold.",
298
+ "in 1 of 5 readings, above the 90.00% threshold.",
299
299
  );
300
300
  });
301
301
 
@@ -312,7 +312,7 @@ describe("CompareCriteria aggregation semantics", () => {
312
312
  });
313
313
 
314
314
  expect(message).toBe(
315
- "Any value of CPU is 95.00%, 96.00%, 97.00% which is greater than 90.00%.",
315
+ "CPU ranged from 95.00% to 97.00% across all 3 readings, above the 90.00% threshold.",
316
316
  );
317
317
  });
318
318
 
@@ -328,11 +328,13 @@ describe("CompareCriteria aggregation semantics", () => {
328
328
  unit: "%",
329
329
  });
330
330
 
331
- expect(message).toContain("80.00%, 70.00%");
331
+ expect(message).toContain(
332
+ "ranged from 70.00% to 80.00% across 2 of 3 readings",
333
+ );
332
334
  expect(message).not.toContain("95");
333
335
  });
334
336
 
335
- test("AllValues is unaffected every sample breached by definition", () => {
337
+ test("AllValues describes the range and the full reading count", () => {
336
338
  const message: string = CompareCriteria.getCompareMessage({
337
339
  values: [95, 96],
338
340
  threshold: 90,
@@ -345,7 +347,7 @@ describe("CompareCriteria aggregation semantics", () => {
345
347
  });
346
348
 
347
349
  expect(message).toBe(
348
- "All values of CPU is 95.00%, 96.00% which is greater than 90.00%.",
350
+ "CPU ranged from 95.00% to 96.00% across all 2 readings, above the 90.00% threshold.",
349
351
  );
350
352
  });
351
353
 
@@ -361,7 +363,7 @@ describe("CompareCriteria aggregation semantics", () => {
361
363
  unit: "%",
362
364
  });
363
365
 
364
- expect(message).toContain("The average of CPU is 20");
366
+ expect(message).toContain("The average of CPU was 20");
365
367
  expect(message).not.toContain("10, 20, 30");
366
368
  });
367
369
 
@@ -370,8 +372,8 @@ describe("CompareCriteria aggregation semantics", () => {
370
372
  [EvaluateOverTimeType.Sum, "The sum of"],
371
373
  [EvaluateOverTimeType.MaximumValue, "The maximum of"],
372
374
  [EvaluateOverTimeType.MunimumValue, "The minimum of"],
373
- [EvaluateOverTimeType.AnyValue, "Any value of"],
374
- [EvaluateOverTimeType.AllValues, "All values of"],
375
+ [EvaluateOverTimeType.AnyValue, "CPU was"],
376
+ [EvaluateOverTimeType.AllValues, "CPU was"],
375
377
  ])(
376
378
  "%s is named in the sentence as %s",
377
379
  (evaluationType: EvaluateOverTimeType, expectedPrefix: string) => {
@@ -389,8 +391,8 @@ describe("CompareCriteria aggregation semantics", () => {
389
391
 
390
392
  test("a message rendered for a filter that did not match degrades gracefully", () => {
391
393
  /*
392
- * Nothing in the window is above 200; the whole window is quoted
393
- * rather than an empty list.
394
+ * Nothing in the window is above 200. Report what was observed,
395
+ * then describe the unmet requirement without claiming a breach.
394
396
  */
395
397
  const message: string = CompareCriteria.getCompareMessage({
396
398
  values: WINDOW,
@@ -405,6 +407,9 @@ describe("CompareCriteria aggregation semantics", () => {
405
407
 
406
408
  expect(message).toContain("72.35");
407
409
  expect(message).not.toContain("samples in the evaluation window");
410
+ expect(message).toContain(
411
+ "The condition requires at least one reading to be above the 200.00% threshold.",
412
+ );
408
413
  });
409
414
 
410
415
  test("a non-numeric window is left alone", () => {
@@ -470,9 +475,7 @@ describe("CompareCriteria aggregation semantics", () => {
470
475
  test("the dimensionless '1' is dropped from the value AND the threshold", () => {
471
476
  const message: string = unitMessage("1");
472
477
 
473
- expect(message).toBe(
474
- "Any value of Metric Value is 0.85 which is greater than 0.8.",
475
- );
478
+ expect(message).toBe("Metric Value was 0.85, above the 0.8 threshold.");
476
479
  // The two halves of the defect, pinned separately.
477
480
  expect(message).not.toContain("0.85 1");
478
481
  expect(message).not.toContain("0.8 1");
@@ -492,7 +495,7 @@ describe("CompareCriteria aggregation semantics", () => {
492
495
  unit: "1",
493
496
  });
494
497
 
495
- expect(message).toContain("0.31 which is");
498
+ expect(message).toContain("0.31, at or above the 0.25 threshold");
496
499
  expect(message).not.toMatch(/\d\s1\b/);
497
500
  });
498
501
 
@@ -501,9 +504,7 @@ describe("CompareCriteria aggregation semantics", () => {
501
504
 
502
505
  expect(message).not.toContain("{cpu}");
503
506
  expect(message).not.toContain("{");
504
- expect(message).toBe(
505
- "Any value of Metric Value is 0.85 which is greater than 0.8.",
506
- );
507
+ expect(message).toBe("Metric Value was 0.85, above the 0.8 threshold.");
507
508
 
508
509
  expect(unitMessage("{packets}")).not.toContain("{packets}");
509
510
  expect(unitMessage("{errors}")).not.toContain("{errors}");
@@ -521,13 +522,13 @@ describe("CompareCriteria aggregation semantics", () => {
521
522
  * value and the threshold can never be quoted in different units.
522
523
  */
523
524
  expect(unitMessage("By")).toBe(
524
- "Any value of Metric Value is 0.85 B which is greater than 0.8 B.",
525
+ "Metric Value was 0.85 B, above the 0.8 B threshold.",
525
526
  );
526
527
  expect(unitMessage("%")).toBe(
527
- "Any value of Metric Value is 0.85% which is greater than 0.80%.",
528
+ "Metric Value was 0.85%, above the 0.80% threshold.",
528
529
  );
529
530
  expect(unitMessage("ms")).toBe(
530
- "Any value of Metric Value is 850 µs which is greater than 800 µs.",
531
+ "Metric Value was 850 µs, above the 800 µs threshold.",
531
532
  );
532
533
  // "1" is suppressed; a unit that merely CONTAINS a 1 is not.
533
534
  expect(unitMessage("m/s2")).toContain("0.85 m/s2");
@@ -538,17 +539,17 @@ describe("CompareCriteria aggregation semantics", () => {
538
539
  const message: string = unitMessage(" ms ");
539
540
 
540
541
  expect(message).toBe(
541
- "Any value of Metric Value is 850 µs which is greater than 800 µs.",
542
+ "Metric Value was 850 µs, above the 800 µs threshold.",
542
543
  );
543
544
  expect(message).not.toContain(" ");
544
545
  });
545
546
 
546
547
  test("a whitespace-only unit is treated as no unit at all", () => {
547
548
  expect(unitMessage(" ")).toBe(
548
- "Any value of Metric Value is 0.85 which is greater than 0.8.",
549
+ "Metric Value was 0.85, above the 0.8 threshold.",
549
550
  );
550
551
  expect(unitMessage(undefined)).toBe(
551
- "Any value of Metric Value is 0.85 which is greater than 0.8.",
552
+ "Metric Value was 0.85, above the 0.8 threshold.",
552
553
  );
553
554
  // A padded "1" is still the dimensionless marker.
554
555
  expect(unitMessage(" 1 ")).not.toMatch(/\d\s1\b/);
@@ -583,7 +584,7 @@ describe("CompareCriteria aggregation semantics", () => {
583
584
 
584
585
  expect(message).not.toMatch(/\d\s1\b/);
585
586
  expect(message).toContain("0.85");
586
- expect(message).toContain("0.8.");
587
+ expect(message).toMatch(/0\.8(?: threshold)?\./);
587
588
  }
588
589
  });
589
590
  });