@oneuptime/common 13.0.5 → 13.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/AuditLog.ts +81 -1
- package/Models/AnalyticsModels/SecurityEvent.ts +4 -4
- package/Models/DatabaseModels/AIAgentOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/AIAgentOwnerUser.ts +6 -0
- package/Models/DatabaseModels/Alert.ts +74 -0
- package/Models/DatabaseModels/AlertEpisodeOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/AlertEpisodeOwnerUser.ts +6 -1
- package/Models/DatabaseModels/AlertOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/AlertOwnerUser.ts +6 -1
- package/Models/DatabaseModels/CephClusterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/CephClusterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/CloudResourceOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/CloudResourceOwnerUser.ts +6 -0
- package/Models/DatabaseModels/DashboardOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/DashboardOwnerUser.ts +6 -1
- package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +8 -0
- package/Models/DatabaseModels/DockerHostOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/DockerHostOwnerUser.ts +6 -0
- package/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/DockerSwarmClusterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/GlobalConfig.ts +1 -1
- package/Models/DatabaseModels/HostOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/HostOwnerUser.ts +6 -0
- package/Models/DatabaseModels/Incident.ts +78 -0
- package/Models/DatabaseModels/IncidentEpisodeOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/IncidentEpisodeOwnerUser.ts +6 -1
- package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +74 -0
- package/Models/DatabaseModels/IncidentOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/IncidentOwnerUser.ts +6 -1
- package/Models/DatabaseModels/IncidentPublicNote.ts +74 -0
- package/Models/DatabaseModels/IncidentTemplateOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/IncidentTemplateOwnerUser.ts +6 -0
- package/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/IncomingCallPolicyOwnerUser.ts +6 -1
- package/Models/DatabaseModels/Index.ts +6 -4
- package/Models/DatabaseModels/IoTFleetOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/IoTFleetOwnerUser.ts +6 -0
- package/Models/DatabaseModels/KubernetesClusterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/KubernetesClusterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/Monitor.ts +2 -3
- package/Models/DatabaseModels/MonitorGroupOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/MonitorGroupOwnerUser.ts +6 -0
- package/Models/DatabaseModels/MonitorOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/MonitorOwnerUser.ts +6 -1
- package/Models/DatabaseModels/MonitorTemplate.ts +2 -3
- package/Models/DatabaseModels/NetworkDevice.ts +67 -0
- package/Models/DatabaseModels/NetworkDeviceDiagnostic.ts +746 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +151 -0
- package/Models/DatabaseModels/NetworkDeviceOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/NetworkDeviceOwnerUser.ts +6 -0
- package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +1 -1
- package/Models/DatabaseModels/OnCallDutyPolicyOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/OnCallDutyPolicyOwnerUser.ts +6 -1
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.ts +6 -1
- package/Models/DatabaseModels/PodmanHostOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/PodmanHostOwnerUser.ts +6 -0
- package/Models/DatabaseModels/ProbeOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/ProbeOwnerUser.ts +6 -0
- package/Models/DatabaseModels/Project.ts +41 -0
- package/Models/DatabaseModels/ProxmoxClusterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/ProxmoxClusterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/RumApplicationOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/RumApplicationOwnerUser.ts +6 -0
- package/Models/DatabaseModels/RunbookOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/RunbookOwnerUser.ts +6 -1
- package/Models/DatabaseModels/RunnerOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/RunnerOwnerUser.ts +6 -1
- package/Models/DatabaseModels/ScheduledMaintenanceOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/ScheduledMaintenanceOwnerUser.ts +6 -1
- package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +74 -0
- package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerTeam.ts +8 -0
- package/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.ts +8 -0
- package/Models/DatabaseModels/SecurityEventConnection.ts +11 -11
- package/Models/DatabaseModels/ServerlessFunctionOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/ServerlessFunctionOwnerUser.ts +6 -0
- 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 +22 -1
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.ts +22 -1
- package/Models/DatabaseModels/ServiceOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/ServiceOwnerUser.ts +6 -0
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +75 -0
- package/Models/DatabaseModels/StatusPageOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/StatusPageOwnerUser.ts +6 -1
- package/Models/DatabaseModels/ThreatIntelFeed.ts +1 -1
- package/Models/DatabaseModels/VMwareVCenterOwnerTeam.ts +6 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerUser.ts +6 -0
- package/Models/DatabaseModels/WorkflowOwnerTeam.ts +6 -1
- package/Models/DatabaseModels/WorkflowOwnerUser.ts +6 -1
- package/Scripts/benchmark-fanin-capacity.js +2 -2
- package/Server/API/AIAgentDataAPI.ts +1 -1
- package/Server/API/AIChatAPI.ts +6 -4
- package/Server/API/AIInvestigationAPI.ts +7 -0
- package/Server/API/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 +321 -199
- package/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.ts +1 -1
- 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/1793500000000-MakeOwnerRowsUnique.ts +1057 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793700000000-AddAIInvestigationDecision.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793800000000-RemoveMonitorDescriptionLengthLimit.ts +31 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +20 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Readme.md +6 -4
- package/Server/Middleware/IdentityRateLimit.ts +34 -1
- package/Server/Middleware/PublicDashboardRateLimit.ts +169 -39
- package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +138 -67
- package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +213 -84
- package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +112 -35
- package/Server/Services/AlertEpisodeService.ts +13 -34
- package/Server/Services/AlertGroupingEngineService.ts +7 -4
- 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 +124 -36
- 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 +237 -111
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +163 -100
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +240 -111
- package/Server/Services/DashboardLabelRuleEngineService.ts +145 -84
- package/Server/Services/DashboardOwnerRuleEngineService.ts +217 -91
- package/Server/Services/DatabaseService.ts +272 -22
- package/Server/Services/DockerHostLabelRuleEngineService.ts +171 -110
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +237 -111
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +181 -112
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +247 -114
- package/Server/Services/HostLabelRuleEngineService.ts +167 -106
- package/Server/Services/HostOwnerRuleEngineService.ts +233 -107
- package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +141 -67
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +274 -72
- package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +112 -35
- package/Server/Services/IncidentEpisodePublicNoteService.ts +24 -0
- package/Server/Services/IncidentEpisodeService.ts +15 -75
- package/Server/Services/IncidentGroupingEngineService.ts +7 -4
- 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 +127 -35
- package/Server/Services/IncidentTemplateService.ts +13 -36
- package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +147 -83
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +225 -96
- package/Server/Services/Index.ts +6 -4
- package/Server/Services/IoTFleetLabelRuleEngineService.ts +145 -84
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +217 -91
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +181 -112
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +247 -114
- 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 +24 -41
- 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 +222 -93
- package/Server/Services/NetworkDeviceService.ts +39 -2
- package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +151 -80
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +226 -93
- package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +154 -83
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +229 -96
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +171 -110
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +239 -111
- package/Server/Services/ProjectService.ts +111 -10
- package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +174 -110
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +243 -112
- package/Server/Services/RumApplicationLabelRuleEngineService.ts +137 -73
- package/Server/Services/RumApplicationOwnerRuleEngineService.ts +204 -79
- package/Server/Services/RunbookLabelRuleEngineService.ts +146 -84
- package/Server/Services/RunbookOwnerRuleEngineService.ts +220 -91
- 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 +56 -48
- package/Server/Services/ScheduledMaintenanceTemplateService.ts +12 -34
- package/Server/Services/SecurityEventConnectionService.ts +56 -4
- package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +143 -74
- package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +210 -81
- 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 +242 -112
- package/Server/Services/StatusPageAnnouncementService.ts +13 -0
- package/Server/Services/StatusPageLabelRuleEngineService.ts +146 -85
- package/Server/Services/StatusPageOwnerRuleEngineService.ts +210 -99
- package/Server/Services/StatusPagePrivateUserService.ts +38 -29
- package/Server/Services/StatusPagePrivateUserSessionService.ts +49 -1
- package/Server/Services/StatusPageService.ts +59 -36
- 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/UserSessionService.ts +6 -0
- package/Server/Services/VMwareVCenterLabelRuleEngineService.ts +173 -110
- package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +242 -112
- package/Server/Services/WorkflowLabelRuleEngineService.ts +145 -84
- package/Server/Services/WorkflowOwnerRuleEngineService.ts +219 -91
- package/Server/Static/Brand/README.md +7 -7
- package/Server/Static/Vendor/README.md +7 -7
- package/Server/Types/Database/Permissions/OwnedScopePermission.ts +18 -9
- package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +82 -0
- package/Server/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/Chat/ChatAgentRunner.ts +21 -8
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +41 -4
- package/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.ts +1 -1
- package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +1 -1
- package/Server/Utils/AI/IncidentAIContextBuilder.ts +39 -0
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +13 -5
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +53 -13
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +51 -14
- package/Server/Utils/AI/SRE/InvestigationEligibility.ts +292 -0
- package/Server/Utils/AI/SRE/InvestigationQueue.ts +25 -0
- package/Server/Utils/AI/Toolbox/AlertTools.ts +37 -1
- package/Server/Utils/AI/Toolbox/IncidentTools.ts +22 -1
- package/Server/Utils/AI/Toolbox/Index.ts +43 -13
- package/Server/Utils/AI/Toolbox/ResourceTools.ts +952 -0
- package/Server/Utils/AI/Toolbox/RumTools.ts +424 -0
- package/Server/Utils/AI/Toolbox/SloTools.ts +416 -51
- package/Server/Utils/AI/Toolbox/ToolTypes.ts +10 -0
- package/Server/Utils/AI/Toolbox/TraceTools.ts +2 -1
- 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/PostgresErrorTranslator.ts +14 -0
- package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +16 -0
- package/Server/Utils/Database/RelationValueUtil.ts +106 -0
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +143 -127
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +22 -27
- package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +4 -1
- 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 +261 -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/Server/Utils/Telemetry/TelemetryEntity.ts +205 -6
- package/SslCertificates/GlobalSign.crt +26 -0
- package/SslCertificates/Readme.md +3 -0
- package/Tests/App/AdminDashboard/EnterpriseLicenseInstanceActivity.test.tsx +451 -0
- package/Tests/App/Dashboard/AIInsightsChatPanel.test.tsx +881 -0
- package/Tests/App/Dashboard/AIInsightsPageContext.test.ts +458 -0
- package/Tests/App/Dashboard/AIInsightsResourceCitations.test.ts +124 -0
- package/Tests/App/Dashboard/AIInsightsResourcePageContext.test.ts +798 -0
- package/Tests/App/Dashboard/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/AskAiSuggestedPrompts.test.ts +7 -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/DashboardChartWidgetZoom.test.tsx +104 -0
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +156 -64
- 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/DiscoveryScanStatusMessage.test.tsx +970 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +849 -20
- package/Tests/App/Dashboard/EmbeddedMetricEventScope.test.tsx +358 -0
- package/Tests/App/Dashboard/EntityFilterDropdownArchivedSlos.test.tsx +340 -0
- package/Tests/App/Dashboard/ErrorPatternEventScope.test.tsx +148 -0
- package/Tests/App/Dashboard/EventOverlayAdditionalResourceScope.test.ts +255 -0
- package/Tests/App/Dashboard/EventOverlayScope.test.ts +845 -0
- package/Tests/App/Dashboard/EventOverlayScopeHook.test.tsx +903 -0
- package/Tests/App/Dashboard/EventOverviewPages.test.tsx +98 -2
- package/Tests/App/Dashboard/ExceptionSegmentedControl.test.tsx +1020 -0
- package/Tests/App/Dashboard/ExternalStatusPageCriteriaFilter.test.ts +3 -3
- package/Tests/App/Dashboard/InvestigationDrawer.test.tsx +21 -0
- package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +268 -47
- package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +761 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1122 -81
- package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +139 -9
- 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/MetricsViewerEventScopeNavigation.test.tsx +264 -0
- package/Tests/App/Dashboard/MonitorSummaryTestMonitorButton.test.tsx +342 -0
- package/Tests/App/Dashboard/MonitorTestForm.test.tsx +612 -0
- package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +301 -0
- package/Tests/App/Dashboard/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/ServiceMapGraph.test.tsx +74 -2
- 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/TextClampLayoutHarness.ts +224 -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/InventoryItemNaming.test.ts +54 -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/AIChatRouteAuthorization.test.ts +161 -0
- package/Tests/Server/API/AIInvestigationAPI.test.ts +14 -0
- package/Tests/Server/API/AIInvestigationAvailabilityAuthorization.test.ts +260 -0
- package/Tests/Server/API/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/EnterpriseLicenseReportUserCount.test.ts +133 -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/API/StatusPageMasterPasswordRateLimit.test.ts +482 -0
- package/Tests/Server/EnvironmentConfigOnCallCalendarFeed.test.ts +1 -1
- package/Tests/Server/Infrastructure/ClickhouseKeepAliveOptions.test.ts +1 -1
- package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +38 -16
- package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +106 -31
- package/Tests/Server/Infrastructure/ExampleDockerfiles.test.ts +46 -12
- package/Tests/Server/Infrastructure/Postgres/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/MonitorDescriptionMigration.test.ts +422 -0
- package/Tests/Server/Infrastructure/Postgres/SloProductOverhaulMigration.test.ts +801 -0
- package/Tests/Server/Infrastructure/TelemetryExporterDeploymentConfig.test.ts +1 -1
- package/Tests/Server/Infrastructure/ValkeyDeploymentConfig.test.ts +25 -4
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +72 -0
- package/Tests/Server/Middleware/PublicDashboardRateLimit.test.ts +12 -12
- package/Tests/Server/Middleware/PublicDashboardRateLimitStatusPage.test.ts +800 -0
- package/Tests/Server/Services/AIInvestigationDecisionPostgres.test.ts +346 -0
- package/Tests/Server/Services/AddOwnersIdempotency.test.ts +471 -0
- package/Tests/Server/Services/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/DatabaseServiceAutoOwnerOnCreate.test.ts +250 -0
- package/Tests/Server/Services/DatabaseServicePasswordFieldSecrets.test.ts +629 -0
- package/Tests/Server/Services/DatabaseServiceUniqueColumnsTogether.test.ts +622 -0
- package/Tests/Server/Services/IncidentAlertSloLinkSurvivesEdit.test.ts +431 -0
- package/Tests/Server/Services/IncidentAlertSloReferenceGuard.test.ts +358 -0
- package/Tests/Server/Services/MonitorDescriptionValidation.test.ts +211 -0
- package/Tests/Server/Services/MonitorProbeServicePastDueMonitoring.test.ts +362 -0
- package/Tests/Server/Services/MonitorTemplateDescriptionPropagation.test.ts +269 -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/OwnerRowUniqueness.test.ts +504 -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 +945 -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/SessionRetention.test.ts +334 -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/StatusPagePrivateUserInvitationPolicy.test.ts +172 -0
- package/Tests/Server/Services/StatusPagePrivateUserReadAccess.test.ts +178 -0
- package/Tests/Server/Services/StatusPagePrivateUserReadAccessPostgres.test.ts +311 -0
- package/Tests/Server/Services/StatusPagePrivateUserSessionService.test.ts +216 -1
- package/Tests/Server/Services/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/TeamComplianceServiceBehaviour.test.ts +1 -1
- package/Tests/Server/Services/TelemetryUsageBillingSloExclusion.test.ts +288 -0
- package/Tests/Server/Services/UserOnCallLogNoNotificationRules.test.ts +1 -1
- 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/EventOverlayScopePostgres.test.ts +626 -0
- package/Tests/Server/Types/Database/Permissions/InfrastructureOwnershipScope.test.ts +668 -0
- 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/Types/Database/Permissions/SelectRejectionMessageContract.test.ts +1 -0
- package/Tests/Server/Types/Database/Permissions/UserNotificationRuleScoping.test.ts +1 -1
- package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +16 -9
- package/Tests/Server/Utils/AI/ChatAgentRunner.test.ts +137 -1
- package/Tests/Server/Utils/AI/InvestigationEligibility.test.ts +697 -0
- package/Tests/Server/Utils/AI/ObservabilityChatPrompt.test.ts +105 -0
- package/Tests/Server/Utils/AI/RemediationHandoff.test.ts +16 -5
- package/Tests/Server/Utils/AI/ResourceTools.test.ts +1304 -0
- package/Tests/Server/Utils/AI/RumTools.test.ts +769 -0
- package/Tests/Server/Utils/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/PostgresErrorTranslator.test.ts +63 -0
- 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/APIRequestCriteriaEvaluateOverTime.test.ts +11 -9
- package/Tests/Server/Utils/Monitor/Criteria/BooleanSeriesEvaluateOverTime.test.ts +260 -0
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +62 -45
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +25 -24
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaHumanMessages.test.ts +513 -0
- package/Tests/Server/Utils/Monitor/Criteria/CustomCodeMonitorCriteria.test.ts +2 -2
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +181 -0
- package/Tests/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.test.ts +1 -1
- package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +147 -30
- package/Tests/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.test.ts +9 -9
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +7 -5
- package/Tests/Server/Utils/Monitor/Criteria/ProfileMonitorCriteria.test.ts +2 -2
- package/Tests/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.test.ts +4 -3
- package/Tests/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.test.ts +2 -2
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorMetricUnits.test.ts +3 -2
- package/Tests/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.test.ts +17 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaHumanMessages.test.ts +529 -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 +585 -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} +131 -36
- 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/Server/Utils/TailwindBuildCopy.test.ts +14 -2
- package/Tests/Server/Utils/Telemetry/HostAssetAttributesFromOtlp.test.ts +235 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +385 -2
- package/Tests/Server/Utils/VendorAssets.test.ts +17 -3
- package/Tests/Types/AI/AIChatPageContext.test.ts +0 -0
- package/Tests/Types/AI/AIResourceContext.test.ts +312 -0
- package/Tests/Types/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/Database/UniqueColumnsTogether.test.ts +100 -0
- package/Tests/Types/Monitor/CriteriaFilter.test.ts +216 -24
- package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +4 -4
- 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/Monitor/MonitorStepRetryPersistence.test.ts +125 -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/Types/WebsiteRequest.test.ts +44 -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/Forms/MonitorDescriptionForm.test.tsx +410 -0
- package/Tests/UI/Components/LabelRuleImportExport.test.tsx +15 -2
- package/Tests/UI/Components/LockedFilterChip.test.tsx +281 -144
- package/Tests/UI/Components/ModelTable/BaseModelTableReadPermissions.test.tsx +439 -0
- package/Tests/UI/Components/MoreMenu.test.tsx +133 -0
- package/Tests/UI/Components/MoreMenuMotion.test.tsx +84 -3
- package/Tests/UI/Components/NavBarMenuSearch.test.tsx +372 -0
- 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/EsbuildConfig.test.ts +1 -1
- package/Tests/UI/Monitor/MonitorStepRetrySettings.test.tsx +616 -0
- package/Tests/UI/ReactRouterSingletonBuild.test.ts +4 -2
- package/Tests/UI/Rum/ReplayEngine.test.ts +333 -0
- package/Tests/UI/Rum/ReplayHeader.test.tsx +257 -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 +301 -1
- package/Tests/UI/Rum/ReplayStage.test.tsx +565 -172
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +343 -3
- package/Tests/UI/Rum/ReplayTabSwitcher.test.tsx +1424 -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/API.test.ts +96 -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/HTTPResponseBodyReader.test.ts +188 -1
- package/Tests/Utils/Markdown/MarkdownEscape.test.ts +361 -0
- package/Tests/Utils/Metrics/MetricEventScopeUrl.test.ts +101 -0
- package/Tests/Utils/Monitor/MonitorTestAvailabilityUtil.test.ts +256 -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/HostIpAddresses.test.ts +105 -0
- package/Tests/Utils/Telemetry/LockedFilterSearch.test.ts +1 -80
- package/Types/AI/AIChatPageContext.ts +87 -2
- package/Types/AI/AIChatTypes.ts +4 -0
- package/Types/AI/AIResourceContext.ts +198 -0
- package/Types/AI/InvestigationNotStartedReason.ts +30 -0
- package/Types/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/Database/UniqueColumnsTogether.ts +55 -0
- package/Types/Email/EmailTemplateType.ts +4 -0
- package/Types/Metrics/MetricQueryConfigData.ts +8 -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/Rum/WebVitals.ts +71 -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/Types/WebsiteRequest.ts +2 -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/EditionLabel/EditionLabel.tsx +7 -5
- 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/KeyboardShortcut/Screenshots/README.md +1 -1
- 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/ModelTable/BaseModelTable.tsx +8 -0
- package/UI/Components/MoreMenu/MoreMenu.tsx +14 -3
- package/UI/Components/Navbar/NavBar.tsx +2 -0
- package/UI/Components/Navbar/NavBarMenuModal.tsx +6 -2
- 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/UI/esbuild-config.js +4 -4
- package/Utils/API.ts +10 -1
- 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/HtmlWidgetDocument.ts +1 -1
- package/Utils/Dashboard/SloWidgetSource.ts +188 -0
- package/Utils/HTTPResponseBodyReader.ts +64 -8
- package/Utils/Markdown/MarkdownEscape.ts +63 -0
- package/Utils/Metrics/MetricExplorerUrl.ts +19 -0
- package/Utils/Monitor/MonitorTestAvailabilityUtil.ts +92 -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/HostIpAddresses.ts +46 -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/AIAgentOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/AIAgentOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AIAgentOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/AIAgentOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Alert.js +72 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephClusterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/CephClusterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephClusterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/CephClusterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/CloudResourceOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DashboardOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/DashboardOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DashboardOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/DashboardOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +3 -0
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHostOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/DockerHostOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHostOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/DockerHostOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/HostOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/HostOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/HostOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/HostOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +76 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +75 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +75 -0
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplateOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +6 -4
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/IoTFleetOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/KubernetesClusterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +2 -3
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorGroupOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/MonitorGroupOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorGroupOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/MonitorGroupOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/MonitorOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/MonitorOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js +2 -3
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/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/NetworkDeviceOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProbeOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/ProbeOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProbeOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/ProbeOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +42 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/RumApplicationOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/RunbookOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunnerOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/RunnerOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunnerOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/RunnerOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +75 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerTeam.js +6 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js +6 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplateOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/SecurityEventConnection.js +11 -11
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunctionOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/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 +19 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js +19 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/ServiceOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/ServiceOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +75 -0
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/StatusPageOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +1 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js +4 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js +4 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerTeam.js +3 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerUser.js +3 -1
- package/build/dist/Models/DatabaseModels/WorkflowOwnerUser.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +1 -1
- package/build/dist/Server/API/AIChatAPI.js +3 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +3 -0
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/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 +245 -155
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/LocalMigrationGenerationDataSource.js +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/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/1793500000000-MakeOwnerRowsUnique.js +602 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793500000000-MakeOwnerRowsUnique.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793700000000-AddAIInvestigationDecision.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793700000000-AddAIInvestigationDecision.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793800000000-RemoveMonitorDescriptionLengthLimit.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793800000000-RemoveMonitorDescriptionLengthLimit.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +22 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
- package/build/dist/Server/Middleware/PublicDashboardRateLimit.js +117 -36
- package/build/dist/Server/Middleware/PublicDashboardRateLimit.js.map +1 -1
- package/build/dist/Server/Services/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/AlertEpisodeService.js +13 -31
- package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/AlertGroupingEngineService.js +7 -4
- package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/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 +104 -39
- 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 +191 -99
- 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 +192 -99
- 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 +173 -81
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +196 -19
- 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 +191 -99
- 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 +193 -99
- 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 +193 -101
- 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 +222 -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/IncidentEpisodeService.js +15 -68
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +7 -4
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/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 +103 -36
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentTemplateService.js +13 -31
- package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +113 -65
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +173 -81
- 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 +173 -81
- 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 +193 -99
- 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 +24 -40
- 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 +173 -81
- 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 +175 -81
- 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 +173 -81
- 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 +191 -99
- 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 +191 -99
- 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 +164 -76
- 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 +173 -81
- 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 +37 -39
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js +12 -29
- package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js.map +1 -1
- package/build/dist/Server/Services/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 +166 -76
- 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 +193 -100
- 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/StatusPagePrivateUserService.js +33 -25
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserSessionService.js +36 -1
- package/build/dist/Server/Services/StatusPagePrivateUserSessionService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +50 -35
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/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/UserSessionService.js +5 -0
- package/build/dist/Server/Services/UserSessionService.js.map +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 +191 -99
- 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 +173 -81
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js +15 -10
- package/build/dist/Server/Types/Database/Permissions/OwnedScopePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +82 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
- package/build/dist/Server/Utils/AI/AlertAIContextBuilder.js +17 -0
- package/build/dist/Server/Utils/AI/AlertAIContextBuilder.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +12 -3
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +32 -4
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeAgentWorkspaceGuard.js +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +1 -1
- package/build/dist/Server/Utils/AI/IncidentAIContextBuilder.js +31 -0
- package/build/dist/Server/Utils/AI/IncidentAIContextBuilder.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +8 -5
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +33 -13
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +31 -10
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js +205 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +13 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/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/Index.js +30 -6
- package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js +721 -0
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/RumTools.js +330 -0
- package/build/dist/Server/Utils/AI/Toolbox/RumTools.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +337 -53
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/ToolTypes.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/TraceTools.js +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/TraceTools.js.map +1 -1
- package/build/dist/Server/Utils/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/PostgresErrorTranslator.js +11 -0
- package/build/dist/Server/Utils/Database/PostgresErrorTranslator.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 +115 -106
- 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/Criteria/MetricMonitorCriteria.js +4 -2
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.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 +163 -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/Server/Utils/Telemetry/TelemetryEntity.js +171 -6
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Types/AI/AIChatPageContext.js +68 -2
- package/build/dist/Types/AI/AIChatPageContext.js.map +1 -1
- package/build/dist/Types/AI/AIChatTypes.js +4 -0
- package/build/dist/Types/AI/AIChatTypes.js.map +1 -1
- package/build/dist/Types/AI/AIResourceContext.js +162 -0
- package/build/dist/Types/AI/AIResourceContext.js.map +1 -0
- package/build/dist/Types/AI/InvestigationNotStartedReason.js +2 -0
- package/build/dist/Types/AI/InvestigationNotStartedReason.js.map +1 -0
- package/build/dist/Types/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/Database/UniqueColumnsTogether.js +19 -0
- package/build/dist/Types/Database/UniqueColumnsTogether.js.map +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js +4 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Metrics/MetricQueryConfigData.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/Rum/WebVitals.js +64 -0
- package/build/dist/Types/Rum/WebVitals.js.map +1 -0
- 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/Types/WebsiteRequest.js +2 -0
- package/build/dist/Types/WebsiteRequest.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/EditionLabel/EditionLabel.js +7 -5
- package/build/dist/UI/Components/EditionLabel/EditionLabel.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/ModelTable/BaseModelTable.js +7 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.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/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +4 -2
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/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/API.js +8 -4
- package/build/dist/Utils/API.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/HTTPResponseBodyReader.js +50 -6
- package/build/dist/Utils/HTTPResponseBodyReader.js.map +1 -1
- package/build/dist/Utils/Markdown/MarkdownEscape.js +49 -0
- package/build/dist/Utils/Markdown/MarkdownEscape.js.map +1 -0
- package/build/dist/Utils/Metrics/MetricExplorerUrl.js +14 -3
- package/build/dist/Utils/Metrics/MetricExplorerUrl.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorTestAvailabilityUtil.js +68 -0
- package/build/dist/Utils/Monitor/MonitorTestAvailabilityUtil.js.map +1 -0
- package/build/dist/Utils/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/HostIpAddresses.js +42 -3
- package/build/dist/Utils/Telemetry/HostIpAddresses.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 +5 -5
- package/test-setup.sh +2 -2
- 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
|
@@ -16,8 +16,10 @@ import OneUptimeDate from "../../Types/Date";
|
|
|
16
16
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
17
17
|
import ObjectID from "../../Types/ObjectID";
|
|
18
18
|
import SloWindowType from "../../Types/ServiceLevelObjective/SloWindowType";
|
|
19
|
+
import { escapeMarkdownInline } from "../../Utils/Markdown/MarkdownEscape";
|
|
19
20
|
import DatabaseConfig from "../DatabaseConfig";
|
|
20
21
|
import QueryHelper from "../Types/Database/QueryHelper";
|
|
22
|
+
import { resolveReferenceId } from "../Utils/Database/ProjectScopedReferenceValidator";
|
|
21
23
|
import logger from "../Utils/Logger";
|
|
22
24
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
23
25
|
import AlertSeverityService from "./AlertSeverityService";
|
|
@@ -26,9 +28,24 @@ import MonitorStatusService from "./MonitorStatusService";
|
|
|
26
28
|
import ProjectService from "./ProjectService";
|
|
27
29
|
import ServiceLevelObjectiveBurnRateRuleService from "./ServiceLevelObjectiveBurnRateRuleService";
|
|
28
30
|
import ServiceLevelObjectiveMonitorRuleEngineService from "./ServiceLevelObjectiveMonitorRuleEngineService";
|
|
31
|
+
import ServiceLevelObjectiveMonitorRuleService from "./ServiceLevelObjectiveMonitorRuleService";
|
|
29
32
|
import ServiceLevelObjectiveOwnerTeamService from "./ServiceLevelObjectiveOwnerTeamService";
|
|
30
33
|
import ServiceLevelObjectiveOwnerUserService from "./ServiceLevelObjectiveOwnerUserService";
|
|
31
34
|
import TeamMemberService from "./TeamMemberService";
|
|
35
|
+
import ServiceLevelObjectiveFeedService from "./ServiceLevelObjectiveFeedService";
|
|
36
|
+
import { ServiceLevelObjectiveFeedEventType } from "../../Models/DatabaseModels/ServiceLevelObjectiveFeed";
|
|
37
|
+
import { Blue500, Gray500, Green500, Orange500, Yellow500, } from "../../Types/BrandColors";
|
|
38
|
+
import { SLO_FEED_IS_ARCHIVED_COLUMN, SLO_FEED_IS_ENABLED_COLUMN, SLO_FEED_MONITORS_COLUMN, SLO_FEED_UPDATE_COLUMNS, getSloArchivedFeedMarkdown, getSloCreatedFeedMarkdown, getSloEnabledFeedMarkdown, getSloFeedColumnChanges, getSloFeedEntityIds, getSloFeedSelect, getSloFeedWatchedColumns, getSloMonitorsChangedFeedMarkdown, getSloUpdatedFeedMarkdown, isSloFeedValueEqual, normalizeSloFeedBoolean, } from "../../Utils/Slo/SloFeedMarkdown";
|
|
39
|
+
import SloFeedUtil from "../Utils/Slo/SloFeedUtil";
|
|
40
|
+
import SloLegacyMonitorLabelAdoption from "../Utils/Slo/SloLegacyMonitorLabelAdoption";
|
|
41
|
+
/*
|
|
42
|
+
* The root cause stamped on every burn-rate alert and incident an archive
|
|
43
|
+
* resolves. Distinct from the disable/delete default so a responder reading a
|
|
44
|
+
* closed page can tell "somebody retired this SLO" from "somebody paused it" -
|
|
45
|
+
* the first will not come back on its own, the second may.
|
|
46
|
+
*/
|
|
47
|
+
export const SLO_ARCHIVED_ROOT_CAUSE = "Auto-resolved because the Service Level Objective was archived.";
|
|
48
|
+
export const SLO_DISABLED_OR_DELETED_ROOT_CAUSE = "Auto-resolved because the Service Level Objective was disabled or deleted.";
|
|
32
49
|
export class Service extends DatabaseService {
|
|
33
50
|
constructor() {
|
|
34
51
|
super(Model);
|
|
@@ -93,8 +110,14 @@ export class Service extends DatabaseService {
|
|
|
93
110
|
carryForward: null,
|
|
94
111
|
};
|
|
95
112
|
}
|
|
96
|
-
async onCreateSuccess(
|
|
113
|
+
async onCreateSuccess(onCreate, createdItem) {
|
|
97
114
|
var _a, _b, _c, _d, _e, _f;
|
|
115
|
+
/*
|
|
116
|
+
* The row's own creation time, so the "created" feed item - written last,
|
|
117
|
+
* and without waiting - still sorts ahead of everything the create sets
|
|
118
|
+
* off, like the creator being added as an owner.
|
|
119
|
+
*/
|
|
120
|
+
const createdAt = createdItem.createdAt || OneUptimeDate.getCurrentDate();
|
|
98
121
|
/*
|
|
99
122
|
* Stamp nextEvaluationAt = now so the evaluation worker picks this SLO up
|
|
100
123
|
* on its next tick. Done here (isRoot update) instead of onBeforeCreate
|
|
@@ -117,16 +140,40 @@ export class Service extends DatabaseService {
|
|
|
117
140
|
logger.error(`Error setting nextEvaluationAt for SLO ${(_a = createdItem.id) === null || _a === void 0 ? void 0 : _a.toString()}: ${err}`, { projectId: (_b = createdItem.projectId) === null || _b === void 0 ? void 0 : _b.toString() });
|
|
118
141
|
}
|
|
119
142
|
// Seed the two canonical multi-window burn rate rules. Non-fatal.
|
|
143
|
+
let seededBurnRateRules = [];
|
|
120
144
|
try {
|
|
121
|
-
|
|
145
|
+
/*
|
|
146
|
+
* Marked as seeding so the burn rate rule service does not post its own
|
|
147
|
+
* "rule added" items for these two: they are part of creating the SLO
|
|
148
|
+
* and are described by its "created" item (see SloFeedUtil for why this
|
|
149
|
+
* signal and not "root with no user").
|
|
150
|
+
*/
|
|
151
|
+
seededBurnRateRules = createdItem.id
|
|
152
|
+
? await SloFeedUtil.runWhileSeedingDefaultBurnRateRules({
|
|
153
|
+
sloId: createdItem.id,
|
|
154
|
+
seed: () => {
|
|
155
|
+
return this.seedDefaultBurnRateRules(createdItem);
|
|
156
|
+
},
|
|
157
|
+
})
|
|
158
|
+
: await this.seedDefaultBurnRateRules(createdItem);
|
|
122
159
|
}
|
|
123
160
|
catch (err) {
|
|
124
161
|
logger.error(`Error seeding default burn rate rules for SLO ${(_c = createdItem.id) === null || _c === void 0 ? void 0 : _c.toString()}: ${err}`, { projectId: (_d = createdItem.projectId) === null || _d === void 0 ? void 0 : _d.toString() });
|
|
125
162
|
}
|
|
126
163
|
/*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
164
|
+
* A create that still carries the deprecated "Auto-Add Monitors With
|
|
165
|
+
* Labels" list gets it as a monitor rule first, so the sync below attaches
|
|
166
|
+
* what the list matches - as the previous release did. See
|
|
167
|
+
* applyDeprecatedMonitorLabelWrite for who still sends it and why.
|
|
168
|
+
*/
|
|
169
|
+
await this.adoptDeprecatedMonitorLabelsWrittenOnCreate(createdItem);
|
|
170
|
+
/*
|
|
171
|
+
* Reconcile the new SLO's monitor list with its monitor rules. A brand-new
|
|
172
|
+
* SLO normally has none yet (rules are added afterwards, on the Monitor
|
|
173
|
+
* Rules page), so this is usually a read and no write - but it keeps an
|
|
174
|
+
* SLO created with rows already pointing at it (an API import, a rolling
|
|
175
|
+
* deploy's backfill) from reading "no monitors attached" until someone
|
|
176
|
+
* happens to edit a rule or a monitor.
|
|
130
177
|
*/
|
|
131
178
|
try {
|
|
132
179
|
await ServiceLevelObjectiveMonitorRuleEngineService.syncMonitorsForSlo({
|
|
@@ -134,8 +181,22 @@ export class Service extends DatabaseService {
|
|
|
134
181
|
});
|
|
135
182
|
}
|
|
136
183
|
catch (err) {
|
|
137
|
-
logger.error(`Error applying the monitor
|
|
184
|
+
logger.error(`Error applying the monitor rules for SLO ${(_e = createdItem.id) === null || _e === void 0 ? void 0 : _e.toString()}: ${err}`, { projectId: (_f = createdItem.projectId) === null || _f === void 0 ? void 0 : _f.toString() });
|
|
138
185
|
}
|
|
186
|
+
/*
|
|
187
|
+
* Fire-and-forget, like ServiceService's created item: the SLO exists
|
|
188
|
+
* whether or not its feed item does, and the create request should not
|
|
189
|
+
* wait on user and link lookups just to describe itself.
|
|
190
|
+
*/
|
|
191
|
+
this.writeSloCreatedFeed({
|
|
192
|
+
onCreate: onCreate,
|
|
193
|
+
createdItem: createdItem,
|
|
194
|
+
seededBurnRateRules: seededBurnRateRules,
|
|
195
|
+
postedAt: createdAt,
|
|
196
|
+
}).catch((err) => {
|
|
197
|
+
var _a, _b;
|
|
198
|
+
logger.error(`Error writing the created feed item for SLO ${(_a = createdItem.id) === null || _a === void 0 ? void 0 : _a.toString()}: ${err}`, { projectId: (_b = createdItem.projectId) === null || _b === void 0 ? void 0 : _b.toString() });
|
|
199
|
+
});
|
|
139
200
|
return createdItem;
|
|
140
201
|
}
|
|
141
202
|
async onBeforeUpdate(updateBy) {
|
|
@@ -160,19 +221,54 @@ export class Service extends DatabaseService {
|
|
|
160
221
|
updateBy.data.atRiskThresholdPercentage =
|
|
161
222
|
this.validateAtRiskThresholdPercentage(newAtRiskThresholdPercentage);
|
|
162
223
|
}
|
|
224
|
+
await this.assertMonitorEditRespectsMonitorRules(updateBy);
|
|
225
|
+
/*
|
|
226
|
+
* Last, so a payload the checks above rejected never costs the feed a
|
|
227
|
+
* read. Null unless the payload writes a column the feed describes.
|
|
228
|
+
*/
|
|
229
|
+
const feedSnapshot = await this.readFeedSnapshotBeforeUpdate(updateBy);
|
|
230
|
+
// Null unless the payload writes the deprecated monitor label list.
|
|
231
|
+
const monitorLabelIdsBeforeUpdate = await this.readDeprecatedMonitorLabelsBeforeUpdate(updateBy);
|
|
163
232
|
return {
|
|
164
233
|
updateBy,
|
|
165
|
-
carryForward:
|
|
234
|
+
carryForward: {
|
|
235
|
+
feedSnapshot: feedSnapshot,
|
|
236
|
+
monitorLabelIdsBeforeUpdate: monitorLabelIdsBeforeUpdate,
|
|
237
|
+
},
|
|
166
238
|
};
|
|
167
239
|
}
|
|
168
240
|
async onUpdateSuccess(onUpdate, updatedItemIds) {
|
|
241
|
+
var _a, _b;
|
|
169
242
|
/*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
243
|
+
* Fire-and-forget, and only when onBeforeUpdate took a snapshot - so the
|
|
244
|
+
* worker's per-tick state write does no feed work at all. The time is
|
|
245
|
+
* taken here so the items sort where the edit happened, not where their
|
|
246
|
+
* lookups finished.
|
|
247
|
+
*/
|
|
248
|
+
if ((_a = onUpdate.carryForward) === null || _a === void 0 ? void 0 : _a.feedSnapshot) {
|
|
249
|
+
const updatedAt = OneUptimeDate.getCurrentDate();
|
|
250
|
+
this.writeSloUpdatedFeed({
|
|
251
|
+
onUpdate: onUpdate,
|
|
252
|
+
updatedItemIds: updatedItemIds,
|
|
253
|
+
postedAt: updatedAt,
|
|
254
|
+
}).catch((err) => {
|
|
255
|
+
logger.error(`Error writing SLO feed items after an update: ${err}`);
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
/*
|
|
259
|
+
* When an SLO is disabled or archived, resolve everything its burn-rate
|
|
260
|
+
* rules have open — the evaluation worker skips disabled and archived
|
|
261
|
+
* SLOs alike, so nothing else would ever resolve them (and their on-call
|
|
262
|
+
* escalations would stay open forever).
|
|
263
|
+
*
|
|
264
|
+
* One pass even when a single write both disables and archives: the
|
|
265
|
+
* second would only re-query every rule for records the first already
|
|
266
|
+
* closed. The archive wording wins, because it is the more permanent of
|
|
267
|
+
* the two and the one a responder reading the root cause needs to know.
|
|
174
268
|
*/
|
|
175
|
-
|
|
269
|
+
const isDisablingSlo = onUpdate.updateBy.data.isEnabled === false;
|
|
270
|
+
const isArchivingSlo = onUpdate.updateBy.data.isArchived === true;
|
|
271
|
+
if (isDisablingSlo || isArchivingSlo) {
|
|
176
272
|
for (const updatedItemId of updatedItemIds) {
|
|
177
273
|
try {
|
|
178
274
|
const slo = await this.findOneById({
|
|
@@ -187,42 +283,71 @@ export class Service extends DatabaseService {
|
|
|
187
283
|
if (!slo || !slo.projectId) {
|
|
188
284
|
continue;
|
|
189
285
|
}
|
|
190
|
-
|
|
286
|
+
/*
|
|
287
|
+
* rootCause is only set for an archive, so a plain disable keeps
|
|
288
|
+
* calling with exactly the payload it always has.
|
|
289
|
+
*/
|
|
290
|
+
const resolveData = {
|
|
191
291
|
sloId: updatedItemId,
|
|
192
292
|
projectId: slo.projectId,
|
|
193
|
-
}
|
|
293
|
+
};
|
|
294
|
+
if (isArchivingSlo) {
|
|
295
|
+
resolveData.rootCause = SLO_ARCHIVED_ROOT_CAUSE;
|
|
296
|
+
}
|
|
297
|
+
await this.resolveOpenBurnRateAlertsAndIncidentsForSlo(resolveData);
|
|
194
298
|
}
|
|
195
299
|
catch (err) {
|
|
196
|
-
|
|
300
|
+
/*
|
|
301
|
+
* Never fail the user's write: the disable or archive already
|
|
302
|
+
* landed, and refusing it over a stale open record would be worse
|
|
303
|
+
* than the record itself.
|
|
304
|
+
*/
|
|
305
|
+
logger.error(`Error resolving open burn rate alerts and incidents for ${isArchivingSlo ? "archived" : "disabled"} SLO ${updatedItemId.toString()}: ${err}`);
|
|
197
306
|
}
|
|
198
307
|
}
|
|
199
308
|
}
|
|
200
309
|
/*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
310
|
+
* Monitor membership follows the SLO's monitor rules, and
|
|
311
|
+
* ServiceLevelObjectiveMonitorRuleService re-syncs whenever one of those
|
|
312
|
+
* changes, so an ordinary SLO edit needs no sync. The exception is a write
|
|
313
|
+
* of the deprecated "Auto-Add Monitors With Labels" list, which nothing
|
|
314
|
+
* else on this release would act on - see applyDeprecatedMonitorLabelWrite.
|
|
205
315
|
*/
|
|
206
|
-
if (onUpdate.updateBy.data.monitorLabels !== undefined
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
catch (err) {
|
|
214
|
-
logger.error(`Error applying the monitor label rule for SLO ${updatedItemId.toString()}: ${err}`);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
316
|
+
if (onUpdate.updateBy.data.monitorLabels !== undefined &&
|
|
317
|
+
updatedItemIds.length > 0) {
|
|
318
|
+
await this.applyDeprecatedMonitorLabelWrite({
|
|
319
|
+
serviceLevelObjectiveIds: updatedItemIds,
|
|
320
|
+
writtenMonitorLabels: onUpdate.updateBy.data.monitorLabels,
|
|
321
|
+
labelIdsBeforeUpdateBySloId: ((_b = onUpdate.carryForward) === null || _b === void 0 ? void 0 : _b.monitorLabelIdsBeforeUpdate) || {},
|
|
322
|
+
});
|
|
217
323
|
}
|
|
218
324
|
/*
|
|
219
325
|
* If the objective's math inputs changed, force a re-evaluation on the
|
|
220
326
|
* worker's next tick.
|
|
327
|
+
*
|
|
328
|
+
* "Inputs" means every column the worker's result depends on, not only
|
|
329
|
+
* the objective's: the downtime statuses and multi-monitor mode decide
|
|
330
|
+
* which seconds count as bad, the timezone moves calendar-month
|
|
331
|
+
* boundaries, and the at-risk threshold decides the status. All four are
|
|
332
|
+
* edited on the Settings page, and without them a saved change kept
|
|
333
|
+
* showing the old numbers until the SLO's regular cadence came round.
|
|
221
334
|
*/
|
|
222
335
|
const isEvaluationConfigUpdated = onUpdate.updateBy.data.targetPercentage !== undefined ||
|
|
223
336
|
onUpdate.updateBy.data.windowDays !== undefined ||
|
|
224
337
|
onUpdate.updateBy.data.windowType !== undefined ||
|
|
225
|
-
onUpdate.updateBy.data.monitors !== undefined
|
|
338
|
+
onUpdate.updateBy.data.monitors !== undefined ||
|
|
339
|
+
onUpdate.updateBy.data.multiMonitorMode !== undefined ||
|
|
340
|
+
onUpdate.updateBy.data.downtimeMonitorStatuses !== undefined ||
|
|
341
|
+
onUpdate.updateBy.data.atRiskThresholdPercentage !== undefined ||
|
|
342
|
+
onUpdate.updateBy.data.timezone !== undefined ||
|
|
343
|
+
/*
|
|
344
|
+
* Unarchived: the worker stopped looking at this SLO while it was
|
|
345
|
+
* archived, so its status and budget are frozen at archive time. Its
|
|
346
|
+
* nextEvaluationAt is normally already in the past, but stamping it
|
|
347
|
+
* explicitly guarantees the numbers refresh on the very next tick.
|
|
348
|
+
* (A still-disabled SLO stays skipped by getDueSlos regardless.)
|
|
349
|
+
*/
|
|
350
|
+
onUpdate.updateBy.data.isArchived === false;
|
|
226
351
|
if (isEvaluationConfigUpdated) {
|
|
227
352
|
for (const updatedItemId of updatedItemIds) {
|
|
228
353
|
try {
|
|
@@ -243,10 +368,36 @@ export class Service extends DatabaseService {
|
|
|
243
368
|
}
|
|
244
369
|
return onUpdate;
|
|
245
370
|
}
|
|
371
|
+
/*
|
|
372
|
+
* READ ONLY: notes down the SLOs this delete may remove and, for each, the
|
|
373
|
+
* burn rate rules whose open alerts and incidents onDeleteSuccess resolves.
|
|
374
|
+
*
|
|
375
|
+
* The rules have to be read now. They cascade away with the SLO in Postgres,
|
|
376
|
+
* with no hook of their own, and a rule's id is half of the fingerprint that
|
|
377
|
+
* finds what it opened.
|
|
378
|
+
*
|
|
379
|
+
* Nothing is resolved here. DatabaseService runs this hook BEFORE it applies
|
|
380
|
+
* the caller's delete permissions, and the CRUD API passes a raw id, so these
|
|
381
|
+
* rows are only candidates. Resolving here as root let a delete that named
|
|
382
|
+
* another project's SLO close that project's burn rate alerts and incidents
|
|
383
|
+
* while deleting nothing. onDeleteSuccess acts only on the ids the delete
|
|
384
|
+
* really removed, and the tenant pin keeps this read from even seeing
|
|
385
|
+
* another project's SLOs. A multi-tenant request is left unpinned because
|
|
386
|
+
* DatabaseService does not pin it either: candidates narrower than what the
|
|
387
|
+
* delete removes would strand records instead.
|
|
388
|
+
*
|
|
389
|
+
* A failed read is deliberately not caught: deleting an SLO without knowing
|
|
390
|
+
* its rules would strand everything they opened, and the on-call escalations
|
|
391
|
+
* with it, because the evaluation worker never looks at a deleted SLO again.
|
|
392
|
+
*/
|
|
246
393
|
async onBeforeDelete(deleteBy) {
|
|
247
|
-
var _a, _b;
|
|
248
394
|
const itemsToDelete = await this.findBy({
|
|
249
|
-
query:
|
|
395
|
+
query: SloFeedUtil.getTenantPinnedQuery({
|
|
396
|
+
query: deleteBy.query,
|
|
397
|
+
tenantId: deleteBy.props.isMultiTenantRequest
|
|
398
|
+
? undefined
|
|
399
|
+
: deleteBy.props.tenantId,
|
|
400
|
+
}),
|
|
250
401
|
limit: LIMIT_MAX,
|
|
251
402
|
skip: 0,
|
|
252
403
|
select: {
|
|
@@ -257,34 +408,109 @@ export class Service extends DatabaseService {
|
|
|
257
408
|
isRoot: true,
|
|
258
409
|
},
|
|
259
410
|
});
|
|
411
|
+
const burnRateRules = [];
|
|
260
412
|
for (const item of itemsToDelete) {
|
|
261
413
|
if (!item.id || !item.projectId) {
|
|
262
414
|
continue;
|
|
263
415
|
}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
416
|
+
const rulesOfSlo = await ServiceLevelObjectiveBurnRateRuleService.findBy({
|
|
417
|
+
query: {
|
|
418
|
+
serviceLevelObjectiveId: item.id,
|
|
267
419
|
projectId: item.projectId,
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
420
|
+
},
|
|
421
|
+
select: {
|
|
422
|
+
_id: true,
|
|
423
|
+
projectId: true,
|
|
424
|
+
serviceLevelObjectiveId: true,
|
|
425
|
+
},
|
|
426
|
+
skip: 0,
|
|
427
|
+
limit: LIMIT_PER_PROJECT,
|
|
428
|
+
props: {
|
|
429
|
+
isRoot: true,
|
|
430
|
+
},
|
|
431
|
+
});
|
|
432
|
+
burnRateRules.push(...rulesOfSlo);
|
|
273
433
|
}
|
|
434
|
+
const carryForward = {
|
|
435
|
+
itemsToDelete: itemsToDelete,
|
|
436
|
+
burnRateRules: burnRateRules,
|
|
437
|
+
};
|
|
274
438
|
return {
|
|
275
439
|
deleteBy,
|
|
276
|
-
carryForward:
|
|
277
|
-
itemsToDelete: itemsToDelete,
|
|
278
|
-
},
|
|
440
|
+
carryForward: carryForward,
|
|
279
441
|
};
|
|
280
442
|
}
|
|
443
|
+
/*
|
|
444
|
+
* Resolves what the burn rate rules of every SLO this delete really removed
|
|
445
|
+
* left open. Nothing else ever will: the evaluation worker never looks at a
|
|
446
|
+
* deleted SLO again, so those alerts and incidents, and their on-call
|
|
447
|
+
* escalations, would otherwise stay open forever.
|
|
448
|
+
*
|
|
449
|
+
* Only the SLOs whose ids DatabaseService reports as deleted are acted on
|
|
450
|
+
* (SloFeedUtil.getRowsActuallyDeleted), never every candidate onBeforeDelete
|
|
451
|
+
* read - see there for why.
|
|
452
|
+
*
|
|
453
|
+
* Resolving after the delete is safe: open records are found by fingerprint
|
|
454
|
+
* in the Alert and Incident tables, not through the SLO or rule rows. It is
|
|
455
|
+
* also the honest order - a delete that fails leaves its records open next
|
|
456
|
+
* to the SLO that still stands behind them.
|
|
457
|
+
*
|
|
458
|
+
* Rule by rule rather than through resolveOpenBurnRateAlertsAndIncidentsForSlo:
|
|
459
|
+
* that one reads the SLO's rules, which the cascade has already removed, and
|
|
460
|
+
* clears their lifecycle columns, which no longer exist.
|
|
461
|
+
*/
|
|
462
|
+
async onDeleteSuccess(onDelete, itemIdsBeforeDelete) {
|
|
463
|
+
const carryForward = onDelete.carryForward || null;
|
|
464
|
+
const deletedSlos = SloFeedUtil.getRowsActuallyDeleted({
|
|
465
|
+
rows: (carryForward === null || carryForward === void 0 ? void 0 : carryForward.itemsToDelete) || [],
|
|
466
|
+
deletedIds: itemIdsBeforeDelete,
|
|
467
|
+
});
|
|
468
|
+
for (const slo of deletedSlos) {
|
|
469
|
+
if (!slo.id || !slo.projectId) {
|
|
470
|
+
continue;
|
|
471
|
+
}
|
|
472
|
+
const sloId = slo.id;
|
|
473
|
+
const projectId = slo.projectId;
|
|
474
|
+
const rulesOfSlo = ((carryForward === null || carryForward === void 0 ? void 0 : carryForward.burnRateRules) || []).filter((rule) => {
|
|
475
|
+
var _a;
|
|
476
|
+
return (((_a = rule.serviceLevelObjectiveId) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase()) ===
|
|
477
|
+
sloId.toString().toLowerCase());
|
|
478
|
+
});
|
|
479
|
+
for (const rule of rulesOfSlo) {
|
|
480
|
+
if (!rule.id) {
|
|
481
|
+
continue;
|
|
482
|
+
}
|
|
483
|
+
try {
|
|
484
|
+
await ServiceLevelObjectiveBurnRateRuleService.resolveOpenAlertsAndIncidentsForRule({
|
|
485
|
+
serviceLevelObjectiveId: sloId,
|
|
486
|
+
burnRateRuleId: rule.id,
|
|
487
|
+
projectId: projectId,
|
|
488
|
+
rootCause: SLO_DISABLED_OR_DELETED_ROOT_CAUSE,
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
catch (err) {
|
|
492
|
+
/*
|
|
493
|
+
* Never fail the request - the SLO is already gone - and never let
|
|
494
|
+
* one rule's failure cost the next rule its resolve.
|
|
495
|
+
*/
|
|
496
|
+
logger.error(`Error resolving open alerts and incidents for burn rate rule ${rule.id.toString()} of deleted SLO ${sloId.toString()}: ${err}`, { projectId: projectId.toString() });
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
return onDelete;
|
|
501
|
+
}
|
|
281
502
|
/*
|
|
282
503
|
* Resolve everything any of this SLO's burn rate rules has left open — the
|
|
283
504
|
* Alerts they raised and the Incidents they declared. Called when the SLO is
|
|
284
|
-
* disabled or deleted, and by the worker's Misconfigured / Paused
|
|
505
|
+
* disabled, archived or deleted, and by the worker's Misconfigured / Paused
|
|
506
|
+
* guards.
|
|
507
|
+
*
|
|
508
|
+
* `rootCause` is what the resolved records say closed them; it defaults to
|
|
509
|
+
* the disable/delete wording so every existing caller is unchanged.
|
|
285
510
|
*/
|
|
286
511
|
async resolveOpenBurnRateAlertsAndIncidentsForSlo(data) {
|
|
287
512
|
var _a, _b, _c;
|
|
513
|
+
const rootCause = data.rootCause || SLO_DISABLED_OR_DELETED_ROOT_CAUSE;
|
|
288
514
|
const burnRateRules = await ServiceLevelObjectiveBurnRateRuleService.findBy({
|
|
289
515
|
query: {
|
|
290
516
|
serviceLevelObjectiveId: data.sloId,
|
|
@@ -322,7 +548,7 @@ export class Service extends DatabaseService {
|
|
|
322
548
|
serviceLevelObjectiveId: data.sloId,
|
|
323
549
|
burnRateRuleId: rule.id,
|
|
324
550
|
projectId: data.projectId,
|
|
325
|
-
rootCause:
|
|
551
|
+
rootCause: rootCause,
|
|
326
552
|
});
|
|
327
553
|
/*
|
|
328
554
|
* The rule's own lifecycle columns still say it has something open —
|
|
@@ -351,14 +577,21 @@ export class Service extends DatabaseService {
|
|
|
351
577
|
}
|
|
352
578
|
}
|
|
353
579
|
/*
|
|
354
|
-
* All enabled SLOs in active projects that are due for
|
|
355
|
-
* (nextEvaluationAt in the past, or never evaluated). Selects
|
|
356
|
-
* and state column the evaluation worker needs.
|
|
580
|
+
* All enabled, unarchived SLOs in active projects that are due for
|
|
581
|
+
* evaluation (nextEvaluationAt in the past, or never evaluated). Selects
|
|
582
|
+
* every config and state column the evaluation worker needs.
|
|
583
|
+
*
|
|
584
|
+
* Archived is checked separately from enabled on purpose: the two flags are
|
|
585
|
+
* independent (unarchiving must not re-enable an SLO somebody paused), and
|
|
586
|
+
* either one alone takes the SLO out of evaluation. The worker re-reads both
|
|
587
|
+
* right before a burn rate rule fires, because this snapshot can go stale
|
|
588
|
+
* while a long sweep is still running.
|
|
357
589
|
*/
|
|
358
590
|
async getDueSlos() {
|
|
359
591
|
return await this.findAllBy({
|
|
360
592
|
query: {
|
|
361
593
|
isEnabled: true,
|
|
594
|
+
isArchived: false,
|
|
362
595
|
nextEvaluationAt: QueryHelper.lessThanEqualToOrNull(OneUptimeDate.getCurrentDate()),
|
|
363
596
|
project: Object.assign({}, ProjectService.getActiveProjectStatusQuery()),
|
|
364
597
|
},
|
|
@@ -366,6 +599,15 @@ export class Service extends DatabaseService {
|
|
|
366
599
|
_id: true,
|
|
367
600
|
projectId: true,
|
|
368
601
|
name: true,
|
|
602
|
+
/*
|
|
603
|
+
* Stamped as oneuptime.label.* on the oneuptime.slo.* metrics the
|
|
604
|
+
* worker posts (SloMetricUtil), so SLO series group and filter by
|
|
605
|
+
* the same labels as the SLO list.
|
|
606
|
+
*/
|
|
607
|
+
labels: {
|
|
608
|
+
_id: true,
|
|
609
|
+
name: true,
|
|
610
|
+
},
|
|
369
611
|
isEnabled: true,
|
|
370
612
|
sliType: true,
|
|
371
613
|
multiMonitorMode: true,
|
|
@@ -461,6 +703,46 @@ export class Service extends DatabaseService {
|
|
|
461
703
|
const dashboardUrl = await DatabaseConfig.getDashboardUrl();
|
|
462
704
|
return URL.fromString(dashboardUrl.toString()).addRoute(`/${projectId.toString()}/slos/${serviceLevelObjectiveId.toString()}`);
|
|
463
705
|
}
|
|
706
|
+
/*
|
|
707
|
+
* `[SLO <name>](<dashboard link>)` for feed items and notifications.
|
|
708
|
+
*
|
|
709
|
+
* The name is user-controlled and feeds render without safe mode, so it is
|
|
710
|
+
* escaped here, once, at the point it becomes markdown - a name like
|
|
711
|
+
* `x](https://evil)` must not be able to re-point the link.
|
|
712
|
+
*
|
|
713
|
+
* Pass `sloName` whenever the caller already has it (the worker always
|
|
714
|
+
* does); the lookup is only a fallback for callers holding just an id. An
|
|
715
|
+
* SLO that cannot be found still gets a working link, labelled "SLO".
|
|
716
|
+
*
|
|
717
|
+
* The lookup is pinned to `projectId`. Its callers are feed writers running
|
|
718
|
+
* after a write, and several of them hold an SLO id nobody checked against
|
|
719
|
+
* the tenant (an owner row or burn rate rule created with another project's
|
|
720
|
+
* SLO id). Read as root without the pin, that id would copy another
|
|
721
|
+
* project's SLO name into a feed item the caller's project can read. An SLO
|
|
722
|
+
* outside the project is treated exactly like one that does not exist.
|
|
723
|
+
*/
|
|
724
|
+
async getSloMarkdownLink(data) {
|
|
725
|
+
let sloName = data.sloName;
|
|
726
|
+
if (sloName === undefined) {
|
|
727
|
+
const slo = await this.findOneBy({
|
|
728
|
+
query: {
|
|
729
|
+
_id: data.sloId.toString(),
|
|
730
|
+
projectId: data.projectId,
|
|
731
|
+
},
|
|
732
|
+
select: {
|
|
733
|
+
name: true,
|
|
734
|
+
},
|
|
735
|
+
props: {
|
|
736
|
+
isRoot: true,
|
|
737
|
+
},
|
|
738
|
+
});
|
|
739
|
+
sloName = (slo === null || slo === void 0 ? void 0 : slo.name) || undefined;
|
|
740
|
+
}
|
|
741
|
+
const link = await this.getSloLinkInDashboard(data.projectId, data.sloId);
|
|
742
|
+
const escapedName = escapeMarkdownInline(sloName).trim();
|
|
743
|
+
const linkText = escapedName ? `SLO ${escapedName}` : "SLO";
|
|
744
|
+
return `[${linkText}](${link.toString()})`;
|
|
745
|
+
}
|
|
464
746
|
/*
|
|
465
747
|
* Seed the two canonical Google-SRE multi-window burn rate rules, with
|
|
466
748
|
* thresholds scaled to the SLO's compliance window. The textbook constants
|
|
@@ -471,8 +753,10 @@ export class Service extends DatabaseService {
|
|
|
471
753
|
*/
|
|
472
754
|
async seedDefaultBurnRateRules(createdItem) {
|
|
473
755
|
var _a, _b;
|
|
756
|
+
// The rules actually written, for the SLO's "created" feed item.
|
|
757
|
+
const seededRules = [];
|
|
474
758
|
if (!createdItem.id || !createdItem.projectId) {
|
|
475
|
-
return;
|
|
759
|
+
return seededRules;
|
|
476
760
|
}
|
|
477
761
|
const windowHours = createdItem.windowType === SloWindowType.CalendarMonth
|
|
478
762
|
? 720
|
|
@@ -538,11 +822,662 @@ export class Service extends DatabaseService {
|
|
|
538
822
|
isRoot: true,
|
|
539
823
|
},
|
|
540
824
|
});
|
|
825
|
+
seededRules.push(rule);
|
|
541
826
|
}
|
|
542
827
|
catch (err) {
|
|
543
828
|
logger.error(`Error seeding default burn rate rule "${defaultRule.name}" for SLO ${(_a = createdItem.id) === null || _a === void 0 ? void 0 : _a.toString()}: ${err}`, { projectId: (_b = createdItem.projectId) === null || _b === void 0 ? void 0 : _b.toString() });
|
|
544
829
|
}
|
|
545
830
|
}
|
|
831
|
+
return seededRules;
|
|
832
|
+
}
|
|
833
|
+
/*
|
|
834
|
+
* The SLO's "created" feed item: who created it, what it promises, and the
|
|
835
|
+
* default burn rate rules that came with it (folded in here rather than
|
|
836
|
+
* posted as two more items underneath).
|
|
837
|
+
*/
|
|
838
|
+
async writeSloCreatedFeed(data) {
|
|
839
|
+
const sloId = data.createdItem.id || undefined;
|
|
840
|
+
const projectId = data.createdItem.projectId;
|
|
841
|
+
if (!sloId || !projectId) {
|
|
842
|
+
return;
|
|
843
|
+
}
|
|
844
|
+
/*
|
|
845
|
+
* A dashboard, API-key or Terraform create carries an acting user; a
|
|
846
|
+
* workflow or other automation creating as root does not, and the item
|
|
847
|
+
* then says so instead of naming somebody.
|
|
848
|
+
*/
|
|
849
|
+
const createdByUserId = data.createdItem.createdByUserId ||
|
|
850
|
+
data.onCreate.createBy.props.userId ||
|
|
851
|
+
undefined;
|
|
852
|
+
const createdByUserMarkdown = await SloFeedUtil.getUserMarkdown({
|
|
853
|
+
userId: createdByUserId,
|
|
854
|
+
projectId: projectId,
|
|
855
|
+
});
|
|
856
|
+
const markdown = getSloCreatedFeedMarkdown({
|
|
857
|
+
sloMarkdownLink: await this.getSloMarkdownLink({
|
|
858
|
+
projectId: projectId,
|
|
859
|
+
sloId: sloId,
|
|
860
|
+
sloName: data.createdItem.name || "",
|
|
861
|
+
}),
|
|
862
|
+
createdByUserMarkdown: createdByUserMarkdown,
|
|
863
|
+
targetPercentage: data.createdItem.targetPercentage,
|
|
864
|
+
windowType: data.createdItem.windowType,
|
|
865
|
+
windowDays: data.createdItem.windowDays,
|
|
866
|
+
timezone: data.createdItem.timezone,
|
|
867
|
+
sliType: data.createdItem.sliType,
|
|
868
|
+
atRiskThresholdPercentage: data.createdItem.atRiskThresholdPercentage,
|
|
869
|
+
description: data.createdItem.description,
|
|
870
|
+
defaultBurnRateRules: data.seededBurnRateRules,
|
|
871
|
+
});
|
|
872
|
+
await ServiceLevelObjectiveFeedService.createServiceLevelObjectiveFeedItem({
|
|
873
|
+
serviceLevelObjectiveId: sloId,
|
|
874
|
+
projectId: projectId,
|
|
875
|
+
serviceLevelObjectiveFeedEventType: ServiceLevelObjectiveFeedEventType.ServiceLevelObjectiveCreated,
|
|
876
|
+
displayColor: Green500,
|
|
877
|
+
feedInfoInMarkdown: markdown.feedInfoInMarkdown,
|
|
878
|
+
moreInformationInMarkdown: markdown.moreInformationInMarkdown,
|
|
879
|
+
// Only a user who still exists gets the avatar; otherwise "no user".
|
|
880
|
+
userId: createdByUserMarkdown ? createdByUserId : undefined,
|
|
881
|
+
postedAt: data.postedAt,
|
|
882
|
+
});
|
|
883
|
+
}
|
|
884
|
+
/*
|
|
885
|
+
* The before-half of the feed's change detection: the watched columns this
|
|
886
|
+
* payload writes, and every matched SLO as it is before the write.
|
|
887
|
+
*
|
|
888
|
+
* Two rules keep this off the hot paths:
|
|
889
|
+
*
|
|
890
|
+
* - It reads ONLY when the payload writes a watched column, and that is
|
|
891
|
+
* checked before any query. The evaluation worker writes this row on
|
|
892
|
+
* every tick (SLI, budget, burn rate, status) and the cadence stamps go
|
|
893
|
+
* through here too; none of those columns is watched, so they cost
|
|
894
|
+
* nothing.
|
|
895
|
+
*
|
|
896
|
+
* - A root write of `monitors` is the monitor rule engine keeping
|
|
897
|
+
* rule-owned monitors in sync. The engine posts its own attach/detach
|
|
898
|
+
* items, so `monitors` is only watched on a non-root (hand-made) edit -
|
|
899
|
+
* which also spares every engine sync a read.
|
|
900
|
+
*
|
|
901
|
+
* A failed read never blocks the update; the feed just does not describe it.
|
|
902
|
+
*/
|
|
903
|
+
async readFeedSnapshotBeforeUpdate(updateBy) {
|
|
904
|
+
const columns = getSloFeedWatchedColumns({
|
|
905
|
+
payload: updateBy.data,
|
|
906
|
+
includeMonitors: !updateBy.props.isRoot,
|
|
907
|
+
});
|
|
908
|
+
if (columns.length === 0) {
|
|
909
|
+
return null;
|
|
910
|
+
}
|
|
911
|
+
try {
|
|
912
|
+
const rows = await this.findBy({
|
|
913
|
+
// Pinned: this hook runs before DatabaseService applies permissions.
|
|
914
|
+
query: SloFeedUtil.getTenantPinnedQuery({
|
|
915
|
+
query: updateBy.query,
|
|
916
|
+
tenantId: updateBy.props.tenantId,
|
|
917
|
+
}),
|
|
918
|
+
select: this.getFeedSelect(columns),
|
|
919
|
+
limit: updateBy.limit,
|
|
920
|
+
skip: updateBy.skip,
|
|
921
|
+
props: {
|
|
922
|
+
isRoot: true,
|
|
923
|
+
},
|
|
924
|
+
});
|
|
925
|
+
const rowsById = {};
|
|
926
|
+
for (const row of rows) {
|
|
927
|
+
if (row.id) {
|
|
928
|
+
rowsById[row.id.toString()] = row;
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
return {
|
|
932
|
+
columns: columns,
|
|
933
|
+
rowsById: rowsById,
|
|
934
|
+
};
|
|
935
|
+
}
|
|
936
|
+
catch (err) {
|
|
937
|
+
logger.error(`Error reading SLOs before an update for the SLO feed: ${err}`);
|
|
938
|
+
return null;
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
getFeedSelect(columns) {
|
|
942
|
+
return Object.assign({ _id: true, projectId: true, name: true,
|
|
943
|
+
// Both flags word the enable / archive items, whichever one changed.
|
|
944
|
+
isEnabled: true, isArchived: true }, getSloFeedSelect(columns));
|
|
945
|
+
}
|
|
946
|
+
async writeSloUpdatedFeed(data) {
|
|
947
|
+
var _a, _b;
|
|
948
|
+
const snapshot = ((_a = data.onUpdate.carryForward) === null || _a === void 0 ? void 0 : _a.feedSnapshot) || null;
|
|
949
|
+
if (!snapshot ||
|
|
950
|
+
snapshot.columns.length === 0 ||
|
|
951
|
+
data.updatedItemIds.length === 0) {
|
|
952
|
+
return;
|
|
953
|
+
}
|
|
954
|
+
for (const sloId of data.updatedItemIds) {
|
|
955
|
+
const before = snapshot.rowsById[sloId.toString()];
|
|
956
|
+
// Not in the snapshot means there is nothing to compare against.
|
|
957
|
+
if (!before) {
|
|
958
|
+
continue;
|
|
959
|
+
}
|
|
960
|
+
try {
|
|
961
|
+
await this.writeFeedItemsForUpdatedSlo({
|
|
962
|
+
sloId: sloId,
|
|
963
|
+
before: before,
|
|
964
|
+
columns: snapshot.columns,
|
|
965
|
+
payload: data.onUpdate.updateBy.data,
|
|
966
|
+
userId: data.onUpdate.updateBy.props.userId || undefined,
|
|
967
|
+
postedAt: data.postedAt,
|
|
968
|
+
});
|
|
969
|
+
}
|
|
970
|
+
catch (err) {
|
|
971
|
+
logger.error(`Error writing feed items for updated SLO ${sloId.toString()}: ${err}`, { projectId: (_b = before.projectId) === null || _b === void 0 ? void 0 : _b.toString() });
|
|
972
|
+
}
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
/*
|
|
976
|
+
* Compares one SLO before and after the write and posts what really
|
|
977
|
+
* changed: archive / restore, enable / disable, an "updated" item with old
|
|
978
|
+
* and new values, and hand-made monitor attaches and detaches. A form that
|
|
979
|
+
* re-submits every field it shows posts nothing for the fields it did not
|
|
980
|
+
* change.
|
|
981
|
+
*/
|
|
982
|
+
async writeFeedItemsForUpdatedSlo(data) {
|
|
983
|
+
const projectId = data.before.projectId;
|
|
984
|
+
if (!projectId) {
|
|
985
|
+
return;
|
|
986
|
+
}
|
|
987
|
+
const after = await this.findOneById({
|
|
988
|
+
id: data.sloId,
|
|
989
|
+
select: this.getFeedSelect(data.columns),
|
|
990
|
+
props: {
|
|
991
|
+
isRoot: true,
|
|
992
|
+
},
|
|
993
|
+
});
|
|
994
|
+
if (!after) {
|
|
995
|
+
return;
|
|
996
|
+
}
|
|
997
|
+
const isWatched = (column) => {
|
|
998
|
+
return data.columns.some((watched) => {
|
|
999
|
+
return watched.column === column.column;
|
|
1000
|
+
});
|
|
1001
|
+
};
|
|
1002
|
+
const beforeRow = data.before;
|
|
1003
|
+
const afterRow = after;
|
|
1004
|
+
// Unset reads as the column defaults: enabled, not archived.
|
|
1005
|
+
const isEnabled = normalizeSloFeedBoolean(after.isEnabled) !== false;
|
|
1006
|
+
const isArchived = normalizeSloFeedBoolean(after.isArchived) === true;
|
|
1007
|
+
const pendingItems = [];
|
|
1008
|
+
if (isWatched(SLO_FEED_IS_ARCHIVED_COLUMN) &&
|
|
1009
|
+
!isSloFeedValueEqual(SLO_FEED_IS_ARCHIVED_COLUMN, beforeRow, afterRow)) {
|
|
1010
|
+
pendingItems.push({
|
|
1011
|
+
eventType: isArchived
|
|
1012
|
+
? ServiceLevelObjectiveFeedEventType.ServiceLevelObjectiveArchived
|
|
1013
|
+
: ServiceLevelObjectiveFeedEventType.ServiceLevelObjectiveRestored,
|
|
1014
|
+
displayColor: isArchived ? Yellow500 : Blue500,
|
|
1015
|
+
getMarkdown: (sloMarkdownLink) => {
|
|
1016
|
+
return getSloArchivedFeedMarkdown({
|
|
1017
|
+
sloMarkdownLink: sloMarkdownLink,
|
|
1018
|
+
isArchived: isArchived,
|
|
1019
|
+
isEnabled: isEnabled,
|
|
1020
|
+
});
|
|
1021
|
+
},
|
|
1022
|
+
});
|
|
1023
|
+
}
|
|
1024
|
+
if (isWatched(SLO_FEED_IS_ENABLED_COLUMN) &&
|
|
1025
|
+
!isSloFeedValueEqual(SLO_FEED_IS_ENABLED_COLUMN, beforeRow, afterRow)) {
|
|
1026
|
+
pendingItems.push({
|
|
1027
|
+
eventType: isEnabled
|
|
1028
|
+
? ServiceLevelObjectiveFeedEventType.ServiceLevelObjectiveEnabled
|
|
1029
|
+
: ServiceLevelObjectiveFeedEventType.ServiceLevelObjectiveDisabled,
|
|
1030
|
+
displayColor: isEnabled ? Green500 : Gray500,
|
|
1031
|
+
getMarkdown: (sloMarkdownLink) => {
|
|
1032
|
+
return getSloEnabledFeedMarkdown({
|
|
1033
|
+
sloMarkdownLink: sloMarkdownLink,
|
|
1034
|
+
isEnabled: isEnabled,
|
|
1035
|
+
isArchived: isArchived,
|
|
1036
|
+
});
|
|
1037
|
+
},
|
|
1038
|
+
});
|
|
1039
|
+
}
|
|
1040
|
+
const changes = getSloFeedColumnChanges({
|
|
1041
|
+
columns: data.columns.filter((column) => {
|
|
1042
|
+
return SLO_FEED_UPDATE_COLUMNS.some((updateColumn) => {
|
|
1043
|
+
return updateColumn.column === column.column;
|
|
1044
|
+
});
|
|
1045
|
+
}),
|
|
1046
|
+
before: beforeRow,
|
|
1047
|
+
after: afterRow,
|
|
1048
|
+
});
|
|
1049
|
+
if (changes.length > 0) {
|
|
1050
|
+
pendingItems.push({
|
|
1051
|
+
eventType: ServiceLevelObjectiveFeedEventType.ServiceLevelObjectiveUpdated,
|
|
1052
|
+
displayColor: Gray500,
|
|
1053
|
+
getMarkdown: (sloMarkdownLink) => {
|
|
1054
|
+
return getSloUpdatedFeedMarkdown({
|
|
1055
|
+
sloMarkdownLink: sloMarkdownLink,
|
|
1056
|
+
changes: changes,
|
|
1057
|
+
});
|
|
1058
|
+
},
|
|
1059
|
+
});
|
|
1060
|
+
}
|
|
1061
|
+
if (isWatched(SLO_FEED_MONITORS_COLUMN)) {
|
|
1062
|
+
pendingItems.push(...(await this.getManualMonitorFeedItems({
|
|
1063
|
+
projectId: projectId,
|
|
1064
|
+
before: data.before,
|
|
1065
|
+
after: after,
|
|
1066
|
+
writtenMonitors: data.payload["monitors"],
|
|
1067
|
+
})));
|
|
1068
|
+
}
|
|
1069
|
+
if (pendingItems.length === 0) {
|
|
1070
|
+
return;
|
|
1071
|
+
}
|
|
1072
|
+
const sloMarkdownLink = await this.getSloMarkdownLink({
|
|
1073
|
+
projectId: projectId,
|
|
1074
|
+
sloId: data.sloId,
|
|
1075
|
+
sloName: after.name || data.before.name || "",
|
|
1076
|
+
});
|
|
1077
|
+
for (const pendingItem of pendingItems) {
|
|
1078
|
+
const markdown = pendingItem.getMarkdown(sloMarkdownLink);
|
|
1079
|
+
await ServiceLevelObjectiveFeedService.createServiceLevelObjectiveFeedItem({
|
|
1080
|
+
serviceLevelObjectiveId: data.sloId,
|
|
1081
|
+
projectId: projectId,
|
|
1082
|
+
serviceLevelObjectiveFeedEventType: pendingItem.eventType,
|
|
1083
|
+
displayColor: pendingItem.displayColor,
|
|
1084
|
+
feedInfoInMarkdown: markdown.feedInfoInMarkdown,
|
|
1085
|
+
moreInformationInMarkdown: markdown.moreInformationInMarkdown,
|
|
1086
|
+
userId: data.userId,
|
|
1087
|
+
postedAt: data.postedAt,
|
|
1088
|
+
});
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
/*
|
|
1092
|
+
* MonitorsAttached / MonitorsDetached for a hand-made edit of the monitor
|
|
1093
|
+
* set (the rule engine's root writes never get here - see
|
|
1094
|
+
* readFeedSnapshotBeforeUpdate).
|
|
1095
|
+
*
|
|
1096
|
+
* The new set is taken from the PAYLOAD, not from the re-read row: this
|
|
1097
|
+
* writer runs after the request, and by then a rule sync may already have
|
|
1098
|
+
* written the SLO's monitors again. Diffing against that would re-describe
|
|
1099
|
+
* the engine's own changes, which the engine posts itself. The re-read is
|
|
1100
|
+
* used only to put names on the monitors that were attached.
|
|
1101
|
+
*/
|
|
1102
|
+
async getManualMonitorFeedItems(data) {
|
|
1103
|
+
const beforeIds = new Set(getSloFeedEntityIds(data.before.monitors));
|
|
1104
|
+
const writtenIds = new Set(getSloFeedEntityIds(data.writtenMonitors));
|
|
1105
|
+
const attachedIds = Array.from(writtenIds).filter((id) => {
|
|
1106
|
+
return !beforeIds.has(id);
|
|
1107
|
+
});
|
|
1108
|
+
const detachedIds = Array.from(beforeIds).filter((id) => {
|
|
1109
|
+
return !writtenIds.has(id);
|
|
1110
|
+
});
|
|
1111
|
+
if (attachedIds.length === 0 && detachedIds.length === 0) {
|
|
1112
|
+
return [];
|
|
1113
|
+
}
|
|
1114
|
+
const nameById = {};
|
|
1115
|
+
for (const monitor of [
|
|
1116
|
+
...(data.before.monitors || []),
|
|
1117
|
+
...(data.after.monitors || []),
|
|
1118
|
+
]) {
|
|
1119
|
+
const id = getSloFeedEntityIds([monitor])[0];
|
|
1120
|
+
if (id && monitor.name) {
|
|
1121
|
+
nameById[id] = monitor.name;
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
const dashboardUrl = await DatabaseConfig.getDashboardUrl();
|
|
1125
|
+
const toReferences = (ids) => {
|
|
1126
|
+
return ids.map((id) => {
|
|
1127
|
+
return {
|
|
1128
|
+
name: nameById[id] || "",
|
|
1129
|
+
link: SloFeedUtil.getMonitorLinkInDashboard({
|
|
1130
|
+
dashboardUrl: dashboardUrl,
|
|
1131
|
+
projectId: data.projectId,
|
|
1132
|
+
monitorId: id,
|
|
1133
|
+
}),
|
|
1134
|
+
};
|
|
1135
|
+
});
|
|
1136
|
+
};
|
|
1137
|
+
const items = [];
|
|
1138
|
+
if (attachedIds.length > 0) {
|
|
1139
|
+
const attached = toReferences(attachedIds);
|
|
1140
|
+
items.push({
|
|
1141
|
+
eventType: ServiceLevelObjectiveFeedEventType.MonitorsAttached,
|
|
1142
|
+
displayColor: Blue500,
|
|
1143
|
+
getMarkdown: (sloMarkdownLink) => {
|
|
1144
|
+
return getSloMonitorsChangedFeedMarkdown({
|
|
1145
|
+
sloMarkdownLink: sloMarkdownLink,
|
|
1146
|
+
monitors: attached,
|
|
1147
|
+
change: "attached",
|
|
1148
|
+
});
|
|
1149
|
+
},
|
|
1150
|
+
});
|
|
1151
|
+
}
|
|
1152
|
+
if (detachedIds.length > 0) {
|
|
1153
|
+
const detached = toReferences(detachedIds);
|
|
1154
|
+
items.push({
|
|
1155
|
+
eventType: ServiceLevelObjectiveFeedEventType.MonitorsDetached,
|
|
1156
|
+
displayColor: Orange500,
|
|
1157
|
+
getMarkdown: (sloMarkdownLink) => {
|
|
1158
|
+
return getSloMonitorsChangedFeedMarkdown({
|
|
1159
|
+
sloMarkdownLink: sloMarkdownLink,
|
|
1160
|
+
monitors: detached,
|
|
1161
|
+
change: "detached",
|
|
1162
|
+
});
|
|
1163
|
+
},
|
|
1164
|
+
});
|
|
1165
|
+
}
|
|
1166
|
+
return items;
|
|
1167
|
+
}
|
|
1168
|
+
/*
|
|
1169
|
+
* What a write of the deprecated "Auto-Add Monitors With Labels" list
|
|
1170
|
+
* (ServiceLevelObjective.monitorLabels) does on this release.
|
|
1171
|
+
*
|
|
1172
|
+
* The column stays in the API so upgrades do not break, and it is still
|
|
1173
|
+
* written: a dashboard tab opened before the upgrade sends it with every
|
|
1174
|
+
* save of the SLO form, and so can an API client or a workflow written
|
|
1175
|
+
* against the previous release. Workflows write as root, which is why every
|
|
1176
|
+
* caller is handled here, not only users - nothing on this release writes
|
|
1177
|
+
* the column for its own reasons. Nothing else on this release reads it
|
|
1178
|
+
* either, so storing it and moving on left the SLO measuring something other
|
|
1179
|
+
* than what the caller had just saved. It is applied instead, the way this
|
|
1180
|
+
* release applies labels - as a monitor rule:
|
|
1181
|
+
*
|
|
1182
|
+
* - An SLO with no monitor rule row gets the list as a rule
|
|
1183
|
+
* (SloLegacyMonitorLabelAdoption) and is re-synced straight away, so its
|
|
1184
|
+
* monitors reflect the list at once. A list cleared to empty has nothing
|
|
1185
|
+
* to adopt, and the sync releases the monitors it attached - both what
|
|
1186
|
+
* the previous release did.
|
|
1187
|
+
* - An SLO that already has monitor rules, enabled or disabled, IGNORES
|
|
1188
|
+
* the list, with a warning in the log when the list changed. Its rules
|
|
1189
|
+
* are what it measures and what its Monitor Rules page shows. Folding the
|
|
1190
|
+
* list into one of them was rejected: the form that sends it cannot show
|
|
1191
|
+
* rules and re-submits the list it loaded, so it would undo edits made on
|
|
1192
|
+
* the Monitor Rules page, and once the converted rule has been renamed,
|
|
1193
|
+
* edited or deleted there is no rule the list reliably "is".
|
|
1194
|
+
*
|
|
1195
|
+
* Only a CHANGED list is adopted without evidence. The same list re-submitted
|
|
1196
|
+
* by an out-of-date form is adopted only while monitors are still attached
|
|
1197
|
+
* by it (the previous release's engine attached them), so re-saving that
|
|
1198
|
+
* form cannot bring back a converted rule the user deleted. See
|
|
1199
|
+
* readDeprecatedMonitorLabelsBeforeUpdate.
|
|
1200
|
+
*
|
|
1201
|
+
* Never throws: the write has landed, and a failure here must not fail the
|
|
1202
|
+
* request. An SLO whose adoption failed is not synced this time, because a
|
|
1203
|
+
* sync without its rule would release the monitors the list attached.
|
|
1204
|
+
*/
|
|
1205
|
+
async applyDeprecatedMonitorLabelWrite(data) {
|
|
1206
|
+
try {
|
|
1207
|
+
// Sorted, de-duplicated and lower-case, so two lists compare joined.
|
|
1208
|
+
const writtenLabelIds = getSloFeedEntityIds(data.writtenMonitorLabels);
|
|
1209
|
+
// Root, by id: these are the rows the permission-checked write changed.
|
|
1210
|
+
const slos = await this.findBy({
|
|
1211
|
+
query: {
|
|
1212
|
+
_id: QueryHelper.any(data.serviceLevelObjectiveIds),
|
|
1213
|
+
},
|
|
1214
|
+
select: {
|
|
1215
|
+
_id: true,
|
|
1216
|
+
projectId: true,
|
|
1217
|
+
},
|
|
1218
|
+
limit: data.serviceLevelObjectiveIds.length,
|
|
1219
|
+
skip: 0,
|
|
1220
|
+
props: {
|
|
1221
|
+
isRoot: true,
|
|
1222
|
+
},
|
|
1223
|
+
});
|
|
1224
|
+
const sloIdsWithRules = await ServiceLevelObjectiveMonitorRuleService.findServiceLevelObjectiveIdsWithAnyRule(slos
|
|
1225
|
+
.map((slo) => {
|
|
1226
|
+
return slo.id;
|
|
1227
|
+
})
|
|
1228
|
+
.filter((id) => {
|
|
1229
|
+
return Boolean(id);
|
|
1230
|
+
}));
|
|
1231
|
+
const adoptionGroups = new Map();
|
|
1232
|
+
const sloIdsToSync = [];
|
|
1233
|
+
for (const slo of slos) {
|
|
1234
|
+
if (!slo.id || !slo.projectId) {
|
|
1235
|
+
continue;
|
|
1236
|
+
}
|
|
1237
|
+
const sloId = slo.id.toString().toLowerCase();
|
|
1238
|
+
const labelIdsBeforeUpdate = data.labelIdsBeforeUpdateBySloId[sloId];
|
|
1239
|
+
// Unknown (the read before the write failed) counts as re-submitted.
|
|
1240
|
+
const isListChanged = labelIdsBeforeUpdate !== undefined &&
|
|
1241
|
+
labelIdsBeforeUpdate.join(",") !== writtenLabelIds.join(",");
|
|
1242
|
+
if (sloIdsWithRules.has(sloId)) {
|
|
1243
|
+
if (isListChanged) {
|
|
1244
|
+
logger.warn(`Ignored a change to the deprecated "Auto-Add Monitors With Labels" list of SLO ${sloId}: the SLO has monitor rules, and they decide which monitors it measures. Change its monitor rules instead.`, {
|
|
1245
|
+
projectId: slo.projectId.toString(),
|
|
1246
|
+
serviceLevelObjectiveId: sloId,
|
|
1247
|
+
});
|
|
1248
|
+
}
|
|
1249
|
+
continue;
|
|
1250
|
+
}
|
|
1251
|
+
sloIdsToSync.push(sloId);
|
|
1252
|
+
// An empty list has nothing to adopt; the sync alone releases it.
|
|
1253
|
+
if (writtenLabelIds.length === 0) {
|
|
1254
|
+
continue;
|
|
1255
|
+
}
|
|
1256
|
+
const groupKey = `${slo.projectId.toString()}|${isListChanged}`;
|
|
1257
|
+
const group = adoptionGroups.get(groupKey) || {
|
|
1258
|
+
projectId: slo.projectId,
|
|
1259
|
+
requireRuleAttachedMonitors: !isListChanged,
|
|
1260
|
+
serviceLevelObjectiveIds: [],
|
|
1261
|
+
};
|
|
1262
|
+
group.serviceLevelObjectiveIds.push(sloId);
|
|
1263
|
+
adoptionGroups.set(groupKey, group);
|
|
1264
|
+
}
|
|
1265
|
+
const sloIdsNotToSync = new Set();
|
|
1266
|
+
for (const group of adoptionGroups.values()) {
|
|
1267
|
+
try {
|
|
1268
|
+
await SloLegacyMonitorLabelAdoption.adoptLegacyMonitorLabels({
|
|
1269
|
+
projectId: group.projectId,
|
|
1270
|
+
serviceLevelObjectiveIds: group.serviceLevelObjectiveIds,
|
|
1271
|
+
requireRuleAttachedMonitors: group.requireRuleAttachedMonitors,
|
|
1272
|
+
});
|
|
1273
|
+
}
|
|
1274
|
+
catch (err) {
|
|
1275
|
+
logger.error(`Error converting the deprecated monitor label list of SLOs ${group.serviceLevelObjectiveIds.join(", ")} into monitor rules; not re-syncing their monitors this time: ${err}`, { projectId: group.projectId.toString() });
|
|
1276
|
+
for (const sloId of group.serviceLevelObjectiveIds) {
|
|
1277
|
+
sloIdsNotToSync.add(sloId);
|
|
1278
|
+
}
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
for (const sloId of sloIdsToSync) {
|
|
1282
|
+
if (sloIdsNotToSync.has(sloId)) {
|
|
1283
|
+
continue;
|
|
1284
|
+
}
|
|
1285
|
+
try {
|
|
1286
|
+
await ServiceLevelObjectiveMonitorRuleEngineService.syncMonitorsForSlo({
|
|
1287
|
+
serviceLevelObjectiveId: new ObjectID(sloId),
|
|
1288
|
+
});
|
|
1289
|
+
}
|
|
1290
|
+
catch (err) {
|
|
1291
|
+
// One SLO failing must not cost the others their sync.
|
|
1292
|
+
logger.error(`Error applying the monitor rules of SLO ${sloId} after its deprecated monitor label list was written: ${err}`);
|
|
1293
|
+
}
|
|
1294
|
+
}
|
|
1295
|
+
}
|
|
1296
|
+
catch (err) {
|
|
1297
|
+
logger.error(`Error applying a write of the deprecated SLO monitor label list: ${err}`);
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
/*
|
|
1301
|
+
* The create half of applyDeprecatedMonitorLabelWrite: a create carrying a
|
|
1302
|
+
* non-empty deprecated label list gets it as a monitor rule before
|
|
1303
|
+
* onCreateSuccess syncs the SLO's monitors. No evidence is asked for - a
|
|
1304
|
+
* brand-new SLO has attached nothing and has no deleted rule to bring back -
|
|
1305
|
+
* and it cannot have rules yet, so there is nothing to ignore it for.
|
|
1306
|
+
*
|
|
1307
|
+
* Never throws. A failed adoption is logged and leaves the SLO without the
|
|
1308
|
+
* rule; the sync after it releases nothing, because nothing is attached yet.
|
|
1309
|
+
*/
|
|
1310
|
+
async adoptDeprecatedMonitorLabelsWrittenOnCreate(createdItem) {
|
|
1311
|
+
if (!createdItem.id ||
|
|
1312
|
+
!createdItem.projectId ||
|
|
1313
|
+
getSloFeedEntityIds(createdItem.monitorLabels).length === 0) {
|
|
1314
|
+
return;
|
|
1315
|
+
}
|
|
1316
|
+
try {
|
|
1317
|
+
await SloLegacyMonitorLabelAdoption.adoptLegacyMonitorLabels({
|
|
1318
|
+
projectId: createdItem.projectId,
|
|
1319
|
+
serviceLevelObjectiveIds: [createdItem.id],
|
|
1320
|
+
requireRuleAttachedMonitors: false,
|
|
1321
|
+
});
|
|
1322
|
+
}
|
|
1323
|
+
catch (err) {
|
|
1324
|
+
logger.error(`Error converting the deprecated monitor label list of new SLO ${createdItem.id.toString()} into a monitor rule: ${err}`, { projectId: createdItem.projectId.toString() });
|
|
1325
|
+
}
|
|
1326
|
+
}
|
|
1327
|
+
/*
|
|
1328
|
+
* The deprecated label list of every SLO this update may write, as it is
|
|
1329
|
+
* BEFORE the write, keyed by lower-case SLO id - or null when the payload
|
|
1330
|
+
* does not write that list, which is every update this release's own
|
|
1331
|
+
* clients make, so they pay nothing.
|
|
1332
|
+
*
|
|
1333
|
+
* applyDeprecatedMonitorLabelWrite compares it with the written list,
|
|
1334
|
+
* because only a CHANGED list is somebody asking for something: an
|
|
1335
|
+
* out-of-date SLO form re-sends every field it loaded, labels included, on
|
|
1336
|
+
* every save.
|
|
1337
|
+
*
|
|
1338
|
+
* Pinned to the caller's tenant like the feed snapshot, since this runs
|
|
1339
|
+
* before DatabaseService applies the update's permissions. A failed read
|
|
1340
|
+
* never blocks the update; its SLOs then count as re-submitting their list,
|
|
1341
|
+
* the reading that can never bring a deleted rule back.
|
|
1342
|
+
*/
|
|
1343
|
+
async readDeprecatedMonitorLabelsBeforeUpdate(updateBy) {
|
|
1344
|
+
if (updateBy.data.monitorLabels === undefined) {
|
|
1345
|
+
return null;
|
|
1346
|
+
}
|
|
1347
|
+
const labelIdsBySloId = {};
|
|
1348
|
+
try {
|
|
1349
|
+
const rows = await this.findBy({
|
|
1350
|
+
query: SloFeedUtil.getTenantPinnedQuery({
|
|
1351
|
+
query: updateBy.query,
|
|
1352
|
+
tenantId: updateBy.props.tenantId,
|
|
1353
|
+
}),
|
|
1354
|
+
select: {
|
|
1355
|
+
_id: true,
|
|
1356
|
+
monitorLabels: {
|
|
1357
|
+
_id: true,
|
|
1358
|
+
},
|
|
1359
|
+
},
|
|
1360
|
+
limit: updateBy.limit,
|
|
1361
|
+
skip: updateBy.skip,
|
|
1362
|
+
props: {
|
|
1363
|
+
isRoot: true,
|
|
1364
|
+
},
|
|
1365
|
+
});
|
|
1366
|
+
for (const row of rows) {
|
|
1367
|
+
if (row.id) {
|
|
1368
|
+
labelIdsBySloId[row.id.toString().toLowerCase()] =
|
|
1369
|
+
getSloFeedEntityIds(row.monitorLabels);
|
|
1370
|
+
}
|
|
1371
|
+
}
|
|
1372
|
+
}
|
|
1373
|
+
catch (err) {
|
|
1374
|
+
logger.error(`Error reading SLO monitor label lists before an update: ${err}`);
|
|
1375
|
+
}
|
|
1376
|
+
return labelIdsBySloId;
|
|
1377
|
+
}
|
|
1378
|
+
/*
|
|
1379
|
+
* The manual-add guard. While an SLO has at least one ENABLED monitor rule,
|
|
1380
|
+
* its monitor list belongs to those rules, so a hand-edit may only take away
|
|
1381
|
+
* monitors a person attached:
|
|
1382
|
+
*
|
|
1383
|
+
* - adding a monitor that is not already attached is refused - the rules
|
|
1384
|
+
* decide what is measured, and the Monitors page says so;
|
|
1385
|
+
* - removing a monitor a rule attached is refused too - it would not
|
|
1386
|
+
* stick: it stays recorded in autoAddedMonitors and the next sync would
|
|
1387
|
+
* attach it again, which reads as the edit silently failing;
|
|
1388
|
+
* - removing a monitor attached by hand (before the rules were enabled)
|
|
1389
|
+
* stays allowed.
|
|
1390
|
+
*
|
|
1391
|
+
* Root writes pass untouched: the rule engine itself writes `monitors` as
|
|
1392
|
+
* root, and it must never be refused by the guard that protects its output.
|
|
1393
|
+
*
|
|
1394
|
+
* This hook runs before DatabaseService's update permission check, so the
|
|
1395
|
+
* caller's raw query is pinned to the caller's tenant before anything is
|
|
1396
|
+
* read - a validation read must not answer questions about another
|
|
1397
|
+
* project's SLOs.
|
|
1398
|
+
*/
|
|
1399
|
+
async assertMonitorEditRespectsMonitorRules(updateBy) {
|
|
1400
|
+
const nextMonitors = updateBy.data.monitors;
|
|
1401
|
+
if (nextMonitors === undefined || updateBy.props.isRoot) {
|
|
1402
|
+
return;
|
|
1403
|
+
}
|
|
1404
|
+
const query = Object.assign({}, updateBy.query);
|
|
1405
|
+
if (updateBy.props.tenantId) {
|
|
1406
|
+
query["projectId"] = updateBy.props.tenantId;
|
|
1407
|
+
}
|
|
1408
|
+
const slos = await this.findBy({
|
|
1409
|
+
query: query,
|
|
1410
|
+
select: {
|
|
1411
|
+
_id: true,
|
|
1412
|
+
monitors: {
|
|
1413
|
+
_id: true,
|
|
1414
|
+
},
|
|
1415
|
+
autoAddedMonitors: {
|
|
1416
|
+
_id: true,
|
|
1417
|
+
},
|
|
1418
|
+
},
|
|
1419
|
+
limit: LIMIT_PER_PROJECT,
|
|
1420
|
+
skip: 0,
|
|
1421
|
+
props: {
|
|
1422
|
+
isRoot: true,
|
|
1423
|
+
},
|
|
1424
|
+
});
|
|
1425
|
+
const sloIds = slos
|
|
1426
|
+
.map((slo) => {
|
|
1427
|
+
return slo.id;
|
|
1428
|
+
})
|
|
1429
|
+
.filter((id) => {
|
|
1430
|
+
return Boolean(id);
|
|
1431
|
+
});
|
|
1432
|
+
if (sloIds.length === 0) {
|
|
1433
|
+
return;
|
|
1434
|
+
}
|
|
1435
|
+
const sloIdsWithEnabledRules = await ServiceLevelObjectiveMonitorRuleService.findServiceLevelObjectiveIdsWithEnabledRules(sloIds);
|
|
1436
|
+
if (sloIdsWithEnabledRules.size === 0) {
|
|
1437
|
+
return;
|
|
1438
|
+
}
|
|
1439
|
+
const nextMonitorIds = this.toMonitorIdSet(nextMonitors);
|
|
1440
|
+
for (const slo of slos) {
|
|
1441
|
+
if (!slo.id ||
|
|
1442
|
+
!sloIdsWithEnabledRules.has(slo.id.toString().toLowerCase())) {
|
|
1443
|
+
continue;
|
|
1444
|
+
}
|
|
1445
|
+
const attachedMonitorIds = this.toMonitorIdSet(slo.monitors);
|
|
1446
|
+
const isAddingMonitors = Array.from(nextMonitorIds).some((monitorId) => {
|
|
1447
|
+
return !attachedMonitorIds.has(monitorId);
|
|
1448
|
+
});
|
|
1449
|
+
if (isAddingMonitors) {
|
|
1450
|
+
throw new BadDataException("This SLO's monitors are managed by its monitor rules. Disable the rules to add monitors by hand.");
|
|
1451
|
+
}
|
|
1452
|
+
const isRemovingRuleAttachedMonitors = Array.from(this.toMonitorIdSet(slo.autoAddedMonitors)).some((monitorId) => {
|
|
1453
|
+
return (attachedMonitorIds.has(monitorId) && !nextMonitorIds.has(monitorId));
|
|
1454
|
+
});
|
|
1455
|
+
if (isRemovingRuleAttachedMonitors) {
|
|
1456
|
+
throw new BadDataException("A monitor rule attached this monitor, so removing it by hand would not stick: the rule would attach it again. Change or disable the rule to detach it.");
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1459
|
+
}
|
|
1460
|
+
/*
|
|
1461
|
+
* Monitor ids from any shape they reach this service in: Monitor rows from
|
|
1462
|
+
* a read, `{ _id }` stubs or bare uuid strings from an API payload (which
|
|
1463
|
+
* DatabaseService only turns into entities after onBeforeUpdate). Lower-case,
|
|
1464
|
+
* because Postgres renders a uuid lower-case whatever case it was written in.
|
|
1465
|
+
*/
|
|
1466
|
+
toMonitorIdSet(value) {
|
|
1467
|
+
var _a;
|
|
1468
|
+
const items = Array.isArray(value)
|
|
1469
|
+
? value
|
|
1470
|
+
: value === null || value === undefined
|
|
1471
|
+
? []
|
|
1472
|
+
: [value];
|
|
1473
|
+
const ids = new Set();
|
|
1474
|
+
for (const item of items) {
|
|
1475
|
+
const id = ((_a = resolveReferenceId(item)) === null || _a === void 0 ? void 0 : _a.toString().trim().toLowerCase()) || "";
|
|
1476
|
+
if (id) {
|
|
1477
|
+
ids.add(id);
|
|
1478
|
+
}
|
|
1479
|
+
}
|
|
1480
|
+
return ids;
|
|
546
1481
|
}
|
|
547
1482
|
roundToTwoDecimals(value) {
|
|
548
1483
|
return Math.round(value * 100) / 100;
|
|
@@ -627,6 +1562,12 @@ __decorate([
|
|
|
627
1562
|
__metadata("design:paramtypes", [Object]),
|
|
628
1563
|
__metadata("design:returntype", Promise)
|
|
629
1564
|
], Service.prototype, "onBeforeDelete", null);
|
|
1565
|
+
__decorate([
|
|
1566
|
+
CaptureSpan(),
|
|
1567
|
+
__metadata("design:type", Function),
|
|
1568
|
+
__metadata("design:paramtypes", [Object, Array]),
|
|
1569
|
+
__metadata("design:returntype", Promise)
|
|
1570
|
+
], Service.prototype, "onDeleteSuccess", null);
|
|
630
1571
|
__decorate([
|
|
631
1572
|
CaptureSpan(),
|
|
632
1573
|
__metadata("design:type", Function),
|
|
@@ -652,5 +1593,11 @@ __decorate([
|
|
|
652
1593
|
ObjectID]),
|
|
653
1594
|
__metadata("design:returntype", Promise)
|
|
654
1595
|
], Service.prototype, "getSloLinkInDashboard", null);
|
|
1596
|
+
__decorate([
|
|
1597
|
+
CaptureSpan(),
|
|
1598
|
+
__metadata("design:type", Function),
|
|
1599
|
+
__metadata("design:paramtypes", [Object]),
|
|
1600
|
+
__metadata("design:returntype", Promise)
|
|
1601
|
+
], Service.prototype, "getSloMarkdownLink", null);
|
|
655
1602
|
export default new Service();
|
|
656
1603
|
//# sourceMappingURL=ServiceLevelObjectiveService.js.map
|