@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.
- package/Models/DatabaseModels/AIAgentOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/AIAgentOwnerUser.ts +6 -0
- package/Models/DatabaseModels/Alert.ts +12 -0
- package/Models/DatabaseModels/AlertEpisodeOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/AlertEpisodeOwnerUser.ts +6 -1
- package/Models/DatabaseModels/AlertOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/AlertOwnerUser.ts +6 -1
- package/Models/DatabaseModels/CephClusterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/CephClusterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/CloudResourceOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/CloudResourceOwnerUser.ts +6 -0
- package/Models/DatabaseModels/DashboardOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/DashboardOwnerUser.ts +6 -1
- package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +8 -0
- package/Models/DatabaseModels/DockerHostOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/DockerHostOwnerUser.ts +6 -0
- package/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/DockerSwarmClusterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/HostOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/HostOwnerUser.ts +6 -0
- package/Models/DatabaseModels/Incident.ts +12 -0
- package/Models/DatabaseModels/IncidentEpisodeOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/IncidentEpisodeOwnerUser.ts +6 -1
- package/Models/DatabaseModels/IncidentOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/IncidentOwnerUser.ts +6 -1
- package/Models/DatabaseModels/IncidentTemplateOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/IncidentTemplateOwnerUser.ts +6 -0
- package/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/IncomingCallPolicyOwnerUser.ts +6 -1
- package/Models/DatabaseModels/IoTFleetOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/IoTFleetOwnerUser.ts +6 -0
- package/Models/DatabaseModels/KubernetesClusterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/KubernetesClusterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/Monitor.ts +2 -3
- package/Models/DatabaseModels/MonitorGroupOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/MonitorGroupOwnerUser.ts +6 -0
- package/Models/DatabaseModels/MonitorOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/MonitorOwnerUser.ts +6 -1
- package/Models/DatabaseModels/MonitorTemplate.ts +2 -3
- package/Models/DatabaseModels/NetworkDeviceOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/NetworkDeviceOwnerUser.ts +6 -0
- package/Models/DatabaseModels/OnCallDutyPolicyOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/OnCallDutyPolicyOwnerUser.ts +6 -1
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.ts +6 -1
- package/Models/DatabaseModels/PodmanHostOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/PodmanHostOwnerUser.ts +6 -0
- package/Models/DatabaseModels/ProbeOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/ProbeOwnerUser.ts +6 -0
- package/Models/DatabaseModels/ProxmoxClusterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/ProxmoxClusterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/RumApplicationOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/RumApplicationOwnerUser.ts +6 -0
- package/Models/DatabaseModels/RunbookOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/RunbookOwnerUser.ts +6 -1
- package/Models/DatabaseModels/RunnerOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/RunnerOwnerUser.ts +6 -1
- package/Models/DatabaseModels/ScheduledMaintenanceOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/ScheduledMaintenanceOwnerUser.ts +6 -1
- package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerTeam.ts +8 -0
- package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.ts +8 -0
- package/Models/DatabaseModels/ServerlessFunctionOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/ServerlessFunctionOwnerUser.ts +6 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.ts +6 -1
- package/Models/DatabaseModels/ServiceOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/ServiceOwnerUser.ts +6 -0
- package/Models/DatabaseModels/StatusPageOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/StatusPageOwnerUser.ts +6 -1
- package/Models/DatabaseModels/VMwareVCenterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/WorkflowOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/WorkflowOwnerUser.ts +6 -1
- package/Scripts/benchmark-fanin-capacity.js +2 -2
- package/Server/API/AIAgentDataAPI.ts +1 -1
- package/Server/API/AIChatAPI.ts +6 -4
- package/Server/API/AIInvestigationAPI.ts +7 -0
- package/Server/API/StatusPageAPI.ts +13 -0
- package/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.ts +1 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793500000000-MakeOwnerRowsUnique.ts +1057 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793700000000-AddAIInvestigationDecision.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793800000000-RemoveMonitorDescriptionLengthLimit.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Readme.md +6 -4
- package/Server/Middleware/IdentityRateLimit.ts +34 -1
- package/Server/Middleware/PublicDashboardRateLimit.ts +169 -39
- package/Server/Services/AlertEpisodeService.ts +13 -34
- package/Server/Services/AlertGroupingEngineService.ts +7 -4
- package/Server/Services/AlertService.ts +13 -32
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +18 -10
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +18 -10
- package/Server/Services/DashboardOwnerRuleEngineService.ts +18 -10
- package/Server/Services/DatabaseService.ts +101 -1
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +18 -10
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +18 -10
- package/Server/Services/HostOwnerRuleEngineService.ts +18 -10
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +6 -4
- package/Server/Services/IncidentEpisodeService.ts +15 -75
- package/Server/Services/IncidentGroupingEngineService.ts +7 -4
- package/Server/Services/IncidentService.ts +13 -32
- package/Server/Services/IncidentTemplateService.ts +13 -36
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +18 -10
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +18 -10
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +18 -10
- package/Server/Services/MonitorService.ts +13 -32
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +18 -10
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +18 -10
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +18 -10
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +18 -10
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +18 -10
- package/Server/Services/RumApplicationOwnerRuleEngineService.ts +18 -10
- package/Server/Services/RunbookOwnerRuleEngineService.ts +18 -10
- package/Server/Services/ScheduledMaintenanceService.ts +13 -34
- package/Server/Services/ScheduledMaintenanceTemplateService.ts +12 -34
- package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +18 -10
- package/Server/Services/ServiceOwnerRuleEngineService.ts +18 -10
- package/Server/Services/StatusPagePrivateUserService.ts +38 -29
- package/Server/Services/StatusPagePrivateUserSessionService.ts +49 -1
- package/Server/Services/StatusPageService.ts +59 -36
- package/Server/Services/UserSessionService.ts +6 -0
- package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +18 -10
- package/Server/Services/WorkflowOwnerRuleEngineService.ts +18 -10
- package/Server/Static/Brand/README.md +7 -7
- package/Server/Static/Vendor/README.md +7 -7
- package/Server/Types/Database/Permissions/OwnedScopePermission.ts +18 -9
- package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +82 -0
- package/Server/Utils/AI/Chat/ChatAgentRunner.ts +21 -8
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +41 -4
- package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +1 -1
- package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +1 -1
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +13 -5
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +53 -13
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +51 -14
- package/Server/Utils/AI/SRE/InvestigationEligibility.ts +292 -0
- package/Server/Utils/AI/SRE/InvestigationQueue.ts +25 -0
- package/Server/Utils/AI/Toolbox/Index.ts +43 -13
- package/Server/Utils/AI/Toolbox/ResourceTools.ts +952 -0
- package/Server/Utils/AI/Toolbox/RumTools.ts +424 -0
- package/Server/Utils/AI/Toolbox/ToolTypes.ts +10 -0
- package/Server/Utils/AI/Toolbox/TraceTools.ts +2 -1
- package/Server/Utils/Database/PostgresErrorTranslator.ts +14 -0
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +137 -126
- package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +4 -1
- package/Server/Utils/Rules/OwnerRuleAssignment.ts +157 -6
- package/Server/Utils/Telemetry/TelemetryEntity.ts +205 -6
- package/SslCertificates/GlobalSign.crt +26 -0
- package/SslCertificates/Readme.md +3 -0
- package/Tests/App/AdminDashboard/EnterpriseLicenseInstanceActivity.test.tsx +451 -0
- package/Tests/App/Dashboard/AIInsightsChatPanel.test.tsx +881 -0
- package/Tests/App/Dashboard/AIInsightsPageContext.test.ts +458 -0
- package/Tests/App/Dashboard/AIInsightsResourceCitations.test.ts +124 -0
- package/Tests/App/Dashboard/AIInsightsResourcePageContext.test.ts +798 -0
- package/Tests/App/Dashboard/AskAiSuggestedPrompts.test.ts +7 -0
- package/Tests/App/Dashboard/DashboardChartWidgetZoom.test.tsx +104 -0
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +156 -64
- package/Tests/App/Dashboard/DiscoveryScanStatusMessage.test.tsx +970 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +406 -12
- package/Tests/App/Dashboard/EmbeddedMetricEventScope.test.tsx +358 -0
- package/Tests/App/Dashboard/ErrorPatternEventScope.test.tsx +148 -0
- package/Tests/App/Dashboard/EventOverlayAdditionalResourceScope.test.ts +255 -0
- package/Tests/App/Dashboard/EventOverlayScope.test.ts +845 -0
- package/Tests/App/Dashboard/EventOverlayScopeHook.test.tsx +903 -0
- package/Tests/App/Dashboard/ExternalStatusPageCriteriaFilter.test.ts +3 -3
- package/Tests/App/Dashboard/InvestigationDrawer.test.tsx +21 -0
- package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +761 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +7 -4
- package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +15 -7
- package/Tests/App/Dashboard/MetricsViewerEventScopeNavigation.test.tsx +264 -0
- package/Tests/App/Dashboard/MonitorSummaryTestMonitorButton.test.tsx +342 -0
- package/Tests/App/Dashboard/MonitorTestForm.test.tsx +612 -0
- package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +301 -0
- package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +74 -2
- package/Tests/App/Dashboard/TextClampLayoutHarness.ts +224 -0
- package/Tests/Models/InventoryItemNaming.test.ts +54 -0
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +161 -0
- package/Tests/Server/API/AIInvestigationAPI.test.ts +14 -0
- package/Tests/Server/API/AIInvestigationAvailabilityAuthorization.test.ts +260 -0
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +133 -0
- package/Tests/Server/API/StatusPageMasterPasswordRateLimit.test.ts +482 -0
- package/Tests/Server/EnvironmentConfigOnCallCalendarFeed.test.ts +1 -1
- package/Tests/Server/Infrastructure/ClickhouseKeepAliveOptions.test.ts +1 -1
- package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +38 -16
- package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +106 -31
- package/Tests/Server/Infrastructure/ExampleDockerfiles.test.ts +46 -12
- package/Tests/Server/Infrastructure/Postgres/MonitorDescriptionMigration.test.ts +422 -0
- package/Tests/Server/Infrastructure/TelemetryExporterDeploymentConfig.test.ts +1 -1
- package/Tests/Server/Infrastructure/ValkeyDeploymentConfig.test.ts +25 -4
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +72 -0
- package/Tests/Server/Middleware/PublicDashboardRateLimit.test.ts +12 -12
- package/Tests/Server/Middleware/PublicDashboardRateLimitStatusPage.test.ts +800 -0
- package/Tests/Server/Services/AIInvestigationDecisionPostgres.test.ts +346 -0
- package/Tests/Server/Services/AddOwnersIdempotency.test.ts +471 -0
- package/Tests/Server/Services/DatabaseServiceAutoOwnerOnCreate.test.ts +250 -0
- package/Tests/Server/Services/DatabaseServiceUniqueColumnsTogether.test.ts +622 -0
- package/Tests/Server/Services/MonitorDescriptionValidation.test.ts +211 -0
- package/Tests/Server/Services/MonitorTemplateDescriptionPropagation.test.ts +269 -0
- package/Tests/Server/Services/OwnerRowUniqueness.test.ts +504 -0
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupARun.test.ts +43 -0
- package/Tests/Server/Services/SessionRetention.test.ts +334 -0
- package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +172 -0
- package/Tests/Server/Services/StatusPagePrivateUserReadAccess.test.ts +178 -0
- package/Tests/Server/Services/StatusPagePrivateUserReadAccessPostgres.test.ts +311 -0
- package/Tests/Server/Services/StatusPagePrivateUserSessionService.test.ts +216 -1
- package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +1 -1
- package/Tests/Server/Services/UserOnCallLogNoNotificationRules.test.ts +1 -1
- package/Tests/Server/Types/Database/EventOverlayScopePostgres.test.ts +626 -0
- package/Tests/Server/Types/Database/Permissions/InfrastructureOwnershipScope.test.ts +668 -0
- package/Tests/Server/Types/Database/Permissions/SelectRejectionMessageContract.test.ts +1 -0
- package/Tests/Server/Types/Database/Permissions/UserNotificationRuleScoping.test.ts +1 -1
- package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +16 -9
- package/Tests/Server/Utils/AI/ChatAgentRunner.test.ts +137 -1
- package/Tests/Server/Utils/AI/InvestigationEligibility.test.ts +697 -0
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +105 -0
- package/Tests/Server/Utils/AI/RemediationHandoff.test.ts +16 -5
- package/Tests/Server/Utils/AI/ResourceTools.test.ts +1304 -0
- package/Tests/Server/Utils/AI/RumTools.test.ts +769 -0
- package/Tests/Server/Utils/Database/PostgresErrorTranslator.test.ts +63 -0
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaEvaluateOverTime.test.ts +11 -9
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +62 -45
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +25 -24
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaHumanMessages.test.ts +513 -0
- package/Tests/Server/Utils/Monitor/Criteria/CustomCodeMonitorCriteria.test.ts +2 -2
- package/Tests/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.test.ts +1 -1
- package/Tests/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.test.ts +9 -9
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +7 -5
- package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +2 -2
- package/Tests/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.test.ts +4 -3
- package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +2 -2
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorMetricUnits.test.ts +3 -2
- package/Tests/Server/Utils/Monitor/MonitorCriteriaHumanMessages.test.ts +529 -0
- package/Tests/Server/Utils/Rules/OwnerRuleAssignment.test.ts +412 -4
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingClickhouseIntegration.test.ts +1 -1
- package/Tests/Server/Utils/TailwindBuildCopy.test.ts +14 -2
- package/Tests/Server/Utils/Telemetry/HostAssetAttributesFromOtlp.test.ts +235 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +385 -2
- package/Tests/Server/Utils/VendorAssets.test.ts +17 -3
- package/Tests/Types/AI/AIChatPageContext.test.ts +0 -0
- package/Tests/Types/AI/AIResourceContext.test.ts +312 -0
- package/Tests/Types/Database/UniqueColumnsTogether.test.ts +100 -0
- package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +4 -4
- package/Tests/Types/Monitor/MonitorStepRetryPersistence.test.ts +125 -0
- package/Tests/Types/WebsiteRequest.test.ts +44 -0
- package/Tests/UI/Components/Forms/MonitorDescriptionForm.test.tsx +410 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableReadPermissions.test.tsx +439 -0
- package/Tests/UI/Components/NavBarMenuSearch.test.tsx +372 -0
- package/Tests/UI/EsbuildConfig.test.ts +1 -1
- package/Tests/UI/Monitor/MonitorStepRetrySettings.test.tsx +616 -0
- package/Tests/UI/ReactRouterSingletonBuild.test.ts +4 -2
- package/Tests/UI/Rum/ReplayEngine.test.ts +179 -0
- package/Tests/UI/Rum/ReplayHeader.test.tsx +23 -0
- package/Tests/UI/Rum/ReplayScrubber.test.tsx +88 -0
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +83 -0
- package/Tests/UI/Rum/ReplayTabSwitcher.test.tsx +33 -0
- package/Tests/Utils/API.test.ts +96 -0
- package/Tests/Utils/HTTPResponseBodyReader.test.ts +188 -1
- package/Tests/Utils/Metrics/MetricEventScopeUrl.test.ts +101 -0
- package/Tests/Utils/Monitor/MonitorTestAvailabilityUtil.test.ts +256 -0
- package/Tests/Utils/Telemetry/HostIpAddresses.test.ts +105 -0
- package/Types/AI/AIChatPageContext.ts +87 -2
- package/Types/AI/AIChatTypes.ts +4 -0
- package/Types/AI/AIResourceContext.ts +198 -0
- package/Types/AI/InvestigationNotStartedReason.ts +30 -0
- package/Types/Database/UniqueColumnsTogether.ts +55 -0
- package/Types/Metrics/MetricQueryConfigData.ts +8 -0
- package/Types/Rum/WebVitals.ts +71 -0
- package/Types/WebsiteRequest.ts +2 -0
- package/UI/Components/EditionLabel/EditionLabel.tsx +7 -5
- package/UI/Components/KeyboardShortcut/Screenshots/README.md +1 -1
- package/UI/Components/ModelTable/BaseModelTable.tsx +8 -0
- package/UI/Components/Navbar/NavBar.tsx +2 -0
- package/UI/Components/Navbar/NavBarMenuModal.tsx +6 -2
- package/UI/esbuild-config.js +4 -4
- package/Utils/API.ts +10 -1
- package/Utils/Dashboard/HtmlWidgetDocument.ts +1 -1
- package/Utils/HTTPResponseBodyReader.ts +64 -8
- package/Utils/Metrics/MetricExplorerUrl.ts +19 -0
- package/Utils/Monitor/MonitorTestAvailabilityUtil.ts +92 -0
- package/Utils/Telemetry/HostIpAddresses.ts +46 -2
- package/build/dist/Models/DatabaseModels/AIAgentOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/AIAgentOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AIAgentOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/AIAgentOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Alert.js +12 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephClusterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/CephClusterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephClusterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/CephClusterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DashboardOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/DashboardOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DashboardOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/DashboardOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +3 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHostOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/DockerHostOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHostOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/DockerHostOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/HostOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/HostOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/HostOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/HostOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +12 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +2 -3
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorGroupOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/MonitorGroupOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorGroupOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/MonitorGroupOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/MonitorOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/MonitorOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js +2 -3
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProbeOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/ProbeOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProbeOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/ProbeOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunnerOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/RunnerOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunnerOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/RunnerOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerTeam.js +6 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js +6 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/ServiceOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/ServiceOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerUser.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +1 -1
- package/build/dist/Server/API/AIChatAPI.js +3 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +3 -0
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +9 -1
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.js +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793500000000-MakeOwnerRowsUnique.js +602 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793500000000-MakeOwnerRowsUnique.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793700000000-AddAIInvestigationDecision.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793700000000-AddAIInvestigationDecision.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793800000000-RemoveMonitorDescriptionLengthLimit.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793800000000-RemoveMonitorDescriptionLengthLimit.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +22 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
- package/build/dist/Server/Middleware/PublicDashboardRateLimit.js +117 -36
- package/build/dist/Server/Middleware/PublicDashboardRateLimit.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeService.js +13 -31
- package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js +7 -4
- package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +13 -31
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +71 -1
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +6 -4
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js +15 -68
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +7 -4
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +13 -31
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentTemplateService.js +13 -31
- package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +13 -31
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +13 -31
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js +12 -29
- package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +33 -25
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserSessionService.js +36 -1
- package/build/dist/Server/Services/StatusPagePrivateUserSessionService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +50 -35
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/UserSessionService.js +5 -0
- package/build/dist/Server/Services/UserSessionService.js.map +1 -1
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +12 -8
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js +15 -10
- package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +82 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +12 -3
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +32 -4
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +8 -5
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +33 -13
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +31 -10
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js +205 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +13 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/Index.js +30 -6
- package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js +721 -0
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/RumTools.js +330 -0
- package/build/dist/Server/Utils/AI/Toolbox/RumTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/ToolTypes.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/TraceTools.js +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/TraceTools.js.map +1 -1
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js +11 -0
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +106 -101
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +4 -2
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js +94 -0
- package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +171 -6
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Types/AI/AIChatPageContext.js +68 -2
- package/build/dist/Types/AI/AIChatPageContext.js.map +1 -1
- package/build/dist/Types/AI/AIChatTypes.js +4 -0
- package/build/dist/Types/AI/AIChatTypes.js.map +1 -1
- package/build/dist/Types/AI/AIResourceContext.js +162 -0
- package/build/dist/Types/AI/AIResourceContext.js.map +1 -0
- package/build/dist/Types/AI/InvestigationNotStartedReason.js +2 -0
- package/build/dist/Types/AI/InvestigationNotStartedReason.js.map +1 -0
- package/build/dist/Types/Database/UniqueColumnsTogether.js +19 -0
- package/build/dist/Types/Database/UniqueColumnsTogether.js.map +1 -0
- package/build/dist/Types/Metrics/MetricQueryConfigData.js.map +1 -1
- package/build/dist/Types/Rum/WebVitals.js +64 -0
- package/build/dist/Types/Rum/WebVitals.js.map +1 -0
- package/build/dist/Types/WebsiteRequest.js +2 -0
- package/build/dist/Types/WebsiteRequest.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +7 -5
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +7 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +4 -2
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/Utils/API.js +8 -4
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/HTTPResponseBodyReader.js +50 -6
- package/build/dist/Utils/HTTPResponseBodyReader.js.map +1 -1
- package/build/dist/Utils/Metrics/MetricExplorerUrl.js +14 -3
- package/build/dist/Utils/Metrics/MetricExplorerUrl.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorTestAvailabilityUtil.js +68 -0
- package/build/dist/Utils/Monitor/MonitorTestAvailabilityUtil.js.map +1 -0
- package/build/dist/Utils/Telemetry/HostIpAddresses.js +42 -3
- package/build/dist/Utils/Telemetry/HostIpAddresses.js.map +1 -1
- package/package.json +5 -5
- package/test-setup.sh +2 -2
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import {
|
|
2
|
+
InvestigationNotStartedCode,
|
|
3
|
+
InvestigationGateDetails,
|
|
4
|
+
} from "../../../../Types/AI/InvestigationNotStartedReason";
|
|
5
|
+
import InvestigationEligibility from "./InvestigationEligibility";
|
|
1
6
|
import ObjectID from "../../../../Types/ObjectID";
|
|
2
7
|
import OneUptimeDate from "../../../../Types/Date";
|
|
3
8
|
import AIRunType from "../../../../Types/AI/AIRunType";
|
|
@@ -17,7 +22,10 @@ import IncidentService from "../../../Services/IncidentService";
|
|
|
17
22
|
import IncidentAIContextBuilder, {
|
|
18
23
|
IncidentContextData,
|
|
19
24
|
} from "../IncidentAIContextBuilder";
|
|
20
|
-
import {
|
|
25
|
+
import {
|
|
26
|
+
AI_INCIDENT_INVESTIGATION_FEATURE,
|
|
27
|
+
AutonomousBudgetStatus,
|
|
28
|
+
} from "../../../Services/AIService";
|
|
21
29
|
import AIInvestigationEngine from "./AIInvestigationEngine";
|
|
22
30
|
import AIInvestigationQueue from "./InvestigationQueue";
|
|
23
31
|
import AIConfidenceSignal, { ConfidenceSignal } from "./ConfidenceSignal";
|
|
@@ -50,6 +58,8 @@ const MAX_INCIDENT_DEDUPE_WINDOW_MINUTES: number = 24 * 60;
|
|
|
50
58
|
|
|
51
59
|
export interface IncidentGateDecision {
|
|
52
60
|
investigate: boolean;
|
|
61
|
+
notStartedCode?: InvestigationNotStartedCode | undefined;
|
|
62
|
+
notStartedDetails?: InvestigationGateDetails | undefined;
|
|
53
63
|
reason: string;
|
|
54
64
|
monitorId?: ObjectID | undefined;
|
|
55
65
|
}
|
|
@@ -74,12 +84,10 @@ export default class AIIncidentInvestigationRunner {
|
|
|
74
84
|
const { incidentId, projectId } = data;
|
|
75
85
|
|
|
76
86
|
try {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
))
|
|
82
|
-
) {
|
|
87
|
+
const disabled: InvestigationNotStartedCode | null =
|
|
88
|
+
await AIInvestigationEngine.getDisabledReason(projectId, "Incident");
|
|
89
|
+
if (disabled) {
|
|
90
|
+
await InvestigationEligibility.recordSkipped(data, disabled);
|
|
83
91
|
return false;
|
|
84
92
|
}
|
|
85
93
|
|
|
@@ -89,6 +97,12 @@ export default class AIIncidentInvestigationRunner {
|
|
|
89
97
|
});
|
|
90
98
|
|
|
91
99
|
if (!gate.investigate) {
|
|
100
|
+
await InvestigationEligibility.recordSkipped(
|
|
101
|
+
data,
|
|
102
|
+
gate.notStartedCode || "eligibility_check_failed",
|
|
103
|
+
undefined,
|
|
104
|
+
gate.notStartedDetails,
|
|
105
|
+
);
|
|
92
106
|
logger.debug(
|
|
93
107
|
`AI: skipping investigation for incident ${incidentId.toString()} — ${gate.reason}.`,
|
|
94
108
|
);
|
|
@@ -100,11 +114,21 @@ export default class AIIncidentInvestigationRunner {
|
|
|
100
114
|
projectId,
|
|
101
115
|
subjectIncidentId: incidentId,
|
|
102
116
|
subjectMonitorId: gate.monitorId,
|
|
117
|
+
onNotEnqueued: async (
|
|
118
|
+
code: InvestigationNotStartedCode,
|
|
119
|
+
budget?: AutonomousBudgetStatus,
|
|
120
|
+
): Promise<void> => {
|
|
121
|
+
await InvestigationEligibility.recordSkipped(data, code, budget);
|
|
122
|
+
},
|
|
103
123
|
},
|
|
104
124
|
);
|
|
105
125
|
|
|
106
126
|
return enqueuedRunId !== null;
|
|
107
127
|
} catch (error) {
|
|
128
|
+
await InvestigationEligibility.recordSkipped(
|
|
129
|
+
data,
|
|
130
|
+
"eligibility_check_failed",
|
|
131
|
+
);
|
|
108
132
|
logger.error(
|
|
109
133
|
`AI: unexpected error enqueueing investigation for incident ${incidentId.toString()}: ${error}`,
|
|
110
134
|
);
|
|
@@ -140,13 +164,18 @@ export default class AIIncidentInvestigationRunner {
|
|
|
140
164
|
},
|
|
141
165
|
incidentSeverity: {
|
|
142
166
|
order: true,
|
|
167
|
+
name: true,
|
|
143
168
|
},
|
|
144
169
|
},
|
|
145
170
|
props: { isRoot: true },
|
|
146
171
|
});
|
|
147
172
|
|
|
148
173
|
if (!incident) {
|
|
149
|
-
return {
|
|
174
|
+
return {
|
|
175
|
+
investigate: false,
|
|
176
|
+
reason: "incident not found",
|
|
177
|
+
notStartedCode: "eligibility_check_failed",
|
|
178
|
+
};
|
|
150
179
|
}
|
|
151
180
|
|
|
152
181
|
const monitorIds: Array<ObjectID> = (incident.monitors || [])
|
|
@@ -175,18 +204,24 @@ export default class AIIncidentInvestigationRunner {
|
|
|
175
204
|
* whose severity order cannot be determined passes, as does every
|
|
176
205
|
* incident when no floor is configured.
|
|
177
206
|
*/
|
|
178
|
-
const
|
|
207
|
+
const floorSeverity: IncidentSeverity | null = await this.getSeverityFloor(
|
|
179
208
|
project?.incidentInvestigationMinimumSeverityId,
|
|
180
209
|
);
|
|
210
|
+
const floorOrder: number | undefined = floorSeverity?.order;
|
|
181
211
|
const incidentOrder: number | undefined = incident.incidentSeverity?.order;
|
|
182
212
|
|
|
183
213
|
if (
|
|
184
|
-
floorOrder !==
|
|
214
|
+
floorOrder !== undefined &&
|
|
185
215
|
incidentOrder !== undefined &&
|
|
186
216
|
incidentOrder > floorOrder
|
|
187
217
|
) {
|
|
188
218
|
return {
|
|
189
219
|
investigate: false,
|
|
220
|
+
notStartedCode: "severity_below_threshold",
|
|
221
|
+
notStartedDetails: {
|
|
222
|
+
severityName: incident.incidentSeverity?.name,
|
|
223
|
+
minimumSeverityName: floorSeverity?.name,
|
|
224
|
+
},
|
|
190
225
|
reason: `severity order ${incidentOrder} is below the investigation floor (order ${floorOrder})`,
|
|
191
226
|
monitorId: primaryMonitorId,
|
|
192
227
|
};
|
|
@@ -227,6 +262,8 @@ export default class AIIncidentInvestigationRunner {
|
|
|
227
262
|
if (recentRunCount > 0) {
|
|
228
263
|
return {
|
|
229
264
|
investigate: false,
|
|
265
|
+
notStartedCode: "monitor_cooldown",
|
|
266
|
+
notStartedDetails: { cooldownWindowMinutes: dedupeWindowMinutes },
|
|
230
267
|
reason: `a monitor affected by this incident was already investigated within the last ${dedupeWindowMinutes} minutes`,
|
|
231
268
|
monitorId: primaryMonitorId,
|
|
232
269
|
};
|
|
@@ -246,9 +283,9 @@ export default class AIIncidentInvestigationRunner {
|
|
|
246
283
|
* Returns null when no floor applies — which, unlike the alert lane, is the
|
|
247
284
|
* default: no configured minimum means investigate everything.
|
|
248
285
|
*/
|
|
249
|
-
private static async
|
|
286
|
+
private static async getSeverityFloor(
|
|
250
287
|
minimumSeverityId: ObjectID | undefined,
|
|
251
|
-
): Promise<
|
|
288
|
+
): Promise<IncidentSeverity | null> {
|
|
252
289
|
if (!minimumSeverityId) {
|
|
253
290
|
return null;
|
|
254
291
|
}
|
|
@@ -256,7 +293,7 @@ export default class AIIncidentInvestigationRunner {
|
|
|
256
293
|
const floorSeverity: IncidentSeverity | null =
|
|
257
294
|
await IncidentSeverityService.findOneById({
|
|
258
295
|
id: minimumSeverityId,
|
|
259
|
-
select: { order: true },
|
|
296
|
+
select: { order: true, name: true },
|
|
260
297
|
props: { isRoot: true },
|
|
261
298
|
});
|
|
262
299
|
|
|
@@ -268,7 +305,7 @@ export default class AIIncidentInvestigationRunner {
|
|
|
268
305
|
return null;
|
|
269
306
|
}
|
|
270
307
|
|
|
271
|
-
return floorSeverity
|
|
308
|
+
return floorSeverity;
|
|
272
309
|
}
|
|
273
310
|
|
|
274
311
|
/*
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import Alert from "../../../../Models/DatabaseModels/Alert";
|
|
2
|
+
import Incident from "../../../../Models/DatabaseModels/Incident";
|
|
3
|
+
import InvestigationNotStartedReason, {
|
|
4
|
+
InvestigationNotStartedCode,
|
|
5
|
+
InvestigationGateDetails,
|
|
6
|
+
} from "../../../../Types/AI/InvestigationNotStartedReason";
|
|
7
|
+
import ObjectID from "../../../../Types/ObjectID";
|
|
8
|
+
import AIService, { AutonomousBudgetStatus } from "../../../Services/AIService";
|
|
9
|
+
import AlertService from "../../../Services/AlertService";
|
|
10
|
+
import IncidentService from "../../../Services/IncidentService";
|
|
11
|
+
import logger from "../../Logger";
|
|
12
|
+
import AIInvestigationEngine from "./AIInvestigationEngine";
|
|
13
|
+
import AIAlertInvestigationRunner from "./AlertInvestigationRunner";
|
|
14
|
+
import AIIncidentInvestigationRunner from "./IncidentInvestigationRunner";
|
|
15
|
+
|
|
16
|
+
export interface InvestigationSubject {
|
|
17
|
+
projectId: ObjectID;
|
|
18
|
+
incidentId?: ObjectID | undefined;
|
|
19
|
+
alertId?: ObjectID | undefined;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export default class InvestigationEligibility {
|
|
23
|
+
public static reason(
|
|
24
|
+
code: InvestigationNotStartedCode,
|
|
25
|
+
subject: InvestigationSubject,
|
|
26
|
+
budget?: AutonomousBudgetStatus,
|
|
27
|
+
details?: InvestigationGateDetails,
|
|
28
|
+
): InvestigationNotStartedReason {
|
|
29
|
+
return this.buildReason("recorded", code, subject, budget, details);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
private static buildReason(
|
|
33
|
+
source: "recorded" | "current_configuration",
|
|
34
|
+
code: InvestigationNotStartedCode,
|
|
35
|
+
subject: InvestigationSubject,
|
|
36
|
+
budget?: AutonomousBudgetStatus,
|
|
37
|
+
details?: InvestigationGateDetails,
|
|
38
|
+
): InvestigationNotStartedReason {
|
|
39
|
+
const kind: string = subject.alertId ? "alert" : "incident";
|
|
40
|
+
const recorded: boolean = source === "recorded";
|
|
41
|
+
const cooldownWindow: string =
|
|
42
|
+
details?.cooldownWindowMinutes !== undefined
|
|
43
|
+
? `${details.cooldownWindowMinutes}-minute`
|
|
44
|
+
: "configured";
|
|
45
|
+
const reasons: Record<
|
|
46
|
+
InvestigationNotStartedCode,
|
|
47
|
+
{ title: string; description: string; nextStep: string }
|
|
48
|
+
> = {
|
|
49
|
+
ai_disabled: {
|
|
50
|
+
title: recorded
|
|
51
|
+
? "Project AI was turned off at creation"
|
|
52
|
+
: "Project AI is currently turned off",
|
|
53
|
+
description: recorded
|
|
54
|
+
? `AI was disabled for this project when this ${kind} was created, so its automatic investigation did not start.`
|
|
55
|
+
: "AI is currently disabled for this project, so new automatic investigations cannot start.",
|
|
56
|
+
nextStep: recorded
|
|
57
|
+
? "Review project AI settings for new records. Existing records are not automatically retried when AI is enabled."
|
|
58
|
+
: "Enable project AI and automatic investigations to investigate new records. Existing records are not automatically retried.",
|
|
59
|
+
},
|
|
60
|
+
automatic_investigation_disabled: {
|
|
61
|
+
title: recorded
|
|
62
|
+
? `Automatic ${kind} investigation was off at creation`
|
|
63
|
+
: `Automatic ${kind} investigation is currently turned off`,
|
|
64
|
+
description: `${recorded ? `Automatic investigation was not enabled for ${kind}s when this ${kind} was created.` : `Automatic investigation is not currently enabled for ${kind}s.`} Alerts and incidents have separate investigation settings.`,
|
|
65
|
+
nextStep: recorded
|
|
66
|
+
? `Review automatic ${kind} investigation settings for new ${kind}s. Enabling investigation later does not automatically retry this ${kind}.`
|
|
67
|
+
: `Enable automatic ${kind} investigation for new ${kind}s. Existing records are not automatically retried.`,
|
|
68
|
+
},
|
|
69
|
+
provider_missing: {
|
|
70
|
+
title: recorded
|
|
71
|
+
? "No AI provider was available at creation"
|
|
72
|
+
: "No AI provider is currently available",
|
|
73
|
+
description: recorded
|
|
74
|
+
? `Automatic investigation was enabled when this ${kind} was created, but no configured AI provider was available to run it.`
|
|
75
|
+
: "Automatic investigation is currently enabled, but this project has no configured AI provider available to run new investigations.",
|
|
76
|
+
nextStep: recorded
|
|
77
|
+
? "Review the AI provider configuration for new investigations. Configuring a provider later does not automatically retry existing records."
|
|
78
|
+
: "Configure an AI provider in project settings. New eligible records can then be investigated; existing records are not automatically retried.",
|
|
79
|
+
},
|
|
80
|
+
severity_below_threshold: {
|
|
81
|
+
title: recorded
|
|
82
|
+
? "Severity was below the investigation threshold at creation"
|
|
83
|
+
: "Severity is below the current investigation threshold",
|
|
84
|
+
description: `${recorded ? `When this ${kind} was created, its` : `This ${kind}'s`}${details?.severityName ? ` ${details.severityName}` : ""} severity ${recorded ? "did not meet" : "does not meet"} ${details?.minimumSeverityName ? `the minimum ${details.minimumSeverityName} investigation severity` : "the configured investigation threshold"}.${kind === "alert" ? " By default, only the two highest alert severity tiers are investigated." : ""}`,
|
|
85
|
+
nextStep:
|
|
86
|
+
"Review the minimum investigation severity in AI settings. Changes apply to new records and do not retry this record.",
|
|
87
|
+
},
|
|
88
|
+
monitor_cooldown: {
|
|
89
|
+
title: recorded
|
|
90
|
+
? "Skipped during the monitor cooldown"
|
|
91
|
+
: "A monitor is currently within its investigation cooldown",
|
|
92
|
+
description: recorded
|
|
93
|
+
? `Another ${kind} investigation was already queued or started for an affected monitor within the ${cooldownWindow} investigation cooldown window. This repeat ${kind} did not start another investigation.`
|
|
94
|
+
: `An investigation for an affected monitor was queued or started within the current ${cooldownWindow} cooldown window, which prevents another automatic ${kind} investigation right now.`,
|
|
95
|
+
nextStep:
|
|
96
|
+
"Review recent investigations for the affected monitor, or adjust the investigation cooldown for new records. An earlier run may still be queued, running, or may have failed.",
|
|
97
|
+
},
|
|
98
|
+
daily_budget_exhausted: {
|
|
99
|
+
title:
|
|
100
|
+
budget?.limitInTokens === 0
|
|
101
|
+
? recorded
|
|
102
|
+
? "Automatic investigation was paused by its token limit"
|
|
103
|
+
: "Automatic investigation is currently paused by its token limit"
|
|
104
|
+
: recorded
|
|
105
|
+
? "Daily AI token budget had been reached"
|
|
106
|
+
: "Daily AI token budget is currently exhausted",
|
|
107
|
+
description: budget
|
|
108
|
+
? `AI work for ${kind}s ${recorded ? "had used" : "has used"} ${budget.usedTokensToday.toLocaleString("en-US")} of its ${budget.limitInTokens?.toLocaleString("en-US")} token daily allowance ${recorded ? "when checked at creation. No investigation was queued." : "today. The current allowance does not permit a new investigation."}`
|
|
109
|
+
: `The daily autonomous token allowance for ${kind}s ${recorded ? "had been reached when this record was created, so no investigation was queued." : "is currently exhausted, so new investigations cannot start."}`,
|
|
110
|
+
nextStep:
|
|
111
|
+
"Review the daily token limit in AI settings. Usage resets at midnight UTC; skipped records are not automatically retried after the reset.",
|
|
112
|
+
},
|
|
113
|
+
budget_check_failed: {
|
|
114
|
+
title: recorded
|
|
115
|
+
? "The AI budget could not be checked"
|
|
116
|
+
: "The current AI budget cannot be checked",
|
|
117
|
+
description: recorded
|
|
118
|
+
? "The system could not verify the available AI budget. It did not queue an investigation to avoid exceeding the configured spending limit."
|
|
119
|
+
: "The available AI budget cannot currently be verified, so eligibility for a new investigation cannot be confirmed.",
|
|
120
|
+
nextStep:
|
|
121
|
+
"Ask a project administrator to check service health and AI settings. This record was not queued for automatic retry.",
|
|
122
|
+
},
|
|
123
|
+
enqueue_failed: {
|
|
124
|
+
title: recorded
|
|
125
|
+
? "The investigation could not be queued"
|
|
126
|
+
: "Investigation queue availability could not be verified",
|
|
127
|
+
description: recorded
|
|
128
|
+
? "The system could not save an investigation to the queue, so no investigation started for this record."
|
|
129
|
+
: "The service could not confirm whether a new investigation can currently be saved to the queue.",
|
|
130
|
+
nextStep:
|
|
131
|
+
"Ask a project administrator to check service health and server logs. This record was not queued for automatic retry.",
|
|
132
|
+
},
|
|
133
|
+
eligibility_check_failed: {
|
|
134
|
+
title: recorded
|
|
135
|
+
? "Investigation eligibility could not be verified"
|
|
136
|
+
: "Current investigation eligibility cannot be verified",
|
|
137
|
+
description: recorded
|
|
138
|
+
? "The system could not complete the checks required to start an automatic investigation."
|
|
139
|
+
: "The current checks required to start an automatic investigation could not be completed.",
|
|
140
|
+
nextStep:
|
|
141
|
+
"Ask a project administrator to check service health and AI settings. No automatic retry is scheduled for this record.",
|
|
142
|
+
},
|
|
143
|
+
no_run_recorded: {
|
|
144
|
+
title: "No investigation was recorded",
|
|
145
|
+
description: `This ${kind} passes the current automatic investigation checks, but no investigation or original skip decision was found. Settings may have changed since it was created, or automatic investigation may not have started when this record was created.`,
|
|
146
|
+
nextStep:
|
|
147
|
+
"Automatic investigations are triggered when a record is created. Enabling investigation later does not backfill existing records; check the AI logs and service health if new eligible records are also missing investigations.",
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
return {
|
|
151
|
+
code,
|
|
152
|
+
...reasons[code],
|
|
153
|
+
description: recorded
|
|
154
|
+
? reasons[code].description
|
|
155
|
+
: `${reasons[code].description} These are the current conditions; the original decision was not recorded, so they do not confirm why this record was skipped at creation.`,
|
|
156
|
+
source,
|
|
157
|
+
evaluatedAt: new Date().toISOString(),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** Best effort, without overriding the first decision or failing creation. */
|
|
162
|
+
public static async recordSkipped(
|
|
163
|
+
subject: InvestigationSubject,
|
|
164
|
+
code: InvestigationNotStartedCode,
|
|
165
|
+
budget?: AutonomousBudgetStatus,
|
|
166
|
+
details?: InvestigationGateDetails,
|
|
167
|
+
): Promise<void> {
|
|
168
|
+
try {
|
|
169
|
+
const decision: InvestigationNotStartedReason = this.reason(
|
|
170
|
+
code,
|
|
171
|
+
subject,
|
|
172
|
+
budget,
|
|
173
|
+
details,
|
|
174
|
+
);
|
|
175
|
+
if (subject.alertId) {
|
|
176
|
+
await AlertService.updateColumnsByIdWithoutHooks({
|
|
177
|
+
id: subject.alertId,
|
|
178
|
+
data: { aiInvestigationDecision: decision },
|
|
179
|
+
expectedData: {
|
|
180
|
+
projectId: subject.projectId,
|
|
181
|
+
aiInvestigationDecision: null,
|
|
182
|
+
},
|
|
183
|
+
skipUpdateDateColumn: true,
|
|
184
|
+
});
|
|
185
|
+
} else if (subject.incidentId) {
|
|
186
|
+
await IncidentService.updateColumnsByIdWithoutHooks({
|
|
187
|
+
id: subject.incidentId,
|
|
188
|
+
data: { aiInvestigationDecision: decision },
|
|
189
|
+
expectedData: {
|
|
190
|
+
projectId: subject.projectId,
|
|
191
|
+
aiInvestigationDecision: null,
|
|
192
|
+
},
|
|
193
|
+
skipUpdateDateColumn: true,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
} catch (error) {
|
|
197
|
+
logger.error(`AI: could not record investigation decision: ${error}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** Read-only; the caller must first authorize access to the subject. */
|
|
202
|
+
public static async getNotStartedReason(
|
|
203
|
+
subject: InvestigationSubject,
|
|
204
|
+
): Promise<InvestigationNotStartedReason> {
|
|
205
|
+
try {
|
|
206
|
+
const row: Alert | Incident | null = subject.alertId
|
|
207
|
+
? await AlertService.findOneBy({
|
|
208
|
+
query: {
|
|
209
|
+
_id: subject.alertId.toString(),
|
|
210
|
+
projectId: subject.projectId,
|
|
211
|
+
},
|
|
212
|
+
select: { aiInvestigationDecision: true },
|
|
213
|
+
props: { isRoot: true },
|
|
214
|
+
})
|
|
215
|
+
: await IncidentService.findOneBy({
|
|
216
|
+
query: {
|
|
217
|
+
_id: subject.incidentId!.toString(),
|
|
218
|
+
projectId: subject.projectId,
|
|
219
|
+
},
|
|
220
|
+
select: { aiInvestigationDecision: true },
|
|
221
|
+
props: { isRoot: true },
|
|
222
|
+
});
|
|
223
|
+
if (row?.aiInvestigationDecision) {
|
|
224
|
+
return row.aiInvestigationDecision;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const disabled: InvestigationNotStartedCode | null =
|
|
228
|
+
await AIInvestigationEngine.getDisabledReason(
|
|
229
|
+
subject.projectId,
|
|
230
|
+
subject.alertId ? "Alert" : "Incident",
|
|
231
|
+
);
|
|
232
|
+
if (disabled) {
|
|
233
|
+
return this.currentReason(disabled, subject);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const gate: {
|
|
237
|
+
investigate: boolean;
|
|
238
|
+
notStartedCode?: InvestigationNotStartedCode | undefined;
|
|
239
|
+
notStartedDetails?: InvestigationGateDetails | undefined;
|
|
240
|
+
} = subject.alertId
|
|
241
|
+
? await AIAlertInvestigationRunner.shouldInvestigateAlert({
|
|
242
|
+
projectId: subject.projectId,
|
|
243
|
+
alertId: subject.alertId,
|
|
244
|
+
})
|
|
245
|
+
: await AIIncidentInvestigationRunner.shouldInvestigateIncident({
|
|
246
|
+
projectId: subject.projectId,
|
|
247
|
+
incidentId: subject.incidentId!,
|
|
248
|
+
});
|
|
249
|
+
if (!gate.investigate) {
|
|
250
|
+
return this.currentReason(
|
|
251
|
+
gate.notStartedCode || "eligibility_check_failed",
|
|
252
|
+
subject,
|
|
253
|
+
undefined,
|
|
254
|
+
gate.notStartedDetails,
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const budget: AutonomousBudgetStatus =
|
|
259
|
+
await AIService.getAutonomousDailyBudgetStatus(subject.projectId, {
|
|
260
|
+
incidentId: subject.incidentId,
|
|
261
|
+
alertId: subject.alertId,
|
|
262
|
+
});
|
|
263
|
+
if (budget.exhausted) {
|
|
264
|
+
return this.currentReason("daily_budget_exhausted", subject, budget);
|
|
265
|
+
}
|
|
266
|
+
return { ...this.reason("no_run_recorded", subject), source: "unknown" };
|
|
267
|
+
} catch (error) {
|
|
268
|
+
logger.error(`AI: could not explain missing investigation: ${error}`);
|
|
269
|
+
return {
|
|
270
|
+
...this.reason("eligibility_check_failed", subject),
|
|
271
|
+
description:
|
|
272
|
+
"No investigation was found. The original decision or current eligibility checks could not be loaded.",
|
|
273
|
+
source: "unknown",
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
private static currentReason(
|
|
279
|
+
code: InvestigationNotStartedCode,
|
|
280
|
+
subject: InvestigationSubject,
|
|
281
|
+
budget?: AutonomousBudgetStatus,
|
|
282
|
+
details?: InvestigationGateDetails,
|
|
283
|
+
): InvestigationNotStartedReason {
|
|
284
|
+
return this.buildReason(
|
|
285
|
+
"current_configuration",
|
|
286
|
+
code,
|
|
287
|
+
subject,
|
|
288
|
+
budget,
|
|
289
|
+
details,
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { InvestigationNotStartedCode } from "../../../../Types/AI/InvestigationNotStartedReason";
|
|
1
2
|
import ObjectID from "../../../../Types/ObjectID";
|
|
2
3
|
import OneUptimeDate from "../../../../Types/Date";
|
|
3
4
|
import Query from "../../../../Types/BaseDatabase/Query";
|
|
@@ -127,6 +128,12 @@ export default class AIInvestigationQueue {
|
|
|
127
128
|
subjectAlertId?: ObjectID | undefined;
|
|
128
129
|
subjectMonitorId?: ObjectID | undefined;
|
|
129
130
|
subjectAIInsightId?: ObjectID | undefined;
|
|
131
|
+
onNotEnqueued?:
|
|
132
|
+
| ((
|
|
133
|
+
code: InvestigationNotStartedCode,
|
|
134
|
+
budget?: AutonomousBudgetStatus,
|
|
135
|
+
) => Promise<void>)
|
|
136
|
+
| undefined;
|
|
130
137
|
/*
|
|
131
138
|
* When set, the run is a remediation run (not an Investigation): by
|
|
132
139
|
* default a read-only RemediationPlan that picks a runbook for this
|
|
@@ -146,6 +153,21 @@ export default class AIInvestigationQueue {
|
|
|
146
153
|
}): Promise<ObjectID | null> {
|
|
147
154
|
const { projectId } = data;
|
|
148
155
|
|
|
156
|
+
// Diagnostic persistence must never change queue admission or remediation.
|
|
157
|
+
const recordSkip: (
|
|
158
|
+
code: InvestigationNotStartedCode,
|
|
159
|
+
budget?: AutonomousBudgetStatus,
|
|
160
|
+
) => Promise<void> = async (
|
|
161
|
+
code: InvestigationNotStartedCode,
|
|
162
|
+
budget?: AutonomousBudgetStatus,
|
|
163
|
+
): Promise<void> => {
|
|
164
|
+
try {
|
|
165
|
+
await data.onNotEnqueued?.(code, budget);
|
|
166
|
+
} catch (error) {
|
|
167
|
+
logger.error(`AI: could not record queue admission decision: ${error}`);
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
|
|
149
171
|
if (data.subjectIncidentId && data.subjectAlertId) {
|
|
150
172
|
logger.error(
|
|
151
173
|
`AI: not enqueueing investigation for project ${projectId.toString()} — a run cannot belong to both an incident and an alert.`,
|
|
@@ -166,12 +188,14 @@ export default class AIInvestigationQueue {
|
|
|
166
188
|
});
|
|
167
189
|
|
|
168
190
|
if (budget.exhausted) {
|
|
191
|
+
await recordSkip("daily_budget_exhausted", budget);
|
|
169
192
|
logger.debug(
|
|
170
193
|
`AI: not enqueueing investigation for project ${projectId.toString()} — daily autonomous token budget exhausted (${budget.usedTokensToday} of ${budget.limitInTokens} tokens used today).`,
|
|
171
194
|
);
|
|
172
195
|
return null;
|
|
173
196
|
}
|
|
174
197
|
} catch (error) {
|
|
198
|
+
await recordSkip("budget_check_failed");
|
|
175
199
|
logger.error(
|
|
176
200
|
`AI: budget check failed, not enqueueing investigation: ${error}`,
|
|
177
201
|
);
|
|
@@ -240,6 +264,7 @@ export default class AIInvestigationQueue {
|
|
|
240
264
|
)
|
|
241
265
|
: await createRun();
|
|
242
266
|
} catch (error) {
|
|
267
|
+
await recordSkip("enqueue_failed");
|
|
243
268
|
logger.error(`AI: failed to enqueue investigation run: ${error}`);
|
|
244
269
|
return null;
|
|
245
270
|
}
|
|
@@ -16,6 +16,11 @@ import {
|
|
|
16
16
|
import { QueryIncidentsTool, SearchIncidentsTool } from "./IncidentTools";
|
|
17
17
|
import { QueryAlertsTool } from "./AlertTools";
|
|
18
18
|
import { QueryMonitorsTool } from "./MonitorTools";
|
|
19
|
+
import { QueryRumApplicationsTool, QueryRumWebVitalsTool } from "./RumTools";
|
|
20
|
+
import {
|
|
21
|
+
QueryTelemetryResourcesTool,
|
|
22
|
+
QueryResourceTelemetryTool,
|
|
23
|
+
} from "./ResourceTools";
|
|
19
24
|
import { QueryScheduledMaintenanceTool } from "./ScheduledMaintenanceTools";
|
|
20
25
|
import {
|
|
21
26
|
GetOnCallStatusTool,
|
|
@@ -100,6 +105,10 @@ export default class AIToolbox {
|
|
|
100
105
|
GetAlertTimelineTool,
|
|
101
106
|
QueryAlertsTool,
|
|
102
107
|
QueryMonitorsTool,
|
|
108
|
+
QueryRumApplicationsTool,
|
|
109
|
+
QueryRumWebVitalsTool,
|
|
110
|
+
QueryTelemetryResourcesTool,
|
|
111
|
+
QueryResourceTelemetryTool,
|
|
103
112
|
QueryScheduledMaintenanceTool,
|
|
104
113
|
/*
|
|
105
114
|
* Platform reads: the operational surface an on-call product exists to
|
|
@@ -246,6 +255,7 @@ export default class AIToolbox {
|
|
|
246
255
|
public static hasPermissionForTool(
|
|
247
256
|
tool: ObservabilityTool,
|
|
248
257
|
ctx: ToolContext,
|
|
258
|
+
args?: JSONObject,
|
|
249
259
|
): boolean {
|
|
250
260
|
if (ctx.props.isRoot || ctx.props.isMasterAdmin) {
|
|
251
261
|
return true;
|
|
@@ -270,15 +280,6 @@ export default class AIToolbox {
|
|
|
270
280
|
return userPermission.permission;
|
|
271
281
|
});
|
|
272
282
|
|
|
273
|
-
if (
|
|
274
|
-
PermissionHelper.doesPermissionsIntersect(
|
|
275
|
-
blockedPermissions,
|
|
276
|
-
tool.requiredPermissions,
|
|
277
|
-
)
|
|
278
|
-
) {
|
|
279
|
-
return false;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
283
|
const userPermissions: Array<Permission> =
|
|
283
284
|
DatabaseCommonInteractionPropsUtil.getUserPermissions(
|
|
284
285
|
ctx.props,
|
|
@@ -287,9 +288,22 @@ export default class AIToolbox {
|
|
|
287
288
|
return userPermission.permission;
|
|
288
289
|
});
|
|
289
290
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
291
|
+
const groups: Array<Array<Permission>> =
|
|
292
|
+
args !== undefined && tool.getRequiredPermissionGroups
|
|
293
|
+
? tool.getRequiredPermissionGroups(args)
|
|
294
|
+
: [tool.requiredPermissions];
|
|
295
|
+
return (
|
|
296
|
+
groups.length > 0 &&
|
|
297
|
+
groups.every((group: Array<Permission>): boolean => {
|
|
298
|
+
return (
|
|
299
|
+
group.length > 0 &&
|
|
300
|
+
!PermissionHelper.doesPermissionsIntersect(
|
|
301
|
+
blockedPermissions,
|
|
302
|
+
group,
|
|
303
|
+
) &&
|
|
304
|
+
PermissionHelper.doesPermissionsIntersect(userPermissions, group)
|
|
305
|
+
);
|
|
306
|
+
})
|
|
293
307
|
);
|
|
294
308
|
}
|
|
295
309
|
|
|
@@ -321,7 +335,23 @@ export default class AIToolbox {
|
|
|
321
335
|
};
|
|
322
336
|
}
|
|
323
337
|
|
|
324
|
-
|
|
338
|
+
/*
|
|
339
|
+
* Tool JSON is untrusted at runtime even though callers are typed. Check
|
|
340
|
+
* the envelope before argument-dependent permission functions read it.
|
|
341
|
+
*/
|
|
342
|
+
if (
|
|
343
|
+
!data.args ||
|
|
344
|
+
typeof data.args !== "object" ||
|
|
345
|
+
Array.isArray(data.args)
|
|
346
|
+
) {
|
|
347
|
+
return {
|
|
348
|
+
success: false,
|
|
349
|
+
textForLlm: `Error: arguments for ${data.name} must be a JSON object. Adjust the arguments and try again.`,
|
|
350
|
+
errorMessage: `Invalid arguments for tool: ${data.name}; expected a JSON object`,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
if (!this.hasPermissionForTool(tool, data.ctx, data.args)) {
|
|
325
355
|
return {
|
|
326
356
|
success: false,
|
|
327
357
|
textForLlm: `Error: the current user does not have permission to use ${data.name}. Answer with the data you already have, and tell the user which permission is missing.`,
|