@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
@@ -1,12 +1,19 @@
1
1
  import { JSONObject } from "../JSON";
2
+ import {
3
+ AIResourceSubresource,
4
+ AIResourceType,
5
+ isAIResourceSubresourceKind,
6
+ isAIResourceType,
7
+ } from "./AIResourceContext";
2
8
 
3
9
  /*
4
10
  * "Page context" makes Ask AI aware of what the user is looking at in the
5
11
  * dashboard. The client detects the current page (an incident, a monitor, a
6
12
  * trace waterfall, the logs explorer, …) and attaches this small descriptor to
7
13
  * each message it sends; the server folds it into the system prompt so "this
8
- * incident" resolves to the entity on screen. It is a per-turn hint, never
9
- * persisted — the user can detach it in the composer at any time.
14
+ * incident" resolves to the entity on screen. The latest context is kept as
15
+ * the conversation's subject. Sending null explicitly detaches and clears
16
+ * that subject; omitting context lets a full-page conversation keep it.
10
17
  */
11
18
  enum AIChatPageContextType {
12
19
  // Entity pages — carry the entity's id (and usually a display title).
@@ -15,6 +22,8 @@ enum AIChatPageContextType {
15
22
  Monitor = "Monitor",
16
23
  ScheduledMaintenanceEvent = "ScheduledMaintenanceEvent",
17
24
  TelemetryService = "TelemetryService",
25
+ RumApplication = "RumApplication",
26
+ Resource = "Resource",
18
27
  Trace = "Trace",
19
28
  Exception = "Exception",
20
29
 
@@ -27,6 +36,9 @@ enum AIChatPageContextType {
27
36
  TracesExplorer = "TracesExplorer",
28
37
  MetricsExplorer = "MetricsExplorer",
29
38
  ExceptionsList = "ExceptionsList",
39
+ RumApplications = "RumApplications",
40
+ TelemetryServicesList = "TelemetryServicesList",
41
+ ResourcesList = "ResourcesList",
30
42
  }
31
43
 
32
44
  export default AIChatPageContextType;
@@ -37,6 +49,8 @@ export interface AIChatPageContext {
37
49
  entityId?: string | undefined;
38
50
  // Display title of the entity (incident title, monitor name, …). Optional.
39
51
  entityTitle?: string | undefined;
52
+ resourceType?: AIResourceType | undefined;
53
+ subresource?: AIResourceSubresource | undefined;
40
54
  }
41
55
 
42
56
  /*
@@ -58,11 +72,28 @@ const ENTITY_TYPES: Array<AIChatPageContextType> = [
58
72
  AIChatPageContextType.Monitor,
59
73
  AIChatPageContextType.ScheduledMaintenanceEvent,
60
74
  AIChatPageContextType.TelemetryService,
75
+ AIChatPageContextType.RumApplication,
76
+ AIChatPageContextType.Resource,
61
77
  AIChatPageContextType.Trace,
62
78
  AIChatPageContextType.Exception,
63
79
  ];
64
80
 
65
81
  export class AIChatPageContextHelper {
82
+ /*
83
+ * Titles are presentation hints; only the resource and child identity decide
84
+ * whether navigation has selected a different conversation subject.
85
+ */
86
+ public static getIdentity(context: AIChatPageContext): string {
87
+ return JSON.stringify([
88
+ context.type,
89
+ context.entityId || null,
90
+ context.resourceType || null,
91
+ context.subresource?.kind || null,
92
+ context.subresource?.key || null,
93
+ context.subresource?.namespace || null,
94
+ ]);
95
+ }
96
+
66
97
  public static isValidType(
67
98
  value: string | undefined,
68
99
  ): value is AIChatPageContextType {
@@ -97,6 +128,16 @@ export class AIChatPageContextHelper {
97
128
 
98
129
  const context: AIChatPageContext = { type: type };
99
130
 
131
+ if (
132
+ type === AIChatPageContextType.Resource ||
133
+ type === AIChatPageContextType.ResourcesList
134
+ ) {
135
+ if (!isAIResourceType(json["resourceType"])) {
136
+ return undefined;
137
+ }
138
+ context.resourceType = json["resourceType"];
139
+ }
140
+
100
141
  if (this.isEntityType(type)) {
101
142
  const entityId: string =
102
143
  typeof json["entityId"] === "string"
@@ -113,6 +154,50 @@ export class AIChatPageContextHelper {
113
154
 
114
155
  context.entityId = entityId;
115
156
 
157
+ if (
158
+ type === AIChatPageContextType.Resource &&
159
+ json["subresource"] !== undefined
160
+ ) {
161
+ const raw: unknown = json["subresource"];
162
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
163
+ return undefined;
164
+ }
165
+ const child: JSONObject = raw as JSONObject;
166
+ if (
167
+ !context.resourceType ||
168
+ !isAIResourceSubresourceKind(context.resourceType, child["kind"])
169
+ ) {
170
+ return undefined;
171
+ }
172
+ const subresource: AIResourceSubresource = { kind: child["kind"] };
173
+ if (child["key"] !== undefined) {
174
+ // eslint-disable-next-line no-control-regex
175
+ const controlCharacters: RegExp = /[\u0000-\u001F\u007F]/;
176
+ if (
177
+ typeof child["key"] !== "string" ||
178
+ !child["key"].trim() ||
179
+ child["key"].length > 512 ||
180
+ controlCharacters.test(child["key"])
181
+ ) {
182
+ return undefined;
183
+ }
184
+ subresource.key = child["key"].trim();
185
+ }
186
+ if (child["namespace"] !== undefined) {
187
+ const namespacePattern: RegExp = /^[a-z0-9](?:[-a-z0-9]*[a-z0-9])?$/;
188
+ if (
189
+ context.resourceType !== AIResourceType.KubernetesCluster ||
190
+ typeof child["namespace"] !== "string" ||
191
+ child["namespace"].length > 63 ||
192
+ !namespacePattern.test(child["namespace"])
193
+ ) {
194
+ return undefined;
195
+ }
196
+ subresource.namespace = child["namespace"];
197
+ }
198
+ context.subresource = subresource;
199
+ }
200
+
116
201
  if (typeof json["entityTitle"] === "string") {
117
202
  /*
118
203
  * The title is echoed into the system prompt: collapse whitespace and
@@ -37,6 +37,10 @@ export enum AIChatCitationTargetType {
37
37
  Probes = "Probes",
38
38
  Teams = "Teams",
39
39
  SecurityEvents = "SecurityEvents",
40
+ RumApplications = "RumApplications",
41
+ RumApplicationView = "RumApplicationView",
42
+ TelemetryResources = "TelemetryResources",
43
+ TelemetryResourceView = "TelemetryResourceView",
40
44
  }
41
45
 
42
46
  export interface AIChatCitationTarget {
@@ -0,0 +1,198 @@
1
+ import IconProp from "../Icon/IconProp";
2
+ import {
3
+ RESOURCE_FACET_CATALOG,
4
+ ResourceFacetDefinition,
5
+ } from "../Telemetry/ResourceFacetCatalog";
6
+ import ServiceType from "../Telemetry/ServiceType";
7
+
8
+ export enum AIResourceType {
9
+ Host = "Host",
10
+ DockerHost = "DockerHost",
11
+ PodmanHost = "PodmanHost",
12
+ KubernetesCluster = "KubernetesCluster",
13
+ DockerSwarmCluster = "DockerSwarmCluster",
14
+ ProxmoxCluster = "ProxmoxCluster",
15
+ VMwareVCenter = "VMwareVCenter",
16
+ CephCluster = "CephCluster",
17
+ ServerlessFunction = "ServerlessFunction",
18
+ CloudResource = "CloudResource",
19
+ IoTFleet = "IoTFleet",
20
+ NetworkDevice = "NetworkDevice",
21
+ }
22
+
23
+ export enum AIResourceSubresourceKind {
24
+ Namespace = "Namespace",
25
+ Pod = "Pod",
26
+ Deployment = "Deployment",
27
+ StatefulSet = "StatefulSet",
28
+ DaemonSet = "DaemonSet",
29
+ Job = "Job",
30
+ CronJob = "CronJob",
31
+ Node = "Node",
32
+ Container = "Container",
33
+ PersistentVolumeClaim = "PersistentVolumeClaim",
34
+ PersistentVolume = "PersistentVolume",
35
+ HorizontalPodAutoscaler = "HorizontalPodAutoscaler",
36
+ VerticalPodAutoscaler = "VerticalPodAutoscaler",
37
+ Service = "Service",
38
+ Task = "Task",
39
+ Stack = "Stack",
40
+ Network = "Network",
41
+ Volume = "Volume",
42
+ Secret = "Secret",
43
+ Config = "Config",
44
+ Guest = "Guest",
45
+ Storage = "Storage",
46
+ Host = "Host",
47
+ VirtualMachine = "VirtualMachine",
48
+ Datastore = "Datastore",
49
+ Cluster = "Cluster",
50
+ Osd = "Osd",
51
+ Pool = "Pool",
52
+ Device = "Device",
53
+ Process = "Process",
54
+ WindowsService = "WindowsService",
55
+ SystemdUnit = "SystemdUnit",
56
+ Instance = "Instance",
57
+ Interface = "Interface",
58
+ }
59
+
60
+ export interface AIResourceSubresource {
61
+ kind: AIResourceSubresourceKind;
62
+ // Child names and external IDs are not OneUptime resource UUIDs.
63
+ key?: string | undefined;
64
+ namespace?: string | undefined;
65
+ }
66
+
67
+ export interface AIResourceDefinition extends ResourceFacetDefinition {
68
+ type: AIResourceType;
69
+ }
70
+
71
+ const RESOURCE_FACET_KEYS: Record<AIResourceType, string> = {
72
+ [AIResourceType.Host]: "hostId",
73
+ [AIResourceType.DockerHost]: "dockerHostId",
74
+ [AIResourceType.PodmanHost]: "podmanHostId",
75
+ [AIResourceType.KubernetesCluster]: "kubernetesClusterId",
76
+ [AIResourceType.DockerSwarmCluster]: "dockerSwarmClusterId",
77
+ [AIResourceType.ProxmoxCluster]: "proxmoxClusterId",
78
+ [AIResourceType.VMwareVCenter]: "vmwareVCenterId",
79
+ [AIResourceType.CephCluster]: "cephClusterId",
80
+ [AIResourceType.ServerlessFunction]: "serverlessFunctionId",
81
+ [AIResourceType.CloudResource]: "cloudResourceId",
82
+ [AIResourceType.IoTFleet]: "iotFleetId",
83
+ [AIResourceType.NetworkDevice]: "networkDeviceId",
84
+ };
85
+
86
+ /*
87
+ * Reuse the telemetry catalog's labels and type discriminators, including
88
+ * IoTFleet's historical IoTDevice discriminator. Network devices have no facet.
89
+ */
90
+ export const AI_RESOURCE_DEFINITIONS: ReadonlyArray<AIResourceDefinition> =
91
+ Object.values(AIResourceType).map(
92
+ (type: AIResourceType): AIResourceDefinition => {
93
+ const facetKey: string = RESOURCE_FACET_KEYS[type];
94
+ if (type === AIResourceType.NetworkDevice) {
95
+ return {
96
+ type,
97
+ facetKey,
98
+ serviceType: ServiceType.NetworkDevice,
99
+ label: "Network Device",
100
+ pluralLabel: "Network Devices",
101
+ icon: IconProp.Server,
102
+ };
103
+ }
104
+
105
+ const definition: ResourceFacetDefinition | undefined =
106
+ RESOURCE_FACET_CATALOG.find(
107
+ (item: ResourceFacetDefinition): boolean => {
108
+ return item.facetKey === facetKey;
109
+ },
110
+ );
111
+ if (!definition) {
112
+ throw new Error(`Missing resource facet definition: ${type}`);
113
+ }
114
+ return { ...definition, type };
115
+ },
116
+ );
117
+
118
+ export function getAIResourceDefinition(
119
+ type: AIResourceType,
120
+ ): AIResourceDefinition {
121
+ const definition: AIResourceDefinition | undefined =
122
+ AI_RESOURCE_DEFINITIONS.find((item: AIResourceDefinition): boolean => {
123
+ return item.type === type;
124
+ });
125
+ if (!definition) {
126
+ throw new Error(`Unknown AI resource type: ${type}`);
127
+ }
128
+ return definition;
129
+ }
130
+
131
+ export function isAIResourceType(value: unknown): value is AIResourceType {
132
+ return Object.values(AIResourceType).includes(value as AIResourceType);
133
+ }
134
+
135
+ export const AI_RESOURCE_SUBRESOURCE_KINDS: Readonly<
136
+ Record<AIResourceType, ReadonlyArray<AIResourceSubresourceKind>>
137
+ > = {
138
+ [AIResourceType.Host]: [
139
+ AIResourceSubresourceKind.Process,
140
+ AIResourceSubresourceKind.WindowsService,
141
+ AIResourceSubresourceKind.SystemdUnit,
142
+ ],
143
+ [AIResourceType.DockerHost]: [AIResourceSubresourceKind.Container],
144
+ [AIResourceType.PodmanHost]: [AIResourceSubresourceKind.Container],
145
+ [AIResourceType.KubernetesCluster]: [
146
+ AIResourceSubresourceKind.Namespace,
147
+ AIResourceSubresourceKind.Pod,
148
+ AIResourceSubresourceKind.Deployment,
149
+ AIResourceSubresourceKind.StatefulSet,
150
+ AIResourceSubresourceKind.DaemonSet,
151
+ AIResourceSubresourceKind.Job,
152
+ AIResourceSubresourceKind.CronJob,
153
+ AIResourceSubresourceKind.Node,
154
+ AIResourceSubresourceKind.Container,
155
+ AIResourceSubresourceKind.PersistentVolumeClaim,
156
+ AIResourceSubresourceKind.PersistentVolume,
157
+ AIResourceSubresourceKind.HorizontalPodAutoscaler,
158
+ AIResourceSubresourceKind.VerticalPodAutoscaler,
159
+ ],
160
+ [AIResourceType.DockerSwarmCluster]: [
161
+ AIResourceSubresourceKind.Node,
162
+ AIResourceSubresourceKind.Service,
163
+ AIResourceSubresourceKind.Task,
164
+ AIResourceSubresourceKind.Stack,
165
+ AIResourceSubresourceKind.Network,
166
+ AIResourceSubresourceKind.Volume,
167
+ AIResourceSubresourceKind.Secret,
168
+ AIResourceSubresourceKind.Config,
169
+ ],
170
+ [AIResourceType.ProxmoxCluster]: [
171
+ AIResourceSubresourceKind.Node,
172
+ AIResourceSubresourceKind.Guest,
173
+ AIResourceSubresourceKind.Storage,
174
+ ],
175
+ [AIResourceType.VMwareVCenter]: [
176
+ AIResourceSubresourceKind.Host,
177
+ AIResourceSubresourceKind.VirtualMachine,
178
+ AIResourceSubresourceKind.Datastore,
179
+ AIResourceSubresourceKind.Cluster,
180
+ ],
181
+ [AIResourceType.CephCluster]: [
182
+ AIResourceSubresourceKind.Osd,
183
+ AIResourceSubresourceKind.Pool,
184
+ ],
185
+ [AIResourceType.IoTFleet]: [AIResourceSubresourceKind.Device],
186
+ [AIResourceType.ServerlessFunction]: [AIResourceSubresourceKind.Instance],
187
+ [AIResourceType.CloudResource]: [AIResourceSubresourceKind.Instance],
188
+ [AIResourceType.NetworkDevice]: [AIResourceSubresourceKind.Interface],
189
+ };
190
+
191
+ export function isAIResourceSubresourceKind(
192
+ type: AIResourceType,
193
+ value: unknown,
194
+ ): value is AIResourceSubresourceKind {
195
+ return AI_RESOURCE_SUBRESOURCE_KINDS[type].includes(
196
+ value as AIResourceSubresourceKind,
197
+ );
198
+ }
@@ -0,0 +1,30 @@
1
+ export type InvestigationNotStartedCode =
2
+ | "ai_disabled"
3
+ | "automatic_investigation_disabled"
4
+ | "provider_missing"
5
+ | "severity_below_threshold"
6
+ | "monitor_cooldown"
7
+ | "daily_budget_exhausted"
8
+ | "budget_check_failed"
9
+ | "enqueue_failed"
10
+ | "eligibility_check_failed"
11
+ | "no_run_recorded";
12
+
13
+ /**
14
+ * A recorded decision is evidence from the creation hook. Current settings
15
+ * explain eligibility now, and must never be presented as a historical fact.
16
+ */
17
+ export default interface InvestigationNotStartedReason {
18
+ code: InvestigationNotStartedCode;
19
+ title: string;
20
+ description: string;
21
+ nextStep: string;
22
+ source: "recorded" | "current_configuration" | "unknown";
23
+ evaluatedAt: string;
24
+ }
25
+
26
+ export interface InvestigationGateDetails {
27
+ severityName?: string | undefined;
28
+ minimumSeverityName?: string | undefined;
29
+ cooldownWindowMinutes?: number | undefined;
30
+ }
@@ -0,0 +1,55 @@
1
+ import GenericFunction from "../GenericFunction";
2
+
3
+ /*
4
+ * Declares that no two rows of a model may share the same values across
5
+ * `columnNames`. DatabaseService.create looks for an existing row with those
6
+ * values before inserting and, if there is one, rejects the insert with
7
+ * `errorMessage` instead of writing a second row.
8
+ *
9
+ * WHY THIS EXISTS
10
+ *
11
+ * Join rows such as <Resource>OwnerTeam / <Resource>OwnerUser have side effects
12
+ * on create: each new row writes a feed item and notifies the owner. The
13
+ * dashboard hides owners that are already attached, but the REST API,
14
+ * workflows and internal callers all insert directly, so a duplicate row used
15
+ * to mean a duplicate notification (issue #3394).
16
+ *
17
+ * This is the application half of the guarantee. Declare the same columns in
18
+ * an `@Index([...], { unique: true })` on the entity as well: a check before an
19
+ * insert cannot stop two concurrent writers, and only the database can.
20
+ * PostgresErrorTranslator.isUniqueViolation() recognises the rejection from
21
+ * either layer, so a caller that wants "already there" to be a no-op needs a
22
+ * single check.
23
+ *
24
+ * Only creates are checked. Rows are expected to be re-keyed rarely, if ever,
25
+ * and the unique index covers updates.
26
+ */
27
+
28
+ export interface UniqueColumnsTogetherMetadata {
29
+ columnNames: Array<string>;
30
+ errorMessage: string;
31
+ }
32
+
33
+ export default (columnNames: Array<string>, errorMessage: string) => {
34
+ return (ctr: GenericFunction) => {
35
+ /*
36
+ * Stackable. Read only this class's own list: a subclass must not
37
+ * append to the list its parent keeps on the parent's prototype.
38
+ */
39
+ const existing: Array<UniqueColumnsTogetherMetadata> =
40
+ Object.prototype.hasOwnProperty.call(
41
+ ctr.prototype,
42
+ "uniqueColumnsTogether",
43
+ )
44
+ ? ctr.prototype.uniqueColumnsTogether
45
+ : [];
46
+
47
+ ctr.prototype.uniqueColumnsTogether = [
48
+ ...existing,
49
+ {
50
+ columnNames: [...columnNames],
51
+ errorMessage: errorMessage,
52
+ },
53
+ ];
54
+ };
55
+ };
@@ -1,6 +1,7 @@
1
1
  import AggregatedModel from "../BaseDatabase/AggregatedModel";
2
2
  import MetricAliasData from "./MetricAliasData";
3
3
  import MetricQueryData from "./MetricQueryData";
4
+ import MetricsQuery from "./MetricsQuery";
4
5
 
5
6
  export enum MetricChartType {
6
7
  LINE = "line",
@@ -25,6 +26,13 @@ export default interface MetricQueryConfigData {
25
26
  id?: string | undefined;
26
27
  metricAliasData?: MetricAliasData | undefined;
27
28
  metricQueryData: MetricQueryData;
29
+ /**
30
+ * Resource identity for event markers when the metric list is scoped by
31
+ * entity membership instead of telemetry attributes (e.g. RUM, Inventory).
32
+ * Kept separate from the metric filter: these identifiers are not stored
33
+ * in its attributes map. An explicit empty scope suppresses event markers.
34
+ */
35
+ eventScope?: MetricsQuery["attributes"] | undefined;
28
36
  getSeries?: ((data: AggregatedModel) => ChartSeries) | undefined;
29
37
  chartType?: MetricChartType | undefined;
30
38
  yAxisValueFormatter?: ((value: number) => string) | undefined;
@@ -0,0 +1,71 @@
1
+ export interface WebVitalDefinition {
2
+ key: string;
3
+ label: string;
4
+ unit: "ms" | "score";
5
+ thresholds: { warn: number; danger: number };
6
+ names: Array<string>;
7
+ }
8
+
9
+ // Ordered aliases recognized by the RUM overview and the AI assistant.
10
+ export const WebVitalDefinitions: Array<WebVitalDefinition> = [
11
+ {
12
+ key: "lcp",
13
+ label: "Largest Contentful Paint",
14
+ unit: "ms",
15
+ thresholds: { warn: 2500, danger: 4000 },
16
+ names: [
17
+ "web_vital.lcp",
18
+ "browser.largest_contentful_paint",
19
+ "largest_contentful_paint",
20
+ "web.vitals.lcp",
21
+ ],
22
+ },
23
+ {
24
+ key: "inp",
25
+ label: "Interaction to Next Paint",
26
+ unit: "ms",
27
+ thresholds: { warn: 200, danger: 500 },
28
+ names: [
29
+ "web_vital.inp",
30
+ "browser.interaction_to_next_paint",
31
+ "interaction_to_next_paint",
32
+ "web.vitals.inp",
33
+ ],
34
+ },
35
+ {
36
+ key: "cls",
37
+ label: "Cumulative Layout Shift",
38
+ unit: "score",
39
+ thresholds: { warn: 0.1, danger: 0.25 },
40
+ names: [
41
+ "web_vital.cls",
42
+ "browser.cumulative_layout_shift",
43
+ "cumulative_layout_shift",
44
+ "web.vitals.cls",
45
+ ],
46
+ },
47
+ {
48
+ key: "fcp",
49
+ label: "First Contentful Paint",
50
+ unit: "ms",
51
+ thresholds: { warn: 1800, danger: 3000 },
52
+ names: [
53
+ "web_vital.fcp",
54
+ "browser.first_contentful_paint",
55
+ "first_contentful_paint",
56
+ "web.vitals.fcp",
57
+ ],
58
+ },
59
+ {
60
+ key: "ttfb",
61
+ label: "Time to First Byte",
62
+ unit: "ms",
63
+ thresholds: { warn: 800, danger: 1800 },
64
+ names: [
65
+ "web_vital.ttfb",
66
+ "browser.time_to_first_byte",
67
+ "time_to_first_byte",
68
+ "web.vitals.ttfb",
69
+ ],
70
+ },
71
+ ];
@@ -122,6 +122,7 @@ export default class WebsiteRequest {
122
122
  options.limitRedirectResponseBody || false,
123
123
  isHeadResponse: responseIsForHeadRequest,
124
124
  maximumResponseBytes: options.maximumResponseBytes,
125
+ signal: options.signal,
125
126
  }),
126
127
  );
127
128
  }
@@ -147,6 +148,7 @@ export default class WebsiteRequest {
147
148
  limitRedirectResponseBody: options.limitRedirectResponseBody || false,
148
149
  isHeadResponse: responseIsForHeadRequest,
149
150
  maximumResponseBytes: options.maximumResponseBytes,
151
+ signal: options.signal,
150
152
  }),
151
153
  );
152
154
  }
@@ -38,13 +38,15 @@ export interface ComponentProps {
38
38
  const ENTERPRISE_URL: string = "https://oneuptime.com/enterprise/demo";
39
39
 
40
40
  /*
41
- * Linked only for major upgrades. Points at GitHub rather than the docs site
42
- * on this installation, because the guide for the version you are moving TO is
43
- * the one you need, and this installation only ships the guide for the version
44
- * it is already running.
41
+ * Linked only for major upgrades. Points at the oneuptime.com docs rather than
42
+ * the docs site on this installation, because the guide for the version you are
43
+ * moving TO is the one you need, and this installation only ships the guide for
44
+ * the version it is already running. The oneuptime.com docs always carry the
45
+ * latest release, and unlike a GitHub file link this URL does not break when
46
+ * the docs move in the repository.
45
47
  */
46
48
  const UPGRADE_GUIDE_URL: string =
47
- "https://github.com/OneUptime/oneuptime/blob/master/App/FeatureSet/Docs/Content/en/installation/upgrading.md";
49
+ "https://oneuptime.com/docs/installation/upgrading";
48
50
  const SALES_EMAIL: string = "sales@oneuptime.com";
49
51
  const SALES_MAILTO_URL: string = "mailto:sales@oneuptime.com";
50
52
 
@@ -3,7 +3,7 @@
3
3
  The dashboard's global keyboard layer — the shortcuts dialog
4
4
  (`../KeyboardShortcutsModal.tsx`) and the two places it is reachable by mouse.
5
5
  Rendered from the real components against the dashboard's own Tailwind build
6
- and `Common/UI/Styles/Theme.css`.
6
+ and `packages/Common/UI/Styles/Theme.css`.
7
7
 
8
8
  | File | Shows |
9
9
  | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
@@ -2546,6 +2546,14 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
2546
2546
  const hasPermissionToReadField: HasPermissionToReadFieldFunction = (
2547
2547
  field: keyof TBaseModel,
2548
2548
  ): boolean => {
2549
+ /*
2550
+ * Secondary fields use this check when building the request, so they need
2551
+ * the same master-admin access as the visible columns that render them.
2552
+ */
2553
+ if (User.isMasterAdmin()) {
2554
+ return true;
2555
+ }
2556
+
2549
2557
  const accessControl: Dictionary<ColumnAccessControl> =
2550
2558
  model.getColumnAccessControlForAllColumns();
2551
2559
 
@@ -29,6 +29,8 @@ export interface NavItem {
29
29
  export interface MoreMenuItem {
30
30
  title: string;
31
31
  description: string;
32
+ /** Acronyms and alternate names users can search for in navigation. */
33
+ keywords?: Array<string> | undefined;
32
34
  route: Route;
33
35
  icon: IconProp;
34
36
  iconColor?: string; // Tailwind color name like "blue", "purple", "amber"
@@ -186,14 +186,18 @@ const NavBarMenuModal: FunctionComponent<ComponentProps> = (
186
186
 
187
187
  const recentLabel: string = tx(props.recentLabel || "Recent");
188
188
 
189
- // Filter items by the search query (title only).
189
+ // Keep familiar acronyms searchable even when the displayed title is translated.
190
190
  const filteredItems: MoreMenuItem[] = useMemo(() => {
191
191
  const normalizedQuery: string = query.trim().toLowerCase();
192
192
  if (!normalizedQuery) {
193
193
  return props.items;
194
194
  }
195
195
  return props.items.filter((item: MoreMenuItem) => {
196
- return item.title.toLowerCase().includes(normalizedQuery);
196
+ return [item.title, item.description, ...(item.keywords || [])].some(
197
+ (value: string) => {
198
+ return value.toLowerCase().includes(normalizedQuery);
199
+ },
200
+ );
197
201
  });
198
202
  }, [props.items, query]);
199
203
 
@@ -11,7 +11,7 @@ const dotenv = require("dotenv");
11
11
  function createRefractorCompatibilityPlugin() {
12
12
  const candidateRoots = [
13
13
  path.resolve(__dirname, "../node_modules/refractor"),
14
- path.resolve(__dirname, "../../node_modules/refractor"),
14
+ path.resolve(__dirname, "../../../node_modules/refractor"),
15
15
  ];
16
16
 
17
17
  const refractorRoot = candidateRoots.find((packagePath) =>
@@ -53,7 +53,7 @@ function createRefractorCompatibilityPlugin() {
53
53
  function createMermaidPlugin() {
54
54
  const candidateRoots = [
55
55
  path.resolve(__dirname, "../node_modules/mermaid"),
56
- path.resolve(__dirname, "../../node_modules/mermaid"),
56
+ path.resolve(__dirname, "../../../node_modules/mermaid"),
57
57
  ];
58
58
  const mermaidRoot = candidateRoots.find((p) => fs.existsSync(p));
59
59
 
@@ -259,7 +259,7 @@ function resolvePackageRoot(packageName) {
259
259
  process.cwd(),
260
260
  __dirname,
261
261
  path.resolve(__dirname, ".."),
262
- path.resolve(__dirname, "../.."),
262
+ path.resolve(__dirname, "../../.."),
263
263
  ];
264
264
 
265
265
  for (const resolutionPath of resolutionPaths) {
@@ -300,7 +300,7 @@ function resolvePackageSubpath(packageName, subpath) {
300
300
  process.cwd(),
301
301
  __dirname,
302
302
  path.resolve(__dirname, ".."),
303
- path.resolve(__dirname, "../.."),
303
+ path.resolve(__dirname, "../../.."),
304
304
  ];
305
305
 
306
306
  for (const resolutionPath of resolutionPaths) {