@oneuptime/common 13.0.1 → 13.0.4
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/LoggerCore.test.ts +597 -0
- package/Tests/Server/Utils/Monitor/MonitorTemplateUtil.test.ts +1109 -0
- 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/Telemetry/EntityRegistry.test.ts +711 -0
- package/Tests/Server/Utils/Telemetry/ResourceFacetResolver.test.ts +522 -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/OnCallDutyPolicy/LayerUtilCorePaths.test.ts +1014 -0
- package/Tests/Types/OnCallDutyPolicy/LayerUtilExhaustiveRotation.test.ts +9 -6
- package/Tests/Types/Rules/RuleCriteriaFieldRegistry.test.ts +276 -0
- package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +180 -1
- package/Tests/Types/Telemetry/LlmConventions.test.ts +495 -0
- 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/Rum/SessionReplayHealth.test.ts +884 -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/OnCallDutyPolicy/Layer.ts +12 -0
- package/Types/Rules/RuleCriteria.ts +51 -0
- package/Types/Rules/RuleCriteriaFieldRegistry.ts +449 -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/OnCallDutyPolicy/Layer.js +11 -0
- package/build/dist/Types/OnCallDutyPolicy/Layer.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 +435 -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
|
@@ -41,6 +41,8 @@ import logger, { LogAttributes } from "../Utils/Logger";
|
|
|
41
41
|
import ConfigLogLevel from "../Types/ConfigLogLevel";
|
|
42
42
|
import BaseService from "./BaseService";
|
|
43
43
|
import BaseModel from "../../Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel";
|
|
44
|
+
import RelationOnlyRuleBaseModel from "../../Models/DatabaseModels/DatabaseBaseModel/RelationOnlyRuleBaseModel";
|
|
45
|
+
import RuleBaseModel from "../../Models/DatabaseModels/DatabaseBaseModel/RuleBaseModel";
|
|
44
46
|
import { WorkflowRoute } from "../../ServiceRoute";
|
|
45
47
|
import Protocol from "../../Types/API/Protocol";
|
|
46
48
|
import Route from "../../Types/API/Route";
|
|
@@ -70,6 +72,12 @@ import Text from "../../Types/Text";
|
|
|
70
72
|
import Typeof from "../../Types/Typeof";
|
|
71
73
|
import API from "../../Utils/API";
|
|
72
74
|
import Slug from "../../Utils/Slug";
|
|
75
|
+
import { getRuleCriteriaValidationError } from "../../Utils/Rules/RuleCriteriaMatcher";
|
|
76
|
+
import RuleCriteria, {
|
|
77
|
+
RULE_CRITERIA_LEGACY_NEVER_MATCH_PATTERN,
|
|
78
|
+
RuleCriteriaOperator,
|
|
79
|
+
} from "../../Types/Rules/RuleCriteria";
|
|
80
|
+
import { getRuleCriteriaFieldsForModel } from "../../Types/Rules/RuleCriteriaFieldRegistry";
|
|
73
81
|
import {
|
|
74
82
|
DataSource,
|
|
75
83
|
Driver,
|
|
@@ -87,6 +95,13 @@ import ModelEventType from "../../Types/Realtime/ModelEventType";
|
|
|
87
95
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
88
96
|
import type AuditLogServiceType from "./AuditLogService";
|
|
89
97
|
|
|
98
|
+
const RULE_CRITERIA_RELATION_OPERATORS: ReadonlySet<RuleCriteriaOperator> =
|
|
99
|
+
new Set<RuleCriteriaOperator>([
|
|
100
|
+
RuleCriteriaOperator.HasAnyOf,
|
|
101
|
+
RuleCriteriaOperator.HasAllOf,
|
|
102
|
+
RuleCriteriaOperator.HasNoneOf,
|
|
103
|
+
]);
|
|
104
|
+
|
|
90
105
|
class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
91
106
|
public modelType!: { new (): TBaseModel };
|
|
92
107
|
private model!: TBaseModel;
|
|
@@ -662,11 +677,286 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
662
677
|
return columnType ? getMaxLengthFromTableColumnType(columnType) : undefined;
|
|
663
678
|
}
|
|
664
679
|
|
|
680
|
+
private validateRuleCriteriaForModel(criteria: RuleCriteria): void {
|
|
681
|
+
const allowedFields: ReadonlyArray<string> | undefined =
|
|
682
|
+
getRuleCriteriaFieldsForModel(this.modelName);
|
|
683
|
+
|
|
684
|
+
if (!allowedFields) {
|
|
685
|
+
throw new BadDataException(
|
|
686
|
+
`Rule criteria fields are not registered for ${this.modelName}.`,
|
|
687
|
+
);
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
if (
|
|
691
|
+
criteria.isEnabled !== undefined &&
|
|
692
|
+
!(this.model instanceof RelationOnlyRuleBaseModel)
|
|
693
|
+
) {
|
|
694
|
+
throw new BadDataException(
|
|
695
|
+
`Rule criteria isEnabled is only supported for relation-only rules.`,
|
|
696
|
+
);
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
for (const filter of criteria.filters) {
|
|
700
|
+
if (!allowedFields.includes(filter.field)) {
|
|
701
|
+
throw new BadDataException(
|
|
702
|
+
`Rule criteria field "${filter.field}" is not supported for ${this.modelName}.`,
|
|
703
|
+
);
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
const metadata: TableColumnMetadata | undefined =
|
|
707
|
+
this.model.getTableColumnMetadata(filter.field);
|
|
708
|
+
|
|
709
|
+
if (!metadata) {
|
|
710
|
+
throw new BadDataException(
|
|
711
|
+
`Rule criteria field "${filter.field}" is not a column on ${this.modelName}.`,
|
|
712
|
+
);
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
const isRelationField: boolean =
|
|
716
|
+
metadata.type === TableColumnType.EntityArray;
|
|
717
|
+
const isRelationOperator: boolean = RULE_CRITERIA_RELATION_OPERATORS.has(
|
|
718
|
+
filter.operator,
|
|
719
|
+
);
|
|
720
|
+
|
|
721
|
+
if (isRelationOperator && !isRelationField) {
|
|
722
|
+
throw new BadDataException(
|
|
723
|
+
`Rule criteria field "${filter.field}" does not support relation operators.`,
|
|
724
|
+
);
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
if (!isRelationOperator && isRelationField) {
|
|
728
|
+
throw new BadDataException(
|
|
729
|
+
`Rule criteria field "${filter.field}" requires a relation operator.`,
|
|
730
|
+
);
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
if (
|
|
734
|
+
isRelationOperator &&
|
|
735
|
+
(filter.value as Array<string>).some((value: string): boolean => {
|
|
736
|
+
return !ObjectID.isValidUUID(value);
|
|
737
|
+
})
|
|
738
|
+
) {
|
|
739
|
+
throw new BadDataException(
|
|
740
|
+
`Rule criteria field "${filter.field}" requires valid resource IDs.`,
|
|
741
|
+
);
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
private getRuleCriteriaEffectiveEnabledQuery(
|
|
747
|
+
query: Query<TBaseModel>,
|
|
748
|
+
): Query<TBaseModel> {
|
|
749
|
+
if (!(this.model instanceof RelationOnlyRuleBaseModel)) {
|
|
750
|
+
return query;
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
const requestedEnabledState: unknown = (query as Record<string, unknown>)[
|
|
754
|
+
"isEnabled"
|
|
755
|
+
];
|
|
756
|
+
|
|
757
|
+
if (typeof requestedEnabledState !== "boolean") {
|
|
758
|
+
return query;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
return {
|
|
762
|
+
...query,
|
|
763
|
+
isEnabled: QueryHelper.booleanForCriteriaBackedRule(
|
|
764
|
+
"criteria",
|
|
765
|
+
requestedEnabledState,
|
|
766
|
+
),
|
|
767
|
+
} as Query<TBaseModel>;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
private addRuleCriteriaEffectiveEnabledToSelect(
|
|
771
|
+
select: Select<TBaseModel> | null | undefined,
|
|
772
|
+
): boolean {
|
|
773
|
+
if (
|
|
774
|
+
!(this.model instanceof RelationOnlyRuleBaseModel) ||
|
|
775
|
+
!select ||
|
|
776
|
+
!(select as Record<string, unknown>)["isEnabled"]
|
|
777
|
+
) {
|
|
778
|
+
return false;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
const criteriaWasSelected: boolean = Boolean(
|
|
782
|
+
(select as Record<string, unknown>)["criteria"],
|
|
783
|
+
);
|
|
784
|
+
(select as Record<string, unknown>)["criteria"] = true;
|
|
785
|
+
|
|
786
|
+
return !criteriaWasSelected;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
private applyRuleCriteriaEffectiveEnabledToItem(
|
|
790
|
+
item: TBaseModel,
|
|
791
|
+
mapEffectiveEnabled: boolean = true,
|
|
792
|
+
removeInternallySelectedCriteria: boolean = false,
|
|
793
|
+
): void {
|
|
794
|
+
if (!(this.model instanceof RelationOnlyRuleBaseModel)) {
|
|
795
|
+
return;
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
const relationOnlyRule: RelationOnlyRuleBaseModel =
|
|
799
|
+
item as unknown as RelationOnlyRuleBaseModel;
|
|
800
|
+
|
|
801
|
+
if (
|
|
802
|
+
mapEffectiveEnabled &&
|
|
803
|
+
relationOnlyRule.criteria !== undefined &&
|
|
804
|
+
relationOnlyRule.criteria !== null
|
|
805
|
+
) {
|
|
806
|
+
(item as Record<string, unknown>)["isEnabled"] =
|
|
807
|
+
(item as Record<string, unknown>)["isEnabled"] === null;
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
if (removeInternallySelectedCriteria) {
|
|
811
|
+
delete (item as Record<string, unknown>)["criteria"];
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
private applyRelationOnlyRuleRolloutState(
|
|
816
|
+
data: TBaseModel | PartialEntity<TBaseModel>,
|
|
817
|
+
options: {
|
|
818
|
+
hasConfiguredCriteria: boolean;
|
|
819
|
+
isUpdate: boolean;
|
|
820
|
+
},
|
|
821
|
+
): void {
|
|
822
|
+
if (!(this.model instanceof RelationOnlyRuleBaseModel)) {
|
|
823
|
+
return;
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
if (!options.hasConfiguredCriteria) {
|
|
827
|
+
return;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
const record: Record<string, unknown> = data as Record<string, unknown>;
|
|
831
|
+
const criteria: RuleCriteria = record["criteria"] as RuleCriteria;
|
|
832
|
+
const requestedEnabledState: unknown =
|
|
833
|
+
typeof criteria.isEnabled === "boolean"
|
|
834
|
+
? criteria.isEnabled
|
|
835
|
+
: record["isEnabled"];
|
|
836
|
+
|
|
837
|
+
if (options.isUpdate && typeof requestedEnabledState !== "boolean") {
|
|
838
|
+
throw new BadDataException(
|
|
839
|
+
"isEnabled must be supplied when updating criteria for this rule.",
|
|
840
|
+
);
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
const logicalEnabledState: boolean =
|
|
844
|
+
typeof requestedEnabledState === "boolean" ? requestedEnabledState : true;
|
|
845
|
+
|
|
846
|
+
record["criteria"] = {
|
|
847
|
+
...criteria,
|
|
848
|
+
isEnabled: logicalEnabledState,
|
|
849
|
+
};
|
|
850
|
+
record["isEnabled"] = logicalEnabledState ? null : false;
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
private applyLegacyRuleCriteriaSafetyShadow(
|
|
854
|
+
data: TBaseModel | PartialEntity<TBaseModel>,
|
|
855
|
+
): void {
|
|
856
|
+
const allowedFields: ReadonlyArray<string> | undefined =
|
|
857
|
+
getRuleCriteriaFieldsForModel(this.modelName);
|
|
858
|
+
|
|
859
|
+
if (!allowedFields) {
|
|
860
|
+
return;
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
if (this.model instanceof RelationOnlyRuleBaseModel) {
|
|
864
|
+
/*
|
|
865
|
+
* Omit legacy many-to-many fields from the server-side write. An empty
|
|
866
|
+
* array would clear existing junction rows and route updates through
|
|
867
|
+
* repository.save(), whose upsert semantics can resurrect a deleted row.
|
|
868
|
+
* The fail-closed isEnabled shadow keeps these rules hidden from older
|
|
869
|
+
* workers without touching their legacy relations.
|
|
870
|
+
*/
|
|
871
|
+
for (const field of allowedFields) {
|
|
872
|
+
delete (data as Record<string, unknown>)[field];
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
return;
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
/*
|
|
879
|
+
* Scalar rule families can expose a never-matching regular expression to
|
|
880
|
+
* older workers. Relation-only criteria rules encode enabled as null and
|
|
881
|
+
* disabled as false; older workers query true and therefore see neither.
|
|
882
|
+
*/
|
|
883
|
+
const safetyPatternField: string | undefined = allowedFields.find(
|
|
884
|
+
(field: string): boolean => {
|
|
885
|
+
const metadata: TableColumnMetadata | undefined =
|
|
886
|
+
this.model.getTableColumnMetadata(field);
|
|
887
|
+
|
|
888
|
+
return (
|
|
889
|
+
metadata?.type !== TableColumnType.EntityArray &&
|
|
890
|
+
field.match(/(pattern|regex)/i) !== null
|
|
891
|
+
);
|
|
892
|
+
},
|
|
893
|
+
);
|
|
894
|
+
|
|
895
|
+
if (!safetyPatternField) {
|
|
896
|
+
return;
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
for (const field of allowedFields) {
|
|
900
|
+
const metadata: TableColumnMetadata | undefined =
|
|
901
|
+
this.model.getTableColumnMetadata(field);
|
|
902
|
+
|
|
903
|
+
if (!metadata) {
|
|
904
|
+
continue;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
if (metadata.type === TableColumnType.EntityArray) {
|
|
908
|
+
// Preserve existing junction rows and keep this on repository.update().
|
|
909
|
+
delete (data as Record<string, unknown>)[field];
|
|
910
|
+
} else {
|
|
911
|
+
(data as Record<string, unknown>)[field] = null;
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
(data as Record<string, unknown>)[safetyPatternField] =
|
|
916
|
+
RULE_CRITERIA_LEGACY_NEVER_MATCH_PATTERN;
|
|
917
|
+
}
|
|
918
|
+
|
|
665
919
|
private async sanitizeCreateOrUpdate(
|
|
666
920
|
data: TBaseModel | PartialEntity<TBaseModel>,
|
|
667
921
|
props: DatabaseCommonInteractionProps,
|
|
668
922
|
isUpdate: boolean = false,
|
|
669
923
|
): Promise<TBaseModel | PartialEntity<TBaseModel>> {
|
|
924
|
+
const criteriaValue: unknown = (data as Record<string, unknown>)[
|
|
925
|
+
"criteria"
|
|
926
|
+
];
|
|
927
|
+
const hasConfiguredCriteria: boolean =
|
|
928
|
+
criteriaValue !== undefined && criteriaValue !== null;
|
|
929
|
+
|
|
930
|
+
if (
|
|
931
|
+
this.model instanceof RelationOnlyRuleBaseModel &&
|
|
932
|
+
isUpdate &&
|
|
933
|
+
criteriaValue === null
|
|
934
|
+
) {
|
|
935
|
+
throw new BadDataException(
|
|
936
|
+
"Configured criteria cannot be cleared from this rule. Save an empty criteria set to match every resource.",
|
|
937
|
+
);
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
if (this.model instanceof RuleBaseModel && hasConfiguredCriteria) {
|
|
941
|
+
const validationError: string | null =
|
|
942
|
+
getRuleCriteriaValidationError(criteriaValue);
|
|
943
|
+
|
|
944
|
+
if (validationError) {
|
|
945
|
+
throw new BadDataException(validationError);
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
this.validateRuleCriteriaForModel(criteriaValue as RuleCriteria);
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
this.applyRelationOnlyRuleRolloutState(data, {
|
|
952
|
+
hasConfiguredCriteria: hasConfiguredCriteria,
|
|
953
|
+
isUpdate: isUpdate,
|
|
954
|
+
});
|
|
955
|
+
|
|
956
|
+
if (this.model instanceof RuleBaseModel && hasConfiguredCriteria) {
|
|
957
|
+
this.applyLegacyRuleCriteriaSafetyShadow(data);
|
|
958
|
+
}
|
|
959
|
+
|
|
670
960
|
data = this.checkMaxLengthOfFields(data as TBaseModel);
|
|
671
961
|
|
|
672
962
|
const columns: Columns = this.model.getTableColumns();
|
|
@@ -1068,6 +1358,7 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
1068
1358
|
|
|
1069
1359
|
try {
|
|
1070
1360
|
createBy.data = await this.getRepository().save(createBy.data);
|
|
1361
|
+
this.applyRuleCriteriaEffectiveEnabledToItem(createBy.data);
|
|
1071
1362
|
|
|
1072
1363
|
// Seed telemetry context with projectId + <model>Id for this create.
|
|
1073
1364
|
this.setTelemetryContextFromItem(createBy.data);
|
|
@@ -1447,6 +1738,8 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
1447
1738
|
limit = new PositiveNumber(limit);
|
|
1448
1739
|
}
|
|
1449
1740
|
|
|
1741
|
+
query = this.getRuleCriteriaEffectiveEnabledQuery(query);
|
|
1742
|
+
|
|
1450
1743
|
const findBy: FindBy<TBaseModel> = {
|
|
1451
1744
|
query,
|
|
1452
1745
|
skip,
|
|
@@ -1577,7 +1870,7 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
1577
1870
|
const checkReadPermissionType: CheckReadPermissionType<TBaseModel> =
|
|
1578
1871
|
await ModelPermission.checkReadQueryPermission(
|
|
1579
1872
|
this.modelType,
|
|
1580
|
-
aggregateBy.query,
|
|
1873
|
+
this.getRuleCriteriaEffectiveEnabledQuery(aggregateBy.query),
|
|
1581
1874
|
null,
|
|
1582
1875
|
aggregateBy.props,
|
|
1583
1876
|
);
|
|
@@ -1833,6 +2126,10 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
1833
2126
|
: await this.onBeforeDelete(deleteBy);
|
|
1834
2127
|
const beforeDeleteBy: DeleteBy<TBaseModel> = onDelete.deleteBy;
|
|
1835
2128
|
|
|
2129
|
+
beforeDeleteBy.query = this.getRuleCriteriaEffectiveEnabledQuery(
|
|
2130
|
+
beforeDeleteBy.query,
|
|
2131
|
+
);
|
|
2132
|
+
|
|
1836
2133
|
beforeDeleteBy.query = await ModelPermission.checkDeleteQueryPermission(
|
|
1837
2134
|
this.modelType,
|
|
1838
2135
|
beforeDeleteBy.query,
|
|
@@ -1898,6 +2195,10 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
1898
2195
|
|
|
1899
2196
|
const carryForward: any = onDelete.carryForward;
|
|
1900
2197
|
|
|
2198
|
+
beforeDeleteBy.query = this.getRuleCriteriaEffectiveEnabledQuery(
|
|
2199
|
+
beforeDeleteBy.query,
|
|
2200
|
+
);
|
|
2201
|
+
|
|
1901
2202
|
beforeDeleteBy.query = await ModelPermission.checkDeleteQueryPermission(
|
|
1902
2203
|
this.modelType,
|
|
1903
2204
|
beforeDeleteBy.query,
|
|
@@ -2139,6 +2440,10 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
2139
2440
|
(onBeforeFind.select as any)["_id"] = true;
|
|
2140
2441
|
}
|
|
2141
2442
|
|
|
2443
|
+
onBeforeFind.query = this.getRuleCriteriaEffectiveEnabledQuery(
|
|
2444
|
+
onBeforeFind.query,
|
|
2445
|
+
);
|
|
2446
|
+
|
|
2142
2447
|
const result: {
|
|
2143
2448
|
query: Query<TBaseModel>;
|
|
2144
2449
|
select: Select<TBaseModel> | null;
|
|
@@ -2153,6 +2458,14 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
2153
2458
|
onBeforeFind.query = result.query;
|
|
2154
2459
|
onBeforeFind.select = result.select || undefined;
|
|
2155
2460
|
|
|
2461
|
+
const mapEffectiveEnabled: boolean = Boolean(
|
|
2462
|
+
(onBeforeFind.select as Record<string, unknown> | undefined)?.[
|
|
2463
|
+
"isEnabled"
|
|
2464
|
+
],
|
|
2465
|
+
);
|
|
2466
|
+
const removeInternallySelectedCriteria: boolean =
|
|
2467
|
+
this.addRuleCriteriaEffectiveEnabledToSelect(onBeforeFind.select);
|
|
2468
|
+
|
|
2156
2469
|
const sortColumnsAddedToSelect: Array<string> =
|
|
2157
2470
|
this.addSortColumnsToSelect(onBeforeFind);
|
|
2158
2471
|
|
|
@@ -2214,6 +2527,11 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
2214
2527
|
let decryptedItems: Array<TBaseModel> = [];
|
|
2215
2528
|
|
|
2216
2529
|
for (const item of items) {
|
|
2530
|
+
this.applyRuleCriteriaEffectiveEnabledToItem(
|
|
2531
|
+
item,
|
|
2532
|
+
mapEffectiveEnabled,
|
|
2533
|
+
removeInternallySelectedCriteria,
|
|
2534
|
+
);
|
|
2217
2535
|
decryptedItems.push(await this.decrypt(item));
|
|
2218
2536
|
}
|
|
2219
2537
|
|
|
@@ -2493,6 +2811,10 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
2493
2811
|
const beforeUpdateBy: UpdateBy<TBaseModel> = onUpdate.updateBy;
|
|
2494
2812
|
const carryForward: any = onUpdate.carryForward;
|
|
2495
2813
|
|
|
2814
|
+
beforeUpdateBy.query = this.getRuleCriteriaEffectiveEnabledQuery(
|
|
2815
|
+
beforeUpdateBy.query,
|
|
2816
|
+
);
|
|
2817
|
+
|
|
2496
2818
|
beforeUpdateBy.query = await ModelPermission.checkUpdateQueryPermissions(
|
|
2497
2819
|
this.modelType,
|
|
2498
2820
|
beforeUpdateBy.query,
|
|
@@ -2538,6 +2860,14 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
2538
2860
|
...Object.fromEntries(dataColumns),
|
|
2539
2861
|
};
|
|
2540
2862
|
|
|
2863
|
+
if (
|
|
2864
|
+
this.model instanceof RelationOnlyRuleBaseModel &&
|
|
2865
|
+
typeof (data as Record<string, unknown>)["isEnabled"] === "boolean" &&
|
|
2866
|
+
(data as Record<string, unknown>)["criteria"] === undefined
|
|
2867
|
+
) {
|
|
2868
|
+
(selectColumns as Record<string, unknown>)["criteria"] = true;
|
|
2869
|
+
}
|
|
2870
|
+
|
|
2541
2871
|
if (this.getModel().getTenantColumn()) {
|
|
2542
2872
|
(selectColumns as any)[this.getModel().getTenantColumn()!.toString()] =
|
|
2543
2873
|
true;
|
|
@@ -2633,10 +2963,63 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
2633
2963
|
* primary key, INSERTs instead of updating, and dies on the first
|
|
2634
2964
|
* NOT NULL column.
|
|
2635
2965
|
*/
|
|
2966
|
+
const dataForItem: PartialEntity<TBaseModel> = { ...data };
|
|
2967
|
+
|
|
2968
|
+
if (
|
|
2969
|
+
this.model instanceof RelationOnlyRuleBaseModel &&
|
|
2970
|
+
(data as Record<string, unknown>)["criteria"] === undefined &&
|
|
2971
|
+
typeof (data as Record<string, unknown>)["isEnabled"] === "boolean" &&
|
|
2972
|
+
(item as unknown as RelationOnlyRuleBaseModel).criteria !==
|
|
2973
|
+
undefined &&
|
|
2974
|
+
(item as unknown as RelationOnlyRuleBaseModel).criteria !== null
|
|
2975
|
+
) {
|
|
2976
|
+
const logicalEnabled: boolean = (data as Record<string, unknown>)[
|
|
2977
|
+
"isEnabled"
|
|
2978
|
+
] as boolean;
|
|
2979
|
+
const existingCriteria: RuleCriteria = (
|
|
2980
|
+
item as unknown as RelationOnlyRuleBaseModel
|
|
2981
|
+
).criteria!;
|
|
2982
|
+
|
|
2983
|
+
/*
|
|
2984
|
+
* Keep the transport shadow synchronized with the physical state.
|
|
2985
|
+
* Otherwise a later criteria edit that round-trips this JSON without
|
|
2986
|
+
* a top-level isEnabled value can restore a stale enabled state.
|
|
2987
|
+
*/
|
|
2988
|
+
(dataForItem as Record<string, unknown>)["criteria"] = {
|
|
2989
|
+
...existingCriteria,
|
|
2990
|
+
isEnabled: logicalEnabled,
|
|
2991
|
+
};
|
|
2992
|
+
(dataForItem as Record<string, unknown>)["isEnabled"] = logicalEnabled
|
|
2993
|
+
? null
|
|
2994
|
+
: false;
|
|
2995
|
+
}
|
|
2996
|
+
|
|
2636
2997
|
const updatedItem: any = {
|
|
2637
|
-
...
|
|
2998
|
+
...dataForItem,
|
|
2638
2999
|
_id: item._id!,
|
|
2639
3000
|
} as any;
|
|
3001
|
+
const updatedItemForComparison: any = { ...updatedItem };
|
|
3002
|
+
const updateCriteriaValue: unknown = (data as Record<string, unknown>)[
|
|
3003
|
+
"criteria"
|
|
3004
|
+
];
|
|
3005
|
+
const existingCriteriaValue: unknown = (
|
|
3006
|
+
item as unknown as RelationOnlyRuleBaseModel
|
|
3007
|
+
).criteria;
|
|
3008
|
+
const isCriteriaBackedComparison: boolean =
|
|
3009
|
+
(updateCriteriaValue !== undefined && updateCriteriaValue !== null) ||
|
|
3010
|
+
(updateCriteriaValue === undefined &&
|
|
3011
|
+
existingCriteriaValue !== undefined &&
|
|
3012
|
+
existingCriteriaValue !== null);
|
|
3013
|
+
|
|
3014
|
+
if (
|
|
3015
|
+
this.model instanceof RelationOnlyRuleBaseModel &&
|
|
3016
|
+
typeof (data as Record<string, unknown>)["isEnabled"] === "boolean" &&
|
|
3017
|
+
isCriteriaBackedComparison
|
|
3018
|
+
) {
|
|
3019
|
+
updatedItemForComparison.isEnabled = (
|
|
3020
|
+
data as Record<string, unknown>
|
|
3021
|
+
)["isEnabled"];
|
|
3022
|
+
}
|
|
2640
3023
|
|
|
2641
3024
|
if (isDebugLogEnabled) {
|
|
2642
3025
|
logger.debug("Updated Item", {
|
|
@@ -2683,7 +3066,7 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
2683
3066
|
if (
|
|
2684
3067
|
this.getModel().enableWorkflowOn?.update &&
|
|
2685
3068
|
// Only trigger workflow if there's a change in values
|
|
2686
|
-
!this.hasSameValues({ item, updatedItem })
|
|
3069
|
+
!this.hasSameValues({ item, updatedItem: updatedItemForComparison })
|
|
2687
3070
|
) {
|
|
2688
3071
|
let tenantId: ObjectID | undefined = updateBy.props.tenantId;
|
|
2689
3072
|
|
|
@@ -2708,7 +3091,10 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
2708
3091
|
|
|
2709
3092
|
if (
|
|
2710
3093
|
this.getModel().enableAuditLogOn?.update &&
|
|
2711
|
-
!this.hasSameValues({
|
|
3094
|
+
!this.hasSameValues({
|
|
3095
|
+
item,
|
|
3096
|
+
updatedItem: updatedItemForComparison,
|
|
3097
|
+
}) &&
|
|
2712
3098
|
item.id
|
|
2713
3099
|
) {
|
|
2714
3100
|
const auditLogService: typeof AuditLogServiceType =
|
|
@@ -2765,13 +3151,30 @@ class DatabaseService<TBaseModel extends BaseModel> extends BaseService {
|
|
|
2765
3151
|
const { item, updatedItem } = data;
|
|
2766
3152
|
const columns: string[] = Object.keys(updatedItem);
|
|
2767
3153
|
for (const column of columns) {
|
|
3154
|
+
const currentValue: unknown = item.getColumnValue(column);
|
|
3155
|
+
const updatedValue: unknown = updatedItem[column];
|
|
3156
|
+
const isJSONColumn: boolean =
|
|
3157
|
+
item.getTableColumnMetadata(column)?.type === TableColumnType.JSON;
|
|
3158
|
+
|
|
3159
|
+
/*
|
|
3160
|
+
* Plain JSON objects all stringify through Object.toString as
|
|
3161
|
+
* "[object Object]". Compare their contents instead, while ignoring
|
|
3162
|
+
* insignificant object-key ordering.
|
|
3163
|
+
*/
|
|
3164
|
+
if (
|
|
3165
|
+
isJSONColumn &&
|
|
3166
|
+
!JSONFunctions.deepEqual(currentValue, updatedValue)
|
|
3167
|
+
) {
|
|
3168
|
+
return false;
|
|
3169
|
+
}
|
|
3170
|
+
|
|
2768
3171
|
if (
|
|
3172
|
+
!isJSONColumn &&
|
|
2769
3173
|
/*
|
|
2770
3174
|
* `toString()` is necessary so we can compare wrapped values
|
|
2771
3175
|
* (e.g. `ObjectID`) with raw values (e.g. `string`)
|
|
2772
3176
|
*/
|
|
2773
|
-
|
|
2774
|
-
updatedItem[column]?.toString()
|
|
3177
|
+
currentValue?.toString() !== updatedValue?.toString()
|
|
2775
3178
|
) {
|
|
2776
3179
|
return false;
|
|
2777
3180
|
}
|
|
@@ -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 DockerHostLabelRuleEngineServiceClass {
|
|
@@ -35,6 +36,7 @@ class DockerHostLabelRuleEngineServiceClass {
|
|
|
35
36
|
select: {
|
|
36
37
|
_id: true,
|
|
37
38
|
name: true,
|
|
39
|
+
criteria: true,
|
|
38
40
|
dockerHostLabels: { _id: true },
|
|
39
41
|
dockerHostNamePattern: true,
|
|
40
42
|
dockerHostDescriptionPattern: true,
|
|
@@ -170,6 +172,24 @@ class DockerHostLabelRuleEngineServiceClass {
|
|
|
170
172
|
private doesDockerHostMatchRule(
|
|
171
173
|
dockerHost: DockerHost,
|
|
172
174
|
rule: DockerHostLabelRule,
|
|
175
|
+
): boolean {
|
|
176
|
+
return RuleCriteriaMatcher.matchesWithLegacySync({
|
|
177
|
+
rule,
|
|
178
|
+
legacyFields: [
|
|
179
|
+
"dockerHostLabels",
|
|
180
|
+
"dockerHostNamePattern",
|
|
181
|
+
"dockerHostDescriptionPattern",
|
|
182
|
+
],
|
|
183
|
+
emptyResult: true,
|
|
184
|
+
matchesLegacyRule: (legacyRule: DockerHostLabelRule): boolean => {
|
|
185
|
+
return this.doesDockerHostMatchLegacyRule(dockerHost, legacyRule);
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
private doesDockerHostMatchLegacyRule(
|
|
191
|
+
dockerHost: DockerHost,
|
|
192
|
+
rule: DockerHostLabelRule,
|
|
173
193
|
): boolean {
|
|
174
194
|
if (rule.dockerHostLabels && rule.dockerHostLabels.length > 0) {
|
|
175
195
|
if (!dockerHost.labels || dockerHost.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 DockerHostOwnerRuleEngineServiceClass {
|
|
@@ -40,6 +41,7 @@ class DockerHostOwnerRuleEngineServiceClass {
|
|
|
40
41
|
select: {
|
|
41
42
|
_id: true,
|
|
42
43
|
name: true,
|
|
44
|
+
criteria: true,
|
|
43
45
|
notifyOwners: true,
|
|
44
46
|
dockerHostLabels: { _id: true },
|
|
45
47
|
dockerHostNamePattern: true,
|
|
@@ -182,6 +184,24 @@ class DockerHostOwnerRuleEngineServiceClass {
|
|
|
182
184
|
private doesDockerHostMatchRule(
|
|
183
185
|
dockerHost: DockerHost,
|
|
184
186
|
rule: DockerHostOwnerRule,
|
|
187
|
+
): boolean {
|
|
188
|
+
return RuleCriteriaMatcher.matchesWithLegacySync({
|
|
189
|
+
rule,
|
|
190
|
+
legacyFields: [
|
|
191
|
+
"dockerHostLabels",
|
|
192
|
+
"dockerHostNamePattern",
|
|
193
|
+
"dockerHostDescriptionPattern",
|
|
194
|
+
],
|
|
195
|
+
emptyResult: true,
|
|
196
|
+
matchesLegacyRule: (legacyRule: DockerHostOwnerRule): boolean => {
|
|
197
|
+
return this.doesDockerHostMatchLegacyRule(dockerHost, legacyRule);
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
private doesDockerHostMatchLegacyRule(
|
|
203
|
+
dockerHost: DockerHost,
|
|
204
|
+
rule: DockerHostOwnerRule,
|
|
185
205
|
): boolean {
|
|
186
206
|
if (rule.dockerHostLabels && rule.dockerHostLabels.length > 0) {
|
|
187
207
|
if (!dockerHost.labels || dockerHost.labels.length === 0) {
|
|
@@ -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 DockerSwarmClusterLabelRuleEngineServiceClass {
|
|
@@ -37,6 +38,7 @@ class DockerSwarmClusterLabelRuleEngineServiceClass {
|
|
|
37
38
|
select: {
|
|
38
39
|
_id: true,
|
|
39
40
|
name: true,
|
|
41
|
+
criteria: true,
|
|
40
42
|
dockerSwarmClusterLabels: { _id: true },
|
|
41
43
|
dockerSwarmClusterNamePattern: true,
|
|
42
44
|
dockerSwarmClusterDescriptionPattern: true,
|
|
@@ -175,6 +177,27 @@ class DockerSwarmClusterLabelRuleEngineServiceClass {
|
|
|
175
177
|
private doesDockerSwarmClusterMatchRule(
|
|
176
178
|
dockerSwarmCluster: DockerSwarmCluster,
|
|
177
179
|
rule: DockerSwarmClusterLabelRule,
|
|
180
|
+
): boolean {
|
|
181
|
+
return RuleCriteriaMatcher.matchesWithLegacySync({
|
|
182
|
+
rule,
|
|
183
|
+
legacyFields: [
|
|
184
|
+
"dockerSwarmClusterLabels",
|
|
185
|
+
"dockerSwarmClusterNamePattern",
|
|
186
|
+
"dockerSwarmClusterDescriptionPattern",
|
|
187
|
+
],
|
|
188
|
+
emptyResult: true,
|
|
189
|
+
matchesLegacyRule: (legacyRule: DockerSwarmClusterLabelRule): boolean => {
|
|
190
|
+
return this.doesDockerSwarmClusterMatchLegacyRule(
|
|
191
|
+
dockerSwarmCluster,
|
|
192
|
+
legacyRule,
|
|
193
|
+
);
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
private doesDockerSwarmClusterMatchLegacyRule(
|
|
199
|
+
dockerSwarmCluster: DockerSwarmCluster,
|
|
200
|
+
rule: DockerSwarmClusterLabelRule,
|
|
178
201
|
): boolean {
|
|
179
202
|
if (
|
|
180
203
|
rule.dockerSwarmClusterLabels &&
|