@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
|
@@ -8,11 +8,22 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
10
|
import Monitor from "../../Models/DatabaseModels/Monitor";
|
|
11
|
+
import { ServiceLevelObjectiveFeedEventType } from "../../Models/DatabaseModels/ServiceLevelObjectiveFeed";
|
|
12
|
+
import { Gray500, Green500 } from "../../Types/BrandColors";
|
|
11
13
|
import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
12
14
|
import ObjectID from "../../Types/ObjectID";
|
|
13
|
-
import
|
|
15
|
+
import { escapeMarkdownInline } from "../../Utils/Markdown/MarkdownEscape";
|
|
16
|
+
import RuleCriteriaMatcher from "../../Utils/Rules/RuleCriteriaMatcher";
|
|
17
|
+
import { MAX_RULES_EVALUATED_PER_PROJECT } from "../../Utils/Rules/RuleEngineLimits";
|
|
18
|
+
import RulePatternMatchUtil from "../../Utils/Rules/RulePatternMatchUtil";
|
|
19
|
+
import QueryHelper from "../Types/Database/QueryHelper";
|
|
14
20
|
import logger from "../Utils/Logger";
|
|
21
|
+
import logIfRuleReadWasTruncated from "../Utils/Rules/RuleEngineRuleRead";
|
|
22
|
+
import SloLegacyMonitorLabelAdoption from "../Utils/Slo/SloLegacyMonitorLabelAdoption";
|
|
23
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
15
24
|
import MonitorService from "./MonitorService";
|
|
25
|
+
import ServiceLevelObjectiveFeedService from "./ServiceLevelObjectiveFeedService";
|
|
26
|
+
import ServiceLevelObjectiveMonitorRuleService from "./ServiceLevelObjectiveMonitorRuleService";
|
|
16
27
|
import ServiceLevelObjectiveService from "./ServiceLevelObjectiveService";
|
|
17
28
|
function emptyResult() {
|
|
18
29
|
return { monitorIdsAdded: [], monitorIdsRemoved: [] };
|
|
@@ -48,27 +59,66 @@ function isSameSet(a, b) {
|
|
|
48
59
|
}
|
|
49
60
|
return true;
|
|
50
61
|
}
|
|
62
|
+
/*
|
|
63
|
+
* The rule kind named in logs - and the model this engine evaluates, which
|
|
64
|
+
* the rule-criteria runtime coverage contract looks for in this file.
|
|
65
|
+
*/
|
|
66
|
+
const RULE_KIND = "ServiceLevelObjectiveMonitorRule";
|
|
51
67
|
/**
|
|
52
|
-
*
|
|
68
|
+
* Everything the engine needs to know about one rule to decide membership.
|
|
69
|
+
* `findBy` hands back partial models, so this is the shape actually selected
|
|
70
|
+
* rather than the full entity. `criteria: true` is load-bearing: without it a
|
|
71
|
+
* criteria-backed rule reads as a legacy one whose shadowed "(?!)" name
|
|
72
|
+
* pattern matches nothing.
|
|
73
|
+
*/
|
|
74
|
+
const RULE_SELECT = {
|
|
75
|
+
_id: true,
|
|
76
|
+
projectId: true,
|
|
77
|
+
serviceLevelObjectiveId: true,
|
|
78
|
+
isEnabled: true,
|
|
79
|
+
monitorLabels: { _id: true },
|
|
80
|
+
monitorNamePattern: true,
|
|
81
|
+
monitorDescriptionPattern: true,
|
|
82
|
+
criteria: true,
|
|
83
|
+
};
|
|
84
|
+
/*
|
|
85
|
+
* Feed items name the monitors a sync attached or detached. A rule written
|
|
86
|
+
* against a whole estate can move thousands at once, so the sentence names a
|
|
87
|
+
* handful, the "more information" section lists a bounded page of them, and
|
|
88
|
+
* the rest are counted rather than enumerated.
|
|
89
|
+
*/
|
|
90
|
+
const MAX_MONITORS_NAMED_IN_FEED_HEADLINE = 5;
|
|
91
|
+
const MAX_MONITORS_LISTED_IN_FEED_DETAILS = 50;
|
|
92
|
+
/**
|
|
93
|
+
* Keeps an SLO's monitor list in step with its monitor rules.
|
|
53
94
|
*
|
|
54
|
-
* An SLO can
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
95
|
+
* An SLO can carry any number of ServiceLevelObjectiveMonitorRule rows ("every
|
|
96
|
+
* monitor labelled Production", "every monitor whose name starts with api-").
|
|
97
|
+
* Membership is a UNION at the SLO level: a monitor belongs to the SLO while
|
|
98
|
+
* at least one ENABLED rule of that SLO matches it, and stops belonging the
|
|
99
|
+
* moment none does. Two entry points drive that, because membership can be
|
|
100
|
+
* invalidated from either side:
|
|
58
101
|
*
|
|
59
|
-
* - the SLO side (its
|
|
60
|
-
*
|
|
102
|
+
* - the SLO side (one of its rules was created, edited, disabled or
|
|
103
|
+
* deleted) -> syncMonitorsForSlo
|
|
104
|
+
* - the monitor side (its labels, name or description changed, or it was
|
|
105
|
+
* just created) -> syncSlosForMonitor
|
|
61
106
|
*
|
|
62
107
|
* Both write through ServiceLevelObjective.autoAddedMonitors, which records
|
|
63
|
-
* which attachments the
|
|
64
|
-
* a human attached by hand survives every rule evaluation
|
|
65
|
-
* that runs when the rule is deleted.
|
|
108
|
+
* which attachments the rules own. Only those are ever detached, so a monitor
|
|
109
|
+
* a human attached by hand survives every rule evaluation - including the one
|
|
110
|
+
* that runs when the last rule is deleted.
|
|
111
|
+
*
|
|
112
|
+
* Membership is kept in sync whatever the SLO's own state: a disabled or
|
|
113
|
+
* archived SLO is skipped by the evaluation worker, not by this engine, so
|
|
114
|
+
* re-enabling or unarchiving one starts from the right monitor set instead of
|
|
115
|
+
* whatever it held when it was switched off.
|
|
66
116
|
*/
|
|
67
117
|
export class ServiceLevelObjectiveMonitorRuleEngineServiceClass {
|
|
68
118
|
/**
|
|
69
|
-
* Re-evaluates one SLO
|
|
70
|
-
* Use when
|
|
71
|
-
*
|
|
119
|
+
* Re-evaluates every enabled rule of one SLO against every monitor in its
|
|
120
|
+
* project. Use when a rule changed - it is the authoritative, self-healing
|
|
121
|
+
* path and repairs any drift it finds.
|
|
72
122
|
*/
|
|
73
123
|
async syncMonitorsForSlo(data) {
|
|
74
124
|
const slo = await ServiceLevelObjectiveService.findOneById({
|
|
@@ -76,9 +126,7 @@ export class ServiceLevelObjectiveMonitorRuleEngineServiceClass {
|
|
|
76
126
|
select: {
|
|
77
127
|
_id: true,
|
|
78
128
|
projectId: true,
|
|
79
|
-
|
|
80
|
-
_id: true,
|
|
81
|
-
},
|
|
129
|
+
name: true,
|
|
82
130
|
monitors: {
|
|
83
131
|
_id: true,
|
|
84
132
|
},
|
|
@@ -93,31 +141,35 @@ export class ServiceLevelObjectiveMonitorRuleEngineServiceClass {
|
|
|
93
141
|
if (!slo || !slo.id || !slo.projectId) {
|
|
94
142
|
return emptyResult();
|
|
95
143
|
}
|
|
96
|
-
const
|
|
144
|
+
const rules = await this.findEnabledRules({
|
|
145
|
+
projectId: slo.projectId,
|
|
146
|
+
serviceLevelObjectiveId: slo.id,
|
|
147
|
+
});
|
|
97
148
|
/*
|
|
98
|
-
* No rule (
|
|
99
|
-
* turn detaches everything the
|
|
100
|
-
* therefore undoes
|
|
101
|
-
* an SLO nobody remembers configuring.
|
|
149
|
+
* No enabled rule (the last one was just disabled or deleted) means
|
|
150
|
+
* nothing matches, which in turn detaches everything the rules had
|
|
151
|
+
* attached. Removing the rules therefore undoes them rather than leaving
|
|
152
|
+
* their monitors stranded on an SLO nobody remembers configuring.
|
|
102
153
|
*/
|
|
103
|
-
const
|
|
104
|
-
?
|
|
105
|
-
: await this.
|
|
154
|
+
const matchedMonitors = rules.length === 0
|
|
155
|
+
? []
|
|
156
|
+
: await this.findMatchingMonitors({
|
|
106
157
|
projectId: slo.projectId,
|
|
107
|
-
|
|
158
|
+
rules: rules,
|
|
108
159
|
});
|
|
109
160
|
return await this.writeMembership({
|
|
110
161
|
slo: slo,
|
|
111
162
|
attachedMonitorIds: toIdSet(slo.monitors),
|
|
112
163
|
autoAddedMonitorIds: toIdSet(slo.autoAddedMonitors),
|
|
113
|
-
matchedMonitorIds:
|
|
164
|
+
matchedMonitorIds: toIdSet(matchedMonitors),
|
|
165
|
+
knownMonitors: matchedMonitors,
|
|
114
166
|
});
|
|
115
167
|
}
|
|
116
168
|
/**
|
|
117
|
-
* Re-evaluates every
|
|
118
|
-
* Use when the monitor
|
|
119
|
-
* membership,
|
|
120
|
-
* monitors the rules match.
|
|
169
|
+
* Re-evaluates every enabled SLO monitor rule in the project against a
|
|
170
|
+
* single monitor. Use when the monitor changed: it touches only this
|
|
171
|
+
* monitor's membership, and costs a fixed handful of queries per project
|
|
172
|
+
* regardless of how many monitors the rules match.
|
|
121
173
|
*/
|
|
122
174
|
async syncSlosForMonitor(data) {
|
|
123
175
|
var _a;
|
|
@@ -126,6 +178,8 @@ export class ServiceLevelObjectiveMonitorRuleEngineServiceClass {
|
|
|
126
178
|
select: {
|
|
127
179
|
_id: true,
|
|
128
180
|
projectId: true,
|
|
181
|
+
name: true,
|
|
182
|
+
description: true,
|
|
129
183
|
labels: {
|
|
130
184
|
_id: true,
|
|
131
185
|
},
|
|
@@ -141,18 +195,113 @@ export class ServiceLevelObjectiveMonitorRuleEngineServiceClass {
|
|
|
141
195
|
if (!projectId) {
|
|
142
196
|
return [];
|
|
143
197
|
}
|
|
144
|
-
const monitorLabelIds = toIdSet(monitor.labels);
|
|
145
198
|
const monitorId = monitor.id.toString();
|
|
199
|
+
const rules = await this.findEnabledRules({ projectId: projectId });
|
|
200
|
+
const rulesBySloId = new Map();
|
|
201
|
+
for (const rule of rules) {
|
|
202
|
+
const sloId = ((_a = rule.serviceLevelObjectiveId) === null || _a === void 0 ? void 0 : _a.toString()) || "";
|
|
203
|
+
if (!sloId) {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
const sloRules = rulesBySloId.get(sloId) || [];
|
|
207
|
+
sloRules.push(rule);
|
|
208
|
+
rulesBySloId.set(sloId, sloRules);
|
|
209
|
+
}
|
|
210
|
+
/*
|
|
211
|
+
* The SLOs this monitor's membership can change on: every SLO with an
|
|
212
|
+
* enabled rule, plus every SLO that still records this monitor as
|
|
213
|
+
* rule-attached. The second group has no enabled rule left (a disable or
|
|
214
|
+
* delete whose own sync failed), so nothing matches there any more and
|
|
215
|
+
* the monitor is released - without it, that drift would only ever be
|
|
216
|
+
* repaired by the next edit to a rule on that SLO.
|
|
217
|
+
*/
|
|
218
|
+
const candidateSloIds = new Set(rulesBySloId.keys());
|
|
219
|
+
for (const sloId of await this.findSloIdsHoldingAutoAddedMonitor({
|
|
220
|
+
projectId: projectId,
|
|
221
|
+
monitorId: monitor.id,
|
|
222
|
+
})) {
|
|
223
|
+
candidateSloIds.add(sloId);
|
|
224
|
+
}
|
|
225
|
+
if (candidateSloIds.size === 0) {
|
|
226
|
+
return [];
|
|
227
|
+
}
|
|
228
|
+
const results = [];
|
|
229
|
+
/*
|
|
230
|
+
* A candidate with no enabled rule is about to have this monitor released.
|
|
231
|
+
* Before that, one whose monitors were attached by the deprecated label
|
|
232
|
+
* list - written by a previous-release pod after the one-shot backfill ran
|
|
233
|
+
* - is given its rule, and synced with it instead. Without this the first
|
|
234
|
+
* edit to such a monitor silently took it off the SLO. See
|
|
235
|
+
* SloLegacyMonitorLabelAdoption for why this can do it without bringing
|
|
236
|
+
* back a rule a user deleted, and for the other places that adopt.
|
|
237
|
+
*/
|
|
238
|
+
const sloIdsWithoutEnabledRule = Array.from(candidateSloIds).filter((sloId) => {
|
|
239
|
+
return !rulesBySloId.has(sloId);
|
|
240
|
+
});
|
|
241
|
+
if (sloIdsWithoutEnabledRule.length > 0) {
|
|
242
|
+
let adoptedSloIds = new Set();
|
|
243
|
+
try {
|
|
244
|
+
adoptedSloIds = new Set(await SloLegacyMonitorLabelAdoption.adoptLegacyMonitorLabels({
|
|
245
|
+
projectId: projectId,
|
|
246
|
+
serviceLevelObjectiveIds: sloIdsWithoutEnabledRule,
|
|
247
|
+
}));
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
/*
|
|
251
|
+
* Whether these SLOs are label-configured is unknown, and releasing
|
|
252
|
+
* the monitor from one that is would lose it. They are left alone
|
|
253
|
+
* this time; releasing a genuinely stale attachment can wait for the
|
|
254
|
+
* next sync.
|
|
255
|
+
*/
|
|
256
|
+
logger.error(`Error adopting legacy SLO monitor labels for monitor ${monitorId}; not releasing it from SLOs without an enabled rule this time: ${error}`, {
|
|
257
|
+
projectId: projectId.toString(),
|
|
258
|
+
monitorId: monitorId,
|
|
259
|
+
});
|
|
260
|
+
for (const sloId of sloIdsWithoutEnabledRule) {
|
|
261
|
+
candidateSloIds.delete(sloId);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
for (const sloId of sloIdsWithoutEnabledRule) {
|
|
265
|
+
if (!adoptedSloIds.has(sloId.toLowerCase())) {
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
candidateSloIds.delete(sloId);
|
|
269
|
+
try {
|
|
270
|
+
/*
|
|
271
|
+
* A full sync, not just this monitor: the new rule also claims every
|
|
272
|
+
* other labelled monitor the previous-release engine would have
|
|
273
|
+
* attached since.
|
|
274
|
+
*/
|
|
275
|
+
const result = await this.syncMonitorsForSlo({
|
|
276
|
+
serviceLevelObjectiveId: new ObjectID(sloId),
|
|
277
|
+
});
|
|
278
|
+
if (result.monitorIdsAdded.length > 0 ||
|
|
279
|
+
result.monitorIdsRemoved.length > 0) {
|
|
280
|
+
results.push(result);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
logger.error(`Error syncing SLO ${sloId} after adopting its legacy monitor labels for monitor ${monitorId}: ${error}`, {
|
|
285
|
+
projectId: projectId.toString(),
|
|
286
|
+
monitorId: monitorId,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (candidateSloIds.size === 0) {
|
|
291
|
+
return results;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
146
294
|
const slos = await ServiceLevelObjectiveService.findBy({
|
|
147
295
|
query: {
|
|
148
296
|
projectId: projectId,
|
|
297
|
+
_id: QueryHelper.any(Array.from(candidateSloIds).map((id) => {
|
|
298
|
+
return new ObjectID(id);
|
|
299
|
+
})),
|
|
149
300
|
},
|
|
150
301
|
select: {
|
|
151
302
|
_id: true,
|
|
152
303
|
projectId: true,
|
|
153
|
-
|
|
154
|
-
_id: true,
|
|
155
|
-
},
|
|
304
|
+
name: true,
|
|
156
305
|
monitors: {
|
|
157
306
|
_id: true,
|
|
158
307
|
},
|
|
@@ -166,38 +315,36 @@ export class ServiceLevelObjectiveMonitorRuleEngineServiceClass {
|
|
|
166
315
|
isRoot: true,
|
|
167
316
|
},
|
|
168
317
|
});
|
|
169
|
-
const results = [];
|
|
170
318
|
for (const slo of slos) {
|
|
171
|
-
|
|
172
|
-
// SLOs without a label rule are curated by hand. Never touch them.
|
|
173
|
-
if (ruleLabelIds.size === 0) {
|
|
319
|
+
if (!slo.id) {
|
|
174
320
|
continue;
|
|
175
321
|
}
|
|
176
|
-
const attachedMonitorIds = toIdSet(slo.monitors);
|
|
177
|
-
const autoAddedMonitorIds = toIdSet(slo.autoAddedMonitors);
|
|
178
|
-
const doesMatch = this.doesLabelSetMatchRule({
|
|
179
|
-
labelIds: monitorLabelIds,
|
|
180
|
-
ruleLabelIds: ruleLabelIds,
|
|
181
|
-
});
|
|
182
|
-
/*
|
|
183
|
-
* Only this monitor's membership is in question, so the "matched" set
|
|
184
|
-
* handed to writeMembership is the SLO's current auto-added set with
|
|
185
|
-
* this monitor toggled in or out. Every other auto-added monitor is
|
|
186
|
-
* reported as still matching and is left exactly where it is.
|
|
187
|
-
*/
|
|
188
|
-
const matchedMonitorIds = new Set(autoAddedMonitorIds);
|
|
189
|
-
if (doesMatch) {
|
|
190
|
-
matchedMonitorIds.add(monitorId);
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
matchedMonitorIds.delete(monitorId);
|
|
194
|
-
}
|
|
195
322
|
try {
|
|
323
|
+
const sloRules = rulesBySloId.get(slo.id.toString()) || [];
|
|
324
|
+
const doesMatch = sloRules.some((rule) => {
|
|
325
|
+
return this.doesMonitorMatchRule({ monitor: monitor, rule: rule });
|
|
326
|
+
});
|
|
327
|
+
const autoAddedMonitorIds = toIdSet(slo.autoAddedMonitors);
|
|
328
|
+
/*
|
|
329
|
+
* Only this monitor's membership is in question, so the "matched" set
|
|
330
|
+
* handed to writeMembership is the SLO's current rule-attached set
|
|
331
|
+
* with this monitor toggled in or out. Every other rule-attached
|
|
332
|
+
* monitor is reported as still matching and is left exactly where it
|
|
333
|
+
* is.
|
|
334
|
+
*/
|
|
335
|
+
const matchedMonitorIds = new Set(autoAddedMonitorIds);
|
|
336
|
+
if (doesMatch) {
|
|
337
|
+
matchedMonitorIds.add(monitorId);
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
matchedMonitorIds.delete(monitorId);
|
|
341
|
+
}
|
|
196
342
|
const result = await this.writeMembership({
|
|
197
343
|
slo: slo,
|
|
198
|
-
attachedMonitorIds:
|
|
344
|
+
attachedMonitorIds: toIdSet(slo.monitors),
|
|
199
345
|
autoAddedMonitorIds: autoAddedMonitorIds,
|
|
200
346
|
matchedMonitorIds: matchedMonitorIds,
|
|
347
|
+
knownMonitors: [monitor],
|
|
201
348
|
});
|
|
202
349
|
if (result.monitorIdsAdded.length > 0 ||
|
|
203
350
|
result.monitorIdsRemoved.length > 0) {
|
|
@@ -206,10 +353,10 @@ export class ServiceLevelObjectiveMonitorRuleEngineServiceClass {
|
|
|
206
353
|
}
|
|
207
354
|
catch (error) {
|
|
208
355
|
/*
|
|
209
|
-
* One SLO failing must not stop the others: the monitor
|
|
210
|
-
*
|
|
356
|
+
* One SLO failing must not stop the others: the monitor has already
|
|
357
|
+
* changed, and half a sync is better than none.
|
|
211
358
|
*/
|
|
212
|
-
logger.error(`Error syncing SLO ${
|
|
359
|
+
logger.error(`Error syncing SLO ${slo.id.toString()} monitor rules for monitor ${monitorId}: ${error}`, {
|
|
213
360
|
projectId: projectId.toString(),
|
|
214
361
|
monitorId: monitorId,
|
|
215
362
|
});
|
|
@@ -218,22 +365,139 @@ export class ServiceLevelObjectiveMonitorRuleEngineServiceClass {
|
|
|
218
365
|
return results;
|
|
219
366
|
}
|
|
220
367
|
/**
|
|
221
|
-
*
|
|
368
|
+
* Does this monitor satisfy the rule?
|
|
369
|
+
*
|
|
370
|
+
* A rule with configurable `criteria` is evaluated filter by filter through
|
|
371
|
+
* the shared matcher (All / Any, text and label operators). A rule without
|
|
372
|
+
* it uses its legacy columns, which are ANDed with empty ones skipped - the
|
|
373
|
+
* way every other monitor rule in the product reads. Either way, a rule
|
|
374
|
+
* with no criteria at all matches nothing: silently measuring the entire
|
|
375
|
+
* project is not a reasonable reading of an empty form. Users who genuinely
|
|
376
|
+
* want that write `.*` as the name pattern.
|
|
377
|
+
*
|
|
378
|
+
* Pattern matching goes through RulePatternMatchUtil, the same matcher the
|
|
379
|
+
* status page and network device rules use, so a pattern means the same
|
|
380
|
+
* thing everywhere in the product: a case-insensitive regex, or a `*`
|
|
381
|
+
* wildcard glob (#2940).
|
|
222
382
|
*/
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
383
|
+
doesMonitorMatchRule(data) {
|
|
384
|
+
return RuleCriteriaMatcher.matchesWithLegacySync({
|
|
385
|
+
rule: data.rule,
|
|
386
|
+
legacyFields: [
|
|
387
|
+
"monitorLabels",
|
|
388
|
+
"monitorNamePattern",
|
|
389
|
+
"monitorDescriptionPattern",
|
|
390
|
+
],
|
|
391
|
+
emptyResult: false,
|
|
392
|
+
matchesLegacyRule: (legacyRule) => {
|
|
393
|
+
return this.doesMonitorMatchLegacyRule({
|
|
394
|
+
monitor: data.monitor,
|
|
395
|
+
rule: legacyRule,
|
|
396
|
+
});
|
|
397
|
+
},
|
|
226
398
|
});
|
|
227
|
-
|
|
228
|
-
|
|
399
|
+
}
|
|
400
|
+
doesMonitorMatchLegacyRule(data) {
|
|
401
|
+
const { monitor, rule } = data;
|
|
402
|
+
const hasLabelCriteria = Boolean(rule.monitorLabels && rule.monitorLabels.length > 0);
|
|
403
|
+
const hasNameCriteria = Boolean(rule.monitorNamePattern);
|
|
404
|
+
const hasDescriptionCriteria = Boolean(rule.monitorDescriptionPattern);
|
|
405
|
+
if (!hasLabelCriteria && !hasNameCriteria && !hasDescriptionCriteria) {
|
|
406
|
+
return false;
|
|
229
407
|
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
408
|
+
if (hasLabelCriteria) {
|
|
409
|
+
const ruleLabelIds = toIdSet(rule.monitorLabels);
|
|
410
|
+
const monitorLabelIds = toIdSet(monitor.labels);
|
|
411
|
+
let hasAnyLabel = false;
|
|
412
|
+
for (const labelId of monitorLabelIds) {
|
|
413
|
+
if (ruleLabelIds.has(labelId)) {
|
|
414
|
+
hasAnyLabel = true;
|
|
415
|
+
break;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
if (!hasAnyLabel) {
|
|
419
|
+
return false;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
if (hasNameCriteria) {
|
|
423
|
+
if (!RulePatternMatchUtil.matches(monitor.name, rule.monitorNamePattern)) {
|
|
424
|
+
return false;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
if (hasDescriptionCriteria) {
|
|
428
|
+
if (!RulePatternMatchUtil.matches(monitor.description, rule.monitorDescriptionPattern)) {
|
|
429
|
+
return false;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
return true;
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* The enabled rules of a project, or of one SLO in it. Disabled rules are
|
|
436
|
+
* filtered in the query rather than in memory: they match nothing, so there
|
|
437
|
+
* is no reason to count them against the per-project read ceiling.
|
|
438
|
+
*/
|
|
439
|
+
async findEnabledRules(data) {
|
|
440
|
+
const rules = await ServiceLevelObjectiveMonitorRuleService.findBy({
|
|
441
|
+
query: data.serviceLevelObjectiveId
|
|
442
|
+
? {
|
|
443
|
+
projectId: data.projectId,
|
|
444
|
+
serviceLevelObjectiveId: data.serviceLevelObjectiveId,
|
|
445
|
+
isEnabled: true,
|
|
446
|
+
}
|
|
447
|
+
: {
|
|
448
|
+
projectId: data.projectId,
|
|
449
|
+
isEnabled: true,
|
|
450
|
+
},
|
|
451
|
+
select: RULE_SELECT,
|
|
452
|
+
limit: MAX_RULES_EVALUATED_PER_PROJECT,
|
|
453
|
+
skip: 0,
|
|
454
|
+
props: {
|
|
455
|
+
isRoot: true,
|
|
234
456
|
},
|
|
457
|
+
});
|
|
458
|
+
logIfRuleReadWasTruncated({
|
|
459
|
+
ruleKind: RULE_KIND,
|
|
460
|
+
projectId: data.projectId,
|
|
461
|
+
rulesRead: rules.length,
|
|
462
|
+
});
|
|
463
|
+
return rules;
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Every monitor in the project at least one of `rules` matches.
|
|
467
|
+
*
|
|
468
|
+
* When every rule is a legacy rule with a label list, a monitor can only
|
|
469
|
+
* match if it carries at least one label from the union of those lists, so
|
|
470
|
+
* that union is pushed into the query - it is the criterion that usually
|
|
471
|
+
* narrows the project the most. Anything else (a criteria-backed rule, a
|
|
472
|
+
* pattern-only rule) could match a monitor with no labels at all, so the
|
|
473
|
+
* project's monitors are read once and matched in memory. Regexes are always
|
|
474
|
+
* applied in memory: Postgres regex semantics and JavaScript's are not the
|
|
475
|
+
* same dialect, and the pattern a user typed has to mean one thing.
|
|
476
|
+
*/
|
|
477
|
+
async findMatchingMonitors(data) {
|
|
478
|
+
const rules = data.rules.filter((rule) => {
|
|
479
|
+
return this.hasAnyMatchCriteria(rule);
|
|
480
|
+
});
|
|
481
|
+
if (rules.length === 0) {
|
|
482
|
+
return [];
|
|
483
|
+
}
|
|
484
|
+
const labelPrefilter = this.getLabelPrefilter(rules);
|
|
485
|
+
const monitors = await MonitorService.findBy({
|
|
486
|
+
query: labelPrefilter
|
|
487
|
+
? {
|
|
488
|
+
projectId: data.projectId,
|
|
489
|
+
labels: labelPrefilter,
|
|
490
|
+
}
|
|
491
|
+
: {
|
|
492
|
+
projectId: data.projectId,
|
|
493
|
+
},
|
|
235
494
|
select: {
|
|
236
495
|
_id: true,
|
|
496
|
+
name: true,
|
|
497
|
+
description: true,
|
|
498
|
+
labels: {
|
|
499
|
+
_id: true,
|
|
500
|
+
},
|
|
237
501
|
},
|
|
238
502
|
limit: LIMIT_PER_PROJECT,
|
|
239
503
|
skip: 0,
|
|
@@ -241,27 +505,85 @@ export class ServiceLevelObjectiveMonitorRuleEngineServiceClass {
|
|
|
241
505
|
isRoot: true,
|
|
242
506
|
},
|
|
243
507
|
});
|
|
244
|
-
return
|
|
508
|
+
return monitors.filter((monitor) => {
|
|
509
|
+
return rules.some((rule) => {
|
|
510
|
+
return this.doesMonitorMatchRule({ monitor: monitor, rule: rule });
|
|
511
|
+
});
|
|
512
|
+
});
|
|
245
513
|
}
|
|
246
|
-
|
|
247
|
-
if (
|
|
248
|
-
return
|
|
514
|
+
hasAnyMatchCriteria(rule) {
|
|
515
|
+
if (rule.criteria !== undefined && rule.criteria !== null) {
|
|
516
|
+
return true;
|
|
249
517
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
518
|
+
return Boolean((rule.monitorLabels && rule.monitorLabels.length > 0) ||
|
|
519
|
+
rule.monitorNamePattern ||
|
|
520
|
+
rule.monitorDescriptionPattern);
|
|
521
|
+
}
|
|
522
|
+
/*
|
|
523
|
+
* The label ids to push into the monitor query, or null when no safe
|
|
524
|
+
* pre-filter exists. Safe only when EVERY rule is a legacy rule with labels:
|
|
525
|
+
* each such rule requires any-of its own labels, so no monitor outside the
|
|
526
|
+
* union can match any of them. The query may hand back only the matching
|
|
527
|
+
* label rows, which still leaves every rule its evidence.
|
|
528
|
+
*/
|
|
529
|
+
getLabelPrefilter(rules) {
|
|
530
|
+
const labelIds = new Map();
|
|
531
|
+
for (const rule of rules) {
|
|
532
|
+
if (rule.criteria !== undefined && rule.criteria !== null) {
|
|
533
|
+
return null;
|
|
534
|
+
}
|
|
535
|
+
const ruleLabels = (rule.monitorLabels || []).filter((label) => {
|
|
536
|
+
return Boolean(label.id);
|
|
537
|
+
});
|
|
538
|
+
if (ruleLabels.length === 0) {
|
|
539
|
+
return null;
|
|
540
|
+
}
|
|
541
|
+
for (const label of ruleLabels) {
|
|
542
|
+
labelIds.set(label.id.toString(), label.id);
|
|
253
543
|
}
|
|
254
544
|
}
|
|
255
|
-
return
|
|
545
|
+
return labelIds.size > 0 ? Array.from(labelIds.values()) : null;
|
|
546
|
+
}
|
|
547
|
+
/*
|
|
548
|
+
* The SLOs that record this monitor as rule-attached. Selects ids only: a
|
|
549
|
+
* relation filter can narrow the joined relation rows it hands back, so the
|
|
550
|
+
* membership itself is read separately by id.
|
|
551
|
+
*/
|
|
552
|
+
async findSloIdsHoldingAutoAddedMonitor(data) {
|
|
553
|
+
const slos = await ServiceLevelObjectiveService.findBy({
|
|
554
|
+
query: {
|
|
555
|
+
projectId: data.projectId,
|
|
556
|
+
autoAddedMonitors: [data.monitorId],
|
|
557
|
+
},
|
|
558
|
+
select: {
|
|
559
|
+
_id: true,
|
|
560
|
+
},
|
|
561
|
+
limit: LIMIT_PER_PROJECT,
|
|
562
|
+
skip: 0,
|
|
563
|
+
props: {
|
|
564
|
+
isRoot: true,
|
|
565
|
+
},
|
|
566
|
+
});
|
|
567
|
+
return slos
|
|
568
|
+
.map((slo) => {
|
|
569
|
+
var _a;
|
|
570
|
+
return ((_a = slo.id) === null || _a === void 0 ? void 0 : _a.toString()) || "";
|
|
571
|
+
})
|
|
572
|
+
.filter((id) => {
|
|
573
|
+
return id.length > 0;
|
|
574
|
+
});
|
|
256
575
|
}
|
|
257
576
|
/**
|
|
258
577
|
* Applies a computed match set to one SLO and persists the difference.
|
|
259
578
|
*
|
|
260
|
-
* `matchedMonitorIds` is the full set of monitors the
|
|
579
|
+
* `matchedMonitorIds` is the full set of monitors the rules claim. Anything
|
|
261
580
|
* in it that is not attached gets attached and recorded as rule-owned;
|
|
262
|
-
* anything recorded as rule-owned that the
|
|
581
|
+
* anything recorded as rule-owned that the rules no longer claim gets
|
|
263
582
|
* detached. Attachments that are not rule-owned are invisible to both
|
|
264
583
|
* halves, which is what keeps manual monitors safe.
|
|
584
|
+
*
|
|
585
|
+
* `knownMonitors` are monitors the caller already read, so the feed item
|
|
586
|
+
* can name them without another lookup.
|
|
265
587
|
*/
|
|
266
588
|
async writeMembership(data) {
|
|
267
589
|
var _a;
|
|
@@ -276,9 +598,9 @@ export class ServiceLevelObjectiveMonitorRuleEngineServiceClass {
|
|
|
276
598
|
return !matchedMonitorIds.has(id);
|
|
277
599
|
});
|
|
278
600
|
/*
|
|
279
|
-
* A monitor
|
|
280
|
-
* manual: it is never promoted into autoAddedMonitors, so
|
|
281
|
-
*
|
|
601
|
+
* A monitor a rule matches but that a human attached by hand stays
|
|
602
|
+
* manual: it is never promoted into autoAddedMonitors, so the rule
|
|
603
|
+
* letting go of it later detaches nothing.
|
|
282
604
|
*/
|
|
283
605
|
const nextAutoAddedMonitorIds = new Set(Array.from(autoAddedMonitorIds).filter((id) => {
|
|
284
606
|
return matchedMonitorIds.has(id);
|
|
@@ -306,6 +628,10 @@ export class ServiceLevelObjectiveMonitorRuleEngineServiceClass {
|
|
|
306
628
|
* the compiler infer it for two arrays of Monitor (whose own relations
|
|
307
629
|
* fan out across most of the schema) trips TS2589 "type instantiation is
|
|
308
630
|
* excessively deep". The shape is exactly what the column types say.
|
|
631
|
+
*
|
|
632
|
+
* Written as root on purpose: rules are server-side configuration, and
|
|
633
|
+
* the manual-add guard in ServiceLevelObjectiveService lets root writes
|
|
634
|
+
* through precisely so this one is never refused.
|
|
309
635
|
*/
|
|
310
636
|
const updateData = {
|
|
311
637
|
monitors: toMonitors(nextAttachedMonitorIds),
|
|
@@ -318,12 +644,207 @@ export class ServiceLevelObjectiveMonitorRuleEngineServiceClass {
|
|
|
318
644
|
isRoot: true,
|
|
319
645
|
},
|
|
320
646
|
});
|
|
321
|
-
logger.debug(`SLO monitor
|
|
647
|
+
logger.debug(`SLO monitor rules synced SLO ${slo.id.toString()}: +${monitorIdsAdded.length} / -${monitorIdsRemoved.length} monitors`, { projectId: (_a = slo.projectId) === null || _a === void 0 ? void 0 : _a.toString() });
|
|
648
|
+
/*
|
|
649
|
+
* Only monitors that were really on the list count as detached. A repair
|
|
650
|
+
* that drops a stale bookkeeping entry for a monitor no longer attached
|
|
651
|
+
* changed nothing a reader of the feed could see.
|
|
652
|
+
*/
|
|
653
|
+
await this.postMembershipFeedItems({
|
|
654
|
+
slo: slo,
|
|
655
|
+
monitorIdsAttached: monitorIdsAdded,
|
|
656
|
+
monitorIdsDetached: monitorIdsRemoved.filter((id) => {
|
|
657
|
+
return attachedMonitorIds.has(id);
|
|
658
|
+
}),
|
|
659
|
+
knownMonitors: data.knownMonitors || [],
|
|
660
|
+
});
|
|
322
661
|
return {
|
|
323
662
|
monitorIdsAdded: monitorIdsAdded,
|
|
324
663
|
monitorIdsRemoved: monitorIdsRemoved,
|
|
325
664
|
};
|
|
326
665
|
}
|
|
666
|
+
/*
|
|
667
|
+
* Tells the SLO's feed which monitors the rules just attached or detached.
|
|
668
|
+
* Posted without a user: nobody clicked anything, a rule reacted to a
|
|
669
|
+
* change. Manual attaches from the Monitors page are posted by the SLO
|
|
670
|
+
* service instead, and this engine writes as root with no user, which is
|
|
671
|
+
* how the two never double-post.
|
|
672
|
+
*
|
|
673
|
+
* Never throws. The membership is already saved; a feed item that could
|
|
674
|
+
* not be written must not turn a successful sync into a failed one.
|
|
675
|
+
*/
|
|
676
|
+
async postMembershipFeedItems(data) {
|
|
677
|
+
const { slo } = data;
|
|
678
|
+
if (!slo.id ||
|
|
679
|
+
!slo.projectId ||
|
|
680
|
+
(data.monitorIdsAttached.length === 0 &&
|
|
681
|
+
data.monitorIdsDetached.length === 0)) {
|
|
682
|
+
return;
|
|
683
|
+
}
|
|
684
|
+
try {
|
|
685
|
+
const sloLink = await ServiceLevelObjectiveService.getSloMarkdownLink({
|
|
686
|
+
projectId: slo.projectId,
|
|
687
|
+
sloId: slo.id,
|
|
688
|
+
sloName: slo.name || undefined,
|
|
689
|
+
});
|
|
690
|
+
const monitorNameById = await this.getMonitorNamesById({
|
|
691
|
+
monitorIds: [
|
|
692
|
+
...data.monitorIdsAttached.slice(0, MAX_MONITORS_LISTED_IN_FEED_DETAILS),
|
|
693
|
+
...data.monitorIdsDetached.slice(0, MAX_MONITORS_LISTED_IN_FEED_DETAILS),
|
|
694
|
+
],
|
|
695
|
+
knownMonitors: data.knownMonitors,
|
|
696
|
+
});
|
|
697
|
+
if (data.monitorIdsAttached.length > 0) {
|
|
698
|
+
const count = data.monitorIdsAttached.length;
|
|
699
|
+
await ServiceLevelObjectiveFeedService.createServiceLevelObjectiveFeedItem({
|
|
700
|
+
serviceLevelObjectiveId: slo.id,
|
|
701
|
+
projectId: slo.projectId,
|
|
702
|
+
serviceLevelObjectiveFeedEventType: ServiceLevelObjectiveFeedEventType.MonitorsAttached,
|
|
703
|
+
displayColor: Green500,
|
|
704
|
+
feedInfoInMarkdown: count === 1
|
|
705
|
+
? `🔗 Monitor rules attached ${this.describeMonitorNames({
|
|
706
|
+
monitorIds: data.monitorIdsAttached,
|
|
707
|
+
monitorNameById: monitorNameById,
|
|
708
|
+
})} to ${sloLink}. It now counts towards this SLO.`
|
|
709
|
+
: `🔗 Monitor rules attached ${count} monitors to ${sloLink}: ${this.describeMonitorNames({
|
|
710
|
+
monitorIds: data.monitorIdsAttached,
|
|
711
|
+
monitorNameById: monitorNameById,
|
|
712
|
+
})}.`,
|
|
713
|
+
moreInformationInMarkdown: this.listMonitorsInDetails({
|
|
714
|
+
title: "Monitors attached",
|
|
715
|
+
monitorIds: data.monitorIdsAttached,
|
|
716
|
+
monitorNameById: monitorNameById,
|
|
717
|
+
}),
|
|
718
|
+
});
|
|
719
|
+
}
|
|
720
|
+
if (data.monitorIdsDetached.length > 0) {
|
|
721
|
+
const count = data.monitorIdsDetached.length;
|
|
722
|
+
await ServiceLevelObjectiveFeedService.createServiceLevelObjectiveFeedItem({
|
|
723
|
+
serviceLevelObjectiveId: slo.id,
|
|
724
|
+
projectId: slo.projectId,
|
|
725
|
+
serviceLevelObjectiveFeedEventType: ServiceLevelObjectiveFeedEventType.MonitorsDetached,
|
|
726
|
+
displayColor: Gray500,
|
|
727
|
+
feedInfoInMarkdown: count === 1
|
|
728
|
+
? `✂️ Monitor rules detached ${this.describeMonitorNames({
|
|
729
|
+
monitorIds: data.monitorIdsDetached,
|
|
730
|
+
monitorNameById: monitorNameById,
|
|
731
|
+
})} from ${sloLink}. It no longer matches any enabled monitor rule of this SLO.`
|
|
732
|
+
: `✂️ Monitor rules detached ${count} monitors from ${sloLink}: ${this.describeMonitorNames({
|
|
733
|
+
monitorIds: data.monitorIdsDetached,
|
|
734
|
+
monitorNameById: monitorNameById,
|
|
735
|
+
})}.`,
|
|
736
|
+
moreInformationInMarkdown: this.listMonitorsInDetails({
|
|
737
|
+
title: "Monitors detached",
|
|
738
|
+
monitorIds: data.monitorIdsDetached,
|
|
739
|
+
monitorNameById: monitorNameById,
|
|
740
|
+
}),
|
|
741
|
+
});
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
catch (error) {
|
|
745
|
+
logger.error(`Error posting SLO monitor rule membership feed items for SLO ${slo.id.toString()}: ${error}`, { projectId: slo.projectId.toString() });
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
/*
|
|
749
|
+
* Names for the monitors a feed item mentions. Monitors the caller already
|
|
750
|
+
* holds are used as they are; the rest (a detached monitor is by definition
|
|
751
|
+
* no longer among the matches) are read in one bounded query.
|
|
752
|
+
*/
|
|
753
|
+
async getMonitorNamesById(data) {
|
|
754
|
+
var _a, _b;
|
|
755
|
+
const monitorNameById = new Map();
|
|
756
|
+
for (const monitor of data.knownMonitors) {
|
|
757
|
+
const id = ((_a = monitor.id) === null || _a === void 0 ? void 0 : _a.toString()) || "";
|
|
758
|
+
if (id && monitor.name) {
|
|
759
|
+
monitorNameById.set(id, monitor.name);
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
const missingIds = Array.from(new Set(data.monitorIds)).filter((id) => {
|
|
763
|
+
return !monitorNameById.has(id);
|
|
764
|
+
});
|
|
765
|
+
if (missingIds.length === 0) {
|
|
766
|
+
return monitorNameById;
|
|
767
|
+
}
|
|
768
|
+
const monitors = await MonitorService.findBy({
|
|
769
|
+
query: {
|
|
770
|
+
_id: QueryHelper.any(missingIds.map((id) => {
|
|
771
|
+
return new ObjectID(id);
|
|
772
|
+
})),
|
|
773
|
+
},
|
|
774
|
+
select: {
|
|
775
|
+
_id: true,
|
|
776
|
+
name: true,
|
|
777
|
+
},
|
|
778
|
+
limit: missingIds.length,
|
|
779
|
+
skip: 0,
|
|
780
|
+
props: {
|
|
781
|
+
isRoot: true,
|
|
782
|
+
},
|
|
783
|
+
});
|
|
784
|
+
for (const monitor of monitors) {
|
|
785
|
+
const id = ((_b = monitor.id) === null || _b === void 0 ? void 0 : _b.toString()) || "";
|
|
786
|
+
if (id && monitor.name) {
|
|
787
|
+
monitorNameById.set(id, monitor.name);
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
return monitorNameById;
|
|
791
|
+
}
|
|
792
|
+
/*
|
|
793
|
+
* The display names, escaped, sorted so the same set always reads the same
|
|
794
|
+
* way. A name that could not be resolved still counts - it is shown as
|
|
795
|
+
* "a monitor" rather than dropped from the sentence.
|
|
796
|
+
*/
|
|
797
|
+
getSortedMonitorNames(data) {
|
|
798
|
+
return data.monitorIds
|
|
799
|
+
.slice(0, MAX_MONITORS_LISTED_IN_FEED_DETAILS)
|
|
800
|
+
.map((id) => {
|
|
801
|
+
return data.monitorNameById.get(id) || "";
|
|
802
|
+
})
|
|
803
|
+
.sort((a, b) => {
|
|
804
|
+
if (!a || !b) {
|
|
805
|
+
return a ? -1 : b ? 1 : 0;
|
|
806
|
+
}
|
|
807
|
+
return a.localeCompare(b, undefined, { sensitivity: "base" });
|
|
808
|
+
})
|
|
809
|
+
.map((name) => {
|
|
810
|
+
return name ? `**${escapeMarkdownInline(name)}**` : "a monitor";
|
|
811
|
+
});
|
|
812
|
+
}
|
|
813
|
+
// "**A**", "**A** and **B**", "**A**, **B**, ... and 7 more".
|
|
814
|
+
describeMonitorNames(data) {
|
|
815
|
+
const names = this.getSortedMonitorNames(data);
|
|
816
|
+
const named = names.slice(0, MAX_MONITORS_NAMED_IN_FEED_HEADLINE);
|
|
817
|
+
const remaining = data.monitorIds.length - named.length;
|
|
818
|
+
if (remaining > 0) {
|
|
819
|
+
return `${named.join(", ")} and ${remaining} more`;
|
|
820
|
+
}
|
|
821
|
+
if (named.length <= 1) {
|
|
822
|
+
return named[0] || "a monitor";
|
|
823
|
+
}
|
|
824
|
+
return `${named.slice(0, -1).join(", ")} and ${named[named.length - 1]}`;
|
|
825
|
+
}
|
|
826
|
+
/*
|
|
827
|
+
* The full (bounded) list, only when the sentence could not name everyone -
|
|
828
|
+
* a single monitor, or a handful, is already fully described above.
|
|
829
|
+
*/
|
|
830
|
+
listMonitorsInDetails(data) {
|
|
831
|
+
if (data.monitorIds.length <= MAX_MONITORS_NAMED_IN_FEED_HEADLINE) {
|
|
832
|
+
return undefined;
|
|
833
|
+
}
|
|
834
|
+
const names = this.getSortedMonitorNames(data);
|
|
835
|
+
const notListed = data.monitorIds.length - names.length;
|
|
836
|
+
const lines = [
|
|
837
|
+
`**${data.title} (${data.monitorIds.length})**`,
|
|
838
|
+
"",
|
|
839
|
+
...names.map((name) => {
|
|
840
|
+
return `- ${name}`;
|
|
841
|
+
}),
|
|
842
|
+
];
|
|
843
|
+
if (notListed > 0) {
|
|
844
|
+
lines.push(`- …and ${notListed} more not listed here.`);
|
|
845
|
+
}
|
|
846
|
+
return lines.join("\n");
|
|
847
|
+
}
|
|
327
848
|
}
|
|
328
849
|
__decorate([
|
|
329
850
|
CaptureSpan(),
|
|
@@ -342,6 +863,12 @@ __decorate([
|
|
|
342
863
|
__metadata("design:type", Function),
|
|
343
864
|
__metadata("design:paramtypes", [Object]),
|
|
344
865
|
__metadata("design:returntype", Promise)
|
|
345
|
-
], ServiceLevelObjectiveMonitorRuleEngineServiceClass.prototype, "
|
|
866
|
+
], ServiceLevelObjectiveMonitorRuleEngineServiceClass.prototype, "findEnabledRules", null);
|
|
867
|
+
__decorate([
|
|
868
|
+
CaptureSpan(),
|
|
869
|
+
__metadata("design:type", Function),
|
|
870
|
+
__metadata("design:paramtypes", [Object]),
|
|
871
|
+
__metadata("design:returntype", Promise)
|
|
872
|
+
], ServiceLevelObjectiveMonitorRuleEngineServiceClass.prototype, "findMatchingMonitors", null);
|
|
346
873
|
export default new ServiceLevelObjectiveMonitorRuleEngineServiceClass();
|
|
347
874
|
//# sourceMappingURL=ServiceLevelObjectiveMonitorRuleEngineService.js.map
|