@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
|
@@ -478,8 +478,8 @@ export default class CompareCriteria {
|
|
|
478
478
|
unit?: string | undefined;
|
|
479
479
|
/**
|
|
480
480
|
* The metric NAME, when there is a real one. Distinct from
|
|
481
|
-
* metricDisplayName, which is
|
|
482
|
-
*
|
|
481
|
+
* metricDisplayName, which is only a label (a configured title or a
|
|
482
|
+
* formula expression). This one feeds
|
|
483
483
|
* ValueFormatter.isFractionMetric, which would read the trailing
|
|
484
484
|
* `_ratio` of a formula like `a / b_ratio` as a signal to multiply
|
|
485
485
|
* the value by 100. Callers pass it only for plain metric criteria.
|
|
@@ -644,17 +644,15 @@ export default class CompareCriteria {
|
|
|
644
644
|
unit?: string | undefined;
|
|
645
645
|
/**
|
|
646
646
|
* The metric NAME, when there is a real one. Distinct from
|
|
647
|
-
* metricDisplayName, which is
|
|
648
|
-
*
|
|
647
|
+
* metricDisplayName, which is only a label (a configured title or a
|
|
648
|
+
* formula expression). This one feeds
|
|
649
649
|
* ValueFormatter.isFractionMetric, which would read the trailing
|
|
650
650
|
* `_ratio` of a formula like `a / b_ratio` as a signal to multiply
|
|
651
651
|
* the value by 100. Callers pass it only for plain metric criteria.
|
|
652
652
|
*/
|
|
653
653
|
metricName?: string | undefined;
|
|
654
654
|
}): string {
|
|
655
|
-
// CPU Percent over the last 5 minutes is 10 which is less than the threshold of 20
|
|
656
655
|
let message: string = "";
|
|
657
|
-
let breachSummary: string = "";
|
|
658
656
|
|
|
659
657
|
/*
|
|
660
658
|
* Name the type the window was judged with. A boolean series saved with
|
|
@@ -702,48 +700,34 @@ export default class CompareCriteria {
|
|
|
702
700
|
* Prefer a metric-specific display name over the generic "Metric Value"
|
|
703
701
|
* label when evaluating metric monitors.
|
|
704
702
|
*/
|
|
705
|
-
|
|
703
|
+
let label: string =
|
|
706
704
|
data.metricDisplayName &&
|
|
707
705
|
data.criteriaFilter.checkOn === CheckOn.MetricValue
|
|
708
706
|
? data.metricDisplayName
|
|
709
707
|
: data.criteriaFilter.checkOn;
|
|
710
708
|
|
|
711
|
-
message += ` ${label}`;
|
|
712
|
-
|
|
713
709
|
if (data.criteriaFilter.checkOn === CheckOn.DiskUsagePercent) {
|
|
714
710
|
const diskPath: string =
|
|
715
711
|
data.criteriaFilter.serverMonitorOptions?.diskPath || "/";
|
|
716
712
|
|
|
717
|
-
|
|
713
|
+
label += ` on disk ${diskPath}`;
|
|
718
714
|
}
|
|
719
715
|
|
|
720
716
|
if (
|
|
721
717
|
data.criteriaFilter.evaluateOverTime &&
|
|
722
718
|
data.criteriaFilter.evaluateOverTimeOptions?.timeValueInMinutes
|
|
723
719
|
) {
|
|
724
|
-
|
|
720
|
+
const minutes: number =
|
|
721
|
+
data.criteriaFilter.evaluateOverTimeOptions.timeValueInMinutes;
|
|
722
|
+
label += ` over the last ${minutes} ${minutes === 1 ? "minute" : "minutes"}`;
|
|
725
723
|
}
|
|
726
724
|
|
|
725
|
+
message += ` ${label}`;
|
|
726
|
+
|
|
727
727
|
/*
|
|
728
|
-
*
|
|
729
|
-
*
|
|
730
|
-
*
|
|
731
|
-
* all (MetricMonitorCriteria and DatabaseMonitorCriteria); everything
|
|
732
|
-
* else carries its unit inside the CheckOn label ("Response Time (in
|
|
733
|
-
* ms)") and must keep its exact digits, so an absent unit leaves this
|
|
734
|
-
* sentence byte-for-byte as it was.
|
|
735
|
-
*
|
|
736
|
-
* MetricValueFormatter also subsumes the unit-suppression rules this
|
|
737
|
-
* block used to spell out by hand: OTel's dimensionless "1" (which
|
|
738
|
-
* made a CLS breach read "is 0.31 1 which is greater than or equal to
|
|
739
|
-
* 0.25 1") and UCUM's annotation-only "{cpu}" / "{packets}" both
|
|
740
|
-
* disappear, and a fraction metric still carrying "1" is rendered as
|
|
741
|
-
* the percentage it means.
|
|
742
|
-
*
|
|
743
|
-
* The unit rides each NUMBER instead of the sentence, because
|
|
744
|
-
* auto-scaling can land two samples in the same sentence on different
|
|
745
|
-
* scales — "is 900 KB, 1.2 MB" — which one trailing suffix cannot
|
|
746
|
-
* express.
|
|
728
|
+
* Format each number in its own unit and scale, including the threshold
|
|
729
|
+
* and both ends of a range. Keep the original precision when no unit is
|
|
730
|
+
* available; metric-name hints apply only to plain metrics, not formulas.
|
|
747
731
|
*/
|
|
748
732
|
const withUnit: ((value: number) => string) | undefined =
|
|
749
733
|
MetricValueFormatter.hasDisplayableUnit(data.unit, data.metricName)
|
|
@@ -756,62 +740,48 @@ export default class CompareCriteria {
|
|
|
756
740
|
}
|
|
757
741
|
: undefined;
|
|
758
742
|
|
|
743
|
+
const numericValues: Array<number | boolean> = Array.isArray(data.values)
|
|
744
|
+
? data.values
|
|
745
|
+
: typeof data.values === "number"
|
|
746
|
+
? [data.values]
|
|
747
|
+
: [];
|
|
748
|
+
|
|
749
|
+
if (
|
|
750
|
+
typeof data.threshold === "number" &&
|
|
751
|
+
Number.isFinite(data.threshold) &&
|
|
752
|
+
numericValues.length > 0 &&
|
|
753
|
+
numericValues.every((value: number | boolean) => {
|
|
754
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
755
|
+
})
|
|
756
|
+
) {
|
|
757
|
+
const numericMessage: string | null =
|
|
758
|
+
CompareCriteria.getNumericCompareMessage({
|
|
759
|
+
values: numericValues as Array<number>,
|
|
760
|
+
isSeries: Array.isArray(data.values),
|
|
761
|
+
threshold: data.threshold,
|
|
762
|
+
filterType: data.criteriaFilter.filterType as FilterType,
|
|
763
|
+
// Use the same precedence as compareCriteriaNumbers.
|
|
764
|
+
evaluationType:
|
|
765
|
+
data.criteriaFilter.evaluateOverTimeOptions?.evaluateOverTimeType ||
|
|
766
|
+
data.criteriaFilter.metricMonitorOptions?.metricAggregationType,
|
|
767
|
+
label,
|
|
768
|
+
withUnit,
|
|
769
|
+
});
|
|
770
|
+
|
|
771
|
+
if (numericMessage !== null) {
|
|
772
|
+
return numericMessage;
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
|
|
759
776
|
if (
|
|
760
777
|
data.criteriaFilter.filterType !== FilterType.True &&
|
|
761
778
|
data.criteriaFilter.filterType !== FilterType.False
|
|
762
779
|
) {
|
|
763
|
-
/*
|
|
764
|
-
* Print the samples that actually breached, not the whole window.
|
|
765
|
-
*
|
|
766
|
-
* `AnyValue` is an existential quantifier: it is met when ONE sample
|
|
767
|
-
* crosses the threshold. Printing the entire window and then
|
|
768
|
-
* asserting "which is greater than 90" produced the sentence a real
|
|
769
|
-
* customer received — "is 72.35, 81.54, 79.95, 91.53, 87.73 % which
|
|
770
|
-
* is greater than 90 %" — in which four of the five listed numbers
|
|
771
|
-
* are below the threshold the sentence claims they all exceed.
|
|
772
|
-
*
|
|
773
|
-
* For every other evaluation type the reported set and the compared
|
|
774
|
-
* set are the same thing (a reducing aggregation collapses to one
|
|
775
|
-
* value; AllValues requires all of them), so this narrowing is a
|
|
776
|
-
* no-op and the existing wording is preserved exactly.
|
|
777
|
-
*/
|
|
778
|
-
const reportedValues:
|
|
779
|
-
| Array<number | boolean>
|
|
780
|
-
| number
|
|
781
|
-
| boolean
|
|
782
|
-
| string = CompareCriteria.getReportedValues({
|
|
783
|
-
values: data.values,
|
|
784
|
-
threshold: data.threshold,
|
|
785
|
-
filterType: data.criteriaFilter.filterType as FilterType,
|
|
786
|
-
evaluationType: evaluationType,
|
|
787
|
-
});
|
|
788
|
-
|
|
789
780
|
const formattedValues: string = CompareCriteria.formatCriteriaValues(
|
|
790
|
-
|
|
781
|
+
data.values,
|
|
791
782
|
withUnit,
|
|
792
783
|
);
|
|
793
|
-
|
|
794
|
-
message += ` is ${formattedValues}`;
|
|
795
|
-
|
|
796
|
-
message += " which is";
|
|
797
|
-
|
|
798
|
-
/*
|
|
799
|
-
* How much of the window actually breached.
|
|
800
|
-
*
|
|
801
|
-
* Without it "Any value ... is 91.53 % which is greater than 90 %"
|
|
802
|
-
* is true but hides the thing the reader needs in order to judge
|
|
803
|
-
* whether to get out of bed: whether that was one transient sample
|
|
804
|
-
* or the whole five minutes. One-in-five is a spike; five-in-five is
|
|
805
|
-
* an outage. Only added when the two counts differ, so a fully
|
|
806
|
-
* breaching window keeps the shorter sentence.
|
|
807
|
-
*/
|
|
808
|
-
if (
|
|
809
|
-
Array.isArray(data.values) &&
|
|
810
|
-
Array.isArray(reportedValues) &&
|
|
811
|
-
reportedValues.length < data.values.length
|
|
812
|
-
) {
|
|
813
|
-
breachSummary = ` ${reportedValues.length} of ${data.values.length} samples in the evaluation window breached this threshold.`;
|
|
814
|
-
}
|
|
784
|
+
message += ` is ${formattedValues} which is`;
|
|
815
785
|
}
|
|
816
786
|
|
|
817
787
|
switch (data.criteriaFilter.filterType) {
|
|
@@ -853,65 +823,106 @@ export default class CompareCriteria {
|
|
|
853
823
|
break;
|
|
854
824
|
}
|
|
855
825
|
|
|
856
|
-
return
|
|
826
|
+
return message.trim();
|
|
857
827
|
}
|
|
858
828
|
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
* A reducing aggregation is collapsed to its single aggregate so the
|
|
864
|
-
* sentence quotes the average it actually compared, not the raw samples.
|
|
865
|
-
* If nothing is found to breach (a caller rendering a message for a
|
|
866
|
-
* filter that did not match, or a non-numeric window) the original
|
|
867
|
-
* values are returned unchanged rather than an empty list, so the
|
|
868
|
-
* message degrades to its previous behaviour instead of to "is ".
|
|
869
|
-
*/
|
|
870
|
-
private static getReportedValues(data: {
|
|
871
|
-
values: Array<number | boolean> | number | boolean | string;
|
|
872
|
-
threshold: number | string | boolean;
|
|
829
|
+
private static getNumericCompareMessage(data: {
|
|
830
|
+
values: Array<number>;
|
|
831
|
+
isSeries: boolean;
|
|
832
|
+
threshold: number;
|
|
873
833
|
filterType: FilterType;
|
|
874
|
-
evaluationType
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
},
|
|
888
|
-
);
|
|
889
|
-
|
|
890
|
-
if (numericValues.length !== data.values.length) {
|
|
891
|
-
return data.values;
|
|
892
|
-
}
|
|
893
|
-
|
|
834
|
+
evaluationType: EvaluateOverTimeType | undefined;
|
|
835
|
+
label: string;
|
|
836
|
+
withUnit: ((value: number) => string) | undefined;
|
|
837
|
+
}): string | null {
|
|
838
|
+
const relations: Partial<Record<FilterType, string>> = {
|
|
839
|
+
[FilterType.GreaterThan]: "above",
|
|
840
|
+
[FilterType.GreaterThanOrEqualTo]: "at or above",
|
|
841
|
+
[FilterType.LessThan]: "below",
|
|
842
|
+
[FilterType.LessThanOrEqualTo]: "at or below",
|
|
843
|
+
[FilterType.EqualTo]: "equal to",
|
|
844
|
+
[FilterType.NotEqualTo]: "different from",
|
|
845
|
+
};
|
|
846
|
+
const relation: string | undefined = relations[data.filterType];
|
|
894
847
|
const predicate: ((value: number) => boolean) | null =
|
|
895
|
-
CompareCriteria.getNumericPredicate(
|
|
896
|
-
filterType: data.filterType,
|
|
897
|
-
threshold: data.threshold as number,
|
|
898
|
-
});
|
|
848
|
+
CompareCriteria.getNumericPredicate(data);
|
|
899
849
|
|
|
900
|
-
if (!predicate) {
|
|
901
|
-
return
|
|
850
|
+
if (!relation || !predicate) {
|
|
851
|
+
return null;
|
|
902
852
|
}
|
|
903
853
|
|
|
904
|
-
const
|
|
905
|
-
|
|
854
|
+
const aggregations: Partial<Record<EvaluateOverTimeType, string>> = {
|
|
855
|
+
[EvaluateOverTimeType.Average]: "average",
|
|
856
|
+
[EvaluateOverTimeType.Sum]: "sum",
|
|
857
|
+
[EvaluateOverTimeType.MaximumValue]: "maximum",
|
|
858
|
+
[EvaluateOverTimeType.MunimumValue]: "minimum",
|
|
859
|
+
};
|
|
860
|
+
const aggregation: string | undefined = data.evaluationType
|
|
861
|
+
? aggregations[data.evaluationType]
|
|
862
|
+
: undefined;
|
|
863
|
+
const reducedValues: Array<number> = CompareCriteria.reduceWindow({
|
|
864
|
+
values: data.values,
|
|
906
865
|
evaluationType: data.evaluationType,
|
|
907
|
-
predicate: predicate,
|
|
908
866
|
});
|
|
867
|
+
const matchingValues: Array<number> = reducedValues.filter(predicate);
|
|
868
|
+
const reportedValues: Array<number> =
|
|
869
|
+
data.evaluationType === EvaluateOverTimeType.AnyValue &&
|
|
870
|
+
matchingValues.length > 0
|
|
871
|
+
? matchingValues
|
|
872
|
+
: reducedValues;
|
|
873
|
+
|
|
874
|
+
// Avoid listing repeated readings or unbounded windows in notifications.
|
|
875
|
+
let minimum: number = reportedValues[0]!;
|
|
876
|
+
let maximum: number = reportedValues[0]!;
|
|
877
|
+
for (const value of reportedValues) {
|
|
878
|
+
minimum = Math.min(minimum, value);
|
|
879
|
+
maximum = Math.max(maximum, value);
|
|
880
|
+
}
|
|
881
|
+
const low: string = CompareCriteria.formatSingleValue(
|
|
882
|
+
minimum,
|
|
883
|
+
data.withUnit,
|
|
884
|
+
);
|
|
885
|
+
const high: string = CompareCriteria.formatSingleValue(
|
|
886
|
+
maximum,
|
|
887
|
+
data.withUnit,
|
|
888
|
+
);
|
|
889
|
+
const subject: string = aggregation
|
|
890
|
+
? `The ${aggregation} of ${data.label}`
|
|
891
|
+
: data.label;
|
|
892
|
+
let observation: string =
|
|
893
|
+
low === high
|
|
894
|
+
? `${subject} was ${low}`
|
|
895
|
+
: `${subject} ranged from ${low} to ${high}`;
|
|
896
|
+
|
|
897
|
+
if (data.isSeries && !aggregation) {
|
|
898
|
+
let readings: string = "1 reading";
|
|
899
|
+
if (reportedValues.length < data.values.length) {
|
|
900
|
+
readings = `${reportedValues.length} of ${data.values.length} readings`;
|
|
901
|
+
} else if (data.values.length > 1) {
|
|
902
|
+
readings = `all ${data.values.length} readings`;
|
|
903
|
+
}
|
|
904
|
+
observation += ` ${low === high ? "in" : "across"} ${readings}`;
|
|
905
|
+
}
|
|
909
906
|
|
|
910
|
-
|
|
911
|
-
|
|
907
|
+
const comparison: string = `${relation} the ${CompareCriteria.formatSingleValue(data.threshold, data.withUnit)} threshold`;
|
|
908
|
+
const matches: boolean =
|
|
909
|
+
data.evaluationType === EvaluateOverTimeType.AnyValue
|
|
910
|
+
? matchingValues.length > 0
|
|
911
|
+
: matchingValues.length === reducedValues.length;
|
|
912
|
+
|
|
913
|
+
if (!matches) {
|
|
914
|
+
// Direct callers can request a description even when a filter did not match.
|
|
915
|
+
const requirement: string = aggregation
|
|
916
|
+
? `the ${aggregation}`
|
|
917
|
+
: !data.isSeries
|
|
918
|
+
? "the value"
|
|
919
|
+
: data.evaluationType === EvaluateOverTimeType.AnyValue
|
|
920
|
+
? "at least one reading"
|
|
921
|
+
: "every reading";
|
|
922
|
+
return `${observation}. The condition requires ${requirement} to be ${comparison}.`;
|
|
912
923
|
}
|
|
913
924
|
|
|
914
|
-
return
|
|
925
|
+
return `${observation}, ${comparison}.`;
|
|
915
926
|
}
|
|
916
927
|
|
|
917
928
|
/*
|
|
@@ -368,7 +368,10 @@ export default class MetricMonitorCriteria {
|
|
|
368
368
|
value: numbersInDisplayUnit.length > 0 ? numbersInDisplayUnit : 0,
|
|
369
369
|
threshold: threshold,
|
|
370
370
|
criteriaFilter: input.criteriaFilter,
|
|
371
|
-
metricDisplayName:
|
|
371
|
+
metricDisplayName:
|
|
372
|
+
matchedQuery?.metricAliasData?.title?.trim() ||
|
|
373
|
+
matchedFormula?.metricAliasData?.title?.trim() ||
|
|
374
|
+
metricContext.metricName,
|
|
372
375
|
unit: displayUnit,
|
|
373
376
|
/*
|
|
374
377
|
* Only a plain metric criteria has a real metric NAME —
|
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
import BaseModel from "../../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
2
|
+
import DatabaseCommonInteractionProps from "../../../Types/BaseDatabase/DatabaseCommonInteractionProps";
|
|
2
3
|
import { LIMIT_PER_PROJECT } from "../../../Types/Database/LimitMax";
|
|
3
4
|
import ObjectID from "../../../Types/ObjectID";
|
|
4
5
|
import DatabaseService from "../../Services/DatabaseService";
|
|
5
6
|
import QueryHelper from "../../Types/Database/QueryHelper";
|
|
6
7
|
import Query from "../../Types/Database/Query";
|
|
8
|
+
import PostgresErrorTranslator from "../Database/PostgresErrorTranslator";
|
|
7
9
|
|
|
8
10
|
/*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
11
|
+
* An owner row is unique per (resource, user or team, project): every
|
|
12
|
+
* <Resource>OwnerUser / <Resource>OwnerTeam model declares that both as a
|
|
13
|
+
* unique index and through @UniqueColumnsTogether, so a second row for the
|
|
14
|
+
* same owner is rejected rather than stored (issue #3394). Before that, a
|
|
15
|
+
* duplicate was shown twice and notified twice.
|
|
16
|
+
*
|
|
17
|
+
* A rejected insert is an error, though, and the callers here - owner rules,
|
|
18
|
+
* create forms, monitor criteria, grouping rules - add owners in bulk and
|
|
19
|
+
* cannot let one owner who is already there stop the rest from being added.
|
|
20
|
+
* They filter their owner set through getOwnersNotYetAssigned first, and
|
|
21
|
+
* insert through createOwner, which treats "already an owner" as done.
|
|
15
22
|
*/
|
|
16
23
|
|
|
17
24
|
export interface OwnersToAssign {
|
|
@@ -107,4 +114,148 @@ export default class OwnerRuleAssignment {
|
|
|
107
114
|
}),
|
|
108
115
|
};
|
|
109
116
|
}
|
|
117
|
+
|
|
118
|
+
/*
|
|
119
|
+
* Inserts one owner row. Resolves true when the row was written and false
|
|
120
|
+
* when the owner was already there - whether the owner service's own check
|
|
121
|
+
* found the existing row, or the unique index rejected a concurrent insert
|
|
122
|
+
* that got past it. Every other failure is thrown as before.
|
|
123
|
+
*/
|
|
124
|
+
public static async createOwner<TOwner extends BaseModel>(data: {
|
|
125
|
+
ownerService: DatabaseService<TOwner>;
|
|
126
|
+
owner: TOwner;
|
|
127
|
+
props: DatabaseCommonInteractionProps;
|
|
128
|
+
}): Promise<boolean> {
|
|
129
|
+
try {
|
|
130
|
+
await data.ownerService.create({
|
|
131
|
+
data: data.owner,
|
|
132
|
+
props: data.props,
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
return true;
|
|
136
|
+
} catch (error) {
|
|
137
|
+
if (PostgresErrorTranslator.isUniqueViolation(error)) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
throw error;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/*
|
|
146
|
+
* Makes every user in `userIds` and team in `teamIds` an owner of the
|
|
147
|
+
* resource, skipping the ones that already are. Safe to call again with the
|
|
148
|
+
* same input: a retried workflow, a template that lists a team twice, or two
|
|
149
|
+
* paths adding the same owner each leave exactly one row, and so exactly one
|
|
150
|
+
* feed item and one notification.
|
|
151
|
+
*
|
|
152
|
+
* Resolves to the owners this call actually added.
|
|
153
|
+
*/
|
|
154
|
+
public static async addOwners<
|
|
155
|
+
TOwnerUser extends BaseModel,
|
|
156
|
+
TOwnerTeam extends BaseModel,
|
|
157
|
+
>(data: {
|
|
158
|
+
ownerUserService: DatabaseService<TOwnerUser>;
|
|
159
|
+
ownerTeamService: DatabaseService<TOwnerTeam>;
|
|
160
|
+
// The owner rows' column holding the resource id, e.g. "incidentId".
|
|
161
|
+
resourceIdColumn: string;
|
|
162
|
+
resourceId: ObjectID;
|
|
163
|
+
projectId: ObjectID;
|
|
164
|
+
userIds: Array<ObjectID | string>;
|
|
165
|
+
teamIds: Array<ObjectID | string>;
|
|
166
|
+
/*
|
|
167
|
+
* Written to every added row's isOwnerNotified. Leave it out for owner
|
|
168
|
+
* tables that have no such column.
|
|
169
|
+
*/
|
|
170
|
+
isOwnerNotified?: boolean | undefined;
|
|
171
|
+
createdByUserId?: ObjectID | undefined;
|
|
172
|
+
props: DatabaseCommonInteractionProps;
|
|
173
|
+
}): Promise<OwnersToAssign> {
|
|
174
|
+
const ownersToAdd: OwnersToAssign =
|
|
175
|
+
await OwnerRuleAssignment.getOwnersNotYetAssigned({
|
|
176
|
+
ownerUserService: data.ownerUserService,
|
|
177
|
+
ownerTeamService: data.ownerTeamService,
|
|
178
|
+
resourceIdColumn: data.resourceIdColumn,
|
|
179
|
+
resourceId: data.resourceId,
|
|
180
|
+
userIds: data.userIds,
|
|
181
|
+
teamIds: data.teamIds,
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
const added: OwnersToAssign = { userIds: [], teamIds: [] };
|
|
185
|
+
|
|
186
|
+
for (const teamId of ownersToAdd.teamIds) {
|
|
187
|
+
const owner: TOwnerTeam = OwnerRuleAssignment.buildOwner({
|
|
188
|
+
ownerService: data.ownerTeamService,
|
|
189
|
+
ownerColumn: "teamId",
|
|
190
|
+
ownerId: teamId,
|
|
191
|
+
resourceIdColumn: data.resourceIdColumn,
|
|
192
|
+
resourceId: data.resourceId,
|
|
193
|
+
projectId: data.projectId,
|
|
194
|
+
isOwnerNotified: data.isOwnerNotified,
|
|
195
|
+
createdByUserId: data.createdByUserId,
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
if (
|
|
199
|
+
await OwnerRuleAssignment.createOwner({
|
|
200
|
+
ownerService: data.ownerTeamService,
|
|
201
|
+
owner: owner,
|
|
202
|
+
props: data.props,
|
|
203
|
+
})
|
|
204
|
+
) {
|
|
205
|
+
added.teamIds.push(teamId);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
for (const userId of ownersToAdd.userIds) {
|
|
210
|
+
const owner: TOwnerUser = OwnerRuleAssignment.buildOwner({
|
|
211
|
+
ownerService: data.ownerUserService,
|
|
212
|
+
ownerColumn: "userId",
|
|
213
|
+
ownerId: userId,
|
|
214
|
+
resourceIdColumn: data.resourceIdColumn,
|
|
215
|
+
resourceId: data.resourceId,
|
|
216
|
+
projectId: data.projectId,
|
|
217
|
+
isOwnerNotified: data.isOwnerNotified,
|
|
218
|
+
createdByUserId: data.createdByUserId,
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
if (
|
|
222
|
+
await OwnerRuleAssignment.createOwner({
|
|
223
|
+
ownerService: data.ownerUserService,
|
|
224
|
+
owner: owner,
|
|
225
|
+
props: data.props,
|
|
226
|
+
})
|
|
227
|
+
) {
|
|
228
|
+
added.userIds.push(userId);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return added;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
private static buildOwner<TOwner extends BaseModel>(data: {
|
|
236
|
+
ownerService: DatabaseService<TOwner>;
|
|
237
|
+
ownerColumn: "userId" | "teamId";
|
|
238
|
+
ownerId: ObjectID;
|
|
239
|
+
resourceIdColumn: string;
|
|
240
|
+
resourceId: ObjectID;
|
|
241
|
+
projectId: ObjectID;
|
|
242
|
+
isOwnerNotified?: boolean | undefined;
|
|
243
|
+
createdByUserId?: ObjectID | undefined;
|
|
244
|
+
}): TOwner {
|
|
245
|
+
const owner: TOwner = new data.ownerService.modelType();
|
|
246
|
+
|
|
247
|
+
owner.setColumnValue(data.resourceIdColumn, data.resourceId);
|
|
248
|
+
owner.setColumnValue("projectId", data.projectId);
|
|
249
|
+
owner.setColumnValue(data.ownerColumn, data.ownerId);
|
|
250
|
+
|
|
251
|
+
if (data.isOwnerNotified !== undefined) {
|
|
252
|
+
owner.setColumnValue("isOwnerNotified", data.isOwnerNotified);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
if (data.createdByUserId) {
|
|
256
|
+
owner.setColumnValue("createdByUserId", data.createdByUserId);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
return owner;
|
|
260
|
+
}
|
|
110
261
|
}
|