@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
|
@@ -0,0 +1,612 @@
|
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
import {
|
|
3
|
+
afterEach,
|
|
4
|
+
beforeEach,
|
|
5
|
+
describe,
|
|
6
|
+
expect,
|
|
7
|
+
jest,
|
|
8
|
+
test,
|
|
9
|
+
} from "@jest/globals";
|
|
10
|
+
import {
|
|
11
|
+
act,
|
|
12
|
+
cleanup,
|
|
13
|
+
fireEvent,
|
|
14
|
+
render,
|
|
15
|
+
RenderResult,
|
|
16
|
+
screen,
|
|
17
|
+
} from "@testing-library/react";
|
|
18
|
+
import * as React from "react";
|
|
19
|
+
import Permission from "../../../Types/Permission";
|
|
20
|
+
import getJestMockFunction, { MockFunction } from "../../MockType";
|
|
21
|
+
|
|
22
|
+
/*
|
|
23
|
+
* https://github.com/OneUptime/oneuptime/issues/3867
|
|
24
|
+
*
|
|
25
|
+
* The "Test Monitor" form, RENDERED. It used to live only on the criteria
|
|
26
|
+
* sub-page; issue #3867 puts it on the Monitor Overview, which is the page
|
|
27
|
+
* every reader of a monitor lands on. That widening is what these cover:
|
|
28
|
+
*
|
|
29
|
+
* - who is even offered the button (running a test CREATES a MonitorTest
|
|
30
|
+
* row, and the read audience of a monitor does not hold that permission);
|
|
31
|
+
* - what the created row carries - in particular monitorId, without which
|
|
32
|
+
* the server cannot resolve {{monitorSecrets.*}} and the probe silently
|
|
33
|
+
* tests a literal placeholder;
|
|
34
|
+
* - the poll that follows, which used to run to completion no matter what
|
|
35
|
+
* the user did next. Closing the result, running a second test, or
|
|
36
|
+
* leaving the page all left it fetching every fifteen seconds and calling
|
|
37
|
+
* setState on a component that might be gone. The overview page is the one
|
|
38
|
+
* people navigate away from, so that leak stops being theoretical.
|
|
39
|
+
*
|
|
40
|
+
* ModelAPI is replaced at the module boundary because MonitorTestForm imports
|
|
41
|
+
* it directly; `create` and `getItem` are separate mocks so a count of polls
|
|
42
|
+
* is a count of polls.
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
const createMock: MockFunction = getJestMockFunction();
|
|
46
|
+
const getItemMock: MockFunction = getJestMockFunction();
|
|
47
|
+
|
|
48
|
+
/*
|
|
49
|
+
* Swapped per test. The gate reads this through PermissionUtil, so the default
|
|
50
|
+
* is a user who may run a test; the tests that care set it to something else.
|
|
51
|
+
*/
|
|
52
|
+
let currentPermissions: Array<Permission> = [Permission.ProjectAdmin];
|
|
53
|
+
let isMasterAdmin: boolean = false;
|
|
54
|
+
|
|
55
|
+
// Lazy wrappers: jest.mock is hoisted above these declarations.
|
|
56
|
+
jest.mock("../../../UI/Utils/ModelAPI/ModelAPI", () => {
|
|
57
|
+
return {
|
|
58
|
+
__esModule: true,
|
|
59
|
+
default: {
|
|
60
|
+
create: (...args: Array<unknown>): unknown => {
|
|
61
|
+
return createMock(...args);
|
|
62
|
+
},
|
|
63
|
+
getItem: (...args: Array<unknown>): unknown => {
|
|
64
|
+
return getItemMock(...args);
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
jest.mock("../../../UI/Utils/Permission", () => {
|
|
71
|
+
return {
|
|
72
|
+
__esModule: true,
|
|
73
|
+
default: {
|
|
74
|
+
getAllPermissions: (): Array<Permission> => {
|
|
75
|
+
return currentPermissions;
|
|
76
|
+
},
|
|
77
|
+
getProjectPermissions: (): null => {
|
|
78
|
+
return null;
|
|
79
|
+
},
|
|
80
|
+
getGlobalPermissions: (): null => {
|
|
81
|
+
return null;
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
jest.mock("../../../UI/Utils/User", () => {
|
|
88
|
+
return {
|
|
89
|
+
__esModule: true,
|
|
90
|
+
default: {
|
|
91
|
+
isMasterAdmin: (): boolean => {
|
|
92
|
+
return isMasterAdmin;
|
|
93
|
+
},
|
|
94
|
+
getUserId: (): null => {
|
|
95
|
+
return null;
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
import MonitorTestForm, {
|
|
102
|
+
MONITOR_TEST_MAX_POLL_ATTEMPTS,
|
|
103
|
+
MONITOR_TEST_POLL_INTERVAL_IN_MS,
|
|
104
|
+
} from "../../../../App/FeatureSet/Dashboard/src/Components/Form/Monitor/MonitorTest";
|
|
105
|
+
import { MonitorStepProbeResponse } from "../../../Models/DatabaseModels/MonitorProbe";
|
|
106
|
+
import MonitorTest from "../../../Models/DatabaseModels/MonitorTest";
|
|
107
|
+
import Probe from "../../../Models/DatabaseModels/Probe";
|
|
108
|
+
import MonitorStep from "../../../Types/Monitor/MonitorStep";
|
|
109
|
+
import MonitorSteps from "../../../Types/Monitor/MonitorSteps";
|
|
110
|
+
import MonitorType from "../../../Types/Monitor/MonitorType";
|
|
111
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
112
|
+
import { ButtonSize } from "../../../UI/Components/Button/Button";
|
|
113
|
+
|
|
114
|
+
const MONITOR_ID: string = "11111111-1111-4111-8111-111111111111";
|
|
115
|
+
const TEST_ID: string = "22222222-2222-4222-8222-222222222222";
|
|
116
|
+
const PROBE_ID: string = "44444444-4444-4444-8444-444444444444";
|
|
117
|
+
const OTHER_PROBE_ID: string = "55555555-5555-4555-8555-555555555555";
|
|
118
|
+
|
|
119
|
+
function probe(id: string, name: string): Probe {
|
|
120
|
+
return Object.assign(new Probe(), { _id: id, name: name });
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const PROBES: Array<Probe> = [
|
|
124
|
+
probe(PROBE_ID, "Ohio Probe"),
|
|
125
|
+
probe(OTHER_PROBE_ID, "Frankfurt Probe"),
|
|
126
|
+
];
|
|
127
|
+
|
|
128
|
+
function steps(): MonitorSteps {
|
|
129
|
+
const monitorSteps: MonitorSteps = new MonitorSteps();
|
|
130
|
+
monitorSteps.data = { monitorStepsInstanceArray: [new MonitorStep()] };
|
|
131
|
+
return monitorSteps;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// A finished test row: the shape the poll is waiting for.
|
|
135
|
+
function finishedRow(): MonitorTest {
|
|
136
|
+
const response: MonitorStepProbeResponse = {
|
|
137
|
+
"step-1": {
|
|
138
|
+
probeId: new ObjectID(PROBE_ID),
|
|
139
|
+
monitorId: new ObjectID(MONITOR_ID),
|
|
140
|
+
monitorStepId: new ObjectID(TEST_ID),
|
|
141
|
+
isOnline: true,
|
|
142
|
+
responseTimeInMs: 42,
|
|
143
|
+
responseCode: 200,
|
|
144
|
+
},
|
|
145
|
+
} as unknown as MonitorStepProbeResponse;
|
|
146
|
+
|
|
147
|
+
return Object.assign(new MonitorTest(), {
|
|
148
|
+
_id: TEST_ID,
|
|
149
|
+
monitorStepProbeResponse: response,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
interface RenderOptions {
|
|
154
|
+
monitorType?: MonitorType | undefined;
|
|
155
|
+
probes?: Array<Probe> | undefined;
|
|
156
|
+
// The create-monitor flow tests steps that belong to no monitor yet.
|
|
157
|
+
withoutMonitorId?: boolean | undefined;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function renderForm(options: RenderOptions = {}): RenderResult {
|
|
161
|
+
if (options.withoutMonitorId) {
|
|
162
|
+
return render(
|
|
163
|
+
<MonitorTestForm
|
|
164
|
+
monitorSteps={steps()}
|
|
165
|
+
monitorType={options.monitorType || MonitorType.Website}
|
|
166
|
+
probes={options.probes || PROBES}
|
|
167
|
+
buttonSize={ButtonSize.Normal}
|
|
168
|
+
/>,
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return render(
|
|
173
|
+
<MonitorTestForm
|
|
174
|
+
monitorId={new ObjectID(MONITOR_ID)}
|
|
175
|
+
monitorSteps={steps()}
|
|
176
|
+
monitorType={options.monitorType || MonitorType.Website}
|
|
177
|
+
probes={options.probes || PROBES}
|
|
178
|
+
buttonSize={ButtonSize.Normal}
|
|
179
|
+
/>,
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Lets a resolved promise land before anything is asserted.
|
|
184
|
+
async function flush(): Promise<void> {
|
|
185
|
+
await act(async () => {});
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
async function tick(): Promise<void> {
|
|
189
|
+
await act(async () => {
|
|
190
|
+
jest.advanceTimersByTime(MONITOR_TEST_POLL_INTERVAL_IN_MS);
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
async function clickTestMonitor(): Promise<void> {
|
|
195
|
+
await act(async () => {
|
|
196
|
+
fireEvent.click(screen.getByTestId("test-monitor-button"));
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/*
|
|
201
|
+
* Picks a probe in the modal's dropdown and submits. react-select renders its
|
|
202
|
+
* menu on ArrowDown, and the probe name is unique on the page at that moment,
|
|
203
|
+
* so a global text lookup finds the option.
|
|
204
|
+
*/
|
|
205
|
+
async function runTestOnProbe(probeName: string): Promise<void> {
|
|
206
|
+
await act(async () => {
|
|
207
|
+
fireEvent.keyDown(screen.getByRole("combobox"), { key: "ArrowDown" });
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
await act(async () => {
|
|
211
|
+
const option: HTMLElement = screen.getByText(probeName);
|
|
212
|
+
fireEvent.mouseDown(option);
|
|
213
|
+
fireEvent.click(option);
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
await act(async () => {
|
|
217
|
+
fireEvent.click(screen.getByText("Run Test"));
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
await flush();
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
beforeEach(() => {
|
|
224
|
+
jest.useFakeTimers();
|
|
225
|
+
createMock.mockReset();
|
|
226
|
+
getItemMock.mockReset();
|
|
227
|
+
currentPermissions = [Permission.ProjectAdmin];
|
|
228
|
+
isMasterAdmin = false;
|
|
229
|
+
createMock.mockResolvedValue({
|
|
230
|
+
data: Object.assign(new MonitorTest(), { _id: TEST_ID }),
|
|
231
|
+
});
|
|
232
|
+
getItemMock.mockResolvedValue(null);
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
afterEach(() => {
|
|
236
|
+
cleanup();
|
|
237
|
+
jest.useRealTimers();
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
describe("who is offered the button", () => {
|
|
241
|
+
test("a user who may create a monitor test gets it", () => {
|
|
242
|
+
renderForm();
|
|
243
|
+
|
|
244
|
+
expect(screen.getByTestId("test-monitor-button")).toBeInTheDocument();
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
test("a read-only user does not", () => {
|
|
248
|
+
/*
|
|
249
|
+
* MonitorTest's create list excludes Viewer / MonitorViewer /
|
|
250
|
+
* ReadProjectMonitor, but its read list includes them - so these users can
|
|
251
|
+
* open every page the button now appears on. Before the gate they were
|
|
252
|
+
* handed a button whose only possible outcome was a refusal, and only
|
|
253
|
+
* after they had picked a probe and pressed Run Test.
|
|
254
|
+
*/
|
|
255
|
+
currentPermissions = [Permission.Viewer];
|
|
256
|
+
|
|
257
|
+
renderForm();
|
|
258
|
+
|
|
259
|
+
expect(screen.queryByTestId("test-monitor-button")).not.toBeInTheDocument();
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
test("a user with only the read permission does not", () => {
|
|
263
|
+
currentPermissions = [Permission.ReadProjectMonitor];
|
|
264
|
+
|
|
265
|
+
renderForm();
|
|
266
|
+
|
|
267
|
+
expect(screen.queryByTestId("test-monitor-button")).not.toBeInTheDocument();
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
test("CreateProjectMonitor on its own is enough", () => {
|
|
271
|
+
currentPermissions = [Permission.CreateProjectMonitor];
|
|
272
|
+
|
|
273
|
+
renderForm();
|
|
274
|
+
|
|
275
|
+
expect(screen.getByTestId("test-monitor-button")).toBeInTheDocument();
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
test("nothing is offered before the permission snapshot has landed", () => {
|
|
279
|
+
/*
|
|
280
|
+
* Permissions arrive on a response header, so they are empty for the first
|
|
281
|
+
* paint after a login or a project switch. Hidden, not disabled: a disabled
|
|
282
|
+
* button would accuse a permitted user of lacking a permission they hold.
|
|
283
|
+
*/
|
|
284
|
+
currentPermissions = [];
|
|
285
|
+
|
|
286
|
+
renderForm();
|
|
287
|
+
|
|
288
|
+
expect(screen.queryByTestId("test-monitor-button")).not.toBeInTheDocument();
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
test("a master admin is offered it regardless", () => {
|
|
292
|
+
currentPermissions = [];
|
|
293
|
+
isMasterAdmin = true;
|
|
294
|
+
|
|
295
|
+
renderForm();
|
|
296
|
+
|
|
297
|
+
expect(screen.getByTestId("test-monitor-button")).toBeInTheDocument();
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
test("a monitor type no probe runs is not offered it", () => {
|
|
301
|
+
renderForm({ monitorType: MonitorType.Logs });
|
|
302
|
+
|
|
303
|
+
expect(screen.queryByTestId("test-monitor-button")).not.toBeInTheDocument();
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
test("the hook order survives a monitor type that flips probeable-ness", () => {
|
|
307
|
+
/*
|
|
308
|
+
* The early return for a non-probeable type used to sit ABOVE this
|
|
309
|
+
* component's useState calls, so one mounted instance rendering first with
|
|
310
|
+
* a non-probeable type and then with a probeable one threw "Rendered more
|
|
311
|
+
* hooks than during the previous render" and blanked the page. Nothing in
|
|
312
|
+
* eslint catches that, and the overview page's loading gate was the only
|
|
313
|
+
* reason it stayed dormant.
|
|
314
|
+
*/
|
|
315
|
+
const view: RenderResult = render(
|
|
316
|
+
<MonitorTestForm
|
|
317
|
+
monitorSteps={steps()}
|
|
318
|
+
monitorType={MonitorType.Logs}
|
|
319
|
+
probes={PROBES}
|
|
320
|
+
buttonSize={ButtonSize.Normal}
|
|
321
|
+
/>,
|
|
322
|
+
);
|
|
323
|
+
|
|
324
|
+
expect(screen.queryByTestId("test-monitor-button")).not.toBeInTheDocument();
|
|
325
|
+
|
|
326
|
+
expect(() => {
|
|
327
|
+
view.rerender(
|
|
328
|
+
<MonitorTestForm
|
|
329
|
+
monitorSteps={steps()}
|
|
330
|
+
monitorType={MonitorType.Website}
|
|
331
|
+
probes={PROBES}
|
|
332
|
+
buttonSize={ButtonSize.Normal}
|
|
333
|
+
/>,
|
|
334
|
+
);
|
|
335
|
+
}).not.toThrow();
|
|
336
|
+
|
|
337
|
+
expect(screen.getByTestId("test-monitor-button")).toBeInTheDocument();
|
|
338
|
+
});
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
describe("choosing a probe", () => {
|
|
342
|
+
test("the modal offers exactly the probes it was given", async () => {
|
|
343
|
+
renderForm();
|
|
344
|
+
await clickTestMonitor();
|
|
345
|
+
|
|
346
|
+
expect(screen.getByText("Select Probe")).toBeInTheDocument();
|
|
347
|
+
|
|
348
|
+
const combobox: HTMLElement = screen.getByRole("combobox");
|
|
349
|
+
|
|
350
|
+
await act(async () => {
|
|
351
|
+
fireEvent.keyDown(combobox, { key: "ArrowDown" });
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
expect(screen.getByText("Ohio Probe")).toBeInTheDocument();
|
|
355
|
+
expect(screen.getByText("Frankfurt Probe")).toBeInTheDocument();
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
test("nothing is created until a probe is picked and the test is run", async () => {
|
|
359
|
+
renderForm();
|
|
360
|
+
await clickTestMonitor();
|
|
361
|
+
|
|
362
|
+
expect(createMock).not.toHaveBeenCalled();
|
|
363
|
+
});
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
describe("what the created monitor test carries", () => {
|
|
367
|
+
test("the monitor id, the steps, the type, the chosen probe and the queue flag", async () => {
|
|
368
|
+
renderForm();
|
|
369
|
+
await clickTestMonitor();
|
|
370
|
+
await runTestOnProbe("Frankfurt Probe");
|
|
371
|
+
|
|
372
|
+
expect(createMock).toHaveBeenCalledTimes(1);
|
|
373
|
+
|
|
374
|
+
const request: { model: MonitorTest; modelType: unknown } = createMock.mock
|
|
375
|
+
.calls[0]![0] as { model: MonitorTest; modelType: unknown };
|
|
376
|
+
|
|
377
|
+
expect(request.modelType).toBe(MonitorTest);
|
|
378
|
+
expect(request.model.monitorType).toBe(MonitorType.Website);
|
|
379
|
+
expect(request.model.isInQueue).toBe(true);
|
|
380
|
+
expect(request.model.probeId?.toString()).toBe(OTHER_PROBE_ID);
|
|
381
|
+
expect(
|
|
382
|
+
request.model.monitorSteps?.data?.monitorStepsInstanceArray,
|
|
383
|
+
).toHaveLength(1);
|
|
384
|
+
|
|
385
|
+
/*
|
|
386
|
+
* The one that fails silently if it is dropped: without monitorId the
|
|
387
|
+
* server returns the test unchanged instead of resolving the monitor's
|
|
388
|
+
* secrets, and the probe requests a literal {{monitorSecrets.x}}.
|
|
389
|
+
*/
|
|
390
|
+
expect(request.model.monitorId?.toString()).toBe(MONITOR_ID);
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
test("a form used without a monitor id does not invent one", async () => {
|
|
394
|
+
renderForm({ withoutMonitorId: true });
|
|
395
|
+
await clickTestMonitor();
|
|
396
|
+
await runTestOnProbe("Ohio Probe");
|
|
397
|
+
|
|
398
|
+
const request: { model: MonitorTest } = createMock.mock.calls[0]![0] as {
|
|
399
|
+
model: MonitorTest;
|
|
400
|
+
};
|
|
401
|
+
|
|
402
|
+
expect(request.model.monitorId).toBeUndefined();
|
|
403
|
+
});
|
|
404
|
+
});
|
|
405
|
+
|
|
406
|
+
describe("waiting for the probe to report", () => {
|
|
407
|
+
test("polls the created row until a response arrives, then stops", async () => {
|
|
408
|
+
getItemMock
|
|
409
|
+
.mockResolvedValueOnce(null)
|
|
410
|
+
.mockResolvedValueOnce(finishedRow());
|
|
411
|
+
|
|
412
|
+
renderForm();
|
|
413
|
+
await clickTestMonitor();
|
|
414
|
+
await runTestOnProbe("Ohio Probe");
|
|
415
|
+
|
|
416
|
+
// Nothing is fetched before the first interval fires.
|
|
417
|
+
expect(getItemMock).not.toHaveBeenCalled();
|
|
418
|
+
|
|
419
|
+
await tick();
|
|
420
|
+
expect(getItemMock).toHaveBeenCalledTimes(1);
|
|
421
|
+
|
|
422
|
+
await tick();
|
|
423
|
+
expect(getItemMock).toHaveBeenCalledTimes(2);
|
|
424
|
+
|
|
425
|
+
// The answer landed, so the interval is done.
|
|
426
|
+
await tick();
|
|
427
|
+
await tick();
|
|
428
|
+
expect(getItemMock).toHaveBeenCalledTimes(2);
|
|
429
|
+
});
|
|
430
|
+
|
|
431
|
+
test("asks only for the response column, on the created row", async () => {
|
|
432
|
+
getItemMock.mockResolvedValue(finishedRow());
|
|
433
|
+
|
|
434
|
+
renderForm();
|
|
435
|
+
await clickTestMonitor();
|
|
436
|
+
await runTestOnProbe("Ohio Probe");
|
|
437
|
+
await tick();
|
|
438
|
+
|
|
439
|
+
const request: {
|
|
440
|
+
modelType: unknown;
|
|
441
|
+
id: ObjectID;
|
|
442
|
+
select: Record<string, unknown>;
|
|
443
|
+
} = getItemMock.mock.calls[0]![0] as {
|
|
444
|
+
modelType: unknown;
|
|
445
|
+
id: ObjectID;
|
|
446
|
+
select: Record<string, unknown>;
|
|
447
|
+
};
|
|
448
|
+
|
|
449
|
+
expect(request.modelType).toBe(MonitorTest);
|
|
450
|
+
expect(request.id.toString()).toBe(TEST_ID);
|
|
451
|
+
expect(request.select).toEqual({ monitorStepProbeResponse: true });
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
test("gives up after the attempt budget and says so", async () => {
|
|
455
|
+
getItemMock.mockResolvedValue(null);
|
|
456
|
+
|
|
457
|
+
renderForm();
|
|
458
|
+
await clickTestMonitor();
|
|
459
|
+
await runTestOnProbe("Ohio Probe");
|
|
460
|
+
|
|
461
|
+
for (let i: number = 0; i <= MONITOR_TEST_MAX_POLL_ATTEMPTS; i++) {
|
|
462
|
+
await tick();
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
expect(
|
|
466
|
+
screen.getByText(
|
|
467
|
+
"Monitor Test took too long to complete. Please try again later.",
|
|
468
|
+
),
|
|
469
|
+
).toBeInTheDocument();
|
|
470
|
+
|
|
471
|
+
const callsAtGiveUp: number = getItemMock.mock.calls.length;
|
|
472
|
+
|
|
473
|
+
// And it really stopped rather than just reporting.
|
|
474
|
+
await tick();
|
|
475
|
+
await tick();
|
|
476
|
+
expect(getItemMock).toHaveBeenCalledTimes(callsAtGiveUp);
|
|
477
|
+
});
|
|
478
|
+
|
|
479
|
+
test("a failing poll does not end a test that may still be coming", async () => {
|
|
480
|
+
/*
|
|
481
|
+
* The poll callback is async and runs long after the enclosing try/catch
|
|
482
|
+
* has returned, so a rejection used to be an unhandled one - every fifteen
|
|
483
|
+
* seconds, with the user still waiting the full budget either way.
|
|
484
|
+
*/
|
|
485
|
+
getItemMock
|
|
486
|
+
.mockRejectedValueOnce(new Error("network blip"))
|
|
487
|
+
.mockResolvedValueOnce(finishedRow());
|
|
488
|
+
|
|
489
|
+
renderForm();
|
|
490
|
+
await clickTestMonitor();
|
|
491
|
+
await runTestOnProbe("Ohio Probe");
|
|
492
|
+
|
|
493
|
+
await tick();
|
|
494
|
+
await tick();
|
|
495
|
+
|
|
496
|
+
expect(getItemMock).toHaveBeenCalledTimes(2);
|
|
497
|
+
expect(
|
|
498
|
+
screen.queryByText(
|
|
499
|
+
"Monitor Test took too long to complete. Please try again later.",
|
|
500
|
+
),
|
|
501
|
+
).not.toBeInTheDocument();
|
|
502
|
+
});
|
|
503
|
+
});
|
|
504
|
+
|
|
505
|
+
describe("the poll does not outlive what the user is doing", () => {
|
|
506
|
+
test("closing the result modal stops it", async () => {
|
|
507
|
+
getItemMock.mockResolvedValue(null);
|
|
508
|
+
|
|
509
|
+
renderForm();
|
|
510
|
+
await clickTestMonitor();
|
|
511
|
+
await runTestOnProbe("Ohio Probe");
|
|
512
|
+
|
|
513
|
+
await tick();
|
|
514
|
+
expect(getItemMock).toHaveBeenCalledTimes(1);
|
|
515
|
+
|
|
516
|
+
await act(async () => {
|
|
517
|
+
fireEvent.click(screen.getByText("Close"));
|
|
518
|
+
});
|
|
519
|
+
|
|
520
|
+
await tick();
|
|
521
|
+
await tick();
|
|
522
|
+
|
|
523
|
+
expect(getItemMock).toHaveBeenCalledTimes(1);
|
|
524
|
+
});
|
|
525
|
+
|
|
526
|
+
test("unmounting stops it", async () => {
|
|
527
|
+
/*
|
|
528
|
+
* The overview page is a tab people leave. An un-cleaned interval kept
|
|
529
|
+
* fetching for two and a half minutes and setting state on a component
|
|
530
|
+
* that was gone.
|
|
531
|
+
*/
|
|
532
|
+
getItemMock.mockResolvedValue(null);
|
|
533
|
+
|
|
534
|
+
const view: RenderResult = renderForm();
|
|
535
|
+
await clickTestMonitor();
|
|
536
|
+
await runTestOnProbe("Ohio Probe");
|
|
537
|
+
|
|
538
|
+
await tick();
|
|
539
|
+
expect(getItemMock).toHaveBeenCalledTimes(1);
|
|
540
|
+
|
|
541
|
+
view.unmount();
|
|
542
|
+
|
|
543
|
+
await tick();
|
|
544
|
+
await tick();
|
|
545
|
+
|
|
546
|
+
expect(getItemMock).toHaveBeenCalledTimes(1);
|
|
547
|
+
});
|
|
548
|
+
|
|
549
|
+
test("leaving while the test is still being created starts no poll at all", async () => {
|
|
550
|
+
/*
|
|
551
|
+
* The gap the interval ref alone does not close: during the create round
|
|
552
|
+
* trip there is no interval to cancel yet, so an unmount in that window
|
|
553
|
+
* would have started a poll nothing owned.
|
|
554
|
+
*/
|
|
555
|
+
let releaseCreate: (value: { data: MonitorTest }) => void = () => {};
|
|
556
|
+
|
|
557
|
+
createMock.mockReturnValue(
|
|
558
|
+
new Promise((resolve: (value: { data: MonitorTest }) => void) => {
|
|
559
|
+
releaseCreate = resolve;
|
|
560
|
+
}),
|
|
561
|
+
);
|
|
562
|
+
|
|
563
|
+
const view: RenderResult = renderForm();
|
|
564
|
+
await clickTestMonitor();
|
|
565
|
+
await runTestOnProbe("Ohio Probe");
|
|
566
|
+
|
|
567
|
+
view.unmount();
|
|
568
|
+
|
|
569
|
+
await act(async () => {
|
|
570
|
+
releaseCreate({
|
|
571
|
+
data: Object.assign(new MonitorTest(), { _id: TEST_ID }),
|
|
572
|
+
});
|
|
573
|
+
});
|
|
574
|
+
|
|
575
|
+
await tick();
|
|
576
|
+
await tick();
|
|
577
|
+
|
|
578
|
+
expect(getItemMock).not.toHaveBeenCalled();
|
|
579
|
+
});
|
|
580
|
+
|
|
581
|
+
test("a second test does not race the first", async () => {
|
|
582
|
+
/*
|
|
583
|
+
* Each run used to create its own interval with nothing stopping the
|
|
584
|
+
* previous one, so two polls wrote to the same state and the loser could
|
|
585
|
+
* overwrite a good result with its timeout message.
|
|
586
|
+
*/
|
|
587
|
+
getItemMock.mockResolvedValue(null);
|
|
588
|
+
|
|
589
|
+
renderForm();
|
|
590
|
+
await clickTestMonitor();
|
|
591
|
+
await runTestOnProbe("Ohio Probe");
|
|
592
|
+
|
|
593
|
+
await tick();
|
|
594
|
+
expect(getItemMock).toHaveBeenCalledTimes(1);
|
|
595
|
+
|
|
596
|
+
await act(async () => {
|
|
597
|
+
fireEvent.click(screen.getByText("Close"));
|
|
598
|
+
});
|
|
599
|
+
|
|
600
|
+
await clickTestMonitor();
|
|
601
|
+
await runTestOnProbe("Ohio Probe");
|
|
602
|
+
|
|
603
|
+
getItemMock.mockClear();
|
|
604
|
+
|
|
605
|
+
// One live interval, so one fetch per tick - not two.
|
|
606
|
+
await tick();
|
|
607
|
+
expect(getItemMock).toHaveBeenCalledTimes(1);
|
|
608
|
+
|
|
609
|
+
await tick();
|
|
610
|
+
expect(getItemMock).toHaveBeenCalledTimes(2);
|
|
611
|
+
});
|
|
612
|
+
});
|