@oneuptime/common 13.0.1 → 13.0.3
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/AnalyticsModels/RumSession.ts +34 -0
- package/Models/DatabaseModels/AlertEpisodeLabelRule.ts +2 -2
- package/Models/DatabaseModels/AlertEpisodeOnCallRule.ts +2 -2
- package/Models/DatabaseModels/AlertEpisodeOwnerRule.ts +2 -2
- package/Models/DatabaseModels/AlertEpisodePrivacyRule.ts +2 -2
- package/Models/DatabaseModels/AlertGroupingRule.ts +2 -2
- package/Models/DatabaseModels/AlertLabelRule.ts +2 -2
- package/Models/DatabaseModels/AlertOnCallRule.ts +2 -2
- package/Models/DatabaseModels/AlertOwnerRule.ts +2 -2
- package/Models/DatabaseModels/AlertPrivacyRule.ts +2 -2
- package/Models/DatabaseModels/AlertReminderRule.ts +6 -4
- package/Models/DatabaseModels/AutoRemediationRule.ts +2 -2
- package/Models/DatabaseModels/CephClusterLabelRule.ts +2 -2
- package/Models/DatabaseModels/CephClusterOwnerRule.ts +2 -2
- package/Models/DatabaseModels/CloudResourceLabelRule.ts +2 -2
- package/Models/DatabaseModels/CloudResourceOwnerRule.ts +2 -2
- package/Models/DatabaseModels/DashboardLabelRule.ts +2 -2
- package/Models/DatabaseModels/DashboardOwnerRule.ts +2 -2
- package/Models/DatabaseModels/DatabaseBaseModel/RelationOnlyRuleBaseModel.ts +11 -0
- package/Models/DatabaseModels/DatabaseBaseModel/RuleBaseModel.ts +44 -0
- package/Models/DatabaseModels/DockerHostLabelRule.ts +2 -2
- package/Models/DatabaseModels/DockerHostOwnerRule.ts +2 -2
- package/Models/DatabaseModels/DockerSwarmClusterLabelRule.ts +2 -2
- package/Models/DatabaseModels/DockerSwarmClusterOwnerRule.ts +2 -2
- package/Models/DatabaseModels/HostLabelRule.ts +2 -2
- package/Models/DatabaseModels/HostOwnerRule.ts +2 -2
- package/Models/DatabaseModels/IncidentEpisodeLabelRule.ts +2 -2
- package/Models/DatabaseModels/IncidentEpisodeOnCallRule.ts +2 -2
- package/Models/DatabaseModels/IncidentEpisodeOwnerRule.ts +2 -2
- package/Models/DatabaseModels/IncidentEpisodePrivacyRule.ts +2 -2
- package/Models/DatabaseModels/IncidentGroupingRule.ts +2 -2
- package/Models/DatabaseModels/IncidentLabelRule.ts +2 -2
- package/Models/DatabaseModels/IncidentOnCallRule.ts +2 -2
- package/Models/DatabaseModels/IncidentOwnerRule.ts +2 -2
- package/Models/DatabaseModels/IncidentPrivacyRule.ts +2 -2
- package/Models/DatabaseModels/IncidentReminderRule.ts +6 -4
- package/Models/DatabaseModels/IncidentSlaRule.ts +2 -2
- package/Models/DatabaseModels/IncomingCallPolicy.ts +3 -4
- package/Models/DatabaseModels/IncomingCallPolicyLabelRule.ts +2 -2
- package/Models/DatabaseModels/IncomingCallPolicyOwnerRule.ts +2 -2
- package/Models/DatabaseModels/IncomingCallPolicyPhoneNumber.ts +254 -0
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/IoTFleetLabelRule.ts +2 -2
- package/Models/DatabaseModels/IoTFleetOwnerRule.ts +2 -2
- package/Models/DatabaseModels/KubernetesClusterLabelRule.ts +2 -2
- package/Models/DatabaseModels/KubernetesClusterOwnerRule.ts +2 -2
- package/Models/DatabaseModels/MonitorLabelRule.ts +2 -2
- package/Models/DatabaseModels/MonitorOwnerRule.ts +2 -2
- package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +2 -2
- package/Models/DatabaseModels/NetworkDeviceLabelRule.ts +2 -2
- package/Models/DatabaseModels/NetworkDeviceOwnerRule.ts +2 -2
- package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +2 -2
- package/Models/DatabaseModels/OnCallDutyPolicyLabelRule.ts +2 -2
- package/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.ts +2 -2
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.ts +2 -2
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.ts +2 -2
- package/Models/DatabaseModels/PodmanHostLabelRule.ts +2 -2
- package/Models/DatabaseModels/PodmanHostOwnerRule.ts +2 -2
- package/Models/DatabaseModels/ProxmoxClusterLabelRule.ts +2 -2
- package/Models/DatabaseModels/ProxmoxClusterOwnerRule.ts +2 -2
- package/Models/DatabaseModels/RumApplicationLabelRule.ts +2 -2
- package/Models/DatabaseModels/RumApplicationOwnerRule.ts +2 -2
- package/Models/DatabaseModels/RunbookLabelRule.ts +2 -2
- package/Models/DatabaseModels/RunbookOwnerRule.ts +2 -2
- package/Models/DatabaseModels/RunbookRule.ts +2 -2
- package/Models/DatabaseModels/ScheduledMaintenanceLabelRule.ts +2 -2
- package/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.ts +2 -2
- package/Models/DatabaseModels/ScheduledMaintenanceReminderRule.ts +6 -4
- package/Models/DatabaseModels/ServerlessFunctionLabelRule.ts +2 -2
- package/Models/DatabaseModels/ServerlessFunctionOwnerRule.ts +2 -2
- package/Models/DatabaseModels/ServiceLabelRule.ts +2 -2
- package/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.ts +283 -4
- package/Models/DatabaseModels/ServiceOwnerRule.ts +2 -2
- package/Models/DatabaseModels/StatusPageLabelRule.ts +2 -2
- package/Models/DatabaseModels/StatusPageMonitorRule.ts +2 -2
- package/Models/DatabaseModels/StatusPageOwnerRule.ts +2 -2
- package/Models/DatabaseModels/VMwareVCenterLabelRule.ts +2 -2
- package/Models/DatabaseModels/VMwareVCenterOwnerRule.ts +2 -2
- package/Models/DatabaseModels/WorkflowLabelRule.ts +2 -2
- package/Models/DatabaseModels/WorkflowOwnerRule.ts +2 -2
- package/Server/API/TelemetryAPI.ts +323 -2
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792400000000-AddSloBurnRateRuleIncidents.ts +111 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792500000000-AddConfigurableRuleCriteria.ts +644 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792600000000-AddIncomingCallPolicyPhoneNumbers.ts +72 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/MultipartFormData.ts +46 -21
- package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +21 -0
- package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +21 -0
- package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +21 -0
- package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +21 -0
- package/Server/Services/AlertGroupingEngineService.ts +27 -0
- package/Server/Services/AlertLabelRuleEngineService.ts +27 -0
- package/Server/Services/AlertOnCallRuleEngineService.ts +27 -0
- package/Server/Services/AlertOwnerRuleEngineService.ts +27 -0
- package/Server/Services/AlertPrivacyRuleEngineService.ts +27 -0
- package/Server/Services/AlertReminderRuleService.ts +65 -33
- package/Server/Services/AutoRemediationRuleEngineService.ts +90 -8
- package/Server/Services/CephClusterLabelRuleEngineService.ts +20 -0
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +20 -0
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +20 -0
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +20 -0
- package/Server/Services/DashboardLabelRuleEngineService.ts +20 -0
- package/Server/Services/DashboardOwnerRuleEngineService.ts +20 -0
- package/Server/Services/DatabaseService.ts +409 -6
- package/Server/Services/DockerHostLabelRuleEngineService.ts +20 -0
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +20 -0
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +23 -0
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +23 -0
- package/Server/Services/HostLabelRuleEngineService.ts +13 -0
- package/Server/Services/HostOwnerRuleEngineService.ts +13 -0
- package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +21 -0
- package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +21 -0
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +21 -0
- package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +21 -0
- package/Server/Services/IncidentGroupingEngineService.ts +64 -13
- package/Server/Services/IncidentLabelRuleEngineService.ts +64 -9
- package/Server/Services/IncidentOnCallRuleEngineService.ts +64 -10
- package/Server/Services/IncidentOwnerRuleEngineService.ts +64 -10
- package/Server/Services/IncidentPrivacyRuleEngineService.ts +64 -10
- package/Server/Services/IncidentReminderRuleService.ts +66 -34
- package/Server/Services/IncidentSlaRuleService.ts +55 -12
- package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +20 -0
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +20 -0
- package/Server/Services/IncomingCallPolicyPhoneNumberService.ts +184 -0
- package/Server/Services/IncomingCallPolicyService.ts +276 -5
- package/Server/Services/Index.ts +2 -0
- package/Server/Services/IoTFleetLabelRuleEngineService.ts +20 -0
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +20 -0
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +23 -0
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +23 -0
- package/Server/Services/LabelService.ts +50 -7
- package/Server/Services/MonitorLabelRuleEngineService.ts +20 -0
- package/Server/Services/MonitorOwnerRuleEngineService.ts +20 -0
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +2 -0
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +93 -1
- package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +26 -0
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +25 -0
- package/Server/Services/NetworkDeviceService.ts +2 -0
- package/Server/Services/NetworkSiteAssignmentRuleService.ts +90 -1
- package/Server/Services/NetworkSiteService.ts +242 -29
- package/Server/Services/NetworkSiteTypeService.ts +177 -77
- package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +20 -0
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +20 -0
- package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +22 -0
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +22 -0
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +20 -0
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +20 -0
- package/Server/Services/ProjectCallSMSConfigService.ts +156 -7
- package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +25 -0
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +25 -0
- package/Server/Services/RumApplicationLabelRuleEngineService.ts +22 -0
- package/Server/Services/RumApplicationOwnerRuleEngineService.ts +22 -0
- package/Server/Services/RunbookLabelRuleEngineService.ts +20 -0
- package/Server/Services/RunbookOwnerRuleEngineService.ts +20 -0
- package/Server/Services/RunbookRuleEngineService.ts +18 -1
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +62 -10
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +62 -11
- package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +48 -18
- package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +25 -0
- package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +25 -0
- package/Server/Services/ServiceLabelRuleEngineService.ts +20 -0
- package/Server/Services/ServiceLevelObjectiveBurnRateRuleService.ts +675 -12
- package/Server/Services/ServiceLevelObjectiveService.ts +55 -13
- package/Server/Services/ServiceOwnerRuleEngineService.ts +20 -0
- package/Server/Services/StatusPageLabelRuleEngineService.ts +20 -0
- package/Server/Services/StatusPageMonitorRuleEngineService.ts +31 -2
- package/Server/Services/StatusPageMonitorRuleService.ts +34 -1
- package/Server/Services/StatusPageOwnerRuleEngineService.ts +20 -0
- package/Server/Services/UserService.ts +23 -50
- package/Server/Services/VMwareVCenterLabelRuleEngineService.ts +25 -0
- package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +25 -0
- package/Server/Services/WorkflowLabelRuleEngineService.ts +20 -0
- package/Server/Services/WorkflowOwnerRuleEngineService.ts +20 -0
- package/Server/Static/Brand/README.md +10 -5
- package/Server/Static/Brand/favicons/oneuptime-up-v1.svg +8 -0
- package/Server/Types/Database/QueryHelper.ts +88 -0
- package/Server/Utils/AI/Toolbox/SloTools.ts +19 -2
- package/Server/Utils/IncomingCallPhoneNumber.ts +29 -16
- package/Server/Utils/Profiling.ts +13 -1
- package/Server/Utils/Rules/MonitorRuleCriteriaCache.ts +38 -0
- package/Server/Utils/SessionReplay/SessionReplayReadService.ts +498 -0
- package/Server/Utils/Telemetry.ts +3 -1
- package/Server/Utils/VendorAssets.ts +3 -0
- package/Tests/App/Dashboard/AIInsightViewTriage.test.tsx +348 -0
- package/Tests/App/Dashboard/ArchiveResourceCard.test.tsx +476 -0
- package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +25 -0
- package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +449 -24
- package/Tests/App/Dashboard/DashboardPersistentSideMenuLayouts.test.tsx +702 -0
- package/Tests/App/Dashboard/ExceptionsLandingRedirect.test.tsx +63 -0
- package/Tests/App/Dashboard/FeedOrdering.test.ts +150 -0
- package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +279 -100
- package/Tests/App/Dashboard/InventoryItemSideMenu.test.tsx +155 -0
- package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +11 -0
- package/Tests/App/Dashboard/PasskeySettings.test.tsx +215 -71
- package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +347 -0
- package/Tests/App/Dashboard/ResourceAuditLogsSideMenus.test.tsx +263 -0
- package/Tests/App/Dashboard/ResourceFeed.test.tsx +413 -17
- package/Tests/App/Dashboard/RumSessionReplaySideMenu.test.tsx +138 -0
- package/Tests/App/Dashboard/SloDashboardTemplateWidgets.test.tsx +940 -0
- package/Tests/App/Dashboard/TelemetryIngestionKeyEdit.test.tsx +378 -0
- package/Tests/App/Dashboard/TelemetryIngestionKeyForm.test.tsx +735 -0
- package/Tests/App/Dashboard/TwoFactorStatus.test.tsx +275 -108
- package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +13 -3
- package/Tests/Models/AnalyticsModels/RumSessionReplayColumns.test.ts +127 -4
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +5 -4
- package/Tests/Models/DatabaseModels/IncomingCallPolicyPhoneNumber.test.ts +362 -0
- package/Tests/Models/DatabaseModels/RuleBaseModel.test.ts +69 -0
- package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +181 -0
- package/Tests/Server/API/SessionReplayAPI.test.ts +1303 -145
- package/Tests/Server/API/UserTwoFactorSelfService.test.ts +407 -0
- package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +611 -0
- package/Tests/Server/Middleware/MultipartFormData.test.ts +61 -3
- package/Tests/Server/Middleware/TelemetryIngestionDisabled.test.ts +211 -0
- package/Tests/Server/Services/AlertIncidentRuleCriteriaEngineServices.test.ts +651 -0
- package/Tests/Server/Services/AutoRemediationRuleEngineService.test.ts +79 -0
- package/Tests/Server/Services/DatabaseServiceRelationOnlyRuleRollout.test.ts +330 -0
- package/Tests/Server/Services/DatabaseServiceRuleCriteriaValidation.test.ts +522 -0
- package/Tests/Server/Services/IncidentSlaRuleCriteriaCorrelation.test.ts +99 -0
- package/Tests/Server/Services/IncomingCallPolicyPhoneNumberService.test.ts +1540 -0
- package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +179 -2
- package/Tests/Server/Services/NetworkSiteAssignmentRuleService.test.ts +170 -0
- package/Tests/Server/Services/NetworkSiteService.test.ts +559 -53
- package/Tests/Server/Services/NetworkSiteTypeService.test.ts +122 -55
- package/Tests/Server/Services/ReminderRuleCriteria.test.ts +173 -0
- package/Tests/Server/Services/ResourceRuleCriteriaEngineServices.test.ts +170 -0
- package/Tests/Server/Services/ScheduledMaintenanceRuleCriteriaCorrelation.test.ts +154 -0
- package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleService.test.ts +2450 -470
- package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +464 -121
- package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +281 -0
- package/Tests/Server/Services/StatusPageMonitorRuleEngineService.test.ts +132 -0
- package/Tests/Server/Services/StatusPageMonitorRuleHooks.test.ts +159 -14
- package/Tests/Server/Services/UserEmailChangePasswordResetExpiry.test.ts +6 -8
- package/Tests/Server/Services/UserTwoFactorAuthAdmin.test.ts +203 -34
- package/Tests/Server/Types/Database/QueryHelperJsonArrayObjects.test.ts +128 -0
- package/Tests/Server/Utils/AI/SloTools.test.ts +190 -1
- package/Tests/Server/Utils/AI/Toolbox/AIToolbox.test.ts +461 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +25 -0
- package/Tests/Server/Utils/Billing/BillingFailureNoticeThrottle.test.ts +359 -0
- package/Tests/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.test.ts +318 -0
- package/Tests/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.test.ts +220 -0
- package/Tests/Server/Utils/Dashboard/SloTemplatePublicDashboard.test.ts +1043 -0
- package/Tests/Server/Utils/Execute.test.ts +302 -0
- package/Tests/Server/Utils/GracefulShutdown.test.ts +565 -0
- package/Tests/Server/Utils/IncomingCallPhoneNumber.test.ts +36 -20
- package/Tests/Server/Utils/Monitor/SloTemplateMetricEmitterContract.test.ts +750 -0
- package/Tests/Server/Utils/ProductAnalytics.test.ts +404 -0
- package/Tests/Server/Utils/Profiling.test.ts +366 -0
- package/Tests/Server/Utils/Rules/MonitorRuleCriteriaCache.test.ts +99 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +558 -0
- package/Tests/Server/Utils/VendorAssets.test.ts +17 -0
- package/Tests/Types/Dashboard/DashboardTemplateEditorialInvariants.test.ts +659 -0
- package/Tests/Types/Dashboard/DashboardTemplateInvariants.test.ts +97 -0
- package/Tests/Types/Dashboard/SloDashboardTemplate.test.ts +1179 -0
- package/Tests/Types/Database/AccessControl/OwnedThrough.test.ts +136 -0
- package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +180 -1
- package/Tests/UI/Components/AiInvestigationSettingsCard.test.tsx +13 -6
- package/Tests/UI/Components/Alert.test.tsx +532 -93
- package/Tests/UI/Components/Feed.test.tsx +241 -0
- package/Tests/UI/Components/Forms/BasicFormStepNavigation.test.tsx +368 -0
- package/Tests/UI/Components/Forms/FormSummary.test.tsx +454 -0
- package/Tests/UI/Components/Forms/ModelFormJsonColumns.test.tsx +290 -0
- package/Tests/UI/Components/Forms/ModelFormRuleCriteria.test.tsx +331 -0
- package/Tests/UI/Components/IconOpticalSize.test.tsx +79 -31
- package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +6 -6
- package/Tests/UI/Components/NavBar.test.tsx +91 -2
- package/Tests/UI/Components/PencilButton.test.tsx +211 -0
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaBuilder.test.tsx +510 -0
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +350 -0
- package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +50 -0
- package/Tests/UI/Components/Telemetry/TelemetryRetentionConfigForm.test.tsx +329 -0
- package/Tests/UI/Components/useFeedItems.test.tsx +107 -0
- package/Tests/UI/Rum/ChunkLoader.test.ts +401 -0
- package/Tests/UI/Rum/RecordingHealthCard.test.tsx +1 -1
- package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +7 -1
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +2 -0
- package/Tests/UI/Rum/ReplayEngine.test.ts +1069 -5
- package/Tests/UI/Rum/ReplayHeader.test.tsx +579 -2
- package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +23 -5
- package/Tests/UI/Rum/ReplayRail.test.tsx +143 -1
- package/Tests/UI/Rum/ReplayRenderBudget.test.tsx +338 -0
- package/Tests/UI/Rum/ReplaySignals.test.ts +179 -0
- package/Tests/UI/Rum/ReplayStage.test.tsx +210 -3
- package/Tests/UI/Rum/ReplayTimeline.test.tsx +180 -1
- package/Tests/UI/Rum/ReplayUserSessionsMenu.test.tsx +405 -0
- package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +13 -16
- package/Tests/UI/Rum/SessionReplayFacets.test.tsx +199 -0
- package/Tests/UI/Rum/SessionReplaySearchBar.test.tsx +58 -21
- package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +2 -0
- package/Tests/UI/Rum/SessionReplayTable.test.tsx +717 -4
- package/Tests/UI/Rum/SessionReplayUsersPage.test.tsx +435 -0
- package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +577 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +1 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +1 -1
- package/Tests/UI/Utils/LabelRuleImportExport.test.ts +192 -0
- package/Tests/UI/Utils/Navigation.test.ts +30 -0
- package/Tests/Utils/Dashboard/SloTemplateVariableScoping.test.ts +880 -0
- package/Tests/Utils/LabelRuleImportExport.test.ts +158 -0
- package/Tests/Utils/NetworkDiscovery/AutoImportRuleMatcher.test.ts +93 -0
- package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +138 -0
- package/Tests/Utils/NetworkSite/TypeHierarchyUtil.test.ts +174 -0
- package/Tests/Utils/Rules/RuleCriteriaMatcher.test.ts +1424 -0
- package/Tests/Utils/Rum/SessionIdentity.test.ts +72 -0
- package/Tests/Utils/Slo/SloBurnRateRuleState.test.ts +374 -28
- package/Tests/Utils/Telemetry/OriginAllowList.test.ts +118 -0
- package/Types/Dashboard/DashboardTemplates.ts +465 -0
- package/Types/Rules/RuleCriteria.ts +51 -0
- package/Types/Rules/RuleCriteriaFieldRegistry.ts +437 -0
- package/Types/Rum/SessionReplay.ts +75 -0
- package/Types/Rum/SessionReplayApi.ts +93 -0
- package/UI/Components/Alerts/Alert.tsx +102 -72
- package/UI/Components/Button/Button.tsx +4 -1
- package/UI/Components/Dropdown/Dropdown.tsx +2 -0
- package/UI/Components/Feed/Feed.tsx +15 -0
- package/UI/Components/Feed/useFeedItems.ts +227 -0
- package/UI/Components/Forms/BasicForm.tsx +42 -21
- package/UI/Components/Forms/ModelForm.tsx +80 -1
- package/UI/Components/Icon/Icon.tsx +3 -35
- package/UI/Components/ModelTable/ModelTable.tsx +19 -0
- package/UI/Components/Navbar/NavBar.tsx +1 -0
- package/UI/Components/RuleCriteria/RuleCriteriaBuilder.tsx +735 -0
- package/UI/Components/RuleCriteria/RuleCriteriaModelForm.tsx +209 -0
- package/UI/Components/RuleCriteria/RuleCriteriaModelTable.tsx +205 -0
- package/UI/Components/RuleCriteria/RuleCriteriaSummary.tsx +123 -0
- package/UI/Components/Table/Table.tsx +3 -0
- package/UI/Components/Table/TableBody.tsx +3 -0
- package/UI/Components/Table/TableRow.tsx +8 -2
- package/UI/Components/Telemetry/TelemetryRetentionConfigForm.tsx +14 -2
- package/UI/Styles/Theme.css +1 -0
- package/UI/Utils/LabelRuleImportExport.ts +114 -6
- package/UI/Utils/Navigation.ts +1 -2
- package/UI/esbuild-config.js +46 -0
- package/Utils/Faker.ts +93 -6
- package/Utils/LabelRuleImportExport.ts +295 -2
- package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +108 -8
- package/Utils/NetworkSite/CidrMatchUtil.ts +102 -0
- package/Utils/NetworkSite/TypeHierarchyUtil.ts +152 -2
- package/Utils/Rules/RuleCriteriaMatcher.ts +931 -0
- package/Utils/Rum/SessionIdentity.ts +16 -0
- package/Utils/Slo/SloBurnRateRuleState.ts +87 -33
- package/Utils/Telemetry/OriginAllowList.ts +74 -0
- package/build/dist/Models/AnalyticsModels/RumSession.js +32 -0
- package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertEpisodeLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOnCallRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertEpisodeOnCallRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodePrivacyRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertEpisodePrivacyRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertGroupingRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertGroupingRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertOnCallRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertOnCallRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertPrivacyRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AlertPrivacyRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertReminderRule.js +6 -5
- package/build/dist/Models/DatabaseModels/AlertReminderRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AutoRemediationRule.js +2 -2
- package/build/dist/Models/DatabaseModels/AutoRemediationRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephClusterLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/CephClusterLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephClusterOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/CephClusterOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResourceLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/CloudResourceLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DashboardLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/DashboardLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DashboardOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/DashboardOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/RelationOnlyRuleBaseModel.js +12 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/RelationOnlyRuleBaseModel.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/RuleBaseModel.js +50 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/RuleBaseModel.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DockerHostLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/DockerHostLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHostOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/DockerHostOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/HostLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/HostLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/HostOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/HostOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentEpisodeLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOnCallRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOnCallRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodePrivacyRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentEpisodePrivacyRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentOnCallRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentOnCallRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPrivacyRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentPrivacyRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentReminderRule.js +6 -5
- package/build/dist/Models/DatabaseModels/IncidentReminderRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentSlaRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncidentSlaRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicy.js +3 -4
- package/build/dist/Models/DatabaseModels/IncomingCallPolicy.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyPhoneNumber.js +277 -0
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyPhoneNumber.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleetLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IoTFleetLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/KubernetesClusterLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/MonitorLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/MonitorOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +2 -2
- package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/NetworkDeviceLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +2 -2
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ProxmoxClusterLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplicationLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/RumApplicationLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/RunbookLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/RunbookOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookRule.js +2 -2
- package/build/dist/Models/DatabaseModels/RunbookRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js +6 -5
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ServerlessFunctionLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ServiceLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js +281 -4
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/ServiceOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/StatusPageLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageMonitorRule.js +2 -2
- package/build/dist/Models/DatabaseModels/StatusPageMonitorRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/StatusPageOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowLabelRule.js +2 -2
- package/build/dist/Models/DatabaseModels/WorkflowLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerRule.js +2 -2
- package/build/dist/Models/DatabaseModels/WorkflowOwnerRule.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +211 -4
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792400000000-AddSloBurnRateRuleIncidents.js +60 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792400000000-AddSloBurnRateRuleIncidents.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792500000000-AddConfigurableRuleCriteria.js +301 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792500000000-AddConfigurableRuleCriteria.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792600000000-AddIncomingCallPolicyPhoneNumbers.js +30 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792600000000-AddIncomingCallPolicyPhoneNumbers.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/MultipartFormData.js +38 -21
- package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +17 -0
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +17 -0
- package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +17 -0
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +17 -0
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js +21 -0
- package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +21 -0
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +21 -0
- package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +21 -0
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +21 -0
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js +44 -26
- package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +54 -11
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +235 -10
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js +12 -0
- package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +12 -0
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +17 -0
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +17 -0
- package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +17 -0
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +17 -0
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +39 -13
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +39 -9
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +39 -10
- package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +39 -10
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +39 -10
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentReminderRuleService.js +44 -26
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSlaRuleService.js +33 -12
- package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyPhoneNumberService.js +127 -0
- package/build/dist/Server/Services/IncomingCallPolicyPhoneNumberService.js.map +1 -0
- package/build/dist/Server/Services/IncomingCallPolicyService.js +187 -4
- package/build/dist/Server/Services/IncomingCallPolicyService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +2 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/LabelService.js +39 -7
- package/build/dist/Server/Services/LabelService.js.map +1 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +2 -0
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +57 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +17 -0
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +2 -0
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js +56 -1
- package/build/dist/Server/Services/NetworkSiteAssignmentRuleService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +187 -22
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteTypeService.js +126 -51
- package/build/dist/Server/Services/NetworkSiteTypeService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProjectCallSMSConfigService.js +115 -6
- package/build/dist/Server/Services/ProjectCallSMSConfigService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookRuleEngineService.js +12 -0
- package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +38 -9
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +38 -10
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +32 -14
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js +554 -12
- package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js +50 -14
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +25 -2
- package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleService.js +19 -1
- package/build/dist/Server/Services/StatusPageMonitorRuleService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +14 -49
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +16 -0
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +16 -0
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +67 -0
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +21 -4
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -1
- package/build/dist/Server/Utils/IncomingCallPhoneNumber.js +9 -3
- package/build/dist/Server/Utils/IncomingCallPhoneNumber.js.map +1 -1
- package/build/dist/Server/Utils/Profiling.js +10 -1
- package/build/dist/Server/Utils/Profiling.js.map +1 -1
- package/build/dist/Server/Utils/Rules/MonitorRuleCriteriaCache.js +30 -0
- package/build/dist/Server/Utils/Rules/MonitorRuleCriteriaCache.js.map +1 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +344 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry.js +1 -1
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/VendorAssets.js +2 -0
- package/build/dist/Server/Utils/VendorAssets.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardTemplates.js +425 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/Rules/RuleCriteria.js +18 -0
- package/build/dist/Types/Rules/RuleCriteria.js.map +1 -0
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +426 -0
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplay.js +64 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -1
- package/build/dist/UI/Components/Alerts/Alert.js +63 -41
- package/build/dist/UI/Components/Alerts/Alert.js.map +1 -1
- package/build/dist/UI/Components/Button/Button.js +3 -1
- package/build/dist/UI/Components/Button/Button.js.map +1 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js +1 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/Feed/Feed.js +4 -1
- package/build/dist/UI/Components/Feed/Feed.js.map +1 -1
- package/build/dist/UI/Components/Feed/useFeedItems.js +137 -0
- package/build/dist/UI/Components/Feed/useFeedItems.js.map +1 -0
- package/build/dist/UI/Components/Forms/BasicForm.js +38 -19
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +65 -1
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +3 -35
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js +12 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +1 -0
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaBuilder.js +383 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaBuilder.js.map +1 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelForm.js +124 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelForm.js.map +1 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelTable.js +126 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelTable.js.map +1 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaSummary.js +63 -0
- package/build/dist/UI/Components/RuleCriteria/RuleCriteriaSummary.js.map +1 -0
- package/build/dist/UI/Components/Table/Table.js +1 -1
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableBody.js +4 -2
- package/build/dist/UI/Components/Table/TableBody.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +3 -2
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js +14 -2
- package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js.map +1 -1
- package/build/dist/UI/Utils/LabelRuleImportExport.js +81 -5
- package/build/dist/UI/Utils/LabelRuleImportExport.js.map +1 -1
- package/build/dist/UI/Utils/Navigation.js.map +1 -1
- package/build/dist/Utils/Faker.js +76 -6
- package/build/dist/Utils/Faker.js.map +1 -1
- package/build/dist/Utils/LabelRuleImportExport.js +157 -3
- package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js +81 -5
- package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
- package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +77 -0
- package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -1
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js +109 -2
- package/build/dist/Utils/NetworkSite/TypeHierarchyUtil.js.map +1 -1
- package/build/dist/Utils/Rules/RuleCriteriaMatcher.js +526 -0
- package/build/dist/Utils/Rules/RuleCriteriaMatcher.js.map +1 -0
- package/build/dist/Utils/Rum/SessionIdentity.js +13 -1
- package/build/dist/Utils/Rum/SessionIdentity.js.map +1 -1
- package/build/dist/Utils/Slo/SloBurnRateRuleState.js +28 -15
- package/build/dist/Utils/Slo/SloBurnRateRuleState.js.map +1 -1
- package/build/dist/Utils/Telemetry/OriginAllowList.js +61 -0
- package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -1
- package/package.json +20 -20
|
@@ -221,9 +221,10 @@ export class Service extends DatabaseService<Model> {
|
|
|
221
221
|
updatedItemIds: Array<ObjectID>,
|
|
222
222
|
): Promise<OnUpdate<Model>> {
|
|
223
223
|
/*
|
|
224
|
-
* When an SLO is disabled, resolve its
|
|
225
|
-
* evaluation worker skips disabled SLOs, so nothing else
|
|
226
|
-
* resolve them (and their on-call escalations would stay
|
|
224
|
+
* When an SLO is disabled, resolve everything its burn-rate rules have
|
|
225
|
+
* open — the evaluation worker skips disabled SLOs, so nothing else
|
|
226
|
+
* would ever resolve them (and their on-call escalations would stay
|
|
227
|
+
* open forever).
|
|
227
228
|
*/
|
|
228
229
|
if ((onUpdate.updateBy.data.isEnabled as boolean | undefined) === false) {
|
|
229
230
|
for (const updatedItemId of updatedItemIds) {
|
|
@@ -242,13 +243,13 @@ export class Service extends DatabaseService<Model> {
|
|
|
242
243
|
continue;
|
|
243
244
|
}
|
|
244
245
|
|
|
245
|
-
await this.
|
|
246
|
+
await this.resolveOpenBurnRateAlertsAndIncidentsForSlo({
|
|
246
247
|
sloId: updatedItemId,
|
|
247
248
|
projectId: slo.projectId,
|
|
248
249
|
});
|
|
249
250
|
} catch (err) {
|
|
250
251
|
logger.error(
|
|
251
|
-
`Error resolving open burn rate alerts for disabled SLO ${updatedItemId.toString()}: ${err}`,
|
|
252
|
+
`Error resolving open burn rate alerts and incidents for disabled SLO ${updatedItemId.toString()}: ${err}`,
|
|
252
253
|
);
|
|
253
254
|
}
|
|
254
255
|
}
|
|
@@ -332,13 +333,13 @@ export class Service extends DatabaseService<Model> {
|
|
|
332
333
|
}
|
|
333
334
|
|
|
334
335
|
try {
|
|
335
|
-
await this.
|
|
336
|
+
await this.resolveOpenBurnRateAlertsAndIncidentsForSlo({
|
|
336
337
|
sloId: item.id,
|
|
337
338
|
projectId: item.projectId,
|
|
338
339
|
});
|
|
339
340
|
} catch (err) {
|
|
340
341
|
logger.error(
|
|
341
|
-
`Error resolving open burn rate alerts for SLO ${item.id?.toString()} before delete: ${err}`,
|
|
342
|
+
`Error resolving open burn rate alerts and incidents for SLO ${item.id?.toString()} before delete: ${err}`,
|
|
342
343
|
{ projectId: item.projectId?.toString() } as LogAttributes,
|
|
343
344
|
);
|
|
344
345
|
}
|
|
@@ -353,11 +354,12 @@ export class Service extends DatabaseService<Model> {
|
|
|
353
354
|
}
|
|
354
355
|
|
|
355
356
|
/*
|
|
356
|
-
* Resolve
|
|
357
|
-
* Called when the SLO is
|
|
357
|
+
* Resolve everything any of this SLO's burn rate rules has left open — the
|
|
358
|
+
* Alerts they raised and the Incidents they declared. Called when the SLO is
|
|
359
|
+
* disabled or deleted, and by the worker's Misconfigured / Paused guards.
|
|
358
360
|
*/
|
|
359
361
|
@CaptureSpan()
|
|
360
|
-
public async
|
|
362
|
+
public async resolveOpenBurnRateAlertsAndIncidentsForSlo(data: {
|
|
361
363
|
sloId: ObjectID;
|
|
362
364
|
projectId: ObjectID;
|
|
363
365
|
}): Promise<void> {
|
|
@@ -377,28 +379,68 @@ export class Service extends DatabaseService<Model> {
|
|
|
377
379
|
},
|
|
378
380
|
});
|
|
379
381
|
|
|
382
|
+
/*
|
|
383
|
+
* One rule failing must not skip the rest — but the failure must still
|
|
384
|
+
* REACH the caller. The worker's guard path (Paused / Misconfigured)
|
|
385
|
+
* deliberately resolves before it commits the new status so that a failed
|
|
386
|
+
* resolve is retried on the next tick; swallowing the error here would
|
|
387
|
+
* hand it a success, let it commit, and the next tick would see no
|
|
388
|
+
* transition and never retry, stranding the record and its on-call
|
|
389
|
+
* escalation forever. So: attempt every rule, then rethrow the first
|
|
390
|
+
* error.
|
|
391
|
+
*
|
|
392
|
+
* The lifecycle-hook callers (SLO disabled / deleted) already wrap this in
|
|
393
|
+
* their own try/catch, so propagating changes nothing for them.
|
|
394
|
+
*/
|
|
395
|
+
let firstError: unknown = null;
|
|
396
|
+
|
|
380
397
|
for (const rule of burnRateRules) {
|
|
381
398
|
if (!rule.id) {
|
|
382
399
|
continue;
|
|
383
400
|
}
|
|
384
401
|
|
|
385
402
|
try {
|
|
386
|
-
await ServiceLevelObjectiveBurnRateRuleService.
|
|
403
|
+
await ServiceLevelObjectiveBurnRateRuleService.resolveOpenAlertsAndIncidentsForRule(
|
|
387
404
|
{
|
|
388
405
|
serviceLevelObjectiveId: data.sloId,
|
|
389
406
|
burnRateRuleId: rule.id,
|
|
390
407
|
projectId: data.projectId,
|
|
391
408
|
rootCause:
|
|
392
|
-
"
|
|
409
|
+
"Auto-resolved because the Service Level Objective was disabled or deleted.",
|
|
410
|
+
},
|
|
411
|
+
);
|
|
412
|
+
|
|
413
|
+
/*
|
|
414
|
+
* The rule's own lifecycle columns still say it has something open —
|
|
415
|
+
* this path deliberately does not stamp a resolve, because that would
|
|
416
|
+
* start a re-fire suppression window of up to the rule's long window.
|
|
417
|
+
* But the evaluation worker reads those same columns to decide whether
|
|
418
|
+
* an output is already open, so leaving them set silences the rule for
|
|
419
|
+
* the rest of the burn once the SLO is re-enabled. Forget the open
|
|
420
|
+
* state instead: nothing is open, and nothing just recovered.
|
|
421
|
+
*/
|
|
422
|
+
await ServiceLevelObjectiveBurnRateRuleService.clearOpenOutputStateForRule(
|
|
423
|
+
{
|
|
424
|
+
burnRateRuleId: rule.id,
|
|
425
|
+
clearAlert: true,
|
|
426
|
+
clearIncident: true,
|
|
393
427
|
},
|
|
394
428
|
);
|
|
395
429
|
} catch (err) {
|
|
396
430
|
logger.error(
|
|
397
|
-
`Error resolving open alerts for burn rate rule ${rule.id?.toString()} of SLO ${data.sloId?.toString()}: ${err}`,
|
|
431
|
+
`Error resolving open alerts and incidents for burn rate rule ${rule.id?.toString()} of SLO ${data.sloId?.toString()}: ${err}`,
|
|
398
432
|
{ projectId: data.projectId?.toString() } as LogAttributes,
|
|
399
433
|
);
|
|
434
|
+
|
|
435
|
+
if (firstError === null) {
|
|
436
|
+
firstError = err;
|
|
437
|
+
}
|
|
400
438
|
}
|
|
401
439
|
}
|
|
440
|
+
|
|
441
|
+
if (firstError !== null) {
|
|
442
|
+
throw firstError;
|
|
443
|
+
}
|
|
402
444
|
}
|
|
403
445
|
|
|
404
446
|
/*
|
|
@@ -14,6 +14,7 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
14
14
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
15
15
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
16
16
|
import { MAX_RULES_EVALUATED_PER_PROJECT } from "../../Utils/Rules/RuleEngineLimits";
|
|
17
|
+
import { RuleCriteriaMatcher } from "../../Utils/Rules/RuleCriteriaMatcher";
|
|
17
18
|
import logIfRuleReadWasTruncated from "../Utils/Rules/RuleEngineRuleRead";
|
|
18
19
|
|
|
19
20
|
class ServiceOwnerRuleEngineServiceClass {
|
|
@@ -40,6 +41,7 @@ class ServiceOwnerRuleEngineServiceClass {
|
|
|
40
41
|
select: {
|
|
41
42
|
_id: true,
|
|
42
43
|
name: true,
|
|
44
|
+
criteria: true,
|
|
43
45
|
notifyOwners: true,
|
|
44
46
|
serviceLabels: { _id: true },
|
|
45
47
|
serviceNamePattern: true,
|
|
@@ -183,6 +185,24 @@ class ServiceOwnerRuleEngineServiceClass {
|
|
|
183
185
|
private doesServiceMatchRule(
|
|
184
186
|
service: Service,
|
|
185
187
|
rule: ServiceOwnerRule,
|
|
188
|
+
): boolean {
|
|
189
|
+
return RuleCriteriaMatcher.matchesWithLegacySync({
|
|
190
|
+
rule: rule,
|
|
191
|
+
legacyFields: [
|
|
192
|
+
"serviceLabels",
|
|
193
|
+
"serviceNamePattern",
|
|
194
|
+
"serviceDescriptionPattern",
|
|
195
|
+
],
|
|
196
|
+
emptyResult: true,
|
|
197
|
+
matchesLegacyRule: (serviceRule: ServiceOwnerRule): boolean => {
|
|
198
|
+
return this.doesServiceMatchRuleLegacy(service, serviceRule);
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
private doesServiceMatchRuleLegacy(
|
|
204
|
+
service: Service,
|
|
205
|
+
rule: ServiceOwnerRule,
|
|
186
206
|
): boolean {
|
|
187
207
|
if (rule.serviceLabels && rule.serviceLabels.length > 0) {
|
|
188
208
|
if (!service.labels || service.labels.length === 0) {
|
|
@@ -7,6 +7,7 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
7
7
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
8
8
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
9
9
|
import { MAX_RULES_EVALUATED_PER_PROJECT } from "../../Utils/Rules/RuleEngineLimits";
|
|
10
|
+
import { RuleCriteriaMatcher } from "../../Utils/Rules/RuleCriteriaMatcher";
|
|
10
11
|
import logIfRuleReadWasTruncated from "../Utils/Rules/RuleEngineRuleRead";
|
|
11
12
|
|
|
12
13
|
class StatusPageLabelRuleEngineServiceClass {
|
|
@@ -33,6 +34,7 @@ class StatusPageLabelRuleEngineServiceClass {
|
|
|
33
34
|
select: {
|
|
34
35
|
_id: true,
|
|
35
36
|
name: true,
|
|
37
|
+
criteria: true,
|
|
36
38
|
statusPageLabels: { _id: true },
|
|
37
39
|
statusPageNamePattern: true,
|
|
38
40
|
statusPageDescriptionPattern: true,
|
|
@@ -143,6 +145,24 @@ class StatusPageLabelRuleEngineServiceClass {
|
|
|
143
145
|
private doesStatusPageMatchRule(
|
|
144
146
|
statusPage: StatusPage,
|
|
145
147
|
rule: StatusPageLabelRule,
|
|
148
|
+
): boolean {
|
|
149
|
+
return RuleCriteriaMatcher.matchesWithLegacySync({
|
|
150
|
+
rule: rule,
|
|
151
|
+
legacyFields: [
|
|
152
|
+
"statusPageLabels",
|
|
153
|
+
"statusPageNamePattern",
|
|
154
|
+
"statusPageDescriptionPattern",
|
|
155
|
+
],
|
|
156
|
+
emptyResult: true,
|
|
157
|
+
matchesLegacyRule: (statusPageRule: StatusPageLabelRule): boolean => {
|
|
158
|
+
return this.doesStatusPageMatchRuleLegacy(statusPage, statusPageRule);
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
private doesStatusPageMatchRuleLegacy(
|
|
164
|
+
statusPage: StatusPage,
|
|
165
|
+
rule: StatusPageLabelRule,
|
|
146
166
|
): boolean {
|
|
147
167
|
if (rule.statusPageLabels && rule.statusPageLabels.length > 0) {
|
|
148
168
|
if (!statusPage.labels || statusPage.labels.length === 0) {
|
|
@@ -5,6 +5,7 @@ import StatusPageResource from "../../Models/DatabaseModels/StatusPageResource";
|
|
|
5
5
|
import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
6
6
|
import ObjectID from "../../Types/ObjectID";
|
|
7
7
|
import UptimePrecision from "../../Types/StatusPage/UptimePrecision";
|
|
8
|
+
import RuleCriteriaMatcher from "../../Utils/Rules/RuleCriteriaMatcher";
|
|
8
9
|
import RulePatternMatchUtil from "../../Utils/Rules/RulePatternMatchUtil";
|
|
9
10
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
10
11
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
@@ -71,6 +72,7 @@ const RULE_SELECT: {
|
|
|
71
72
|
monitorLabels: { _id: true },
|
|
72
73
|
monitorNamePattern: true,
|
|
73
74
|
monitorDescriptionPattern: true,
|
|
75
|
+
criteria: true,
|
|
74
76
|
showCurrentStatus: true,
|
|
75
77
|
showUptimePercent: true,
|
|
76
78
|
uptimePercentPrecision: true,
|
|
@@ -356,6 +358,27 @@ export class StatusPageMonitorRuleEngineServiceClass {
|
|
|
356
358
|
public doesMonitorMatchRule(data: {
|
|
357
359
|
monitor: Monitor;
|
|
358
360
|
rule: StatusPageMonitorRule;
|
|
361
|
+
}): boolean {
|
|
362
|
+
return RuleCriteriaMatcher.matchesWithLegacySync({
|
|
363
|
+
rule: data.rule,
|
|
364
|
+
legacyFields: [
|
|
365
|
+
"monitorLabels",
|
|
366
|
+
"monitorNamePattern",
|
|
367
|
+
"monitorDescriptionPattern",
|
|
368
|
+
],
|
|
369
|
+
emptyResult: false,
|
|
370
|
+
matchesLegacyRule: (legacyRule: StatusPageMonitorRule): boolean => {
|
|
371
|
+
return this.doesMonitorMatchLegacyRule({
|
|
372
|
+
monitor: data.monitor,
|
|
373
|
+
rule: legacyRule,
|
|
374
|
+
});
|
|
375
|
+
},
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
private doesMonitorMatchLegacyRule(data: {
|
|
380
|
+
monitor: Monitor;
|
|
381
|
+
rule: StatusPageMonitorRule;
|
|
359
382
|
}): boolean {
|
|
360
383
|
const { monitor, rule } = data;
|
|
361
384
|
|
|
@@ -436,8 +459,14 @@ export class StatusPageMonitorRuleEngineServiceClass {
|
|
|
436
459
|
const hasDescriptionCriteria: boolean = Boolean(
|
|
437
460
|
rule.monitorDescriptionPattern,
|
|
438
461
|
);
|
|
462
|
+
const hasConfiguredCriteria: boolean = Boolean(rule.criteria);
|
|
439
463
|
|
|
440
|
-
if (
|
|
464
|
+
if (
|
|
465
|
+
!hasConfiguredCriteria &&
|
|
466
|
+
!hasLabelCriteria &&
|
|
467
|
+
!hasNameCriteria &&
|
|
468
|
+
!hasDescriptionCriteria
|
|
469
|
+
) {
|
|
441
470
|
return [];
|
|
442
471
|
}
|
|
443
472
|
|
|
@@ -448,7 +477,7 @@ export class StatusPageMonitorRuleEngineServiceClass {
|
|
|
448
477
|
projectId: rule.projectId,
|
|
449
478
|
};
|
|
450
479
|
|
|
451
|
-
if (hasLabelCriteria) {
|
|
480
|
+
if (!hasConfiguredCriteria && hasLabelCriteria) {
|
|
452
481
|
query.labels = (rule.monitorLabels || [])
|
|
453
482
|
.filter((label: Label) => {
|
|
454
483
|
return Boolean(label.id);
|
|
@@ -19,6 +19,10 @@ import ProjectScopedReferenceValidator, {
|
|
|
19
19
|
} from "../Utils/Database/ProjectScopedReferenceValidator";
|
|
20
20
|
import StatusPageMonitorRulePatternValidator from "../Utils/StatusPage/MonitorRulePatternValidator";
|
|
21
21
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
22
|
+
import {
|
|
23
|
+
getRuleCriteriaValidationError,
|
|
24
|
+
isValidRuleCriteria,
|
|
25
|
+
} from "../../Utils/Rules/RuleCriteriaMatcher";
|
|
22
26
|
|
|
23
27
|
export class Service extends DatabaseService<Model> {
|
|
24
28
|
public constructor() {
|
|
@@ -39,6 +43,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
39
43
|
monitorLabelCount: (createBy.data.monitorLabels || []).length,
|
|
40
44
|
monitorNamePattern: createBy.data.monitorNamePattern,
|
|
41
45
|
monitorDescriptionPattern: createBy.data.monitorDescriptionPattern,
|
|
46
|
+
criteria: createBy.data.criteria,
|
|
42
47
|
});
|
|
43
48
|
|
|
44
49
|
StatusPageMonitorRulePatternValidator.validate({
|
|
@@ -356,7 +361,29 @@ export class Service extends DatabaseService<Model> {
|
|
|
356
361
|
monitorLabelCount: number;
|
|
357
362
|
monitorNamePattern?: string | undefined;
|
|
358
363
|
monitorDescriptionPattern?: string | undefined;
|
|
364
|
+
criteria?: Model["criteria"];
|
|
359
365
|
}): void {
|
|
366
|
+
if (data.criteria !== undefined && data.criteria !== null) {
|
|
367
|
+
const validationError: string | null = getRuleCriteriaValidationError(
|
|
368
|
+
data.criteria,
|
|
369
|
+
);
|
|
370
|
+
|
|
371
|
+
if (validationError) {
|
|
372
|
+
throw new BadDataException(validationError);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
if (
|
|
376
|
+
isValidRuleCriteria(data.criteria) &&
|
|
377
|
+
data.criteria.filters.length > 0
|
|
378
|
+
) {
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
throw new BadDataException(
|
|
383
|
+
"A status page monitor rule needs at least one match condition.",
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
|
|
360
387
|
if (
|
|
361
388
|
data.monitorLabelCount === 0 &&
|
|
362
389
|
!data.monitorNamePattern &&
|
|
@@ -400,6 +427,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
400
427
|
},
|
|
401
428
|
monitorNamePattern: true,
|
|
402
429
|
monitorDescriptionPattern: true,
|
|
430
|
+
criteria: true,
|
|
403
431
|
},
|
|
404
432
|
limit: LIMIT_PER_PROJECT,
|
|
405
433
|
skip: 0,
|
|
@@ -419,7 +447,8 @@ export class Service extends DatabaseService<Model> {
|
|
|
419
447
|
const touchesCriteria: boolean =
|
|
420
448
|
updateBy.data.monitorLabels !== undefined ||
|
|
421
449
|
updateBy.data.monitorNamePattern !== undefined ||
|
|
422
|
-
updateBy.data.monitorDescriptionPattern !== undefined
|
|
450
|
+
updateBy.data.monitorDescriptionPattern !== undefined ||
|
|
451
|
+
updateBy.data.criteria !== undefined;
|
|
423
452
|
|
|
424
453
|
if (!touchesCriteria) {
|
|
425
454
|
return;
|
|
@@ -444,6 +473,10 @@ export class Service extends DatabaseService<Model> {
|
|
|
444
473
|
updateBy.data.monitorDescriptionPattern === undefined
|
|
445
474
|
? rule.monitorDescriptionPattern
|
|
446
475
|
: (updateBy.data.monitorDescriptionPattern as string | undefined),
|
|
476
|
+
criteria:
|
|
477
|
+
updateBy.data.criteria === undefined
|
|
478
|
+
? rule.criteria
|
|
479
|
+
: (updateBy.data.criteria as Model["criteria"]),
|
|
447
480
|
});
|
|
448
481
|
}
|
|
449
482
|
}
|
|
@@ -7,6 +7,7 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
7
7
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
8
8
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
9
9
|
import { MAX_RULES_EVALUATED_PER_PROJECT } from "../../Utils/Rules/RuleEngineLimits";
|
|
10
|
+
import { RuleCriteriaMatcher } from "../../Utils/Rules/RuleCriteriaMatcher";
|
|
10
11
|
import logIfRuleReadWasTruncated from "../Utils/Rules/RuleEngineRuleRead";
|
|
11
12
|
|
|
12
13
|
class StatusPageOwnerRuleEngineServiceClass {
|
|
@@ -33,6 +34,7 @@ class StatusPageOwnerRuleEngineServiceClass {
|
|
|
33
34
|
select: {
|
|
34
35
|
_id: true,
|
|
35
36
|
name: true,
|
|
37
|
+
criteria: true,
|
|
36
38
|
notifyOwners: true,
|
|
37
39
|
statusPageLabels: { _id: true },
|
|
38
40
|
statusPageNamePattern: true,
|
|
@@ -160,6 +162,24 @@ class StatusPageOwnerRuleEngineServiceClass {
|
|
|
160
162
|
private doesStatusPageMatchRule(
|
|
161
163
|
statusPage: StatusPage,
|
|
162
164
|
rule: StatusPageOwnerRule,
|
|
165
|
+
): boolean {
|
|
166
|
+
return RuleCriteriaMatcher.matchesWithLegacySync({
|
|
167
|
+
rule: rule,
|
|
168
|
+
legacyFields: [
|
|
169
|
+
"statusPageLabels",
|
|
170
|
+
"statusPageNamePattern",
|
|
171
|
+
"statusPageDescriptionPattern",
|
|
172
|
+
],
|
|
173
|
+
emptyResult: true,
|
|
174
|
+
matchesLegacyRule: (statusPageRule: StatusPageOwnerRule): boolean => {
|
|
175
|
+
return this.doesStatusPageMatchRuleLegacy(statusPage, statusPageRule);
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
private doesStatusPageMatchRuleLegacy(
|
|
181
|
+
statusPage: StatusPage,
|
|
182
|
+
rule: StatusPageOwnerRule,
|
|
163
183
|
): boolean {
|
|
164
184
|
if (rule.statusPageLabels && rule.statusPageLabels.length > 0) {
|
|
165
185
|
if (!statusPage.labels || statusPage.labels.length === 0) {
|
|
@@ -8,6 +8,7 @@ import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
|
|
|
8
8
|
import CreateBy from "../Types/Database/CreateBy";
|
|
9
9
|
import UpdateBy from "../Types/Database/UpdateBy";
|
|
10
10
|
import DeleteBy from "../Types/Database/DeleteBy";
|
|
11
|
+
import OwnerOnlyColumnPermission from "../Types/Database/Permissions/OwnerOnlyColumnPermission";
|
|
11
12
|
import Attribution from "../Utils/Attribution";
|
|
12
13
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
13
14
|
import DatabaseService from "./DatabaseService";
|
|
@@ -336,6 +337,14 @@ export class Service extends DatabaseService<Model> {
|
|
|
336
337
|
protected override async onBeforeUpdate(
|
|
337
338
|
updateBy: UpdateBy<Model>,
|
|
338
339
|
): Promise<OnUpdate<Model>> {
|
|
340
|
+
// Reject values that could bypass the exact-false ownership check below.
|
|
341
|
+
if (
|
|
342
|
+
updateBy.data.enableTwoFactorAuth !== undefined &&
|
|
343
|
+
typeof updateBy.data.enableTwoFactorAuth !== "boolean"
|
|
344
|
+
) {
|
|
345
|
+
throw new BadDataException("enableTwoFactorAuth must be a boolean.");
|
|
346
|
+
}
|
|
347
|
+
|
|
339
348
|
let carryForward: Array<Model> = [];
|
|
340
349
|
|
|
341
350
|
if (updateBy.data.password || updateBy.data.email) {
|
|
@@ -361,58 +370,22 @@ export class Service extends DatabaseService<Model> {
|
|
|
361
370
|
}
|
|
362
371
|
|
|
363
372
|
/*
|
|
364
|
-
*
|
|
365
|
-
*
|
|
366
|
-
*
|
|
367
|
-
*
|
|
368
|
-
*
|
|
369
|
-
* That is no longer true, and the guard was the single thing standing in
|
|
370
|
-
* the way of the feature it appeared to protect. Login now sends an
|
|
371
|
-
* account in that state through ENROLMENT -- a QR code and a code to type
|
|
372
|
-
* back -- rather than refusing it (see App/FeatureSet/Identity/API/
|
|
373
|
-
* Authentication.ts). "Required, nothing set up yet" is therefore an
|
|
374
|
-
* ordinary, recoverable state, and it is exactly the state an admin
|
|
375
|
-
* creates on purpose when they mandate two factor auth for somebody who
|
|
376
|
-
* has never used it.
|
|
377
|
-
*
|
|
378
|
-
* Keeping the guard would have meant an admin could only require two
|
|
379
|
-
* factor auth from users who had already volunteered for it, which is the
|
|
380
|
-
* opposite of what a mandate is for.
|
|
381
|
-
*
|
|
382
|
-
* What replaces it is the guard below, which protects the opposite
|
|
383
|
-
* direction.
|
|
384
|
-
*/
|
|
385
|
-
|
|
386
|
-
/*
|
|
387
|
-
* TURNING THE REQUIREMENT OFF IS A MASTER-ADMIN ACTION, NOT A USER ONE.
|
|
388
|
-
*
|
|
389
|
-
* `enableTwoFactorAuth` carries `update: [Permission.CurrentUser]` and the
|
|
390
|
-
* User table's row ACL scopes updates to the caller's own id, so without
|
|
391
|
-
* this every signed-in user can clear their own flag with an ordinary
|
|
392
|
-
* `PUT /user/<their own id>` -- and the product ships the button that does
|
|
393
|
-
* it, at Dashboard > Profile > Two Factor Authentication.
|
|
394
|
-
*
|
|
395
|
-
* That makes an admin mandate self-undoing. The admin requires two factor
|
|
396
|
-
* auth, the user is marched through enrolment at their next sign-in, and
|
|
397
|
-
* then, from the session they just earned, they switch it straight back
|
|
398
|
-
* off and delete the factor. The account is password-only again and the
|
|
399
|
-
* Authentication page reports the mandate as simply absent.
|
|
400
|
-
*
|
|
401
|
-
* So: anybody may turn the requirement ON for themselves -- self-service
|
|
402
|
-
* enrolment is a feature and taking it away would help nobody -- but only
|
|
403
|
-
* a root caller may turn it OFF. The one root caller is
|
|
404
|
-
* `setTwoFactorAuthRequired` below, reached through the master-admin
|
|
405
|
-
* endpoint. A user who wants two factor auth removed now has to ask an
|
|
406
|
-
* administrator, which is the point of the feature.
|
|
407
|
-
*
|
|
408
|
-
* Keyed on `isRoot` rather than on a master-admin check because a master
|
|
409
|
-
* admin editing their OWN row through the CRUD API is still that user, and
|
|
410
|
-
* the flag should move through the endpoint that also revokes sessions
|
|
411
|
-
* either way.
|
|
373
|
+
* Users may turn off two factor authentication for their own account.
|
|
374
|
+
* This hook runs before row scoping, so require an exact owner predicate.
|
|
375
|
+
* Changes to other accounts still use the master-admin endpoints, whose
|
|
376
|
+
* root writes retain session revocation when enabling the requirement.
|
|
412
377
|
*/
|
|
413
|
-
if (
|
|
378
|
+
if (
|
|
379
|
+
updateBy.data.enableTwoFactorAuth === false &&
|
|
380
|
+
!updateBy.props.isRoot &&
|
|
381
|
+
!OwnerOnlyColumnPermission.isQueryPinnedToCurrentUser(
|
|
382
|
+
Model,
|
|
383
|
+
updateBy.query,
|
|
384
|
+
updateBy.props,
|
|
385
|
+
)
|
|
386
|
+
) {
|
|
414
387
|
throw new BadDataException(
|
|
415
|
-
"
|
|
388
|
+
"You can only turn off two factor authentication for your own account.",
|
|
416
389
|
);
|
|
417
390
|
}
|
|
418
391
|
|
|
@@ -10,6 +10,7 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
10
10
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
11
11
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
12
12
|
import { MAX_RULES_EVALUATED_PER_PROJECT } from "../../Utils/Rules/RuleEngineLimits";
|
|
13
|
+
import { RuleCriteriaMatcher } from "../../Utils/Rules/RuleCriteriaMatcher";
|
|
13
14
|
import logIfRuleReadWasTruncated from "../Utils/Rules/RuleEngineRuleRead";
|
|
14
15
|
|
|
15
16
|
class VMwareVCenterLabelRuleEngineServiceClass {
|
|
@@ -37,6 +38,7 @@ class VMwareVCenterLabelRuleEngineServiceClass {
|
|
|
37
38
|
select: {
|
|
38
39
|
_id: true,
|
|
39
40
|
name: true,
|
|
41
|
+
criteria: true,
|
|
40
42
|
vmwareVCenterLabels: { _id: true },
|
|
41
43
|
vmwareVCenterNamePattern: true,
|
|
42
44
|
vmwareVCenterDescriptionPattern: true,
|
|
@@ -173,6 +175,29 @@ class VMwareVCenterLabelRuleEngineServiceClass {
|
|
|
173
175
|
private doesVMwareVCenterMatchRule(
|
|
174
176
|
vmwareVCenter: VMwareVCenter,
|
|
175
177
|
rule: VMwareVCenterLabelRule,
|
|
178
|
+
): boolean {
|
|
179
|
+
return RuleCriteriaMatcher.matchesWithLegacySync({
|
|
180
|
+
rule: rule,
|
|
181
|
+
legacyFields: [
|
|
182
|
+
"vmwareVCenterLabels",
|
|
183
|
+
"vmwareVCenterNamePattern",
|
|
184
|
+
"vmwareVCenterDescriptionPattern",
|
|
185
|
+
],
|
|
186
|
+
emptyResult: true,
|
|
187
|
+
matchesLegacyRule: (
|
|
188
|
+
vmwareVCenterRule: VMwareVCenterLabelRule,
|
|
189
|
+
): boolean => {
|
|
190
|
+
return this.doesVMwareVCenterMatchRuleLegacy(
|
|
191
|
+
vmwareVCenter,
|
|
192
|
+
vmwareVCenterRule,
|
|
193
|
+
);
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
private doesVMwareVCenterMatchRuleLegacy(
|
|
199
|
+
vmwareVCenter: VMwareVCenter,
|
|
200
|
+
rule: VMwareVCenterLabelRule,
|
|
176
201
|
): boolean {
|
|
177
202
|
if (rule.vmwareVCenterLabels && rule.vmwareVCenterLabels.length > 0) {
|
|
178
203
|
if (!vmwareVCenter.labels || vmwareVCenter.labels.length === 0) {
|
|
@@ -14,6 +14,7 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
14
14
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
15
15
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
16
16
|
import { MAX_RULES_EVALUATED_PER_PROJECT } from "../../Utils/Rules/RuleEngineLimits";
|
|
17
|
+
import { RuleCriteriaMatcher } from "../../Utils/Rules/RuleCriteriaMatcher";
|
|
17
18
|
import logIfRuleReadWasTruncated from "../Utils/Rules/RuleEngineRuleRead";
|
|
18
19
|
|
|
19
20
|
class VMwareVCenterOwnerRuleEngineServiceClass {
|
|
@@ -42,6 +43,7 @@ class VMwareVCenterOwnerRuleEngineServiceClass {
|
|
|
42
43
|
select: {
|
|
43
44
|
_id: true,
|
|
44
45
|
name: true,
|
|
46
|
+
criteria: true,
|
|
45
47
|
notifyOwners: true,
|
|
46
48
|
vmwareVCenterLabels: { _id: true },
|
|
47
49
|
vmwareVCenterNamePattern: true,
|
|
@@ -185,6 +187,29 @@ class VMwareVCenterOwnerRuleEngineServiceClass {
|
|
|
185
187
|
private doesVMwareVCenterMatchRule(
|
|
186
188
|
vmwareVCenter: VMwareVCenter,
|
|
187
189
|
rule: VMwareVCenterOwnerRule,
|
|
190
|
+
): boolean {
|
|
191
|
+
return RuleCriteriaMatcher.matchesWithLegacySync({
|
|
192
|
+
rule: rule,
|
|
193
|
+
legacyFields: [
|
|
194
|
+
"vmwareVCenterLabels",
|
|
195
|
+
"vmwareVCenterNamePattern",
|
|
196
|
+
"vmwareVCenterDescriptionPattern",
|
|
197
|
+
],
|
|
198
|
+
emptyResult: true,
|
|
199
|
+
matchesLegacyRule: (
|
|
200
|
+
vmwareVCenterRule: VMwareVCenterOwnerRule,
|
|
201
|
+
): boolean => {
|
|
202
|
+
return this.doesVMwareVCenterMatchRuleLegacy(
|
|
203
|
+
vmwareVCenter,
|
|
204
|
+
vmwareVCenterRule,
|
|
205
|
+
);
|
|
206
|
+
},
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
private doesVMwareVCenterMatchRuleLegacy(
|
|
211
|
+
vmwareVCenter: VMwareVCenter,
|
|
212
|
+
rule: VMwareVCenterOwnerRule,
|
|
188
213
|
): boolean {
|
|
189
214
|
if (rule.vmwareVCenterLabels && rule.vmwareVCenterLabels.length > 0) {
|
|
190
215
|
if (!vmwareVCenter.labels || vmwareVCenter.labels.length === 0) {
|
|
@@ -7,6 +7,7 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
7
7
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
8
8
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
9
9
|
import { MAX_RULES_EVALUATED_PER_PROJECT } from "../../Utils/Rules/RuleEngineLimits";
|
|
10
|
+
import { RuleCriteriaMatcher } from "../../Utils/Rules/RuleCriteriaMatcher";
|
|
10
11
|
import logIfRuleReadWasTruncated from "../Utils/Rules/RuleEngineRuleRead";
|
|
11
12
|
|
|
12
13
|
class WorkflowLabelRuleEngineServiceClass {
|
|
@@ -32,6 +33,7 @@ class WorkflowLabelRuleEngineServiceClass {
|
|
|
32
33
|
select: {
|
|
33
34
|
_id: true,
|
|
34
35
|
name: true,
|
|
36
|
+
criteria: true,
|
|
35
37
|
workflowLabels: { _id: true },
|
|
36
38
|
workflowNamePattern: true,
|
|
37
39
|
workflowDescriptionPattern: true,
|
|
@@ -141,6 +143,24 @@ class WorkflowLabelRuleEngineServiceClass {
|
|
|
141
143
|
private doesWorkflowMatchRule(
|
|
142
144
|
workflow: Workflow,
|
|
143
145
|
rule: WorkflowLabelRule,
|
|
146
|
+
): boolean {
|
|
147
|
+
return RuleCriteriaMatcher.matchesWithLegacySync({
|
|
148
|
+
rule: rule,
|
|
149
|
+
legacyFields: [
|
|
150
|
+
"workflowLabels",
|
|
151
|
+
"workflowNamePattern",
|
|
152
|
+
"workflowDescriptionPattern",
|
|
153
|
+
],
|
|
154
|
+
emptyResult: true,
|
|
155
|
+
matchesLegacyRule: (workflowRule: WorkflowLabelRule): boolean => {
|
|
156
|
+
return this.doesWorkflowMatchRuleLegacy(workflow, workflowRule);
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
private doesWorkflowMatchRuleLegacy(
|
|
162
|
+
workflow: Workflow,
|
|
163
|
+
rule: WorkflowLabelRule,
|
|
144
164
|
): boolean {
|
|
145
165
|
if (rule.workflowLabels && rule.workflowLabels.length > 0) {
|
|
146
166
|
if (!workflow.labels || workflow.labels.length === 0) {
|
|
@@ -11,6 +11,7 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
11
11
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
12
12
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
13
13
|
import { MAX_RULES_EVALUATED_PER_PROJECT } from "../../Utils/Rules/RuleEngineLimits";
|
|
14
|
+
import { RuleCriteriaMatcher } from "../../Utils/Rules/RuleCriteriaMatcher";
|
|
14
15
|
import logIfRuleReadWasTruncated from "../Utils/Rules/RuleEngineRuleRead";
|
|
15
16
|
|
|
16
17
|
class WorkflowOwnerRuleEngineServiceClass {
|
|
@@ -37,6 +38,7 @@ class WorkflowOwnerRuleEngineServiceClass {
|
|
|
37
38
|
select: {
|
|
38
39
|
_id: true,
|
|
39
40
|
name: true,
|
|
41
|
+
criteria: true,
|
|
40
42
|
notifyOwners: true,
|
|
41
43
|
workflowLabels: { _id: true },
|
|
42
44
|
workflowNamePattern: true,
|
|
@@ -159,6 +161,24 @@ class WorkflowOwnerRuleEngineServiceClass {
|
|
|
159
161
|
private doesWorkflowMatchRule(
|
|
160
162
|
workflow: Workflow,
|
|
161
163
|
rule: WorkflowOwnerRule,
|
|
164
|
+
): boolean {
|
|
165
|
+
return RuleCriteriaMatcher.matchesWithLegacySync({
|
|
166
|
+
rule: rule,
|
|
167
|
+
legacyFields: [
|
|
168
|
+
"workflowLabels",
|
|
169
|
+
"workflowNamePattern",
|
|
170
|
+
"workflowDescriptionPattern",
|
|
171
|
+
],
|
|
172
|
+
emptyResult: true,
|
|
173
|
+
matchesLegacyRule: (workflowRule: WorkflowOwnerRule): boolean => {
|
|
174
|
+
return this.doesWorkflowMatchRuleLegacy(workflow, workflowRule);
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
private doesWorkflowMatchRuleLegacy(
|
|
180
|
+
workflow: Workflow,
|
|
181
|
+
rule: WorkflowOwnerRule,
|
|
162
182
|
): boolean {
|
|
163
183
|
if (rule.workflowLabels && rule.workflowLabels.length > 0) {
|
|
164
184
|
if (!workflow.labels || workflow.labels.length === 0) {
|