@oneuptime/common 13.0.5 → 13.0.6
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/AuditLog.ts +81 -1
- package/Models/AnalyticsModels/SecurityEvent.ts +4 -4
- package/Models/DatabaseModels/Alert.ts +62 -0
- package/Models/DatabaseModels/GlobalConfig.ts +1 -1
- package/Models/DatabaseModels/Incident.ts +66 -0
- package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +74 -0
- package/Models/DatabaseModels/IncidentPublicNote.ts +74 -0
- package/Models/DatabaseModels/Index.ts +6 -4
- package/Models/DatabaseModels/NetworkDevice.ts +67 -0
- package/Models/DatabaseModels/NetworkDeviceDiagnostic.ts +746 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +151 -0
- package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +1 -1
- package/Models/DatabaseModels/Project.ts +41 -0
- package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +74 -0
- package/Models/DatabaseModels/SecurityEventConnection.ts +11 -11
- package/Models/DatabaseModels/ServiceLevelObjective.ts +185 -8
- package/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.ts +746 -43
- package/Models/DatabaseModels/ServiceLevelObjectiveFeed.ts +575 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.ts +582 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.ts +16 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.ts +16 -0
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +75 -0
- package/Models/DatabaseModels/ThreatIntelFeed.ts +1 -1
- package/Server/API/BaseAPI.ts +17 -0
- package/Server/API/BillingInvoiceAPI.ts +343 -30
- package/Server/API/BillingPaymentMethodAPI.ts +126 -5
- package/Server/API/DashboardAPI.ts +96 -2
- package/Server/API/SecurityEventConnectionAPI.ts +141 -11
- package/Server/API/StatusPageAPI.ts +308 -199
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792800000000-AddNetworkDeviceDiagnostic.ts +83 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792900000000-AddNetworkDeviceDnsNameAndShortDeviceNames.ts +36 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793000000000-AddNetbiosLookupToNetworkDeviceDiscoveryScan.ts +29 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793100000000-SloProductOverhaul.ts +516 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793200000000-BackfillSloMonitorRulesAndAffectedResources.ts +98 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793300000000-AddDataResidencyToProject.ts +27 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793400000000-AddSubscriberUpdateNotificationStatus.ts +97 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
- package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +138 -67
- package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +213 -84
- package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +112 -35
- package/Server/Services/AlertLabelRuleEngineService.ts +299 -217
- package/Server/Services/AlertOwnerRuleEngineService.ts +572 -396
- package/Server/Services/AlertPrivacyRuleEngineService.ts +116 -40
- package/Server/Services/AlertService.ts +111 -4
- package/Server/Services/AuditLogService.ts +612 -59
- package/Server/Services/BillingInvoiceService.ts +112 -102
- package/Server/Services/BillingService.ts +539 -11
- package/Server/Services/CephClusterLabelRuleEngineService.ts +170 -109
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +233 -115
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +163 -100
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +236 -115
- package/Server/Services/DashboardLabelRuleEngineService.ts +145 -84
- package/Server/Services/DashboardOwnerRuleEngineService.ts +213 -95
- package/Server/Services/DatabaseService.ts +171 -21
- package/Server/Services/DockerHostLabelRuleEngineService.ts +171 -110
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +233 -115
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +181 -112
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +243 -118
- package/Server/Services/HostLabelRuleEngineService.ts +167 -106
- package/Server/Services/HostOwnerRuleEngineService.ts +229 -111
- package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +141 -67
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +272 -72
- package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +112 -35
- package/Server/Services/IncidentEpisodePublicNoteService.ts +24 -0
- package/Server/Services/IncidentLabelRuleEngineService.ts +279 -204
- package/Server/Services/IncidentOwnerRuleEngineService.ts +595 -425
- package/Server/Services/IncidentPrivacyRuleEngineService.ts +117 -44
- package/Server/Services/IncidentPublicNoteService.ts +24 -0
- package/Server/Services/IncidentService.ts +114 -3
- package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +147 -83
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +221 -100
- package/Server/Services/Index.ts +6 -4
- package/Server/Services/IoTFleetLabelRuleEngineService.ts +145 -84
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +213 -95
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +181 -112
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +243 -118
- package/Server/Services/LabelService.ts +23 -28
- package/Server/Services/MonitorLabelRuleEngineService.ts +152 -92
- package/Server/Services/MonitorOwnerRuleEngineService.ts +220 -104
- package/Server/Services/MonitorProbeService.ts +20 -2
- package/Server/Services/MonitorService.ts +11 -9
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +376 -5
- package/Server/Services/NetworkDeviceDiagnosticService.ts +417 -0
- package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +147 -83
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +218 -97
- package/Server/Services/NetworkDeviceService.ts +39 -2
- package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +151 -80
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +222 -97
- package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +154 -83
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +225 -100
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +171 -110
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +235 -115
- package/Server/Services/ProjectService.ts +111 -10
- package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +174 -110
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +239 -116
- package/Server/Services/RumApplicationLabelRuleEngineService.ts +137 -73
- package/Server/Services/RumApplicationOwnerRuleEngineService.ts +200 -83
- package/Server/Services/RunbookLabelRuleEngineService.ts +146 -84
- package/Server/Services/RunbookOwnerRuleEngineService.ts +216 -95
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +324 -230
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +613 -428
- package/Server/Services/ScheduledMaintenancePublicNoteService.ts +24 -0
- package/Server/Services/ScheduledMaintenanceService.ts +43 -14
- package/Server/Services/SecurityEventConnectionService.ts +56 -4
- package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +143 -74
- package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +206 -85
- package/Server/Services/ServiceLabelRuleEngineService.ts +172 -110
- package/Server/Services/ServiceLevelObjectiveBurnRateRuleService.ts +1057 -18
- package/Server/Services/ServiceLevelObjectiveFeedService.ts +108 -0
- package/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.ts +793 -97
- package/Server/Services/ServiceLevelObjectiveMonitorRuleService.ts +1069 -0
- package/Server/Services/ServiceLevelObjectiveOwnerTeamService.ts +240 -1
- package/Server/Services/ServiceLevelObjectiveOwnerUserService.ts +257 -1
- package/Server/Services/ServiceLevelObjectiveService.ts +1356 -56
- package/Server/Services/ServiceOwnerRuleEngineService.ts +238 -116
- package/Server/Services/StatusPageAnnouncementService.ts +13 -0
- package/Server/Services/StatusPageLabelRuleEngineService.ts +146 -85
- package/Server/Services/StatusPageOwnerRuleEngineService.ts +210 -99
- package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +28 -232
- package/Server/Services/StatusPageSubscriberService.ts +6 -0
- package/Server/Services/TelemetryUsageBillingService.ts +38 -7
- package/Server/Services/ThreatIntelFeedService.ts +1 -1
- package/Server/Services/VMwareVCenterLabelRuleEngineService.ts +173 -110
- package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +238 -116
- package/Server/Services/WorkflowLabelRuleEngineService.ts +145 -84
- package/Server/Services/WorkflowOwnerRuleEngineService.ts +215 -95
- package/Server/Types/Database/UpdateByID.ts +3 -0
- package/Server/Types/Database/UpdateOneBy.ts +7 -0
- package/Server/Utils/AI/AlertAIContextBuilder.ts +19 -0
- package/Server/Utils/AI/IncidentAIContextBuilder.ts +39 -0
- package/Server/Utils/AI/Toolbox/AlertTools.ts +37 -1
- package/Server/Utils/AI/Toolbox/IncidentTools.ts +22 -1
- package/Server/Utils/AI/Toolbox/SloTools.ts +416 -51
- package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +151 -13
- package/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.ts +17 -4
- package/Server/Utils/Dashboard/PublicDashboardSloWidget.ts +155 -8
- package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +16 -0
- package/Server/Utils/Database/RelationValueUtil.ts +106 -0
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +6 -1
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +22 -27
- package/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.ts +3 -1
- package/Server/Utils/Monitor/MonitorStepsProjectValidator.ts +50 -20
- package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +13 -1
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +6 -11
- package/Server/Utils/Rules/MonitorRulePatternValidator.ts +51 -0
- package/Server/Utils/Rules/OwnerRuleAssignment.ts +110 -0
- package/Server/Utils/Rules/RuleRun/RuleApplication.ts +81 -0
- package/Server/Utils/Rules/RuleRun/RuleRunPermission.ts +188 -0
- package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +803 -0
- package/Server/Utils/Rules/RuleRun/RuleRunner.ts +341 -0
- package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +3 -2
- package/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.ts +6 -4
- package/Server/Utils/SecurityEvent/{GoogleSecOps → Connectors/GoogleSecOps}/GoogleSecOpsClient.ts +263 -16
- package/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnector.ts +2101 -0
- package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.ts +194 -14
- package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.ts +1 -2
- package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.ts +38 -7
- package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.ts +2 -0
- package/Server/Utils/SecurityEvent/Connectors/Types.ts +242 -2
- package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +1 -1
- package/Server/Utils/SecurityEvent/SecurityEventDedupe.ts +3 -3
- package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.ts +2 -2
- package/Server/Utils/SessionReplay/SessionReplayReadService.ts +217 -56
- package/Server/Utils/Slo/SloFeedUtil.ts +200 -0
- package/Server/Utils/Slo/SloLegacyMonitorLabelAdoption.ts +173 -0
- package/Server/Utils/Slo/SloMetricUtil.ts +327 -0
- package/Server/Utils/Slo/SloOwnerReferenceValidator.ts +208 -0
- package/Server/Utils/Slo/SloRecordReferenceValidator.ts +169 -0
- package/Server/Utils/StatusPage/MonitorRulePatternValidator.ts +6 -43
- package/Server/Utils/StatusPageResource.ts +50 -5
- package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +664 -15
- package/Tests/App/Dashboard/AddWidgetModal.test.tsx +4 -1
- package/Tests/App/Dashboard/AffectedResourcesSlo.test.tsx +307 -0
- package/Tests/App/Dashboard/ArchiveResourceCard.test.tsx +289 -0
- package/Tests/App/Dashboard/AuditLogsTable.test.tsx +598 -0
- package/Tests/App/Dashboard/BillingDefaultPaymentMethod.test.tsx +1046 -0
- package/Tests/App/Dashboard/BillingPaidUsageFlow.test.tsx +3 -0
- package/Tests/App/Dashboard/BillingPaymentMethodForm.test.tsx +201 -7
- package/Tests/App/Dashboard/BooleanSeriesCriteriaFilterText.test.ts +82 -0
- package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +16 -1
- package/Tests/App/Dashboard/ChangeAlertStateAIHeader.test.tsx +116 -8
- package/Tests/App/Dashboard/ChatActivityFeed.test.tsx +168 -1
- package/Tests/App/Dashboard/ConnectionTestModal.test.tsx +1 -1
- package/Tests/App/Dashboard/ConnectorTestReportView.test.tsx +20 -3
- package/Tests/App/Dashboard/CorrelateFilterBuilder.test.tsx +1095 -1
- package/Tests/App/Dashboard/CorrelateFilterChips.test.tsx +910 -0
- package/Tests/App/Dashboard/CorrelateGraph.test.tsx +3747 -25
- package/Tests/App/Dashboard/CorrelateGraphHelpers.test.ts +1085 -0
- package/Tests/App/Dashboard/CorrelateInspector.test.tsx +1534 -0
- package/Tests/App/Dashboard/CorrelateNodeCard.test.tsx +965 -0
- package/Tests/App/Dashboard/CorrelateResultSummary.test.tsx +1525 -0
- package/Tests/App/Dashboard/CorrelationGraph.test.ts +1030 -0
- package/Tests/App/Dashboard/CorrelationGraphLayout.test.ts +526 -0
- package/Tests/App/Dashboard/DeviceDiagnostics.test.tsx +787 -0
- package/Tests/App/Dashboard/DeviceLatencyTrend.test.tsx +278 -0
- package/Tests/App/Dashboard/DiscoveryReviewInventoryRefresh.test.tsx +279 -0
- package/Tests/App/Dashboard/DiscoveryScanEditForm.test.tsx +87 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +443 -8
- package/Tests/App/Dashboard/EntityFilterDropdownArchivedSlos.test.tsx +340 -0
- package/Tests/App/Dashboard/EventOverviewPages.test.tsx +98 -2
- package/Tests/App/Dashboard/ExceptionSegmentedControl.test.tsx +1020 -0
- package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +268 -47
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1114 -76
- package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +124 -2
- package/Tests/App/Dashboard/InvestigationReportView.test.tsx +279 -176
- package/Tests/App/Dashboard/InvestigationRunDetails.test.tsx +1166 -0
- package/Tests/App/Dashboard/InvoicesPayInvoice.test.tsx +437 -0
- package/Tests/App/Dashboard/NetworkDeviceBulkDelete.test.tsx +65 -0
- package/Tests/App/Dashboard/NetworkTopologyLiveView.test.tsx +5 -0
- package/Tests/App/Dashboard/ResourceAuditLogsSideMenus.test.tsx +74 -0
- package/Tests/App/Dashboard/ResourceFeed.test.tsx +125 -5
- package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +8 -1
- package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +1764 -0
- package/Tests/App/Dashboard/SecurityEventConnectionFormModal.test.tsx +1000 -64
- package/Tests/App/Dashboard/SecurityEventConnectionsEmptyState.test.tsx +448 -0
- package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +739 -189
- package/Tests/App/Dashboard/SecurityEventSeverityPill.test.tsx +233 -0
- package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +282 -0
- package/Tests/App/Dashboard/SloActiveBurnEventsCard.test.tsx +538 -0
- package/Tests/App/Dashboard/SloBulkActionsArchive.test.tsx +252 -0
- package/Tests/App/Dashboard/SloDashboardTemplateWidgets.test.tsx +322 -518
- package/Tests/App/Dashboard/SloElement.test.tsx +194 -0
- package/Tests/App/Dashboard/SloFeed.test.tsx +289 -0
- package/Tests/App/Dashboard/SloHistoryCharts.test.tsx +471 -0
- package/Tests/App/Dashboard/SloHistorySeries.test.tsx +607 -0
- package/Tests/App/Dashboard/SloListWidget.test.tsx +783 -0
- package/Tests/App/Dashboard/SloMetricsPage.test.tsx +346 -0
- package/Tests/App/Dashboard/SloMonitorsPage.test.tsx +661 -0
- package/Tests/App/Dashboard/SloMonitorsSummaryCard.test.tsx +489 -0
- package/Tests/App/Dashboard/SloNavigationWiring.test.tsx +437 -0
- package/Tests/App/Dashboard/SloNoticeBanner.test.tsx +305 -0
- package/Tests/App/Dashboard/SloOverviewData.test.tsx +563 -0
- package/Tests/App/Dashboard/SloOverviewHero.test.tsx +311 -0
- package/Tests/App/Dashboard/SloOverviewKpiStrip.test.tsx +426 -0
- package/Tests/App/Dashboard/SloOverviewSidebarCards.test.tsx +493 -0
- package/Tests/App/Dashboard/SloSettings.test.tsx +633 -0
- package/Tests/App/Dashboard/SloStatusSummaryCards.test.tsx +403 -0
- package/Tests/App/Dashboard/SloViewSideMenuCounts.test.tsx +373 -0
- package/Tests/App/Dashboard/SloWidgetVariableBinding.test.tsx +689 -0
- package/Tests/App/Dashboard/TopologyConnectivitySection.test.tsx +206 -0
- package/Tests/App/Dashboard/TracesEntityNames.test.tsx +47 -15
- package/Tests/App/Dashboard/UseBulkShortenDeviceNames.test.tsx +1312 -0
- package/Tests/App/Dashboard/WidgetCatalog.test.ts +9 -1
- package/Tests/Models/AnalyticsModels/RumSessionReplayColumns.test.ts +14 -16
- package/Tests/Models/DatabaseModels/AuditLogModelConfiguration.test.ts +442 -0
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +9 -10
- package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +48 -1
- package/Tests/Models/DatabaseModels/SloOverhaulModels.test.ts +835 -0
- package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +3 -2
- package/Tests/Models/DiscoveryScanNetbiosLookupColumn.test.ts +328 -0
- package/Tests/Models/DiscoveryScanShortDeviceNamesColumn.test.ts +335 -0
- package/Tests/Models/NetworkDeviceDiagnosticContract.test.ts +194 -0
- package/Tests/Models/NetworkDeviceDnsNameColumn.test.ts +321 -0
- package/Tests/Models/ProjectDataResidencyColumn.test.ts +154 -0
- package/Tests/Models/SecurityDomainAccessControl.test.ts +181 -50
- package/Tests/Server/API/BaseAPI.test.ts +6 -0
- package/Tests/Server/API/BaseAPIUpdateMiscDataProps.test.ts +217 -0
- package/Tests/Server/API/BillingInvoiceAPI.test.ts +7 -0
- package/Tests/Server/API/BillingInvoiceAPIPaymentStates.test.ts +990 -0
- package/Tests/Server/API/BillingPaymentMethodAPI.test.ts +498 -0
- package/Tests/Server/API/DashboardPublicSloAPI.test.ts +405 -0
- package/Tests/Server/API/SecurityEventConnectionAPI.test.ts +901 -7
- package/Tests/Server/API/SessionReplayAPI.test.ts +116 -0
- package/Tests/Server/API/StatusPageManageSubscriptionRecipient.test.ts +857 -0
- package/Tests/Server/API/StatusPageManageSubscriptionTemplateVariables.test.ts +1084 -0
- package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +33 -3
- package/Tests/Server/Infrastructure/Postgres/AddDataResidencyToProjectMigration.test.ts +202 -0
- package/Tests/Server/Infrastructure/Postgres/AddNetbiosLookupToNetworkDeviceDiscoveryScanMigration.test.ts +330 -0
- package/Tests/Server/Infrastructure/Postgres/AddNetworkDeviceDnsNameAndShortDeviceNamesMigration.test.ts +340 -0
- package/Tests/Server/Infrastructure/Postgres/BackfillSloMonitorRulesAndAffectedResourcesMigration.test.ts +343 -0
- package/Tests/Server/Infrastructure/Postgres/SloProductOverhaulMigration.test.ts +801 -0
- package/Tests/Server/Services/AddSubscriberUpdateNotificationStatusMigration.test.ts +307 -0
- package/Tests/Server/Services/AuditLogService.test.ts +1124 -0
- package/Tests/Server/Services/AutoImportScanCredentialSelect.test.ts +200 -1
- package/Tests/Server/Services/BillingInvoiceServiceMutexRelease.test.ts +254 -0
- package/Tests/Server/Services/BillingService.test.ts +70 -0
- package/Tests/Server/Services/BillingServicePayInvoiceStates.test.ts +723 -0
- package/Tests/Server/Services/BillingServicePaymentMethodReads.test.ts +14 -2
- package/Tests/Server/Services/BillingServiceSubscriptionPaymentMethodSync.test.ts +1634 -0
- package/Tests/Server/Services/DatabaseServiceAuditRelationDiff.test.ts +492 -0
- package/Tests/Server/Services/DatabaseServicePasswordFieldSecrets.test.ts +629 -0
- package/Tests/Server/Services/IncidentAlertSloLinkSurvivesEdit.test.ts +431 -0
- package/Tests/Server/Services/IncidentAlertSloReferenceGuard.test.ts +358 -0
- package/Tests/Server/Services/MonitorProbeServicePastDueMonitoring.test.ts +362 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +1460 -1
- package/Tests/Server/Services/NetworkDeviceDiagnosticService.test.ts +962 -0
- package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +106 -0
- package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +10 -1
- package/Tests/Server/Services/NetworkDeviceServicePastDueMonitoring.test.ts +335 -0
- package/Tests/Server/Services/NetworkDeviceSiteRuleDnsName.test.ts +568 -0
- package/Tests/Server/Services/ProjectDataResidencyPostgres.test.ts +344 -0
- package/Tests/Server/Services/ProjectServiceAuditLogSettingsCache.test.ts +187 -0
- package/Tests/Server/Services/ProjectServiceDataResidency.test.ts +369 -0
- package/Tests/Server/Services/ProjectServiceDataResidencySelfHosted.test.ts +176 -0
- package/Tests/Server/Services/ProjectServicePastDueMonitoring.test.ts +289 -0
- package/Tests/Server/Services/ResourceFeedServices.test.ts +24 -8
- package/Tests/Server/Services/RuleRun/IncidentAlertMaintenanceRuleEnginesRun.test.ts +1396 -0
- package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupARun.test.ts +917 -0
- package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +1262 -0
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupARun.test.ts +902 -0
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +1163 -0
- package/Tests/Server/Services/RuleRun/PrivacyRuleEnginesRun.test.ts +843 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberTemplateFormats.test.ts +465 -0
- package/Tests/Server/Services/SecurityEventConnectionService.test.ts +525 -4
- package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +77 -23
- package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleFeedWrites.test.ts +777 -0
- package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleOptions.test.ts +1399 -0
- package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleService.test.ts +67 -74
- package/Tests/Server/Services/ServiceLevelObjectiveChildRowTenancy.test.ts +906 -0
- package/Tests/Server/Services/ServiceLevelObjectiveDeleteTenancy.test.ts +1029 -0
- package/Tests/Server/Services/ServiceLevelObjectiveFeedService.test.ts +313 -0
- package/Tests/Server/Services/ServiceLevelObjectiveFeedWrites.test.ts +1214 -0
- package/Tests/Server/Services/ServiceLevelObjectiveMarkdownLink.test.ts +289 -0
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.test.ts +1455 -430
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleLegacyLabelAdoption.test.ts +634 -0
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleService.test.ts +1193 -0
- package/Tests/Server/Services/{SloMonitorLabelRuleHooks.test.ts → ServiceLevelObjectiveMonitorRuleTriggers.test.ts} +135 -41
- package/Tests/Server/Services/ServiceLevelObjectiveOwnerFeedWrites.test.ts +671 -0
- package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +180 -85
- package/Tests/Server/Services/ServiceLevelObjectiveServiceArchive.test.ts +537 -0
- package/Tests/Server/Services/ServiceLevelObjectiveServiceLegacyMonitorLabelWrite.test.ts +870 -0
- package/Tests/Server/Services/ServiceLevelObjectiveServiceMonitorRuleGuard.test.ts +343 -0
- package/Tests/Server/Services/ServiceLevelObjectiveServiceReEvaluation.test.ts +246 -0
- package/Tests/Server/Services/SloAffectedResourceCreatedFeed.test.ts +501 -0
- package/Tests/Server/Services/SloAffectedResourceLinkContract.test.ts +86 -0
- package/Tests/Server/Services/SloAffectedResourceMetricAttributes.test.ts +547 -0
- package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +10 -4
- package/Tests/Server/Services/StatusPageMonitorRuleHooks.test.ts +7 -2
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateCompile.test.ts +174 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateServiceVariables.test.ts +40 -0
- package/Tests/Server/Services/SubscriberUpdateNotificationHooks.test.ts +541 -0
- package/Tests/Server/Services/TelemetryUsageBillingSloExclusion.test.ts +288 -0
- package/Tests/Server/TestingUtils/PastDueMonitoringClaimSql.ts +177 -0
- package/Tests/Server/TestingUtils/Services/BillingServiceHelper.ts +51 -10
- package/Tests/Server/TestingUtils/__mocks__/Stripe.mock.ts +16 -1
- package/Tests/Server/Types/Database/Permissions/ProjectDataResidencyColumn.test.ts +386 -0
- package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +26 -36
- package/Tests/Server/Utils/AI/SloAffectedResourceAIContext.test.ts +445 -0
- package/Tests/Server/Utils/AI/SloTools.test.ts +423 -1
- package/Tests/Server/Utils/AI/SloToolsArchive.test.ts +294 -0
- package/Tests/Server/Utils/AI/SloToolsRuleReadPermissions.test.ts +297 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.test.ts +255 -10
- package/Tests/Server/Utils/Dashboard/SloTemplatePublicDashboard.test.ts +404 -750
- package/Tests/Server/Utils/Database/ProjectScopedReferenceValidator.test.ts +45 -0
- package/Tests/Server/Utils/Database/RelationValueUtil.test.ts +157 -0
- package/Tests/Server/Utils/Monitor/Criteria/BooleanSeriesEvaluateOverTime.test.ts +260 -0
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +181 -0
- package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +147 -30
- package/Tests/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.test.ts +17 -0
- package/Tests/Server/Utils/Monitor/MonitorStepsProjectValidator.test.ts +136 -0
- package/Tests/Server/Utils/Monitor/MonitorStepsProjectValidatorLoadOrder.test.ts +472 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +48 -2
- package/Tests/Server/Utils/Monitor/SloTemplateMetricEmitterContract.test.ts +435 -475
- package/Tests/Server/Utils/Rules/MonitorRulePatternValidator.test.ts +77 -0
- package/Tests/Server/Utils/Rules/OwnerRuleAssignment.test.ts +177 -0
- package/Tests/Server/Utils/Rules/RuleRun/RuleRunPermission.test.ts +365 -0
- package/Tests/Server/Utils/Rules/RuleRun/RuleRunRegistry.test.ts +173 -0
- package/Tests/Server/Utils/Rules/RuleRun/RuleRunner.test.ts +675 -0
- package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +8 -8
- package/Tests/Server/Utils/SecurityEvent/Connectors/ConnectorFetchSummary.test.ts +261 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.test.ts +68 -13
- package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsAuth.test.ts → Connectors/GoogleSecOps/GoogleSecOpsAuth.test.ts} +5 -5
- package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsClient.test.ts → Connectors/GoogleSecOps/GoogleSecOpsClient.test.ts} +4 -4
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnector.test.ts +483 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorCuratedAndLateAlerts.test.ts +676 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorFetchEvents.test.ts +1994 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorFixtures.ts +332 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorHttpIntegration.test.ts +680 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorRequestContract.test.ts +1206 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorTestConnection.test.ts +1136 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsCuratedRuleCounts.test.ts +407 -0
- package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsErrorHandling.test.ts → Connectors/GoogleSecOps/GoogleSecOpsErrorHandling.test.ts} +5 -5
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingAdaptiveCatchUp.test.ts +730 -0
- package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsClickhouseIntegration.test.ts → Connectors/GoogleSecOps/GoogleSecOpsPollingClickhouseIntegration.test.ts} +130 -35
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingFailureTaxonomy.test.ts +772 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingFixtures.ts +648 -0
- package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsHttpIntegration.test.ts → Connectors/GoogleSecOps/GoogleSecOpsPollingHttpIntegration.test.ts} +230 -225
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingIntegration.test.ts +1390 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingLoop.test.ts +981 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingNothingImportedRegression.test.ts +290 -0
- package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsRequestContract.test.ts → Connectors/GoogleSecOps/GoogleSecOpsRequestContract.test.ts} +2 -2
- package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsResponseParsing.test.ts → Connectors/GoogleSecOps/GoogleSecOpsResponseParsing.test.ts} +5 -5
- package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsSearchDetections.test.ts → Connectors/GoogleSecOps/GoogleSecOpsSearchDetections.test.ts} +38 -5
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsTesterIntegration.test.ts +421 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.test.ts +1445 -3
- package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.test.ts +14 -4
- package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.test.ts +313 -4
- package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +352 -0
- package/Tests/Server/Utils/Slo/SloFeedUtil.test.ts +326 -0
- package/Tests/Server/Utils/Slo/SloLegacyMonitorLabelAdoption.test.ts +260 -0
- package/Tests/Server/Utils/Slo/SloMetricUtil.test.ts +592 -0
- package/Tests/Server/Utils/Slo/SloRecordReferenceValidator.test.ts +311 -0
- package/Tests/Server/Utils/StatusPageResource.test.ts +91 -3
- package/Tests/Types/Billing/SubscriptionStatus.test.ts +176 -0
- package/Tests/Types/Billing/SubscriptionStatusPastDueMonitoring.test.ts +187 -0
- package/Tests/Types/Dashboard/DashboardTemplateInvariants.test.ts +53 -7
- package/Tests/Types/Dashboard/SloDashboardTemplate.test.ts +816 -792
- package/Tests/Types/Monitor/CriteriaFilter.test.ts +216 -24
- package/Tests/Types/Monitor/MonitorStepDnssecMonitor.test.ts +14 -1
- package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +14 -1
- package/Tests/Types/Monitor/MonitorStepExternalStatusPageMonitor.test.ts +14 -1
- package/Tests/Types/Monitor/MonitorStepRetriesParsing.test.ts +201 -0
- package/Tests/Types/Rules/RuleRun.test.ts +315 -0
- package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +60 -0
- package/Tests/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.test.ts +29 -4
- package/Tests/Types/StatusPage/SubscriberNotificationTemplateVariables.test.ts +217 -0
- package/Tests/Types/StatusPage/SubscriberUpdateNotification.test.ts +200 -0
- package/Tests/UI/Components/ActiveFilterChipsLockedFilters.test.tsx +141 -87
- package/Tests/UI/Components/AlertBanner.test.tsx +319 -0
- package/Tests/UI/Components/BulkArchiveActionsCopy.test.tsx +310 -0
- package/Tests/UI/Components/Detail/DetailIdIsUnique.test.tsx +87 -0
- package/Tests/UI/Components/Dropdown/DropdownClearable.test.tsx +393 -0
- package/Tests/UI/Components/Dropdown/DropdownMultiSelectChipAccessibleName.test.tsx +64 -0
- package/Tests/UI/Components/EmptyState/EmptyState.test.tsx +335 -4
- package/Tests/UI/Components/EmptyState/EmptyStateGuideLinks.test.tsx +337 -0
- package/Tests/UI/Components/Forms/ModelFormJsonColumns.test.tsx +21 -20
- package/Tests/UI/Components/LabelRuleImportExport.test.tsx +15 -2
- package/Tests/UI/Components/LockedFilterChip.test.tsx +281 -144
- package/Tests/UI/Components/MoreMenu.test.tsx +133 -0
- package/Tests/UI/Components/MoreMenuMotion.test.tsx +84 -3
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
- package/Tests/UI/Components/RuleRun/RuleDetailFields.test.tsx +336 -0
- package/Tests/UI/Components/RuleRun/RuleTable.test.tsx +304 -0
- package/Tests/UI/Components/RuleRun/RunRuleNowModal.test.tsx +231 -0
- package/Tests/UI/Components/RuleRun/RunRulesBulkAction.test.ts +213 -0
- package/Tests/UI/Components/TelemetryActiveFilterChipsLockedFilters.test.tsx +124 -61
- package/Tests/UI/Rum/ReplayEngine.test.ts +154 -0
- package/Tests/UI/Rum/ReplayHeader.test.tsx +234 -123
- package/Tests/UI/Rum/ReplayPinControl.test.tsx +122 -0
- package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +245 -0
- package/Tests/UI/Rum/ReplayRail.test.tsx +294 -0
- package/Tests/UI/Rum/ReplayScrubber.test.tsx +213 -1
- package/Tests/UI/Rum/ReplayStage.test.tsx +565 -172
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +260 -3
- package/Tests/UI/Rum/ReplayTabSwitcher.test.tsx +1391 -0
- package/Tests/UI/Rum/ReplayTimeline.test.tsx +222 -0
- package/Tests/UI/Utils/DashboardStackingLayers.test.ts +8 -1
- package/Tests/UI/Utils/RuleRunClient.test.ts +303 -0
- package/Tests/UI/Utils/Telemetry/TelemetryEntityNames.test.ts +1 -0
- package/Tests/Utils/Dashboard/Components/DashboardComponentDefaults.test.ts +2 -0
- package/Tests/Utils/Dashboard/Components/DashboardSloListComponent.test.ts +206 -0
- package/Tests/Utils/Dashboard/DashboardSloComponent.test.ts +36 -2
- package/Tests/Utils/Dashboard/SloTemplateVariableScoping.test.ts +409 -588
- package/Tests/Utils/Dashboard/SloWidgetSource.test.ts +351 -0
- package/Tests/Utils/Markdown/MarkdownEscape.test.ts +361 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +1425 -118
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +188 -3
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +661 -13
- package/Tests/Utils/NetworkDiscovery/NetbiosNameUtil.test.ts +349 -0
- package/Tests/Utils/NetworkDiscovery/RunImportedDeviceNaming.test.ts +656 -0
- package/Tests/Utils/NetworkDiscovery/ShortDeviceNamePlanner.test.ts +1020 -0
- package/Tests/Utils/NetworkDiscovery/ShortHostnameUtil.test.ts +619 -0
- package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +317 -0
- package/Tests/Utils/Project/DataResidency.test.ts +198 -0
- package/Tests/Utils/Rules/RuleRunSummary.test.ts +394 -0
- package/Tests/Utils/Slo/SloAffectedResourceMarkdown.test.ts +302 -0
- package/Tests/Utils/Slo/SloBurnRateTemplate.test.ts +468 -0
- package/Tests/Utils/Slo/SloEvaluation.test.ts +20 -4
- package/Tests/Utils/Slo/SloFeedMarkdown.test.ts +1185 -0
- package/Tests/Utils/Slo/SloHealth.test.ts +262 -0
- package/Tests/Utils/Slo/SloHistoryMetricName.test.ts +102 -0
- package/Tests/Utils/Slo/SloListWidgetFormat.test.ts +522 -0
- package/Tests/Utils/Slo/SloMetricType.test.ts +355 -0
- package/Tests/Utils/Slo/SloMonitorRuleCriteria.test.ts +387 -0
- package/Tests/Utils/Slo/SloMonitorStatusSummary.test.ts +210 -0
- package/Tests/Utils/Slo/SloOverviewText.test.ts +226 -0
- package/Tests/Utils/Slo/SloProjection.test.ts +1039 -0
- package/Tests/Utils/Slo/SloWidgetFormat.test.ts +47 -0
- package/Tests/Utils/Telemetry/LockedFilterSearch.test.ts +1 -80
- package/Types/BaseDatabase/EnableAuditLogOn.ts +41 -0
- package/Types/Billing/SubscriptionStatus.ts +39 -4
- package/Types/Dashboard/DashboardComponentType.ts +1 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +5 -0
- package/Types/Dashboard/DashboardComponents/DashboardSloComponent.ts +10 -0
- package/Types/Dashboard/DashboardComponents/DashboardSloListComponent.ts +29 -0
- package/Types/Dashboard/DashboardTemplates.ts +290 -297
- package/Types/Database/EnableAuditLog.ts +23 -1
- package/Types/Email/EmailTemplateType.ts +4 -0
- package/Types/Monitor/CriteriaFilter.ts +55 -8
- package/Types/Monitor/MonitorStep.ts +5 -2
- package/Types/Monitor/MonitorStepDnsMonitor.ts +3 -1
- package/Types/Monitor/MonitorStepDnssecMonitor.ts +3 -1
- package/Types/Monitor/MonitorStepDomainMonitor.ts +3 -1
- package/Types/Monitor/MonitorStepExternalStatusPageMonitor.ts +3 -1
- package/Types/Monitor/MonitorStepRetries.ts +59 -0
- package/Types/Monitor/MonitorStepSnmpMonitor.ts +9 -2
- package/Types/NetworkDevice/NetworkDeviceDiagnosticResult.ts +104 -0
- package/Types/NetworkDevice/NetworkDeviceDiagnosticStatus.ts +47 -0
- package/Types/NetworkDevice/NetworkDeviceDiagnosticType.ts +47 -0
- package/Types/NetworkDevice/NetworkDevicePingMetricNames.ts +20 -0
- package/Types/Permission.ts +127 -0
- package/Types/Rules/RuleCriteriaFieldRegistry.ts +5 -0
- package/Types/Rules/RuleRun.ts +518 -0
- package/Types/Rum/SessionReplayApi.ts +18 -0
- package/Types/SecurityEvent/Connectors/ConnectorDiagnostics.ts +6 -0
- package/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.ts +30 -4
- package/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.ts +108 -1
- package/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.ts +6 -2
- package/Types/ServiceLevelObjective/SloHistoryMetricName.ts +25 -0
- package/Types/ServiceLevelObjective/SloMetricType.ts +49 -0
- package/Types/StatusPage/StatusPageSubscriberNotificationEventType.ts +4 -0
- package/Types/StatusPage/SubscriberNotificationTemplateVariables.ts +331 -0
- package/Types/StatusPage/SubscriberNotificationTrigger.ts +12 -0
- package/Types/StatusPage/SubscriberUpdateNotification.ts +89 -0
- package/Types/Telemetry/LockedFilterDetail.ts +7 -28
- package/Types/Telemetry/ServiceType.ts +7 -0
- package/Typings/Index.d.ts +53 -3
- package/UI/Components/AlertBanner/AlertBanner.tsx +85 -27
- package/UI/Components/BulkUpdate/BulkArchiveActions.tsx +21 -2
- package/UI/Components/Detail/Detail.tsx +9 -2
- package/UI/Components/Dropdown/Dropdown.tsx +64 -1
- package/UI/Components/EmptyState/EmptyState.tsx +27 -3
- package/UI/Components/EmptyState/EmptyStateGuideLinks.tsx +124 -0
- package/UI/Components/Forms/ModelForm.tsx +6 -5
- package/UI/Components/LabelRule/LabelRuleTable.tsx +8 -2
- package/UI/Components/LogsViewer/LogsViewer.tsx +2 -6
- package/UI/Components/LogsViewer/components/ActiveFilterChips.tsx +2 -13
- package/UI/Components/LogsViewer/types.ts +2 -2
- package/UI/Components/MoreMenu/MoreMenu.tsx +14 -3
- package/UI/Components/RuleRun/RuleDetailFields.tsx +359 -0
- package/UI/Components/RuleRun/RuleTable.tsx +183 -0
- package/UI/Components/RuleRun/RuleView.tsx +170 -0
- package/UI/Components/RuleRun/RunRuleNowModal.tsx +147 -0
- package/UI/Components/RuleRun/RunRulesBulkAction.ts +103 -0
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +2 -6
- package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +38 -104
- package/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.tsx +2 -18
- package/UI/Components/TelemetryViewer/types.ts +2 -2
- package/UI/Utils/Rules/RuleRunClient.ts +178 -0
- package/UI/Utils/Telemetry/TelemetryEntityNames.ts +8 -0
- package/Utils/Dashboard/Components/DashboardSloComponent.ts +19 -2
- package/Utils/Dashboard/Components/DashboardSloListComponent.ts +126 -0
- package/Utils/Dashboard/Components/Index.ts +7 -0
- package/Utils/Dashboard/SloWidgetSource.ts +188 -0
- package/Utils/Markdown/MarkdownEscape.ts +63 -0
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +161 -36
- package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +25 -0
- package/Utils/NetworkDiscovery/NetbiosNameUtil.ts +146 -0
- package/Utils/NetworkDiscovery/RunImportedDeviceNaming.ts +390 -0
- package/Utils/NetworkDiscovery/ShortDeviceNamePlanner.ts +291 -0
- package/Utils/NetworkDiscovery/ShortHostnameUtil.ts +91 -0
- package/Utils/NetworkSite/CidrMatchUtil.ts +37 -12
- package/Utils/Project/DataResidency.ts +63 -0
- package/Utils/Rules/RuleRunSummary.ts +323 -0
- package/Utils/Slo/SloAffectedResourceMarkdown.ts +123 -0
- package/Utils/Slo/SloBurnRateTemplate.ts +373 -0
- package/Utils/Slo/SloFeedMarkdown.ts +1507 -0
- package/Utils/Slo/SloHealth.ts +96 -9
- package/Utils/Slo/SloListWidgetFormat.ts +370 -0
- package/Utils/Slo/SloMetricType.ts +237 -0
- package/Utils/Slo/SloMonitorRuleCriteria.ts +364 -0
- package/Utils/Slo/SloMonitorStatusSummary.ts +210 -0
- package/Utils/Slo/SloOverviewText.ts +265 -0
- package/Utils/Slo/SloProjection.ts +967 -0
- package/Utils/Slo/SloWidgetFormat.ts +12 -2
- package/Utils/Telemetry/LockedFilterSearch.ts +3 -49
- package/build/dist/Models/AnalyticsModels/AuditLog.js +70 -1
- package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js +4 -4
- package/build/dist/Models/DatabaseModels/Alert.js +60 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +64 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +75 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +75 -0
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +6 -4
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +68 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiagnostic.js +772 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiagnostic.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +140 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +42 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +75 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/SecurityEventConnection.js +11 -11
- package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js +192 -10
- package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js +798 -96
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js +596 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js +590 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js +16 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js +16 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +75 -0
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +1 -1
- package/build/dist/Server/API/BaseAPI.js +14 -0
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/BillingInvoiceAPI.js +233 -19
- package/build/dist/Server/API/BillingInvoiceAPI.js.map +1 -1
- package/build/dist/Server/API/BillingPaymentMethodAPI.js +86 -5
- package/build/dist/Server/API/BillingPaymentMethodAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +72 -2
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/SecurityEventConnectionAPI.js +102 -10
- package/build/dist/Server/API/SecurityEventConnectionAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +236 -154
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792800000000-AddNetworkDeviceDiagnostic.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792800000000-AddNetworkDeviceDiagnostic.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792900000000-AddNetworkDeviceDnsNameAndShortDeviceNames.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792900000000-AddNetworkDeviceDnsNameAndShortDeviceNames.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793000000000-AddNetbiosLookupToNetworkDeviceDiscoveryScan.js +21 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793000000000-AddNetbiosLookupToNetworkDeviceDiscoveryScan.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793100000000-SloProductOverhaul.js +207 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793100000000-SloProductOverhaul.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793200000000-BackfillSloMonitorRulesAndAffectedResources.js +72 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793200000000-BackfillSloMonitorRulesAndAffectedResources.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793300000000-AddDataResidencyToProject.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793300000000-AddDataResidencyToProject.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793400000000-AddSubscriberUpdateNotificationStatus.js +46 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793400000000-AddSubscriberUpdateNotificationStatus.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +112 -56
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +167 -68
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +87 -26
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +270 -203
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +498 -354
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +97 -34
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +91 -8
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AuditLogService.js +408 -44
- package/build/dist/Server/Services/AuditLogService.js.map +1 -1
- package/build/dist/Server/Services/BillingInvoiceService.js +94 -85
- package/build/dist/Server/Services/BillingInvoiceService.js.map +1 -1
- package/build/dist/Server/Services/BillingService.js +406 -14
- package/build/dist/Server/Services/BillingService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +141 -92
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +189 -101
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +135 -86
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +189 -100
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +117 -69
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +171 -83
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +125 -18
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +141 -92
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +189 -101
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +145 -91
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +191 -101
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js +141 -92
- package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +190 -102
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +112 -56
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +220 -63
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +87 -26
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +24 -0
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +258 -192
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +519 -376
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +95 -32
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js +24 -0
- package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +90 -5
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +113 -65
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +171 -83
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +6 -4
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +117 -69
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +171 -83
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +145 -91
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +191 -101
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/LabelService.js +20 -25
- package/build/dist/Server/Services/LabelService.js.map +1 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +123 -77
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +167 -82
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorProbeService.js +18 -2
- package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +11 -9
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +287 -5
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceDiagnosticService.js +333 -0
- package/build/dist/Server/Services/NetworkDeviceDiagnosticService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +117 -69
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +171 -83
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +36 -2
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +117 -64
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +173 -83
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +116 -65
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +171 -83
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +141 -92
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +189 -101
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +82 -10
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +141 -92
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +189 -101
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +111 -63
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +161 -77
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +117 -69
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +171 -83
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +280 -209
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +521 -376
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +24 -0
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +24 -8
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/SecurityEventConnectionService.js +43 -3
- package/build/dist/Server/Services/SecurityEventConnectionService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +115 -62
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +163 -77
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +141 -92
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js +769 -18
- package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveFeedService.js +96 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveFeedService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js +614 -87
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js +844 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js +207 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js +221 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js +997 -50
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +191 -102
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageAnnouncementService.js +12 -0
- package/build/dist/Server/Services/StatusPageAnnouncementService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +118 -70
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +158 -76
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +19 -215
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +6 -0
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +27 -5
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/ThreatIntelFeedService.js +1 -1
- package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js +141 -92
- package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js +189 -101
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +117 -69
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +171 -83
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Utils/AI/AlertAIContextBuilder.js +17 -0
- package/build/dist/Server/Utils/AI/AlertAIContextBuilder.js.map +1 -1
- package/build/dist/Server/Utils/AI/IncidentAIContextBuilder.js +31 -0
- package/build/dist/Server/Utils/AI/IncidentAIContextBuilder.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +24 -1
- package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js +21 -1
- package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +337 -53
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -1
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +108 -15
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.js +2 -2
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.js.map +1 -1
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloWidget.js +115 -6
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloWidget.js.map +1 -1
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +13 -0
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
- package/build/dist/Server/Utils/Database/RelationValueUtil.js +82 -0
- package/build/dist/Server/Utils/Database/RelationValueUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +10 -6
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +17 -21
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js +5 -4
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js +50 -10
- package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +13 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +6 -10
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Rules/MonitorRulePatternValidator.js +34 -0
- package/build/dist/Server/Utils/Rules/MonitorRulePatternValidator.js.map +1 -0
- package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js +69 -0
- package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js.map +1 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleApplication.js +25 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleApplication.js.map +1 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunPermission.js +128 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunPermission.js.map +1 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +746 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunner.js +221 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunner.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +3 -2
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.js +6 -4
- package/build/dist/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/{GoogleSecOps → Connectors/GoogleSecOps}/GoogleSecOpsClient.js +174 -14
- package/build/dist/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnector.js +1417 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.js +138 -18
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.js +1 -2
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.js +23 -18
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.js +2 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Types.js +95 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Types.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +1 -1
- package/build/dist/Server/Utils/SecurityEvent/SecurityEventDedupe.js +3 -3
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js +2 -2
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +118 -40
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
- package/build/dist/Server/Utils/Slo/SloFeedUtil.js +150 -0
- package/build/dist/Server/Utils/Slo/SloFeedUtil.js.map +1 -0
- package/build/dist/Server/Utils/Slo/SloLegacyMonitorLabelAdoption.js +136 -0
- package/build/dist/Server/Utils/Slo/SloLegacyMonitorLabelAdoption.js.map +1 -0
- package/build/dist/Server/Utils/Slo/SloMetricUtil.js +269 -0
- package/build/dist/Server/Utils/Slo/SloMetricUtil.js.map +1 -0
- package/build/dist/Server/Utils/Slo/SloOwnerReferenceValidator.js +134 -0
- package/build/dist/Server/Utils/Slo/SloOwnerReferenceValidator.js.map +1 -0
- package/build/dist/Server/Utils/Slo/SloRecordReferenceValidator.js +137 -0
- package/build/dist/Server/Utils/Slo/SloRecordReferenceValidator.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/MonitorRulePatternValidator.js +6 -26
- package/build/dist/Server/Utils/StatusPage/MonitorRulePatternValidator.js.map +1 -1
- package/build/dist/Server/Utils/StatusPageResource.js +31 -5
- package/build/dist/Server/Utils/StatusPageResource.js.map +1 -1
- package/build/dist/Types/Billing/SubscriptionStatus.js +37 -3
- package/build/dist/Types/Billing/SubscriptionStatus.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponentType.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +5 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js +275 -286
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/Database/EnableAuditLog.js +19 -1
- package/build/dist/Types/Database/EnableAuditLog.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +4 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +45 -6
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +2 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDnsMonitor.js +3 -1
- package/build/dist/Types/Monitor/MonitorStepDnsMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDnssecMonitor.js +3 -1
- package/build/dist/Types/Monitor/MonitorStepDnssecMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js +3 -1
- package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepExternalStatusPageMonitor.js +3 -1
- package/build/dist/Types/Monitor/MonitorStepExternalStatusPageMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepRetries.js +47 -0
- package/build/dist/Types/Monitor/MonitorStepRetries.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStepSnmpMonitor.js +3 -1
- package/build/dist/Types/Monitor/MonitorStepSnmpMonitor.js.map +1 -1
- package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticResult.js +29 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticResult.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticStatus.js +37 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticStatus.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticType.js +42 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticType.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDevicePingMetricNames.js +20 -0
- package/build/dist/Types/NetworkDevice/NetworkDevicePingMetricNames.js.map +1 -0
- package/build/dist/Types/Permission.js +114 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +5 -0
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
- package/build/dist/Types/Rules/RuleRun.js +267 -0
- package/build/dist/Types/Rules/RuleRun.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -1
- package/build/dist/Types/SecurityEvent/Connectors/ConnectorDiagnostics.js.map +1 -1
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.js +16 -1
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.js.map +1 -1
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js +65 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js.map +1 -1
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.js +6 -2
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.js.map +1 -1
- package/build/dist/Types/ServiceLevelObjective/SloHistoryMetricName.js +26 -0
- package/build/dist/Types/ServiceLevelObjective/SloHistoryMetricName.js.map +1 -0
- package/build/dist/Types/ServiceLevelObjective/SloMetricType.js +45 -0
- package/build/dist/Types/ServiceLevelObjective/SloMetricType.js.map +1 -0
- package/build/dist/Types/StatusPage/StatusPageSubscriberNotificationEventType.js +4 -0
- package/build/dist/Types/StatusPage/StatusPageSubscriberNotificationEventType.js.map +1 -1
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js +295 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTrigger.js +13 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTrigger.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberUpdateNotification.js +67 -0
- package/build/dist/Types/StatusPage/SubscriberUpdateNotification.js.map +1 -0
- package/build/dist/Types/Telemetry/LockedFilterDetail.js +7 -7
- package/build/dist/Types/Telemetry/ServiceType.js +7 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/UI/Components/AlertBanner/AlertBanner.js +48 -19
- package/build/dist/UI/Components/AlertBanner/AlertBanner.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkArchiveActions.js +10 -2
- package/build/dist/UI/Components/BulkUpdate/BulkArchiveActions.js.map +1 -1
- package/build/dist/UI/Components/Detail/Detail.js +12 -3
- package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js +33 -5
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/EmptyState/EmptyState.js +3 -3
- package/build/dist/UI/Components/EmptyState/EmptyState.js.map +1 -1
- package/build/dist/UI/Components/EmptyState/EmptyStateGuideLinks.js +47 -0
- package/build/dist/UI/Components/EmptyState/EmptyStateGuideLinks.js.map +1 -0
- package/build/dist/UI/Components/Forms/ModelForm.js +6 -5
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/LabelRule/LabelRuleTable.js +6 -2
- package/build/dist/UI/Components/LabelRule/LabelRuleTable.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js +0 -2
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +3 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/RuleRun/RuleDetailFields.js +226 -0
- package/build/dist/UI/Components/RuleRun/RuleDetailFields.js.map +1 -0
- package/build/dist/UI/Components/RuleRun/RuleTable.js +97 -0
- package/build/dist/UI/Components/RuleRun/RuleTable.js.map +1 -0
- package/build/dist/UI/Components/RuleRun/RuleView.js +83 -0
- package/build/dist/UI/Components/RuleRun/RuleView.js.map +1 -0
- package/build/dist/UI/Components/RuleRun/RunRuleNowModal.js +74 -0
- package/build/dist/UI/Components/RuleRun/RunRuleNowModal.js.map +1 -0
- package/build/dist/UI/Components/RuleRun/RunRulesBulkAction.js +78 -0
- package/build/dist/UI/Components/RuleRun/RunRulesBulkAction.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +24 -50
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js +0 -4
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js.map +1 -1
- package/build/dist/UI/Utils/Rules/RuleRunClient.js +98 -0
- package/build/dist/UI/Utils/Rules/RuleRunClient.js.map +1 -0
- package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js +8 -0
- package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js +16 -2
- package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardSloListComponent.js +94 -0
- package/build/dist/Utils/Dashboard/Components/DashboardSloListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +4 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/Dashboard/SloWidgetSource.js +125 -0
- package/build/dist/Utils/Dashboard/SloWidgetSource.js.map +1 -0
- package/build/dist/Utils/Markdown/MarkdownEscape.js +49 -0
- package/build/dist/Utils/Markdown/MarkdownEscape.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +112 -34
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +22 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/NetbiosNameUtil.js +129 -0
- package/build/dist/Utils/NetworkDiscovery/NetbiosNameUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/RunImportedDeviceNaming.js +255 -0
- package/build/dist/Utils/NetworkDiscovery/RunImportedDeviceNaming.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/ShortDeviceNamePlanner.js +184 -0
- package/build/dist/Utils/NetworkDiscovery/ShortDeviceNamePlanner.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/ShortHostnameUtil.js +79 -0
- package/build/dist/Utils/NetworkDiscovery/ShortHostnameUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +21 -12
- package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -1
- package/build/dist/Utils/Project/DataResidency.js +51 -0
- package/build/dist/Utils/Project/DataResidency.js.map +1 -0
- package/build/dist/Utils/Rules/RuleRunSummary.js +197 -0
- package/build/dist/Utils/Rules/RuleRunSummary.js.map +1 -0
- package/build/dist/Utils/Slo/SloAffectedResourceMarkdown.js +51 -0
- package/build/dist/Utils/Slo/SloAffectedResourceMarkdown.js.map +1 -0
- package/build/dist/Utils/Slo/SloBurnRateTemplate.js +228 -0
- package/build/dist/Utils/Slo/SloBurnRateTemplate.js.map +1 -0
- package/build/dist/Utils/Slo/SloFeedMarkdown.js +934 -0
- package/build/dist/Utils/Slo/SloFeedMarkdown.js.map +1 -0
- package/build/dist/Utils/Slo/SloHealth.js +75 -9
- package/build/dist/Utils/Slo/SloHealth.js.map +1 -1
- package/build/dist/Utils/Slo/SloListWidgetFormat.js +217 -0
- package/build/dist/Utils/Slo/SloListWidgetFormat.js.map +1 -0
- package/build/dist/Utils/Slo/SloMetricType.js +212 -0
- package/build/dist/Utils/Slo/SloMetricType.js.map +1 -0
- package/build/dist/Utils/Slo/SloMonitorRuleCriteria.js +216 -0
- package/build/dist/Utils/Slo/SloMonitorRuleCriteria.js.map +1 -0
- package/build/dist/Utils/Slo/SloMonitorStatusSummary.js +129 -0
- package/build/dist/Utils/Slo/SloMonitorStatusSummary.js.map +1 -0
- package/build/dist/Utils/Slo/SloOverviewText.js +110 -0
- package/build/dist/Utils/Slo/SloOverviewText.js.map +1 -0
- package/build/dist/Utils/Slo/SloProjection.js +448 -0
- package/build/dist/Utils/Slo/SloProjection.js.map +1 -0
- package/build/dist/Utils/Slo/SloWidgetFormat.js +4 -2
- package/build/dist/Utils/Slo/SloWidgetFormat.js.map +1 -1
- package/build/dist/Utils/Telemetry/LockedFilterSearch.js +1 -26
- package/build/dist/Utils/Telemetry/LockedFilterSearch.js.map +1 -1
- package/package.json +1 -1
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +0 -447
- package/Models/DatabaseModels/GoogleSecOpsConnectionRun.ts +0 -263
- package/Server/API/GoogleSecOpsConnectionAPI.ts +0 -320
- package/Server/Services/GoogleSecOpsConnectionRunService.ts +0 -10
- package/Server/Services/GoogleSecOpsConnectionService.ts +0 -116
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.ts +0 -777
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +0 -1373
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.ts +0 -512
- package/Tests/App/Dashboard/GoogleSecOpsConnectionForm.test.tsx +0 -838
- package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +0 -441
- package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +0 -1001
- package/Tests/Server/API/GoogleSecOpsConnectionAPI.test.ts +0 -657
- package/Tests/Server/Services/GoogleSecOpsDiagnosticsModel.test.ts +0 -153
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.test.ts +0 -784
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.test.ts +0 -823
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsDiagnostics.test.ts +0 -918
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +0 -738
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +0 -874
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +0 -1297
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsThreePassPoller.test.ts +0 -1577
- package/Tests/UI/Components/LockedFilterActions.test.tsx +0 -396
- package/Types/SecurityEvent/GoogleSecOpsDiagnostics.ts +0 -111
- package/UI/Components/TelemetryViewer/components/LockedFilterActions.tsx +0 -205
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +0 -478
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +0 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js +0 -287
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js.map +0 -1
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js +0 -231
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js.map +0 -1
- package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js +0 -9
- package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js.map +0 -1
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +0 -70
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js.map +0 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +0 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.js +0 -537
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.js.map +0 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +0 -1034
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +0 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js +0 -410
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js.map +0 -1
- package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js +0 -2
- package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js.map +0 -1
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterActions.js +0 -88
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterActions.js.map +0 -1
|
@@ -11,8 +11,10 @@ import AlertStateTimeline from "../../Models/DatabaseModels/AlertStateTimeline";
|
|
|
11
11
|
import IncidentStateTimeline from "../../Models/DatabaseModels/IncidentStateTimeline";
|
|
12
12
|
import Model from "../../Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule";
|
|
13
13
|
import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
14
|
+
import { SLO_BURN_RATE_MARKDOWN_TEMPLATE_MAX_LENGTH, SLO_BURN_RATE_TITLE_TEMPLATE_MAX_LENGTH, } from "../../Utils/Slo/SloBurnRateTemplate";
|
|
14
15
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
15
|
-
import
|
|
16
|
+
import QueryHelper from "../Types/Database/QueryHelper";
|
|
17
|
+
import ProjectScopedReferenceValidator, { resolveReferenceId, } from "../Utils/Database/ProjectScopedReferenceValidator";
|
|
16
18
|
import logger from "../Utils/Logger";
|
|
17
19
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
18
20
|
import AlertService from "./AlertService";
|
|
@@ -22,6 +24,18 @@ import DatabaseService from "./DatabaseService";
|
|
|
22
24
|
import IncidentService from "./IncidentService";
|
|
23
25
|
import IncidentSeverityService from "./IncidentSeverityService";
|
|
24
26
|
import IncidentStateTimelineService from "./IncidentStateTimelineService";
|
|
27
|
+
import LabelService from "./LabelService";
|
|
28
|
+
import OnCallDutyPolicyService from "./OnCallDutyPolicyService";
|
|
29
|
+
import TeamMemberService from "./TeamMemberService";
|
|
30
|
+
import TeamService from "./TeamService";
|
|
31
|
+
import ServiceLevelObjectiveFeedService from "./ServiceLevelObjectiveFeedService";
|
|
32
|
+
import ServiceLevelObjectiveService from "./ServiceLevelObjectiveService";
|
|
33
|
+
import { ServiceLevelObjectiveFeedEventType } from "../../Models/DatabaseModels/ServiceLevelObjectiveFeed";
|
|
34
|
+
import { Gray500, Green500, Red500 } from "../../Types/BrandColors";
|
|
35
|
+
import OneUptimeDate from "../../Types/Date";
|
|
36
|
+
import { SLO_BURN_RATE_RULE_FEED_COLUMNS, getBurnRateRuleAddedFeedMarkdown, getBurnRateRuleChangedFeedMarkdown, getBurnRateRuleRemovedFeedMarkdown, getSloFeedColumnChanges, getSloFeedColumnsInPayload, getSloFeedSelect, } from "../../Utils/Slo/SloFeedMarkdown";
|
|
37
|
+
import SloFeedUtil from "../Utils/Slo/SloFeedUtil";
|
|
38
|
+
import SloRecordReferenceValidator from "../Utils/Slo/SloRecordReferenceValidator";
|
|
25
39
|
const THRESHOLD_ERROR_MESSAGE = "Burn rate threshold must be greater than 0.";
|
|
26
40
|
const WINDOWS_REQUIRED_ERROR_MESSAGE = "Long window and short window are required for a burn rate rule.";
|
|
27
41
|
const WINDOWS_NOT_NUMERIC_ERROR_MESSAGE = "Long window and short window must be a number of minutes.";
|
|
@@ -33,6 +47,88 @@ export const NO_OUTPUT_ERROR_MESSAGE = "A burn rate rule must create an alert, d
|
|
|
33
47
|
*/
|
|
34
48
|
const DEFAULT_SHOULD_CREATE_ALERT = true;
|
|
35
49
|
const DEFAULT_SHOULD_CREATE_INCIDENT = false;
|
|
50
|
+
/*
|
|
51
|
+
* The alert and incident options, defaulted exactly like their columns. A
|
|
52
|
+
* payload that never mentions them - every seeded rule, every rule an older API
|
|
53
|
+
* client creates - therefore raises what burn rate rules always raised: a
|
|
54
|
+
* record everyone in the project can see, resolved automatically when the burn
|
|
55
|
+
* recovers, with no owners added. Exported so the tests can pin these against
|
|
56
|
+
* the model's own column metadata instead of a second copy of the literals.
|
|
57
|
+
*/
|
|
58
|
+
export const BURN_RATE_RULE_OPTION_FLAG_DEFAULTS = {
|
|
59
|
+
isAlertPrivate: false,
|
|
60
|
+
autoResolveAlert: true,
|
|
61
|
+
isIncidentPrivate: false,
|
|
62
|
+
autoResolveIncident: true,
|
|
63
|
+
addSloOwnersAsOwners: false,
|
|
64
|
+
};
|
|
65
|
+
/*
|
|
66
|
+
* Template columns and their limits, from the module the dashboard form reads
|
|
67
|
+
* too, so the browser refuses exactly what this hook would.
|
|
68
|
+
*
|
|
69
|
+
* Titles are varchar(ColumnLength.LongText) - on this rule and on the Alert and
|
|
70
|
+
* Incident they render into - so the column's own length is the limit, and
|
|
71
|
+
* saying so here beats Postgres' raw "value too long". The worker still clamps
|
|
72
|
+
* the RENDERED title, because `{{sloName}}` can expand a template that fit.
|
|
73
|
+
*
|
|
74
|
+
* Markdown columns are unbounded text, but a template is copied into every
|
|
75
|
+
* record the rule opens and into the notifications each of those sends, so
|
|
76
|
+
* they get a generous cap rather than none.
|
|
77
|
+
*/
|
|
78
|
+
export const BURN_RATE_RULE_MARKDOWN_TEMPLATE_MAX_LENGTH = SLO_BURN_RATE_MARKDOWN_TEMPLATE_MAX_LENGTH;
|
|
79
|
+
export const BURN_RATE_RULE_TITLE_TEMPLATE_MAX_LENGTH = SLO_BURN_RATE_TITLE_TEMPLATE_MAX_LENGTH;
|
|
80
|
+
export const BURN_RATE_RULE_TEMPLATE_COLUMNS = [
|
|
81
|
+
{
|
|
82
|
+
column: "alertTitleTemplate",
|
|
83
|
+
title: "Alert title template",
|
|
84
|
+
maxLength: BURN_RATE_RULE_TITLE_TEMPLATE_MAX_LENGTH,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
column: "alertDescriptionTemplate",
|
|
88
|
+
title: "Alert description template",
|
|
89
|
+
maxLength: BURN_RATE_RULE_MARKDOWN_TEMPLATE_MAX_LENGTH,
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
column: "alertRemediationNotes",
|
|
93
|
+
title: "Alert remediation notes",
|
|
94
|
+
maxLength: BURN_RATE_RULE_MARKDOWN_TEMPLATE_MAX_LENGTH,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
column: "incidentTitleTemplate",
|
|
98
|
+
title: "Incident title template",
|
|
99
|
+
maxLength: BURN_RATE_RULE_TITLE_TEMPLATE_MAX_LENGTH,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
column: "incidentDescriptionTemplate",
|
|
103
|
+
title: "Incident description template",
|
|
104
|
+
maxLength: BURN_RATE_RULE_MARKDOWN_TEMPLATE_MAX_LENGTH,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
column: "incidentRemediationNotes",
|
|
108
|
+
title: "Incident remediation notes",
|
|
109
|
+
maxLength: BURN_RATE_RULE_MARKDOWN_TEMPLATE_MAX_LENGTH,
|
|
110
|
+
},
|
|
111
|
+
];
|
|
112
|
+
const OWNER_USER_COLUMNS = [
|
|
113
|
+
"alertOwnerUsers",
|
|
114
|
+
"incidentOwnerUsers",
|
|
115
|
+
];
|
|
116
|
+
const PROJECT_SCOPED_RELATION_COLUMNS = [
|
|
117
|
+
"onCallDutyPolicies",
|
|
118
|
+
"incidentOnCallDutyPolicies",
|
|
119
|
+
"alertLabels",
|
|
120
|
+
"incidentLabels",
|
|
121
|
+
"alertOwnerTeams",
|
|
122
|
+
"incidentOwnerTeams",
|
|
123
|
+
];
|
|
124
|
+
const RELATION_COLUMNS = [
|
|
125
|
+
...PROJECT_SCOPED_RELATION_COLUMNS,
|
|
126
|
+
...OWNER_USER_COLUMNS,
|
|
127
|
+
];
|
|
128
|
+
export const OWNER_USERS_NOT_IN_PROJECT_ERROR_PREFIX = "This SLO burn rate rule names owner users who are not members of this project:";
|
|
129
|
+
const normalizeId = (id) => {
|
|
130
|
+
return id.trim().toLowerCase();
|
|
131
|
+
};
|
|
36
132
|
export class Service extends DatabaseService {
|
|
37
133
|
constructor() {
|
|
38
134
|
super(Model);
|
|
@@ -95,16 +191,82 @@ export class Service extends DatabaseService {
|
|
|
95
191
|
}
|
|
96
192
|
createBy.data.shouldCreateAlert = shouldCreateAlert;
|
|
97
193
|
createBy.data.shouldCreateIncident = shouldCreateIncident;
|
|
194
|
+
/*
|
|
195
|
+
* The alert and incident options, written back explicitly for the same
|
|
196
|
+
* reason as the two output flags - and coerced for the same "false"-string
|
|
197
|
+
* reason: the worker reads autoResolve with `!== false` and the private
|
|
198
|
+
* flags with `=== true`, so an uncoerced "false" would keep auto-resolving
|
|
199
|
+
* and an uncoerced "true" would publish a record the user asked to hide.
|
|
200
|
+
*/
|
|
201
|
+
this.normalizeOptionFlags(createBy.data, {
|
|
202
|
+
applyDefaults: true,
|
|
203
|
+
});
|
|
204
|
+
this.normalizeTemplates(createBy.data);
|
|
205
|
+
/*
|
|
206
|
+
* Tenant first, for every reference check below, like the other SLO child
|
|
207
|
+
* rows: DatabaseService stamps the tenant onto the payload before this
|
|
208
|
+
* hook, but the tenancy checks must not depend on that ordering - a
|
|
209
|
+
* payload projectId must never pick the project a severity, routing
|
|
210
|
+
* target or owner is checked against.
|
|
211
|
+
*/
|
|
212
|
+
const projectId = createBy.props.tenantId || createBy.data.projectId;
|
|
213
|
+
/*
|
|
214
|
+
* The SLO first. Nothing else checks that it belongs to the rule's
|
|
215
|
+
* project, and a rule hung off another tenant's SLO is wrong in every
|
|
216
|
+
* direction: it can never fire (the worker reads rules pinned to the SLO's
|
|
217
|
+
* project), its feed items are written against that SLO's id, and that
|
|
218
|
+
* project deleting its SLO cascades into this project's rule.
|
|
219
|
+
* serviceLevelObjectiveId is create-only (update is [] in its column ACL),
|
|
220
|
+
* so create is the one write to check. The lookup is pinned to this
|
|
221
|
+
* project and a foreign id gets the same answer as a missing one, so the
|
|
222
|
+
* error never confirms or names another tenant's SLO. Both spellings are
|
|
223
|
+
* checked: the id column and the relation write the same join column.
|
|
224
|
+
*/
|
|
225
|
+
await SloRecordReferenceValidator.validateServiceLevelObjectivesBelongToProject({
|
|
226
|
+
projectId: projectId,
|
|
227
|
+
serviceLevelObjectives: [
|
|
228
|
+
createBy.data.serviceLevelObjectiveId,
|
|
229
|
+
createBy.data.serviceLevelObjective,
|
|
230
|
+
],
|
|
231
|
+
subject: "SLO burn rate rule",
|
|
232
|
+
});
|
|
98
233
|
await this.validateSeverityReferences({
|
|
99
|
-
projectId:
|
|
234
|
+
projectId: projectId,
|
|
100
235
|
alertSeverityId: createBy.data.alertSeverityId,
|
|
101
236
|
incidentSeverityId: createBy.data.incidentSeverityId,
|
|
102
237
|
});
|
|
238
|
+
await this.validateRoutingReferences({
|
|
239
|
+
projectId: projectId,
|
|
240
|
+
payload: createBy.data,
|
|
241
|
+
storedIds: undefined,
|
|
242
|
+
});
|
|
103
243
|
return {
|
|
104
244
|
createBy,
|
|
105
245
|
carryForward: null,
|
|
106
246
|
};
|
|
107
247
|
}
|
|
248
|
+
/*
|
|
249
|
+
* BurnRateRuleAdded on the SLO feed. Skipped for the two rules OneUptime
|
|
250
|
+
* seeds while creating an SLO: the SLO's own "created" item already
|
|
251
|
+
* describes them (SloFeedUtil.runWhileSeedingDefaultBurnRateRules explains
|
|
252
|
+
* how they are told apart). Fire-and-forget - the rule exists whether or not
|
|
253
|
+
* its feed item does.
|
|
254
|
+
*/
|
|
255
|
+
async onCreateSuccess(onCreate, createdItem) {
|
|
256
|
+
if (createdItem.serviceLevelObjectiveId &&
|
|
257
|
+
!SloFeedUtil.isSeedingDefaultBurnRateRules(createdItem.serviceLevelObjectiveId)) {
|
|
258
|
+
const createdAt = createdItem.createdAt || OneUptimeDate.getCurrentDate();
|
|
259
|
+
this.writeBurnRateRuleAddedFeed({
|
|
260
|
+
onCreate: onCreate,
|
|
261
|
+
createdItem: createdItem,
|
|
262
|
+
postedAt: createdAt,
|
|
263
|
+
}).catch((err) => {
|
|
264
|
+
var _a, _b;
|
|
265
|
+
logger.error(`Error writing the feed item for added SLO burn rate rule ${(_a = createdItem.id) === null || _a === void 0 ? void 0 : _a.toString()}: ${err}`, { projectId: (_b = createdItem.projectId) === null || _b === void 0 ? void 0 : _b.toString() });
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
return createdItem;
|
|
269
|
+
}
|
|
108
270
|
async onBeforeUpdate(updateBy) {
|
|
109
271
|
// Same string-arrival path as onBeforeCreate: coerce, validate, write back.
|
|
110
272
|
const newThreshold = updateBy.data.burnRateThreshold;
|
|
@@ -123,6 +285,16 @@ export class Service extends DatabaseService {
|
|
|
123
285
|
}
|
|
124
286
|
await this.validateOutputsOnUpdate(updateBy);
|
|
125
287
|
await this.validateSeverityReferencesOnUpdate(updateBy);
|
|
288
|
+
/*
|
|
289
|
+
* Only the options this update actually carries are coerced - an absent
|
|
290
|
+
* flag must stay absent, or a form that saves just the name would reset
|
|
291
|
+
* every other option to its default.
|
|
292
|
+
*/
|
|
293
|
+
this.normalizeOptionFlags(updateBy.data, {
|
|
294
|
+
applyDefaults: false,
|
|
295
|
+
});
|
|
296
|
+
this.normalizeTemplates(updateBy.data);
|
|
297
|
+
await this.validateRoutingReferencesOnUpdate(updateBy);
|
|
126
298
|
const newLongWindow = updateBy.data.longWindowInMinutes;
|
|
127
299
|
const newShortWindow = updateBy.data
|
|
128
300
|
.shortWindowInMinutes;
|
|
@@ -184,31 +356,101 @@ export class Service extends DatabaseService {
|
|
|
184
356
|
}
|
|
185
357
|
}
|
|
186
358
|
}
|
|
359
|
+
/*
|
|
360
|
+
* Last, so a payload the checks above rejected never costs the feed a
|
|
361
|
+
* read. Null unless this is a hand-made edit of a watched column.
|
|
362
|
+
*/
|
|
363
|
+
const feedSnapshot = await this.readFeedSnapshotBeforeUpdate(updateBy);
|
|
187
364
|
return {
|
|
188
365
|
updateBy,
|
|
189
|
-
carryForward:
|
|
366
|
+
carryForward: {
|
|
367
|
+
feedSnapshot: feedSnapshot,
|
|
368
|
+
},
|
|
190
369
|
};
|
|
191
370
|
}
|
|
371
|
+
/*
|
|
372
|
+
* READ ONLY: notes down the rules this delete may remove. onDeleteSuccess
|
|
373
|
+
* needs each one's SLO, project and name - to resolve what the rule left
|
|
374
|
+
* open and to describe it on the SLO feed - and the row is gone by then.
|
|
375
|
+
*
|
|
376
|
+
* Nothing is resolved here. DatabaseService runs this hook BEFORE it applies
|
|
377
|
+
* the caller's delete permissions, and the CRUD API passes a raw id, so these
|
|
378
|
+
* rows are only candidates. Resolving here as root let a delete that named
|
|
379
|
+
* another project's rule close that project's burn rate alerts and incidents
|
|
380
|
+
* while deleting nothing. onDeleteSuccess acts only on the ids the delete
|
|
381
|
+
* really removed, and the tenant pin keeps this read from even seeing
|
|
382
|
+
* another project's rules. A multi-tenant request is left unpinned because
|
|
383
|
+
* DatabaseService does not pin it either.
|
|
384
|
+
*
|
|
385
|
+
* The widest page rather than the caller's limit and skip: the
|
|
386
|
+
* permission-checked query can page a narrower set differently, and a rule
|
|
387
|
+
* the delete removed that this read missed would keep its records open.
|
|
388
|
+
*
|
|
389
|
+
* A failed read is deliberately not caught: the evaluation worker only
|
|
390
|
+
* resolves records for rules that still exist, so deleting a rule without
|
|
391
|
+
* knowing what it opened would strand those records, and their on-call
|
|
392
|
+
* escalations, forever.
|
|
393
|
+
*/
|
|
192
394
|
async onBeforeDelete(deleteBy) {
|
|
193
|
-
var _a, _b;
|
|
194
|
-
/*
|
|
195
|
-
* Resolve anything the rules being deleted left open — otherwise the alert
|
|
196
|
-
* or incident (and its on-call escalations) stays open forever, because the
|
|
197
|
-
* evaluation worker only resolves records for rules that still exist.
|
|
198
|
-
*/
|
|
199
395
|
const itemsToDelete = await this.findBy({
|
|
200
|
-
query:
|
|
201
|
-
|
|
202
|
-
|
|
396
|
+
query: SloFeedUtil.getTenantPinnedQuery({
|
|
397
|
+
query: deleteBy.query,
|
|
398
|
+
tenantId: deleteBy.props.isMultiTenantRequest
|
|
399
|
+
? undefined
|
|
400
|
+
: deleteBy.props.tenantId,
|
|
401
|
+
}),
|
|
402
|
+
limit: LIMIT_PER_PROJECT,
|
|
403
|
+
skip: 0,
|
|
203
404
|
select: {
|
|
204
405
|
_id: true,
|
|
205
406
|
projectId: true,
|
|
206
407
|
serviceLevelObjectiveId: true,
|
|
408
|
+
// What the SLO feed's "rule removed" item says - the row is gone after.
|
|
409
|
+
name: true,
|
|
410
|
+
burnRateThreshold: true,
|
|
411
|
+
longWindowInMinutes: true,
|
|
412
|
+
shortWindowInMinutes: true,
|
|
207
413
|
},
|
|
208
414
|
props: {
|
|
209
415
|
isRoot: true,
|
|
210
416
|
},
|
|
211
417
|
});
|
|
418
|
+
return {
|
|
419
|
+
deleteBy,
|
|
420
|
+
carryForward: {
|
|
421
|
+
itemsToDelete: itemsToDelete,
|
|
422
|
+
},
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
/*
|
|
426
|
+
* What the rules this delete really removed leave behind: every alert and
|
|
427
|
+
* incident they opened is resolved, and the SLO feed gets a
|
|
428
|
+
* BurnRateRuleRemoved item built from the rows onBeforeDelete read.
|
|
429
|
+
*
|
|
430
|
+
* Only rows whose ids DatabaseService reports as deleted are acted on
|
|
431
|
+
* (SloFeedUtil.getRowsActuallyDeleted): onBeforeDelete read candidates
|
|
432
|
+
* before permissions were applied, and a delete naming another project's
|
|
433
|
+
* rule removes nothing, so it must resolve and describe nothing either.
|
|
434
|
+
*
|
|
435
|
+
* Resolving after the delete is safe: open records are found by fingerprint
|
|
436
|
+
* in the Alert and Incident tables, which do not need the rule row. It is
|
|
437
|
+
* also the honest order - a delete that fails leaves the rule and its
|
|
438
|
+
* records exactly as they were - and the worker cannot re-fire a rule that
|
|
439
|
+
* no longer exists in between.
|
|
440
|
+
*
|
|
441
|
+
* (Deleting the SLO itself cascades its rules in Postgres without this hook;
|
|
442
|
+
* ServiceLevelObjectiveService.onDeleteSuccess resolves those, and the SLO's
|
|
443
|
+
* feed goes with it, so there is nothing to describe.)
|
|
444
|
+
*/
|
|
445
|
+
async onDeleteSuccess(onDelete, itemIdsBeforeDelete) {
|
|
446
|
+
var _a;
|
|
447
|
+
// Taken first, so the feed item's time is the delete's, not the resolve's.
|
|
448
|
+
const deletedAt = OneUptimeDate.getCurrentDate();
|
|
449
|
+
const itemsToDelete = SloFeedUtil.getRowsActuallyDeleted({
|
|
450
|
+
rows: ((_a = onDelete.carryForward) === null || _a === void 0 ? void 0 : _a.itemsToDelete) ||
|
|
451
|
+
[],
|
|
452
|
+
deletedIds: itemIdsBeforeDelete,
|
|
453
|
+
});
|
|
212
454
|
for (const item of itemsToDelete) {
|
|
213
455
|
if (!item.id || !item.projectId || !item.serviceLevelObjectiveId) {
|
|
214
456
|
continue;
|
|
@@ -222,15 +464,199 @@ export class Service extends DatabaseService {
|
|
|
222
464
|
});
|
|
223
465
|
}
|
|
224
466
|
catch (err) {
|
|
225
|
-
|
|
467
|
+
/*
|
|
468
|
+
* Never fail the request - the rule is already gone - and never let
|
|
469
|
+
* one rule's failure cost the next rule its resolve.
|
|
470
|
+
*/
|
|
471
|
+
logger.error(`Error resolving open alerts and incidents for deleted SLO burn rate rule ${item.id.toString()}: ${err}`, { projectId: item.projectId.toString() });
|
|
226
472
|
}
|
|
227
473
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
474
|
+
// Fire-and-forget like the other rule items.
|
|
475
|
+
if (itemsToDelete.length > 0) {
|
|
476
|
+
this.writeBurnRateRuleRemovedFeed({
|
|
477
|
+
onDelete: onDelete,
|
|
231
478
|
itemsToDelete: itemsToDelete,
|
|
232
|
-
|
|
233
|
-
|
|
479
|
+
postedAt: deletedAt,
|
|
480
|
+
}).catch((err) => {
|
|
481
|
+
logger.error(`Error writing the feed items for removed SLO burn rate rules: ${err}`);
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
return onDelete;
|
|
485
|
+
}
|
|
486
|
+
async writeBurnRateRuleAddedFeed(data) {
|
|
487
|
+
const serviceLevelObjectiveId = data.createdItem.serviceLevelObjectiveId;
|
|
488
|
+
const projectId = data.createdItem.projectId;
|
|
489
|
+
if (!serviceLevelObjectiveId || !projectId) {
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
const markdown = getBurnRateRuleAddedFeedMarkdown({
|
|
493
|
+
sloMarkdownLink: await ServiceLevelObjectiveService.getSloMarkdownLink({
|
|
494
|
+
projectId: projectId,
|
|
495
|
+
sloId: serviceLevelObjectiveId,
|
|
496
|
+
}),
|
|
497
|
+
rule: data.createdItem,
|
|
498
|
+
});
|
|
499
|
+
await ServiceLevelObjectiveFeedService.createServiceLevelObjectiveFeedItem({
|
|
500
|
+
serviceLevelObjectiveId: serviceLevelObjectiveId,
|
|
501
|
+
projectId: projectId,
|
|
502
|
+
serviceLevelObjectiveFeedEventType: ServiceLevelObjectiveFeedEventType.BurnRateRuleAdded,
|
|
503
|
+
displayColor: Gray500,
|
|
504
|
+
feedInfoInMarkdown: markdown.feedInfoInMarkdown,
|
|
505
|
+
moreInformationInMarkdown: markdown.moreInformationInMarkdown,
|
|
506
|
+
userId: data.createdItem.createdByUserId ||
|
|
507
|
+
data.onCreate.createBy.props.userId ||
|
|
508
|
+
undefined,
|
|
509
|
+
postedAt: data.postedAt,
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
/*
|
|
513
|
+
* The before-half of BurnRateRuleChanged: the watched columns a hand-made
|
|
514
|
+
* edit writes, and each rule as it was before it.
|
|
515
|
+
*
|
|
516
|
+
* Only a non-root write takes a snapshot, and only a write with a snapshot
|
|
517
|
+
* posts. Root writes to a rule are OneUptime's own code paths - the
|
|
518
|
+
* evaluation worker stamping lifecycle columns, the SLO seeding its default
|
|
519
|
+
* rules - so the rule feed describes what people change through the
|
|
520
|
+
* dashboard and the API, and describes it properly: "old -> new", with the
|
|
521
|
+
* untouched fields of a re-submitted form left out. The column check comes
|
|
522
|
+
* before any read, and a failed read never blocks the update.
|
|
523
|
+
*/
|
|
524
|
+
async readFeedSnapshotBeforeUpdate(updateBy) {
|
|
525
|
+
if (updateBy.props.isRoot) {
|
|
526
|
+
return null;
|
|
527
|
+
}
|
|
528
|
+
const columns = getSloFeedColumnsInPayload(updateBy.data, SLO_BURN_RATE_RULE_FEED_COLUMNS);
|
|
529
|
+
if (columns.length === 0) {
|
|
530
|
+
return null;
|
|
531
|
+
}
|
|
532
|
+
try {
|
|
533
|
+
const rows = await this.findBy({
|
|
534
|
+
// Pinned: this hook runs before DatabaseService applies permissions.
|
|
535
|
+
query: SloFeedUtil.getTenantPinnedQuery({
|
|
536
|
+
query: updateBy.query,
|
|
537
|
+
tenantId: updateBy.props.tenantId,
|
|
538
|
+
}),
|
|
539
|
+
select: this.getFeedSelect(columns),
|
|
540
|
+
limit: updateBy.limit,
|
|
541
|
+
skip: updateBy.skip,
|
|
542
|
+
props: {
|
|
543
|
+
isRoot: true,
|
|
544
|
+
},
|
|
545
|
+
});
|
|
546
|
+
const rowsById = {};
|
|
547
|
+
for (const row of rows) {
|
|
548
|
+
if (row.id) {
|
|
549
|
+
rowsById[row.id.toString()] = row;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
return {
|
|
553
|
+
columns: columns,
|
|
554
|
+
rowsById: rowsById,
|
|
555
|
+
};
|
|
556
|
+
}
|
|
557
|
+
catch (err) {
|
|
558
|
+
logger.error(`Error reading SLO burn rate rules before an update for the SLO feed: ${err}`);
|
|
559
|
+
return null;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
getFeedSelect(columns) {
|
|
563
|
+
return Object.assign({ _id: true, projectId: true, serviceLevelObjectiveId: true, name: true }, getSloFeedSelect(columns));
|
|
564
|
+
}
|
|
565
|
+
async writeBurnRateRuleChangedFeed(data) {
|
|
566
|
+
var _a, _b;
|
|
567
|
+
const snapshot = ((_a = data.onUpdate.carryForward) === null || _a === void 0 ? void 0 : _a.feedSnapshot) || null;
|
|
568
|
+
if (!snapshot ||
|
|
569
|
+
snapshot.columns.length === 0 ||
|
|
570
|
+
data.updatedItemIds.length === 0) {
|
|
571
|
+
return;
|
|
572
|
+
}
|
|
573
|
+
const userId = data.onUpdate.updateBy.props.userId || undefined;
|
|
574
|
+
for (const ruleId of data.updatedItemIds) {
|
|
575
|
+
const before = snapshot.rowsById[ruleId.toString()];
|
|
576
|
+
if (!before) {
|
|
577
|
+
continue;
|
|
578
|
+
}
|
|
579
|
+
try {
|
|
580
|
+
const after = await this.findOneById({
|
|
581
|
+
id: ruleId,
|
|
582
|
+
select: this.getFeedSelect(snapshot.columns),
|
|
583
|
+
props: {
|
|
584
|
+
isRoot: true,
|
|
585
|
+
},
|
|
586
|
+
});
|
|
587
|
+
if (!after || !after.projectId || !after.serviceLevelObjectiveId) {
|
|
588
|
+
continue;
|
|
589
|
+
}
|
|
590
|
+
const changes = getSloFeedColumnChanges({
|
|
591
|
+
columns: snapshot.columns,
|
|
592
|
+
before: before,
|
|
593
|
+
after: after,
|
|
594
|
+
});
|
|
595
|
+
// A form re-submitted without a real change describes nothing.
|
|
596
|
+
if (changes.length === 0) {
|
|
597
|
+
continue;
|
|
598
|
+
}
|
|
599
|
+
const markdown = getBurnRateRuleChangedFeedMarkdown({
|
|
600
|
+
sloMarkdownLink: await ServiceLevelObjectiveService.getSloMarkdownLink({
|
|
601
|
+
projectId: after.projectId,
|
|
602
|
+
sloId: after.serviceLevelObjectiveId,
|
|
603
|
+
}),
|
|
604
|
+
ruleName: after.name || before.name,
|
|
605
|
+
changes: changes,
|
|
606
|
+
});
|
|
607
|
+
const isEnabledOnlyChange = changes.length === 1 && changes[0].column === "isEnabled";
|
|
608
|
+
await ServiceLevelObjectiveFeedService.createServiceLevelObjectiveFeedItem({
|
|
609
|
+
serviceLevelObjectiveId: after.serviceLevelObjectiveId,
|
|
610
|
+
projectId: after.projectId,
|
|
611
|
+
serviceLevelObjectiveFeedEventType: ServiceLevelObjectiveFeedEventType.BurnRateRuleChanged,
|
|
612
|
+
displayColor: isEnabledOnlyChange && changes[0].to === "On"
|
|
613
|
+
? Green500
|
|
614
|
+
: Gray500,
|
|
615
|
+
feedInfoInMarkdown: markdown.feedInfoInMarkdown,
|
|
616
|
+
moreInformationInMarkdown: markdown.moreInformationInMarkdown,
|
|
617
|
+
userId: userId,
|
|
618
|
+
postedAt: data.postedAt,
|
|
619
|
+
});
|
|
620
|
+
}
|
|
621
|
+
catch (err) {
|
|
622
|
+
logger.error(`Error writing the feed item for changed SLO burn rate rule ${ruleId.toString()}: ${err}`, { projectId: (_b = before.projectId) === null || _b === void 0 ? void 0 : _b.toString() });
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
async writeBurnRateRuleRemovedFeed(data) {
|
|
627
|
+
var _a, _b;
|
|
628
|
+
const deletedByUserId = ((_a = data.onDelete.deleteBy.deletedByUser) === null || _a === void 0 ? void 0 : _a.id) ||
|
|
629
|
+
data.onDelete.deleteBy.props.userId ||
|
|
630
|
+
undefined;
|
|
631
|
+
for (const rule of data.itemsToDelete) {
|
|
632
|
+
const serviceLevelObjectiveId = rule.serviceLevelObjectiveId;
|
|
633
|
+
const projectId = rule.projectId;
|
|
634
|
+
if (!serviceLevelObjectiveId || !projectId) {
|
|
635
|
+
continue;
|
|
636
|
+
}
|
|
637
|
+
try {
|
|
638
|
+
const markdown = getBurnRateRuleRemovedFeedMarkdown({
|
|
639
|
+
sloMarkdownLink: await ServiceLevelObjectiveService.getSloMarkdownLink({
|
|
640
|
+
projectId: projectId,
|
|
641
|
+
sloId: serviceLevelObjectiveId,
|
|
642
|
+
}),
|
|
643
|
+
rule: rule,
|
|
644
|
+
});
|
|
645
|
+
await ServiceLevelObjectiveFeedService.createServiceLevelObjectiveFeedItem({
|
|
646
|
+
serviceLevelObjectiveId: serviceLevelObjectiveId,
|
|
647
|
+
projectId: projectId,
|
|
648
|
+
serviceLevelObjectiveFeedEventType: ServiceLevelObjectiveFeedEventType.BurnRateRuleRemoved,
|
|
649
|
+
displayColor: Red500,
|
|
650
|
+
feedInfoInMarkdown: markdown.feedInfoInMarkdown,
|
|
651
|
+
moreInformationInMarkdown: markdown.moreInformationInMarkdown,
|
|
652
|
+
userId: deletedByUserId,
|
|
653
|
+
postedAt: data.postedAt,
|
|
654
|
+
});
|
|
655
|
+
}
|
|
656
|
+
catch (err) {
|
|
657
|
+
logger.error(`Error writing the feed item for removed SLO burn rate rule ${(_b = rule.id) === null || _b === void 0 ? void 0 : _b.toString()}: ${err}`, { projectId: projectId.toString() });
|
|
658
|
+
}
|
|
659
|
+
}
|
|
234
660
|
}
|
|
235
661
|
/*
|
|
236
662
|
* A rule stops declaring something — it is disabled, or one of its two
|
|
@@ -243,8 +669,32 @@ export class Service extends DatabaseService {
|
|
|
243
669
|
*
|
|
244
670
|
* Runs after the write commits, so an update that was rejected leaves the
|
|
245
671
|
* open records exactly where they were.
|
|
672
|
+
*
|
|
673
|
+
* Switching autoResolveAlert or autoResolveIncident OFF is deliberately not
|
|
674
|
+
* a trigger. Those switches only decide what the worker does when the burn
|
|
675
|
+
* recovers; a rule with auto-resolve off still stands behind what it has
|
|
676
|
+
* open, so nothing is resolved and nothing is forgotten. The reverse is also
|
|
677
|
+
* true: disabling the rule or switching an output off resolves regardless of
|
|
678
|
+
* the auto-resolve switches, because then the rule cannot justify the record
|
|
679
|
+
* at all - the same stance the SLO-level resolves take.
|
|
246
680
|
*/
|
|
247
681
|
async onUpdateSuccess(onUpdate, updatedItemIds) {
|
|
682
|
+
var _a;
|
|
683
|
+
/*
|
|
684
|
+
* BurnRateRuleChanged on the SLO feed - fire-and-forget, and only when
|
|
685
|
+
* onBeforeUpdate took a snapshot (a hand-made edit of a watched column), so
|
|
686
|
+
* the worker's lifecycle stamps do no feed work at all.
|
|
687
|
+
*/
|
|
688
|
+
if ((_a = onUpdate.carryForward) === null || _a === void 0 ? void 0 : _a.feedSnapshot) {
|
|
689
|
+
const updatedAt = OneUptimeDate.getCurrentDate();
|
|
690
|
+
this.writeBurnRateRuleChangedFeed({
|
|
691
|
+
onUpdate: onUpdate,
|
|
692
|
+
updatedItemIds: updatedItemIds,
|
|
693
|
+
postedAt: updatedAt,
|
|
694
|
+
}).catch((err) => {
|
|
695
|
+
logger.error(`Error writing SLO feed items after a burn rate rule update: ${err}`);
|
|
696
|
+
});
|
|
697
|
+
}
|
|
248
698
|
/*
|
|
249
699
|
* These three reads are strict `=== false`, and that is only sound because
|
|
250
700
|
* onBeforeUpdate ran first: validateOutputsOnUpdate coerces both output
|
|
@@ -564,6 +1014,295 @@ export class Service extends DatabaseService {
|
|
|
564
1014
|
});
|
|
565
1015
|
}
|
|
566
1016
|
}
|
|
1017
|
+
/*
|
|
1018
|
+
* Coerce the five option flags. `applyDefaults` is the create path, where a
|
|
1019
|
+
* flag the payload never mentions is written as its default; on update an
|
|
1020
|
+
* absent flag stays absent.
|
|
1021
|
+
*
|
|
1022
|
+
* An explicit null is not "absent", though. All five are NOT NULL columns,
|
|
1023
|
+
* so writing null would fail the update with a raw constraint error - it is
|
|
1024
|
+
* read the way the create path reads it, as the column default.
|
|
1025
|
+
*/
|
|
1026
|
+
normalizeOptionFlags(data, options) {
|
|
1027
|
+
const flags = Object.keys(BURN_RATE_RULE_OPTION_FLAG_DEFAULTS);
|
|
1028
|
+
for (const flag of flags) {
|
|
1029
|
+
const value = data[flag];
|
|
1030
|
+
if (!options.applyDefaults && value === undefined) {
|
|
1031
|
+
continue;
|
|
1032
|
+
}
|
|
1033
|
+
data[flag] = this.normalizeBooleanInput(value, BURN_RATE_RULE_OPTION_FLAG_DEFAULTS[flag]);
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
/*
|
|
1037
|
+
* Titles, descriptions and remediation notes. A blank template is stored as
|
|
1038
|
+
* NULL: the worker treats blank and absent the same (it falls back to the
|
|
1039
|
+
* built-in text), and NULL keeps the table and the edit form honest about
|
|
1040
|
+
* which rules have a template at all. Content is never trimmed - leading
|
|
1041
|
+
* whitespace is meaningful in markdown.
|
|
1042
|
+
*/
|
|
1043
|
+
normalizeTemplates(data) {
|
|
1044
|
+
for (const template of BURN_RATE_RULE_TEMPLATE_COLUMNS) {
|
|
1045
|
+
const value = data[template.column];
|
|
1046
|
+
if (value === undefined || value === null) {
|
|
1047
|
+
continue;
|
|
1048
|
+
}
|
|
1049
|
+
if (typeof value !== "string") {
|
|
1050
|
+
throw new BadDataException(`${template.title} must be text.`);
|
|
1051
|
+
}
|
|
1052
|
+
if (value.trim() === "") {
|
|
1053
|
+
data[template.column] = null;
|
|
1054
|
+
continue;
|
|
1055
|
+
}
|
|
1056
|
+
if (value.length > template.maxLength) {
|
|
1057
|
+
throw new BadDataException(`${template.title} must be ${template.maxLength} characters or fewer. It is ${value.length} characters long.`);
|
|
1058
|
+
}
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
/*
|
|
1062
|
+
* Labels, owner teams and on-call policies are project-scoped rows joined to
|
|
1063
|
+
* the rule by plain many-to-many tables, so nothing stopped an API caller
|
|
1064
|
+
* attaching another project's team - and the worker would then copy it onto
|
|
1065
|
+
* every alert this rule opens, handing that team another project's page.
|
|
1066
|
+
* The on-call lists were never validated either; they are the same hazard
|
|
1067
|
+
* with an escalation attached, so they are checked here too.
|
|
1068
|
+
*
|
|
1069
|
+
* `storedIds` is the update path's inheritance: ids a rule already holds are
|
|
1070
|
+
* carried forward unchecked (the dashboard re-submits whole lists on every
|
|
1071
|
+
* save), and only what the write INTRODUCES is validated - the rule
|
|
1072
|
+
* MonitorStepsProjectValidator follows for the same reason.
|
|
1073
|
+
*/
|
|
1074
|
+
async validateRoutingReferences(data) {
|
|
1075
|
+
var _a, _b;
|
|
1076
|
+
if (!data.projectId) {
|
|
1077
|
+
// Same reasoning as validateSeverityReferences: nothing to compare to.
|
|
1078
|
+
return;
|
|
1079
|
+
}
|
|
1080
|
+
const references = [];
|
|
1081
|
+
for (const relation of this.getProjectScopedRelations()) {
|
|
1082
|
+
const ids = this.getIntroducedRelationIds(data.payload[relation.column], (_a = data.storedIds) === null || _a === void 0 ? void 0 : _a[relation.column]);
|
|
1083
|
+
for (const id of ids) {
|
|
1084
|
+
references.push({
|
|
1085
|
+
modelName: relation.modelName,
|
|
1086
|
+
id: id,
|
|
1087
|
+
service: relation.service,
|
|
1088
|
+
});
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
if (references.length > 0) {
|
|
1092
|
+
await ProjectScopedReferenceValidator.validateReferencesBelongToProject({
|
|
1093
|
+
projectId: data.projectId,
|
|
1094
|
+
subject: "SLO burn rate rule",
|
|
1095
|
+
references: references,
|
|
1096
|
+
});
|
|
1097
|
+
}
|
|
1098
|
+
const ownerUserIds = [];
|
|
1099
|
+
for (const column of OWNER_USER_COLUMNS) {
|
|
1100
|
+
ownerUserIds.push(...this.getIntroducedRelationIds(data.payload[column], (_b = data.storedIds) === null || _b === void 0 ? void 0 : _b[column]));
|
|
1101
|
+
}
|
|
1102
|
+
await this.validateOwnerUsersAreProjectMembers({
|
|
1103
|
+
projectId: data.projectId,
|
|
1104
|
+
userIds: ownerUserIds,
|
|
1105
|
+
});
|
|
1106
|
+
}
|
|
1107
|
+
/*
|
|
1108
|
+
* The update twin. One read serves both halves: it names the projects the
|
|
1109
|
+
* update touches (when the caller carries no tenant) and what each matched
|
|
1110
|
+
* rule already stores, and it only happens when the payload carries a list.
|
|
1111
|
+
*/
|
|
1112
|
+
async validateRoutingReferencesOnUpdate(updateBy) {
|
|
1113
|
+
var _a;
|
|
1114
|
+
const payload = updateBy.data;
|
|
1115
|
+
const columnsInPayload = RELATION_COLUMNS.filter((column) => {
|
|
1116
|
+
return payload[column] !== undefined && payload[column] !== null;
|
|
1117
|
+
});
|
|
1118
|
+
if (columnsInPayload.length === 0) {
|
|
1119
|
+
return;
|
|
1120
|
+
}
|
|
1121
|
+
const select = {
|
|
1122
|
+
_id: true,
|
|
1123
|
+
projectId: true,
|
|
1124
|
+
};
|
|
1125
|
+
for (const column of columnsInPayload) {
|
|
1126
|
+
select[column] = {
|
|
1127
|
+
_id: true,
|
|
1128
|
+
};
|
|
1129
|
+
}
|
|
1130
|
+
const rules = await this.findBy({
|
|
1131
|
+
query: updateBy.query,
|
|
1132
|
+
select: select,
|
|
1133
|
+
limit: LIMIT_PER_PROJECT,
|
|
1134
|
+
skip: 0,
|
|
1135
|
+
props: {
|
|
1136
|
+
isRoot: true,
|
|
1137
|
+
},
|
|
1138
|
+
});
|
|
1139
|
+
const projectIds = {};
|
|
1140
|
+
if (updateBy.props.tenantId) {
|
|
1141
|
+
projectIds[updateBy.props.tenantId.toString()] = updateBy.props.tenantId;
|
|
1142
|
+
}
|
|
1143
|
+
else {
|
|
1144
|
+
for (const rule of rules) {
|
|
1145
|
+
if (rule.projectId) {
|
|
1146
|
+
projectIds[rule.projectId.toString()] = rule.projectId;
|
|
1147
|
+
}
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
for (const projectId of Object.values(projectIds)) {
|
|
1151
|
+
const storedIds = {};
|
|
1152
|
+
for (const column of columnsInPayload) {
|
|
1153
|
+
const idsForColumn = new Set();
|
|
1154
|
+
for (const rule of rules) {
|
|
1155
|
+
if (rule.projectId &&
|
|
1156
|
+
rule.projectId.toString() !== projectId.toString()) {
|
|
1157
|
+
continue;
|
|
1158
|
+
}
|
|
1159
|
+
const stored = rule.getValue(column) || [];
|
|
1160
|
+
for (const related of stored) {
|
|
1161
|
+
const relatedId = (_a = resolveReferenceId(related)) === null || _a === void 0 ? void 0 : _a.toString();
|
|
1162
|
+
if (relatedId) {
|
|
1163
|
+
idsForColumn.add(normalizeId(relatedId));
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
storedIds[column] = idsForColumn;
|
|
1168
|
+
}
|
|
1169
|
+
await this.validateRoutingReferences({
|
|
1170
|
+
projectId: projectId,
|
|
1171
|
+
payload: payload,
|
|
1172
|
+
storedIds: storedIds,
|
|
1173
|
+
});
|
|
1174
|
+
}
|
|
1175
|
+
}
|
|
1176
|
+
/*
|
|
1177
|
+
* User is a global model with no tenant column, so the reference validator
|
|
1178
|
+
* could only confirm a user EXISTS - any account on the instance would pass.
|
|
1179
|
+
* Owners are notified with the record's title and a link to it, so naming a
|
|
1180
|
+
* stranger as an owner would tell them about another project's alert.
|
|
1181
|
+
*
|
|
1182
|
+
* Team membership is what "in this project" means, and it is exactly the set
|
|
1183
|
+
* the dashboard's owner picker offers (ProjectUser lists TeamMember rows).
|
|
1184
|
+
* Pending invitations count for that reason: refusing a user the picker just
|
|
1185
|
+
* offered would fail a save nobody could explain.
|
|
1186
|
+
*
|
|
1187
|
+
* The error echoes the ids the caller sent and never a name or email -
|
|
1188
|
+
* resolving an id from outside the project into a person would leak it.
|
|
1189
|
+
*/
|
|
1190
|
+
async validateOwnerUsersAreProjectMembers(data) {
|
|
1191
|
+
const requestedById = new Map();
|
|
1192
|
+
for (const userId of data.userIds) {
|
|
1193
|
+
const key = normalizeId(userId);
|
|
1194
|
+
if (key && !requestedById.has(key)) {
|
|
1195
|
+
requestedById.set(key, userId);
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
if (requestedById.size === 0) {
|
|
1199
|
+
return;
|
|
1200
|
+
}
|
|
1201
|
+
const memberships = await TeamMemberService.findBy({
|
|
1202
|
+
query: {
|
|
1203
|
+
projectId: data.projectId,
|
|
1204
|
+
userId: QueryHelper.any(Array.from(requestedById.values())),
|
|
1205
|
+
},
|
|
1206
|
+
select: {
|
|
1207
|
+
userId: true,
|
|
1208
|
+
},
|
|
1209
|
+
limit: LIMIT_PER_PROJECT,
|
|
1210
|
+
skip: 0,
|
|
1211
|
+
props: {
|
|
1212
|
+
isRoot: true,
|
|
1213
|
+
},
|
|
1214
|
+
});
|
|
1215
|
+
const memberIds = new Set();
|
|
1216
|
+
for (const membership of memberships) {
|
|
1217
|
+
if (membership.userId) {
|
|
1218
|
+
memberIds.add(normalizeId(membership.userId.toString()));
|
|
1219
|
+
}
|
|
1220
|
+
}
|
|
1221
|
+
const nonMembers = [];
|
|
1222
|
+
for (const [key, userId] of requestedById) {
|
|
1223
|
+
if (!memberIds.has(key)) {
|
|
1224
|
+
nonMembers.push(userId);
|
|
1225
|
+
}
|
|
1226
|
+
}
|
|
1227
|
+
if (nonMembers.length === 0) {
|
|
1228
|
+
return;
|
|
1229
|
+
}
|
|
1230
|
+
throw new BadDataException(`${OWNER_USERS_NOT_IN_PROJECT_ERROR_PREFIX} ${nonMembers
|
|
1231
|
+
.map((userId) => {
|
|
1232
|
+
return `"${userId}"`;
|
|
1233
|
+
})
|
|
1234
|
+
.join(", ")}. Please pick users from this project and try again.`);
|
|
1235
|
+
}
|
|
1236
|
+
/*
|
|
1237
|
+
* The ids a many-to-many payload introduces. The same list reaches a hook as
|
|
1238
|
+
* entity stubs, `{ _id }` objects, ObjectIDs or bare uuid strings depending
|
|
1239
|
+
* on the caller, which resolveReferenceId already reads; anything it cannot
|
|
1240
|
+
* read is not an id and is left for the write itself to reject.
|
|
1241
|
+
*/
|
|
1242
|
+
getIntroducedRelationIds(value, storedIds) {
|
|
1243
|
+
var _a;
|
|
1244
|
+
if (value === undefined || value === null) {
|
|
1245
|
+
return [];
|
|
1246
|
+
}
|
|
1247
|
+
const items = Array.isArray(value) ? value : [value];
|
|
1248
|
+
const seen = new Set();
|
|
1249
|
+
const ids = [];
|
|
1250
|
+
for (const item of items) {
|
|
1251
|
+
const id = ((_a = resolveReferenceId(item)) === null || _a === void 0 ? void 0 : _a.toString().trim()) || "";
|
|
1252
|
+
if (!id) {
|
|
1253
|
+
continue;
|
|
1254
|
+
}
|
|
1255
|
+
const key = normalizeId(id);
|
|
1256
|
+
if (seen.has(key) || (storedIds === null || storedIds === void 0 ? void 0 : storedIds.has(key))) {
|
|
1257
|
+
continue;
|
|
1258
|
+
}
|
|
1259
|
+
seen.add(key);
|
|
1260
|
+
ids.push(id);
|
|
1261
|
+
}
|
|
1262
|
+
return ids;
|
|
1263
|
+
}
|
|
1264
|
+
/*
|
|
1265
|
+
* Built per call rather than at module load: these services sit in an import
|
|
1266
|
+
* graph that loops back to this one, and a module-level table would capture
|
|
1267
|
+
* whichever of them had not finished loading yet as undefined.
|
|
1268
|
+
*/
|
|
1269
|
+
getProjectScopedRelations() {
|
|
1270
|
+
const onCallDutyPolicyService = OnCallDutyPolicyService;
|
|
1271
|
+
const labelService = LabelService;
|
|
1272
|
+
const teamService = TeamService;
|
|
1273
|
+
return [
|
|
1274
|
+
{
|
|
1275
|
+
column: "onCallDutyPolicies",
|
|
1276
|
+
modelName: "On-Call Duty Policy",
|
|
1277
|
+
service: onCallDutyPolicyService,
|
|
1278
|
+
},
|
|
1279
|
+
{
|
|
1280
|
+
column: "incidentOnCallDutyPolicies",
|
|
1281
|
+
modelName: "On-Call Duty Policy",
|
|
1282
|
+
service: onCallDutyPolicyService,
|
|
1283
|
+
},
|
|
1284
|
+
{
|
|
1285
|
+
column: "alertLabels",
|
|
1286
|
+
modelName: "Label",
|
|
1287
|
+
service: labelService,
|
|
1288
|
+
},
|
|
1289
|
+
{
|
|
1290
|
+
column: "incidentLabels",
|
|
1291
|
+
modelName: "Label",
|
|
1292
|
+
service: labelService,
|
|
1293
|
+
},
|
|
1294
|
+
{
|
|
1295
|
+
column: "alertOwnerTeams",
|
|
1296
|
+
modelName: "Team",
|
|
1297
|
+
service: teamService,
|
|
1298
|
+
},
|
|
1299
|
+
{
|
|
1300
|
+
column: "incidentOwnerTeams",
|
|
1301
|
+
modelName: "Team",
|
|
1302
|
+
service: teamService,
|
|
1303
|
+
},
|
|
1304
|
+
];
|
|
1305
|
+
}
|
|
567
1306
|
async getProjectIdsForUpdateQuery(updateBy) {
|
|
568
1307
|
const rules = await this.findBy({
|
|
569
1308
|
query: updateBy.query,
|
|
@@ -854,6 +1593,12 @@ __decorate([
|
|
|
854
1593
|
__metadata("design:paramtypes", [Object]),
|
|
855
1594
|
__metadata("design:returntype", Promise)
|
|
856
1595
|
], Service.prototype, "onBeforeCreate", null);
|
|
1596
|
+
__decorate([
|
|
1597
|
+
CaptureSpan(),
|
|
1598
|
+
__metadata("design:type", Function),
|
|
1599
|
+
__metadata("design:paramtypes", [Object, Model]),
|
|
1600
|
+
__metadata("design:returntype", Promise)
|
|
1601
|
+
], Service.prototype, "onCreateSuccess", null);
|
|
857
1602
|
__decorate([
|
|
858
1603
|
CaptureSpan(),
|
|
859
1604
|
__metadata("design:type", Function),
|
|
@@ -866,6 +1611,12 @@ __decorate([
|
|
|
866
1611
|
__metadata("design:paramtypes", [Object]),
|
|
867
1612
|
__metadata("design:returntype", Promise)
|
|
868
1613
|
], Service.prototype, "onBeforeDelete", null);
|
|
1614
|
+
__decorate([
|
|
1615
|
+
CaptureSpan(),
|
|
1616
|
+
__metadata("design:type", Function),
|
|
1617
|
+
__metadata("design:paramtypes", [Object, Array]),
|
|
1618
|
+
__metadata("design:returntype", Promise)
|
|
1619
|
+
], Service.prototype, "onDeleteSuccess", null);
|
|
869
1620
|
__decorate([
|
|
870
1621
|
CaptureSpan(),
|
|
871
1622
|
__metadata("design:type", Function),
|