@oneuptime/common 13.0.4 → 13.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/AnalyticsModels/AuditLog.ts +81 -1
- package/Models/AnalyticsModels/SecurityEvent.ts +4 -4
- package/Models/DatabaseModels/Alert.ts +62 -0
- package/Models/DatabaseModels/GlobalConfig.ts +1 -1
- package/Models/DatabaseModels/Incident.ts +66 -0
- package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +74 -0
- package/Models/DatabaseModels/IncidentPublicNote.ts +74 -0
- package/Models/DatabaseModels/Index.ts +10 -4
- package/Models/DatabaseModels/NetworkDevice.ts +67 -0
- package/Models/DatabaseModels/NetworkDeviceDiagnostic.ts +746 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +151 -0
- package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +1 -1
- package/Models/DatabaseModels/Project.ts +41 -0
- package/Models/DatabaseModels/RumApplication.ts +1 -1
- package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +74 -0
- package/Models/DatabaseModels/{GoogleSecOpsConnection.ts → SecurityEventConnection.ts} +61 -51
- package/Models/DatabaseModels/{GoogleSecOpsConnectionRun.ts → SecurityEventConnectionRun.ts} +24 -24
- package/Models/DatabaseModels/ServiceLevelObjective.ts +185 -8
- package/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.ts +746 -43
- package/Models/DatabaseModels/ServiceLevelObjectiveFeed.ts +575 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.ts +582 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.ts +16 -0
- package/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.ts +16 -0
- package/Models/DatabaseModels/StatusPageAnnouncement.ts +75 -0
- package/Models/DatabaseModels/TelemetryIngestionKey.ts +2 -2
- package/Models/DatabaseModels/ThreatIntelFeed.ts +1 -1
- package/Server/API/AIInvestigationAPI.ts +484 -24
- 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 +380 -0
- package/Server/API/StatusPageAPI.ts +308 -199
- package/Server/API/TelemetryAPI.ts +402 -265
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.ts +99 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792800000000-AddNetworkDeviceDiagnostic.ts +83 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792900000000-AddNetworkDeviceDnsNameAndShortDeviceNames.ts +36 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793000000000-AddNetbiosLookupToNetworkDeviceDiscoveryScan.ts +29 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793100000000-SloProductOverhaul.ts +516 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793200000000-BackfillSloMonitorRulesAndAffectedResources.ts +98 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793300000000-AddDataResidencyToProject.ts +27 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793400000000-AddSubscriberUpdateNotificationStatus.ts +97 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +16 -0
- package/Server/Middleware/TelemetryIngest.ts +101 -6
- package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +138 -67
- package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +213 -84
- package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +112 -35
- package/Server/Services/AlertLabelRuleEngineService.ts +299 -217
- package/Server/Services/AlertOwnerRuleEngineService.ts +572 -396
- package/Server/Services/AlertPrivacyRuleEngineService.ts +116 -40
- package/Server/Services/AlertService.ts +111 -4
- package/Server/Services/AuditLogService.ts +612 -59
- package/Server/Services/BillingInvoiceService.ts +112 -102
- package/Server/Services/BillingService.ts +539 -11
- package/Server/Services/CephClusterLabelRuleEngineService.ts +170 -109
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +233 -115
- package/Server/Services/CloudResourceLabelRuleEngineService.ts +163 -100
- package/Server/Services/CloudResourceOwnerRuleEngineService.ts +236 -115
- package/Server/Services/DashboardLabelRuleEngineService.ts +145 -84
- package/Server/Services/DashboardOwnerRuleEngineService.ts +213 -95
- package/Server/Services/DatabaseService.ts +171 -21
- package/Server/Services/DockerHostLabelRuleEngineService.ts +171 -110
- package/Server/Services/DockerHostOwnerRuleEngineService.ts +233 -115
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +181 -112
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +243 -118
- package/Server/Services/ExceptionAggregationService.ts +7 -16
- package/Server/Services/HostLabelRuleEngineService.ts +167 -106
- package/Server/Services/HostOwnerRuleEngineService.ts +229 -111
- package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +141 -67
- package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +272 -72
- package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +112 -35
- package/Server/Services/IncidentEpisodePublicNoteService.ts +24 -0
- package/Server/Services/IncidentLabelRuleEngineService.ts +279 -204
- package/Server/Services/IncidentOwnerRuleEngineService.ts +595 -425
- package/Server/Services/IncidentPrivacyRuleEngineService.ts +117 -44
- package/Server/Services/IncidentPublicNoteService.ts +24 -0
- package/Server/Services/IncidentService.ts +114 -3
- package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +147 -83
- package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +221 -100
- package/Server/Services/Index.ts +10 -4
- package/Server/Services/InventoryItemService.ts +28 -0
- package/Server/Services/IoTFleetLabelRuleEngineService.ts +145 -84
- package/Server/Services/IoTFleetOwnerRuleEngineService.ts +213 -95
- package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +181 -112
- package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +243 -118
- package/Server/Services/LabelService.ts +23 -28
- package/Server/Services/LogAggregationService.ts +17 -23
- package/Server/Services/MetricAggregationService.ts +4 -14
- package/Server/Services/MonitorLabelRuleEngineService.ts +152 -92
- package/Server/Services/MonitorOwnerRuleEngineService.ts +220 -104
- package/Server/Services/MonitorProbeService.ts +20 -2
- package/Server/Services/MonitorService.ts +11 -9
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +376 -5
- package/Server/Services/NetworkDeviceDiagnosticService.ts +417 -0
- package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +147 -83
- package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +218 -97
- package/Server/Services/NetworkDeviceService.ts +39 -2
- package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +151 -80
- package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +222 -97
- package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +154 -83
- package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +225 -100
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +171 -110
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +235 -115
- package/Server/Services/ProjectService.ts +111 -10
- package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +174 -110
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +239 -116
- package/Server/Services/RumApplicationLabelRuleEngineService.ts +137 -73
- package/Server/Services/RumApplicationOwnerRuleEngineService.ts +200 -83
- package/Server/Services/RunbookLabelRuleEngineService.ts +146 -84
- package/Server/Services/RunbookOwnerRuleEngineService.ts +216 -95
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +324 -230
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +613 -428
- package/Server/Services/ScheduledMaintenancePublicNoteService.ts +24 -0
- package/Server/Services/ScheduledMaintenanceService.ts +43 -14
- package/Server/Services/{GoogleSecOpsConnectionRunService.ts → SecurityEventConnectionRunService.ts} +1 -1
- package/Server/Services/SecurityEventConnectionService.ts +590 -0
- package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +143 -74
- package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +206 -85
- package/Server/Services/ServiceLabelRuleEngineService.ts +172 -110
- package/Server/Services/ServiceLevelObjectiveBurnRateRuleService.ts +1057 -18
- package/Server/Services/ServiceLevelObjectiveFeedService.ts +108 -0
- package/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.ts +793 -97
- package/Server/Services/ServiceLevelObjectiveMonitorRuleService.ts +1069 -0
- package/Server/Services/ServiceLevelObjectiveOwnerTeamService.ts +240 -1
- package/Server/Services/ServiceLevelObjectiveOwnerUserService.ts +257 -1
- package/Server/Services/ServiceLevelObjectiveService.ts +1356 -56
- package/Server/Services/ServiceOwnerRuleEngineService.ts +238 -116
- package/Server/Services/StatusPageAnnouncementService.ts +13 -0
- package/Server/Services/StatusPageLabelRuleEngineService.ts +146 -85
- package/Server/Services/StatusPageOwnerRuleEngineService.ts +210 -99
- package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +28 -232
- package/Server/Services/StatusPageSubscriberService.ts +6 -0
- package/Server/Services/TelemetryUsageBillingService.ts +38 -7
- package/Server/Services/ThreatIntelFeedService.ts +1 -1
- package/Server/Services/TraceAggregationService.ts +77 -28
- package/Server/Services/VMwareVCenterLabelRuleEngineService.ts +173 -110
- package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +238 -116
- package/Server/Services/WorkflowLabelRuleEngineService.ts +145 -84
- package/Server/Services/WorkflowOwnerRuleEngineService.ts +215 -95
- package/Server/Types/AnalyticsDatabase/ModelPermission.ts +9 -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/ObservabilityAssistant.ts +13 -1
- package/Server/Utils/AI/IncidentAIContextBuilder.ts +39 -0
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +15 -1
- package/Server/Utils/AI/SRE/InvestigationEvidence.ts +658 -0
- package/Server/Utils/AI/SRE/InvestigationReferences.ts +324 -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 +38 -0
- package/Server/Utils/AI/Toolbox/SloTools.ts +416 -51
- package/Server/Utils/AI/Toolbox/TimelineTools.ts +9 -2
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +80 -0
- package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +151 -13
- package/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.ts +17 -4
- package/Server/Utils/Dashboard/PublicDashboardSloWidget.ts +155 -8
- package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +16 -0
- package/Server/Utils/Database/RelationValueUtil.ts +106 -0
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +6 -1
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +22 -27
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +5 -3
- package/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.ts +3 -1
- package/Server/Utils/Monitor/MonitorStepsProjectValidator.ts +50 -20
- package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +13 -1
- package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +6 -11
- package/Server/Utils/Rules/MonitorRulePatternValidator.ts +51 -0
- package/Server/Utils/Rules/OwnerRuleAssignment.ts +110 -0
- package/Server/Utils/Rules/RuleRun/RuleApplication.ts +81 -0
- package/Server/Utils/Rules/RuleRun/RuleRunPermission.ts +188 -0
- package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +803 -0
- package/Server/Utils/Rules/RuleRun/RuleRunner.ts +341 -0
- package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +3 -2
- package/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.ts +1108 -0
- package/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.ts +732 -0
- package/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.ts +497 -0
- package/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.ts +689 -0
- package/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.ts +767 -0
- package/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.ts +571 -0
- package/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.ts +827 -0
- package/Server/Utils/SecurityEvent/{GoogleSecOps → Connectors/GoogleSecOps}/GoogleSecOpsClient.ts +609 -74
- package/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnector.ts +2101 -0
- package/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.ts +610 -0
- package/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.ts +549 -0
- package/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.ts +830 -0
- package/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.ts +684 -0
- package/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.ts +487 -0
- package/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.ts +778 -0
- package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.ts +1182 -0
- package/Server/Utils/SecurityEvent/{GoogleSecOps/GoogleSecOpsRunExecutor.ts → Connectors/SecurityEventConnectionRunExecutor.ts} +165 -76
- package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.ts +306 -0
- package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.ts +55 -0
- package/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.ts +709 -0
- package/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.ts +596 -0
- package/Server/Utils/SecurityEvent/Connectors/Types.ts +431 -0
- package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +1 -1
- package/Server/Utils/SecurityEvent/SecurityEventDedupe.ts +81 -0
- package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.ts +2 -2
- package/Server/Utils/SessionReplay/SessionReplayReadService.ts +902 -40
- 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/StartServer.ts +10 -0
- package/Server/Utils/StatusPage/MonitorRulePatternValidator.ts +6 -43
- package/Server/Utils/StatusPageResource.ts +50 -5
- package/Server/Utils/Telemetry/EntityRegistry.ts +8 -0
- package/Server/Utils/Telemetry/KubernetesResourceAttributes.ts +108 -0
- package/Server/Utils/Telemetry/ResourceEntityFilter.ts +174 -93
- package/Server/Utils/Telemetry/ResourceFacetPlanner.ts +251 -0
- package/Server/Utils/Telemetry/ResourceFacetResolver.ts +248 -413
- package/Server/Utils/Telemetry/ServiceDependencyDiscovery.ts +668 -0
- package/Server/Utils/Telemetry/TraceContextPropagation.ts +348 -0
- package/Server/Utils/Telemetry.ts +18 -0
- package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +1063 -1
- package/Tests/App/Dashboard/AIRootCauseFeedItem.test.tsx +285 -0
- package/Tests/App/Dashboard/AddWidgetModal.test.tsx +4 -1
- package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +242 -0
- package/Tests/App/Dashboard/AffectedResourcesSlo.test.tsx +307 -0
- package/Tests/App/Dashboard/AlertEpisodeViewFields.test.tsx +601 -15
- package/Tests/App/Dashboard/ArchiveResourceCard.test.tsx +289 -0
- package/Tests/App/Dashboard/AuditLogsTable.test.tsx +598 -0
- package/Tests/App/Dashboard/BillingDefaultPaymentMethod.test.tsx +1046 -0
- package/Tests/App/Dashboard/BillingPaidUsageFlow.test.tsx +3 -0
- package/Tests/App/Dashboard/BillingPaymentMethodForm.test.tsx +201 -7
- package/Tests/App/Dashboard/BooleanSeriesCriteriaFilterText.test.ts +82 -0
- package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +16 -1
- package/Tests/App/Dashboard/ChangeAlertStateAIHeader.test.tsx +943 -0
- package/Tests/App/Dashboard/ChatActivityFeed.test.tsx +168 -1
- package/Tests/App/Dashboard/CloudResourceTelemetryScope.test.ts +41 -0
- package/Tests/App/Dashboard/ConnectionTestModal.test.tsx +604 -0
- package/Tests/App/Dashboard/ConnectorTestReportView.test.tsx +755 -0
- 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/DashboardLazyPages.test.tsx +153 -6
- package/Tests/App/Dashboard/DeviceDiagnostics.test.tsx +787 -0
- package/Tests/App/Dashboard/DeviceLatencyTrend.test.tsx +278 -0
- package/Tests/App/Dashboard/DiscoveryReviewInventoryRefresh.test.tsx +279 -0
- package/Tests/App/Dashboard/DiscoveryScanEditForm.test.tsx +87 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +443 -8
- package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +165 -0
- package/Tests/App/Dashboard/EntityFilterDropdownArchivedSlos.test.tsx +340 -0
- package/Tests/App/Dashboard/EpisodeChangeState.test.tsx +1069 -0
- package/Tests/App/Dashboard/EpisodeMembersCard.test.tsx +772 -0
- package/Tests/App/Dashboard/EventOverviewPages.test.tsx +2450 -0
- package/Tests/App/Dashboard/EventOverviewSkeleton.test.tsx +210 -0
- package/Tests/App/Dashboard/EventStatBar.test.tsx +392 -0
- package/Tests/App/Dashboard/EventStatusPanel.test.tsx +247 -0
- package/Tests/App/Dashboard/ExceptionAIAssistance.test.tsx +606 -0
- package/Tests/App/Dashboard/ExceptionBreadcrumbTimeline.test.tsx +273 -0
- package/Tests/App/Dashboard/ExceptionDetailSideMenu.test.tsx +176 -0
- package/Tests/App/Dashboard/ExceptionOverviewCards.test.tsx +366 -0
- package/Tests/App/Dashboard/ExceptionSegmentedControl.test.tsx +1020 -0
- package/Tests/App/Dashboard/ExceptionSignalPages.test.tsx +371 -0
- package/Tests/App/Dashboard/ExceptionStackFrameViewer.test.tsx +440 -0
- package/Tests/App/Dashboard/ExceptionSummary.test.tsx +381 -0
- package/Tests/App/Dashboard/ExceptionTriage.test.tsx +306 -0
- package/Tests/App/Dashboard/ExceptionsResourceFacets.test.tsx +604 -0
- package/Tests/App/Dashboard/ExceptionsViewerEntityChips.test.tsx +706 -0
- package/Tests/App/Dashboard/FeedOrdering.test.ts +32 -0
- package/Tests/App/Dashboard/IncidentEpisodeViewFields.test.tsx +618 -13
- package/Tests/App/Dashboard/InfrastructureExplorer.test.tsx +254 -207
- package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +303 -135
- package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +1472 -0
- package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +303 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1931 -25
- package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +159 -2
- package/Tests/App/Dashboard/InvestigationReferenceLink.test.tsx +177 -0
- package/Tests/App/Dashboard/InvestigationReportView.test.tsx +1398 -0
- package/Tests/App/Dashboard/InvestigationRunDetails.test.tsx +1166 -0
- package/Tests/App/Dashboard/InvoicesPayInvoice.test.tsx +437 -0
- package/Tests/App/Dashboard/KubernetesImageReferenceView.test.tsx +114 -0
- package/Tests/App/Dashboard/KubernetesLogsTabChips.test.tsx +285 -0
- package/Tests/App/Dashboard/LogsEntityChipNames.test.tsx +316 -0
- package/Tests/App/Dashboard/LogsResourceFacetChips.test.tsx +361 -0
- package/Tests/App/Dashboard/NetworkDeviceBulkDelete.test.tsx +65 -0
- package/Tests/App/Dashboard/NetworkTopologyLiveView.test.tsx +5 -0
- package/Tests/App/Dashboard/ProfileTableEntityNames.test.tsx +432 -0
- package/Tests/App/Dashboard/ProfileViewEntityName.test.tsx +250 -0
- package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +10 -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/ResourceLogsTabsBareLayout.test.tsx +700 -0
- package/Tests/App/Dashboard/ResourcePageEntityNameProps.test.tsx +803 -0
- package/Tests/App/Dashboard/RumSessionReplaySideMenu.test.tsx +11 -1
- package/Tests/App/Dashboard/ScheduledMaintenanceChangeState.test.tsx +1026 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceFeedRefresh.test.tsx +436 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +1195 -0
- package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +1764 -0
- package/Tests/App/Dashboard/SecurityEventConnectionFormModal.test.tsx +1958 -0
- package/Tests/App/Dashboard/SecurityEventConnectionsEmptyState.test.tsx +448 -0
- package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +1455 -0
- package/Tests/App/Dashboard/SecurityEventSeverityPill.test.tsx +233 -0
- package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +282 -0
- package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +247 -0
- package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +375 -274
- package/Tests/App/Dashboard/SessionReplayAuditTable.test.tsx +410 -0
- package/Tests/App/Dashboard/SloActiveBurnEventsCard.test.tsx +538 -0
- package/Tests/App/Dashboard/SloBulkActionsArchive.test.tsx +252 -0
- package/Tests/App/Dashboard/SloDashboardTemplateWidgets.test.tsx +322 -518
- package/Tests/App/Dashboard/SloElement.test.tsx +194 -0
- package/Tests/App/Dashboard/SloFeed.test.tsx +289 -0
- package/Tests/App/Dashboard/SloHistoryCharts.test.tsx +471 -0
- package/Tests/App/Dashboard/SloHistorySeries.test.tsx +607 -0
- package/Tests/App/Dashboard/SloListWidget.test.tsx +783 -0
- package/Tests/App/Dashboard/SloMetricsPage.test.tsx +346 -0
- package/Tests/App/Dashboard/SloMonitorsPage.test.tsx +661 -0
- package/Tests/App/Dashboard/SloMonitorsSummaryCard.test.tsx +489 -0
- package/Tests/App/Dashboard/SloNavigationWiring.test.tsx +437 -0
- package/Tests/App/Dashboard/SloNoticeBanner.test.tsx +305 -0
- package/Tests/App/Dashboard/SloOverviewData.test.tsx +563 -0
- package/Tests/App/Dashboard/SloOverviewHero.test.tsx +311 -0
- package/Tests/App/Dashboard/SloOverviewKpiStrip.test.tsx +426 -0
- package/Tests/App/Dashboard/SloOverviewSidebarCards.test.tsx +493 -0
- package/Tests/App/Dashboard/SloSettings.test.tsx +633 -0
- package/Tests/App/Dashboard/SloStatusSummaryCards.test.tsx +403 -0
- package/Tests/App/Dashboard/SloViewSideMenuCounts.test.tsx +373 -0
- package/Tests/App/Dashboard/SloWidgetVariableBinding.test.tsx +689 -0
- package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +774 -0
- package/Tests/App/Dashboard/TopErrorsPanelResourceNames.test.tsx +316 -0
- package/Tests/App/Dashboard/TopologyConnectivitySection.test.tsx +206 -0
- package/Tests/App/Dashboard/TopologyDataLoading.test.tsx +30 -0
- package/Tests/App/Dashboard/TopologyPageNavigation.test.tsx +88 -24
- package/Tests/App/Dashboard/TraceExplorer.test.tsx +1590 -0
- package/Tests/App/Dashboard/TraceWaterfall.test.tsx +488 -0
- package/Tests/App/Dashboard/TracesAnalyticsSeriesLabels.test.tsx +367 -0
- package/Tests/App/Dashboard/TracesEntityNames.test.tsx +617 -0
- package/Tests/App/Dashboard/TracesResourceFacets.test.tsx +613 -0
- package/Tests/App/Dashboard/UseBulkShortenDeviceNames.test.tsx +1312 -0
- package/Tests/App/Dashboard/UseServiceNames.test.tsx +359 -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 +13 -7
- 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 +132 -16
- 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 +197 -22
- package/Tests/Server/API/AIInvestigationAPI.test.ts +611 -2
- package/Tests/Server/API/AIInvestigationEvidenceAPI.test.ts +1098 -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/SecurityEventConnectionAPI.test.ts +1750 -0
- package/Tests/Server/API/SessionReplayAPI.test.ts +644 -1
- package/Tests/Server/API/StatusPageManageSubscriptionRecipient.test.ts +857 -0
- package/Tests/Server/API/StatusPageManageSubscriptionTemplateVariables.test.ts +1084 -0
- package/Tests/Server/API/TelemetryFacetsAPI.test.ts +810 -0
- package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +240 -0
- package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +33 -3
- package/Tests/Server/Infrastructure/Postgres/AddDataResidencyToProjectMigration.test.ts +202 -0
- package/Tests/Server/Infrastructure/Postgres/AddNetbiosLookupToNetworkDeviceDiscoveryScanMigration.test.ts +330 -0
- package/Tests/Server/Infrastructure/Postgres/AddNetworkDeviceDnsNameAndShortDeviceNamesMigration.test.ts +340 -0
- package/Tests/Server/Infrastructure/Postgres/BackfillSloMonitorRulesAndAffectedResourcesMigration.test.ts +343 -0
- package/Tests/Server/Infrastructure/Postgres/SloProductOverhaulMigration.test.ts +801 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +229 -0
- package/Tests/Server/Services/AddSubscriberUpdateNotificationStatusMigration.test.ts +307 -0
- package/Tests/Server/Services/AuditLogService.test.ts +1124 -0
- package/Tests/Server/Services/AutoImportScanCredentialSelect.test.ts +200 -1
- package/Tests/Server/Services/BillingInvoiceServiceMutexRelease.test.ts +254 -0
- package/Tests/Server/Services/BillingService.test.ts +70 -0
- package/Tests/Server/Services/BillingServicePayInvoiceStates.test.ts +723 -0
- package/Tests/Server/Services/BillingServicePaymentMethodReads.test.ts +14 -2
- package/Tests/Server/Services/BillingServiceSubscriptionPaymentMethodSync.test.ts +1634 -0
- package/Tests/Server/Services/DatabaseServiceAuditRelationDiff.test.ts +492 -0
- package/Tests/Server/Services/DatabaseServicePasswordFieldSecrets.test.ts +629 -0
- package/Tests/Server/Services/IncidentAlertSloLinkSurvivesEdit.test.ts +431 -0
- package/Tests/Server/Services/IncidentAlertSloReferenceGuard.test.ts +358 -0
- package/Tests/Server/Services/InventoryItemDisplayName.test.ts +66 -0
- package/Tests/Server/Services/MonitorProbeServicePastDueMonitoring.test.ts +362 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +1460 -1
- package/Tests/Server/Services/NetworkDeviceDiagnosticService.test.ts +962 -0
- package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +106 -0
- package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +10 -1
- package/Tests/Server/Services/NetworkDeviceServicePastDueMonitoring.test.ts +335 -0
- package/Tests/Server/Services/NetworkDeviceSiteRuleDnsName.test.ts +568 -0
- package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +28 -1
- package/Tests/Server/Services/ProjectDataResidencyPostgres.test.ts +344 -0
- package/Tests/Server/Services/ProjectServiceAuditLogSettingsCache.test.ts +187 -0
- package/Tests/Server/Services/ProjectServiceDataResidency.test.ts +369 -0
- package/Tests/Server/Services/ProjectServiceDataResidencySelfHosted.test.ts +176 -0
- package/Tests/Server/Services/ProjectServicePastDueMonitoring.test.ts +289 -0
- package/Tests/Server/Services/ResourceFeedServices.test.ts +24 -8
- package/Tests/Server/Services/RuleRun/IncidentAlertMaintenanceRuleEnginesRun.test.ts +1396 -0
- package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupARun.test.ts +917 -0
- package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +1262 -0
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupARun.test.ts +902 -0
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +1163 -0
- package/Tests/Server/Services/RuleRun/PrivacyRuleEnginesRun.test.ts +843 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberTemplateFormats.test.ts +465 -0
- package/Tests/Server/Services/SecurityEventConnectionService.test.ts +1754 -0
- package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +77 -23
- package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleFeedWrites.test.ts +777 -0
- package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleOptions.test.ts +1399 -0
- package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleService.test.ts +67 -74
- package/Tests/Server/Services/ServiceLevelObjectiveChildRowTenancy.test.ts +906 -0
- package/Tests/Server/Services/ServiceLevelObjectiveDeleteTenancy.test.ts +1029 -0
- package/Tests/Server/Services/ServiceLevelObjectiveFeedService.test.ts +313 -0
- package/Tests/Server/Services/ServiceLevelObjectiveFeedWrites.test.ts +1214 -0
- package/Tests/Server/Services/ServiceLevelObjectiveMarkdownLink.test.ts +289 -0
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.test.ts +1455 -430
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleLegacyLabelAdoption.test.ts +634 -0
- package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleService.test.ts +1193 -0
- package/Tests/Server/Services/{SloMonitorLabelRuleHooks.test.ts → ServiceLevelObjectiveMonitorRuleTriggers.test.ts} +135 -41
- package/Tests/Server/Services/ServiceLevelObjectiveOwnerFeedWrites.test.ts +671 -0
- package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +180 -85
- package/Tests/Server/Services/ServiceLevelObjectiveServiceArchive.test.ts +537 -0
- package/Tests/Server/Services/ServiceLevelObjectiveServiceLegacyMonitorLabelWrite.test.ts +870 -0
- package/Tests/Server/Services/ServiceLevelObjectiveServiceMonitorRuleGuard.test.ts +343 -0
- package/Tests/Server/Services/ServiceLevelObjectiveServiceReEvaluation.test.ts +246 -0
- package/Tests/Server/Services/SloAffectedResourceCreatedFeed.test.ts +501 -0
- package/Tests/Server/Services/SloAffectedResourceLinkContract.test.ts +86 -0
- package/Tests/Server/Services/SloAffectedResourceMetricAttributes.test.ts +547 -0
- package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +10 -4
- package/Tests/Server/Services/StatusPageMonitorRuleHooks.test.ts +7 -2
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateCompile.test.ts +174 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateServiceVariables.test.ts +40 -0
- package/Tests/Server/Services/SubscriberUpdateNotificationHooks.test.ts +541 -0
- package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +53 -0
- package/Tests/Server/Services/TelemetryResourceFacetCounting.test.ts +218 -0
- package/Tests/Server/Services/TelemetryResourceFacetFilters.test.ts +155 -1
- package/Tests/Server/Services/TelemetryUsageBillingSloExclusion.test.ts +288 -0
- package/Tests/Server/Services/TraceAggregationExceptionScope.test.ts +142 -0
- package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +85 -24
- package/Tests/Server/TestingUtils/PastDueMonitoringClaimSql.ts +177 -0
- package/Tests/Server/TestingUtils/Services/BillingServiceHelper.ts +51 -10
- package/Tests/Server/TestingUtils/__mocks__/Stripe.mock.ts +16 -1
- package/Tests/Server/Types/Database/Permissions/ProjectDataResidencyColumn.test.ts +386 -0
- package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +34 -11
- package/Tests/Server/Utils/AI/InvestigationEvidence.test.ts +1395 -0
- package/Tests/Server/Utils/AI/InvestigationReferences.test.ts +616 -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/AI/TimelineTools.test.ts +119 -0
- package/Tests/Server/Utils/AI/Toolbox/AIToolbox.test.ts +151 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +65 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorExceptionScope.test.ts +224 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.test.ts +255 -10
- package/Tests/Server/Utils/Dashboard/SloTemplatePublicDashboard.test.ts +404 -750
- package/Tests/Server/Utils/Database/ProjectScopedReferenceValidator.test.ts +45 -0
- package/Tests/Server/Utils/Database/RelationValueUtil.test.ts +157 -0
- package/Tests/Server/Utils/Monitor/Criteria/BooleanSeriesEvaluateOverTime.test.ts +260 -0
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +181 -0
- package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +147 -30
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPerSeriesFanout.test.ts +55 -2
- package/Tests/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.test.ts +17 -0
- package/Tests/Server/Utils/Monitor/MonitorStepsProjectValidator.test.ts +136 -0
- package/Tests/Server/Utils/Monitor/MonitorStepsProjectValidatorLoadOrder.test.ts +472 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +48 -2
- package/Tests/Server/Utils/Monitor/SloTemplateMetricEmitterContract.test.ts +435 -475
- package/Tests/Server/Utils/Rules/MonitorRulePatternValidator.test.ts +77 -0
- package/Tests/Server/Utils/Rules/OwnerRuleAssignment.test.ts +177 -0
- package/Tests/Server/Utils/Rules/RuleRun/RuleRunPermission.test.ts +365 -0
- package/Tests/Server/Utils/Rules/RuleRun/RuleRunRegistry.test.ts +173 -0
- package/Tests/Server/Utils/Rules/RuleRun/RuleRunner.test.ts +675 -0
- package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +8 -8
- package/Tests/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.test.ts +1240 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.test.ts +1853 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/ConnectorFetchSummary.test.ts +261 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.test.ts +1184 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.test.ts +1066 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.test.ts +1568 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.test.ts +930 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.test.ts +1409 -0
- 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} +9 -5
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnector.test.ts +483 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorCuratedAndLateAlerts.test.ts +676 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorFetchEvents.test.ts +1994 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorFixtures.ts +332 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorHttpIntegration.test.ts +680 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorRequestContract.test.ts +1206 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorTestConnection.test.ts +1136 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsCuratedRuleCounts.test.ts +407 -0
- package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsErrorHandling.test.ts → Connectors/GoogleSecOps/GoogleSecOpsErrorHandling.test.ts} +5 -5
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingAdaptiveCatchUp.test.ts +730 -0
- package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsClickhouseIntegration.test.ts → Connectors/GoogleSecOps/GoogleSecOpsPollingClickhouseIntegration.test.ts} +130 -35
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingFailureTaxonomy.test.ts +772 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingFixtures.ts +648 -0
- package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsHttpIntegration.test.ts → Connectors/GoogleSecOps/GoogleSecOpsPollingHttpIntegration.test.ts} +249 -222
- 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/Connectors/GoogleSecOps/GoogleSecOpsSearchDetections.test.ts +763 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsTesterIntegration.test.ts +421 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.test.ts +763 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.test.ts +1296 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.test.ts +1102 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.test.ts +1174 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.test.ts +1032 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.test.ts +1558 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.test.ts +4483 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.test.ts +1178 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.test.ts +1215 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.test.ts +1068 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.test.ts +1004 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayOriginAllowlist.test.ts +41 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1966 -179
- 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/Telemetry/KubernetesResourceAttributes.test.ts +162 -0
- package/Tests/Server/Utils/Telemetry/ResourceEntityFilter.test.ts +460 -13
- package/Tests/Server/Utils/Telemetry/ResourceFacetPlanner.test.ts +678 -0
- package/Tests/Server/Utils/Telemetry/ResourceFacetResolver.test.ts +348 -2
- package/Tests/Server/Utils/Telemetry/ServiceDependencyDiscovery.test.ts +525 -0
- package/Tests/Server/Utils/Telemetry/TraceContextPropagation.test.ts +420 -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/Monitor/CriteriaFilter.test.ts +216 -24
- package/Tests/Types/Monitor/MonitorStepDnssecMonitor.test.ts +14 -1
- package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +14 -1
- package/Tests/Types/Monitor/MonitorStepExternalStatusPageMonitor.test.ts +14 -1
- package/Tests/Types/Monitor/MonitorStepRetriesParsing.test.ts +201 -0
- package/Tests/Types/Rules/RuleRun.test.ts +315 -0
- package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +133 -0
- package/Tests/Types/Rum/SessionReplayTransportContracts.test.ts +95 -0
- package/Tests/Types/SecurityEvent/Connectors/ConnectorDiagnostics.test.ts +82 -0
- package/Tests/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.test.ts +339 -0
- package/Tests/Types/StatusPage/SubscriberNotificationTemplateVariables.test.ts +217 -0
- package/Tests/Types/StatusPage/SubscriberUpdateNotification.test.ts +200 -0
- package/Tests/Types/Telemetry/ExceptionSpanScope.test.ts +89 -0
- package/Tests/Types/Telemetry/ResourceEntityFacet.test.ts +96 -0
- package/Tests/Types/Telemetry/ResourceFacetCatalog.test.ts +304 -0
- package/Tests/UI/Components/ActiveFilterChipsLockedFilters.test.tsx +411 -0
- package/Tests/UI/Components/AlertBanner.test.tsx +319 -0
- package/Tests/UI/Components/BulkArchiveActionsCopy.test.tsx +310 -0
- package/Tests/UI/Components/Card.test.tsx +312 -1
- package/Tests/UI/Components/CardModelDetailHeaderLayout.test.tsx +253 -0
- package/Tests/UI/Components/CardModelDetailRefresher.test.tsx +342 -0
- package/Tests/UI/Components/Checkbox.test.tsx +79 -0
- package/Tests/UI/Components/CopyTextButton.test.tsx +142 -0
- package/Tests/UI/Components/Detail/DetailIdIsUnique.test.tsx +87 -0
- package/Tests/UI/Components/DetailCompactStyle.test.tsx +621 -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/ErrorBoundary.test.tsx +60 -0
- package/Tests/UI/Components/FacetSections.test.tsx +581 -0
- package/Tests/UI/Components/FacetSidebarControls.test.tsx +812 -0
- package/Tests/UI/Components/FacetVisibility.test.ts +429 -0
- package/Tests/UI/Components/Forms/ModelFormJsonColumns.test.tsx +21 -20
- package/Tests/UI/Components/LabelRuleImportExport.test.tsx +15 -2
- package/Tests/UI/Components/LockedFilterChip.test.tsx +788 -0
- package/Tests/UI/Components/LogsEntityNames.test.ts +1769 -0
- package/Tests/UI/Components/LogsEntityNamesComponents.test.tsx +696 -0
- package/Tests/UI/Components/LogsFacetSidebarHiddenFacets.test.tsx +600 -0
- package/Tests/UI/Components/LogsViewerEntityNames.test.tsx +713 -0
- package/Tests/UI/Components/MarkdownInlineReferences.test.tsx +2079 -0
- package/Tests/UI/Components/MemberRoleAssignment.test.tsx +446 -0
- package/Tests/UI/Components/ModelDetailRefetch.test.tsx +397 -0
- package/Tests/UI/Components/ModelListRefetch.test.tsx +233 -0
- package/Tests/UI/Components/ModelPageModelChange.test.tsx +409 -0
- package/Tests/UI/Components/MoreMenu.test.tsx +133 -0
- package/Tests/UI/Components/MoreMenuMotion.test.tsx +84 -3
- package/Tests/UI/Components/PaginationIntegration.test.tsx +25 -0
- package/Tests/UI/Components/ResourceFacetConfigs.test.ts +172 -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/SavedViewsSidebarIntegration.test.tsx +32 -14
- package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +44 -1
- package/Tests/UI/Components/TelemetryActiveFilterChipsLockedFilters.test.tsx +367 -0
- package/Tests/UI/Components/TelemetryFacetSidebarHiddenFacets.test.tsx +718 -0
- package/Tests/UI/Monitor/EvaluationLogList.test.tsx +303 -0
- package/Tests/UI/Monitor/MonitorSummarySnapshotRender.test.tsx +55 -1
- package/Tests/UI/Rum/FidelityNotices.test.ts +22 -0
- package/Tests/UI/Rum/RecordingHealthCard.test.tsx +120 -136
- package/Tests/UI/Rum/RecordingHealthDashboard.test.tsx +988 -0
- package/Tests/UI/Rum/ReplayCard.test.tsx +32 -0
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +709 -12
- package/Tests/UI/Rum/ReplayEngine.test.ts +154 -0
- package/Tests/UI/Rum/ReplayHeader.test.tsx +284 -124
- package/Tests/UI/Rum/ReplayPinControl.test.tsx +189 -10
- package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +286 -12
- package/Tests/UI/Rum/ReplayRail.test.tsx +294 -0
- package/Tests/UI/Rum/ReplayScrubber.test.tsx +213 -1
- package/Tests/UI/Rum/ReplayStage.test.tsx +1228 -173
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +433 -3
- package/Tests/UI/Rum/ReplayTabSwitcher.test.tsx +1391 -0
- package/Tests/UI/Rum/ReplayTimeline.test.tsx +222 -0
- package/Tests/UI/Rum/ReplayUi.test.tsx +189 -2
- package/Tests/UI/Rum/ReplayUserSessionsMenu.test.tsx +91 -0
- package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +1 -1
- package/Tests/UI/Rum/SessionReplaySettingsPolicyLoading.test.tsx +585 -0
- package/Tests/UI/Rum/SessionReplayTable.test.tsx +844 -51
- package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +29 -1
- package/Tests/UI/Telemetry/TelemetryDetailPanel.test.tsx +288 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +31 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +6 -0
- package/Tests/UI/Utils/Clipboard.test.ts +154 -0
- package/Tests/UI/Utils/DashboardStackingLayers.test.ts +8 -1
- package/Tests/UI/Utils/Navigation.test.ts +24 -0
- package/Tests/UI/Utils/RuleRunClient.test.ts +303 -0
- package/Tests/UI/Utils/Telemetry/TelemetryEntityNames.test.ts +2206 -0
- package/Tests/UI/Utils/Telemetry/UseTelemetryEntityNames.test.tsx +844 -0
- package/Tests/Utils/AI/InvestigationReport.test.ts +2430 -0
- package/Tests/Utils/APIOutgoingRequestTracer.test.ts +137 -0
- package/Tests/Utils/Dashboard/Components/DashboardComponentDefaults.test.ts +2 -0
- package/Tests/Utils/Dashboard/Components/DashboardSloListComponent.test.ts +206 -0
- package/Tests/Utils/Dashboard/DashboardSloComponent.test.ts +36 -2
- package/Tests/Utils/Dashboard/SloTemplateVariableScoping.test.ts +409 -588
- package/Tests/Utils/Dashboard/SloWidgetSource.test.ts +351 -0
- package/Tests/Utils/Markdown/MarkdownEscape.test.ts +361 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +1425 -118
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +188 -3
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +661 -13
- package/Tests/Utils/NetworkDiscovery/NetbiosNameUtil.test.ts +349 -0
- package/Tests/Utils/NetworkDiscovery/RunImportedDeviceNaming.test.ts +656 -0
- package/Tests/Utils/NetworkDiscovery/ShortDeviceNamePlanner.test.ts +1020 -0
- package/Tests/Utils/NetworkDiscovery/ShortHostnameUtil.test.ts +619 -0
- package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +317 -0
- package/Tests/Utils/Project/DataResidency.test.ts +198 -0
- package/Tests/Utils/Rules/RuleRunSummary.test.ts +394 -0
- package/Tests/Utils/Rum/SessionReplayHealthDiagnosis.test.ts +40 -0
- package/Tests/Utils/Rum/SessionReplayRecordingEnded.test.ts +619 -0
- package/Tests/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.test.ts +631 -0
- package/Tests/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.test.ts +479 -0
- package/Tests/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.test.ts +507 -0
- package/Tests/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.test.ts +686 -0
- package/Tests/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.test.ts +474 -0
- package/Tests/Utils/SecurityEvent/Connectors/OktaNormalizer.test.ts +736 -0
- package/Tests/Utils/SecurityEvent/Connectors/SplunkNormalizer.test.ts +407 -0
- package/Tests/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.test.ts +129 -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/CrossSignalScope.test.ts +57 -1
- package/Tests/Utils/Telemetry/EntityRelationship.test.ts +36 -0
- package/Tests/Utils/Telemetry/LockedFilterSearch.test.ts +521 -0
- package/Tests/Utils/Telemetry/NetworkHost.test.ts +48 -0
- package/Tests/Utils/Telemetry/OriginAllowList.test.ts +154 -0
- package/Tests/Utils/Traces/CriticalPath.test.ts +25 -0
- package/Types/AI/AIChatTypes.ts +8 -0
- package/Types/AI/InvestigationEvidence.ts +96 -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/Email/EmailTemplateType.ts +4 -0
- package/Types/Monitor/CriteriaFilter.ts +55 -8
- package/Types/Monitor/MonitorEvaluationSummary.ts +5 -0
- 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 +129 -2
- package/Types/Rules/RuleCriteriaFieldRegistry.ts +5 -0
- package/Types/Rules/RuleRun.ts +518 -0
- package/Types/Rum/SessionReplay.ts +109 -0
- package/Types/Rum/SessionReplayApi.ts +49 -0
- package/Types/SecurityEvent/Connectors/ConnectorDiagnostics.ts +117 -0
- package/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.ts +113 -0
- package/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.ts +599 -0
- package/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.ts +45 -0
- package/Types/SecurityEvent/GoogleSecOpsRegion.ts +34 -0
- 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/EntityType.ts +14 -0
- package/Types/Telemetry/ExceptionSpanScope.ts +83 -0
- package/Types/Telemetry/LockedFilterDetail.ts +25 -0
- package/Types/Telemetry/ResourceEntityFacet.ts +17 -10
- package/Types/Telemetry/ResourceFacetCatalog.ts +171 -0
- package/Types/Telemetry/ServiceType.ts +7 -0
- package/Typings/Index.d.ts +53 -3
- package/UI/Components/AlertBanner/AlertBanner.tsx +85 -27
- package/UI/Components/BulkUpdate/BulkArchiveActions.tsx +21 -2
- package/UI/Components/Card/Card.tsx +118 -83
- package/UI/Components/Checkbox/Checkbox.tsx +8 -5
- package/UI/Components/CopyTextButton/CopyTextButton.tsx +7 -1
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +4 -1
- package/UI/Components/Detail/Detail.tsx +145 -23
- package/UI/Components/Dropdown/Dropdown.tsx +64 -1
- package/UI/Components/EmptyState/EmptyState.tsx +27 -3
- package/UI/Components/EmptyState/EmptyStateGuideLinks.tsx +124 -0
- package/UI/Components/ErrorBoundary.tsx +38 -0
- package/UI/Components/Forms/ModelForm.tsx +6 -5
- package/UI/Components/LabelRule/LabelRuleTable.tsx +8 -2
- package/UI/Components/LogsViewer/LogsEntityNames.ts +912 -0
- package/UI/Components/LogsViewer/LogsViewer.tsx +152 -77
- package/UI/Components/LogsViewer/components/ActiveFilterChips.tsx +17 -11
- package/UI/Components/LogsViewer/components/FacetSection.tsx +66 -79
- package/UI/Components/LogsViewer/components/FacetValueRow.tsx +17 -2
- package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +45 -5
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +100 -19
- package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +156 -39
- package/UI/Components/LogsViewer/components/LogsTable.tsx +30 -8
- package/UI/Components/LogsViewer/types.ts +6 -0
- package/UI/Components/Markdown.tsx/InlineReferences.tsx +628 -0
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +385 -312
- package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +50 -22
- package/UI/Components/ModelDetail/CardModelDetail.tsx +15 -0
- package/UI/Components/ModelDetail/ModelDetail.tsx +64 -19
- package/UI/Components/ModelList/ModelList.tsx +33 -8
- package/UI/Components/MoreMenu/MoreMenu.tsx +14 -3
- package/UI/Components/Page/ModelPage.tsx +119 -54
- 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/Table/Table.tsx +8 -0
- package/UI/Components/Table/TableRow.tsx +13 -5
- package/UI/Components/TelemetryViewer/FacetVisibility.ts +229 -0
- package/UI/Components/TelemetryViewer/ResourceFacetConfigs.ts +46 -0
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +7 -0
- package/UI/Components/TelemetryViewer/components/FacetSearchInput.tsx +79 -0
- package/UI/Components/TelemetryViewer/components/FacetSectionHeader.tsx +69 -0
- package/UI/Components/TelemetryViewer/components/FacetShowMoreButton.tsx +36 -0
- package/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.tsx +88 -0
- package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +430 -0
- package/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.tsx +14 -10
- package/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.tsx +203 -10
- package/UI/Components/TelemetryViewer/components/TelemetryFacetSection.tsx +60 -73
- package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +94 -7
- package/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.tsx +17 -2
- package/UI/Components/TelemetryViewer/types.ts +19 -0
- package/UI/Components/TelemetryViewer/useFacetSearchExemptions.ts +158 -0
- package/UI/Components/TelemetryViewer/useFacetSectionSearch.ts +102 -0
- package/UI/Utils/Clipboard.ts +68 -2
- package/UI/Utils/Navigation.ts +17 -2
- package/UI/Utils/Rules/RuleRunClient.ts +178 -0
- package/UI/Utils/Telemetry/TelemetryEntityNames.ts +628 -0
- package/UI/Utils/Telemetry/UseTelemetryEntityNames.ts +151 -0
- package/Utils/AI/InvestigationReport.ts +1789 -0
- package/Utils/API.ts +90 -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/SloWidgetSource.ts +188 -0
- package/Utils/Markdown/MarkdownEscape.ts +63 -0
- package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +161 -36
- package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +25 -0
- package/Utils/NetworkDiscovery/NetbiosNameUtil.ts +146 -0
- package/Utils/NetworkDiscovery/RunImportedDeviceNaming.ts +390 -0
- package/Utils/NetworkDiscovery/ShortDeviceNamePlanner.ts +291 -0
- package/Utils/NetworkDiscovery/ShortHostnameUtil.ts +91 -0
- package/Utils/NetworkSite/CidrMatchUtil.ts +37 -12
- package/Utils/Project/DataResidency.ts +63 -0
- package/Utils/Rules/RuleRunSummary.ts +323 -0
- package/Utils/Rum/SessionReplayHealth.ts +11 -0
- package/Utils/Rum/SessionReplayRecordingEnded.ts +134 -0
- package/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.ts +427 -0
- package/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.ts +197 -0
- package/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.ts +464 -0
- package/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.ts +567 -0
- package/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.ts +299 -0
- package/Utils/SecurityEvent/Connectors/OktaNormalizer.ts +467 -0
- package/Utils/SecurityEvent/Connectors/SplunkNormalizer.ts +439 -0
- package/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.ts +124 -12
- 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/CrossSignalScope.ts +22 -8
- package/Utils/Telemetry/EntityRelationship.ts +8 -0
- package/Utils/Telemetry/LockedFilterSearch.ts +366 -0
- package/Utils/Telemetry/NetworkHost.ts +43 -0
- package/Utils/Telemetry/OriginAllowList.ts +139 -4
- package/Utils/Traces/CriticalPath.ts +10 -4
- package/build/dist/Models/AnalyticsModels/AuditLog.js +70 -1
- package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/SecurityEvent.js +4 -4
- package/build/dist/Models/DatabaseModels/Alert.js +60 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +64 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +75 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +75 -0
- package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +10 -4
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +68 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiagnostic.js +772 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiagnostic.js.map +1 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +140 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +1 -1
- package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +42 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.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/{GoogleSecOpsConnection.js → SecurityEventConnection.js} +87 -75
- package/build/dist/Models/DatabaseModels/SecurityEventConnection.js.map +1 -0
- package/build/dist/Models/DatabaseModels/{GoogleSecOpsConnectionRun.js → SecurityEventConnectionRun.js} +37 -37
- package/build/dist/Models/DatabaseModels/SecurityEventConnectionRun.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js +192 -10
- package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js +798 -96
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js +596 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js +590 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js +16 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js +16 -0
- package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +75 -0
- package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +2 -2
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +336 -27
- 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 +263 -0
- package/build/dist/Server/API/SecurityEventConnectionAPI.js.map +1 -0
- package/build/dist/Server/API/StatusPageAPI.js +236 -154
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +248 -170
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792800000000-AddNetworkDeviceDiagnostic.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792800000000-AddNetworkDeviceDiagnostic.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792900000000-AddNetworkDeviceDnsNameAndShortDeviceNames.js +24 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792900000000-AddNetworkDeviceDnsNameAndShortDeviceNames.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793000000000-AddNetbiosLookupToNetworkDeviceDiscoveryScan.js +21 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793000000000-AddNetbiosLookupToNetworkDeviceDiscoveryScan.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793100000000-SloProductOverhaul.js +207 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793100000000-SloProductOverhaul.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793200000000-BackfillSloMonitorRulesAndAffectedResources.js +72 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793200000000-BackfillSloMonitorRulesAndAffectedResources.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793300000000-AddDataResidencyToProject.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793300000000-AddDataResidencyToProject.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793400000000-AddSubscriberUpdateNotificationStatus.js +46 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793400000000-AddSubscriberUpdateNotificationStatus.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +16 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +57 -4
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +112 -56
- package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +167 -68
- package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +87 -26
- package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +270 -203
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +498 -354
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +97 -34
- package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +91 -8
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AuditLogService.js +408 -44
- package/build/dist/Server/Services/AuditLogService.js.map +1 -1
- package/build/dist/Server/Services/BillingInvoiceService.js +94 -85
- package/build/dist/Server/Services/BillingInvoiceService.js.map +1 -1
- package/build/dist/Server/Services/BillingService.js +406 -14
- package/build/dist/Server/Services/BillingService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +141 -92
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +189 -101
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +135 -86
- package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +189 -100
- package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +117 -69
- package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +171 -83
- package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +125 -18
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +141 -92
- package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +189 -101
- package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +145 -91
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +191 -101
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ExceptionAggregationService.js +7 -16
- package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
- package/build/dist/Server/Services/HostLabelRuleEngineService.js +141 -92
- package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js +190 -102
- package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +112 -56
- package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +220 -63
- package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +87 -26
- package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +24 -0
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +258 -192
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +519 -376
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +95 -32
- package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js +24 -0
- package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +90 -5
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +113 -65
- package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +171 -83
- package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +10 -4
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/InventoryItemService.js +22 -0
- package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +117 -69
- package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +171 -83
- package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +145 -91
- package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +191 -101
- package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/LabelService.js +20 -25
- package/build/dist/Server/Services/LabelService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +8 -17
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +4 -14
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +123 -77
- package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +167 -82
- package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorProbeService.js +18 -2
- package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +11 -9
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +287 -5
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceDiagnosticService.js +333 -0
- package/build/dist/Server/Services/NetworkDeviceDiagnosticService.js.map +1 -0
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +117 -69
- package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +171 -83
- package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +36 -2
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +117 -64
- package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +173 -83
- package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +116 -65
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +171 -83
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +141 -92
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +189 -101
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +82 -10
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +141 -92
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +189 -101
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +111 -63
- package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +161 -77
- package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +117 -69
- package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +171 -83
- package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +280 -209
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +521 -376
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +24 -0
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +24 -8
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/{GoogleSecOpsConnectionRunService.js → SecurityEventConnectionRunService.js} +2 -2
- package/build/dist/Server/Services/SecurityEventConnectionRunService.js.map +1 -0
- package/build/dist/Server/Services/SecurityEventConnectionService.js +396 -0
- package/build/dist/Server/Services/SecurityEventConnectionService.js.map +1 -0
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +115 -62
- package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +163 -77
- package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +141 -92
- package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js +769 -18
- package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveFeedService.js +96 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveFeedService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js +614 -87
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js +844 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js.map +1 -0
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js +207 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js +221 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js +997 -50
- package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +191 -102
- package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageAnnouncementService.js +12 -0
- package/build/dist/Server/Services/StatusPageAnnouncementService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +118 -70
- package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +158 -76
- package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +19 -215
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +6 -0
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +27 -5
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/ThreatIntelFeedService.js +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +51 -25
- package/build/dist/Server/Services/TraceAggregationService.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 +189 -101
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +117 -69
- package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +171 -83
- package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +9 -0
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.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/ObservabilityAssistant.js +3 -0
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
- package/build/dist/Server/Utils/AI/IncidentAIContextBuilder.js +31 -0
- package/build/dist/Server/Utils/AI/IncidentAIContextBuilder.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +14 -7
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationEvidence.js +468 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationEvidence.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationReferences.js +230 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationReferences.js.map +1 -0
- 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 +32 -0
- package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +337 -53
- package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js +6 -2
- package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +59 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +108 -15
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.js +2 -2
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.js.map +1 -1
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloWidget.js +115 -6
- package/build/dist/Server/Utils/Dashboard/PublicDashboardSloWidget.js.map +1 -1
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +13 -0
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
- package/build/dist/Server/Utils/Database/RelationValueUtil.js +82 -0
- package/build/dist/Server/Utils/Database/RelationValueUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +10 -6
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +17 -21
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +5 -3
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js +5 -4
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js +50 -10
- package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +13 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +6 -10
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
- package/build/dist/Server/Utils/Rules/MonitorRulePatternValidator.js +34 -0
- package/build/dist/Server/Utils/Rules/MonitorRulePatternValidator.js.map +1 -0
- package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js +69 -0
- package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js.map +1 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleApplication.js +25 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleApplication.js.map +1 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunPermission.js +128 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunPermission.js.map +1 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +746 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunner.js +221 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunner.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +3 -2
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.js +752 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.js +493 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.js +354 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.js +405 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.js +466 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.js +344 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.js +511 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/{GoogleSecOps → Connectors/GoogleSecOps}/GoogleSecOpsClient.js +401 -68
- 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/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.js +406 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.js +336 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.js +474 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.js +417 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.js +314 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.js +494 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.js +839 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/{GoogleSecOps/GoogleSecOpsRunExecutor.js → Connectors/SecurityEventConnectionRunExecutor.js} +77 -50
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.js +214 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.js +42 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.js +494 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.js +379 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Types.js +122 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Types.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +1 -1
- package/build/dist/Server/Utils/SecurityEvent/SecurityEventDedupe.js +52 -0
- package/build/dist/Server/Utils/SecurityEvent/SecurityEventDedupe.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js +2 -2
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +599 -32
- 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/StartServer.js +10 -0
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- 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/EntityRegistry.js +8 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/KubernetesResourceAttributes.js +80 -0
- package/build/dist/Server/Utils/Telemetry/KubernetesResourceAttributes.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +122 -67
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceFacetPlanner.js +146 -0
- package/build/dist/Server/Utils/Telemetry/ResourceFacetPlanner.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +174 -248
- package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js +492 -0
- package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TraceContextPropagation.js +259 -0
- package/build/dist/Server/Utils/Telemetry/TraceContextPropagation.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry.js +11 -5
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Types/AI/InvestigationEvidence.js +2 -0
- package/build/dist/Types/AI/InvestigationEvidence.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/Email/EmailTemplateType.js +4 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +45 -6
- package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +2 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDnsMonitor.js +3 -1
- package/build/dist/Types/Monitor/MonitorStepDnsMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDnssecMonitor.js +3 -1
- package/build/dist/Types/Monitor/MonitorStepDnssecMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js +3 -1
- package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepExternalStatusPageMonitor.js +3 -1
- package/build/dist/Types/Monitor/MonitorStepExternalStatusPageMonitor.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepRetries.js +47 -0
- package/build/dist/Types/Monitor/MonitorStepRetries.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStepSnmpMonitor.js +3 -1
- package/build/dist/Types/Monitor/MonitorStepSnmpMonitor.js.map +1 -1
- package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticResult.js +29 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticResult.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticStatus.js +37 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticStatus.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticType.js +42 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticType.js.map +1 -0
- package/build/dist/Types/NetworkDevice/NetworkDevicePingMetricNames.js +20 -0
- package/build/dist/Types/NetworkDevice/NetworkDevicePingMetricNames.js.map +1 -0
- package/build/dist/Types/Permission.js +116 -2
- 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/SessionReplay.js +95 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -1
- package/build/dist/Types/SecurityEvent/Connectors/ConnectorDiagnostics.js +18 -0
- package/build/dist/Types/SecurityEvent/Connectors/ConnectorDiagnostics.js.map +1 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.js +17 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.js.map +1 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js +439 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js.map +1 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.js +39 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.js.map +1 -0
- package/build/dist/Types/SecurityEvent/GoogleSecOpsRegion.js +35 -0
- package/build/dist/Types/SecurityEvent/GoogleSecOpsRegion.js.map +1 -0
- 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/EntityType.js +14 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/ExceptionSpanScope.js +59 -0
- package/build/dist/Types/Telemetry/ExceptionSpanScope.js.map +1 -0
- package/build/dist/Types/Telemetry/LockedFilterDetail.js +16 -0
- package/build/dist/Types/Telemetry/LockedFilterDetail.js.map +1 -0
- package/build/dist/Types/Telemetry/ResourceEntityFacet.js +16 -10
- package/build/dist/Types/Telemetry/ResourceEntityFacet.js.map +1 -1
- package/build/dist/Types/Telemetry/ResourceFacetCatalog.js +119 -0
- package/build/dist/Types/Telemetry/ResourceFacetCatalog.js.map +1 -0
- package/build/dist/Types/Telemetry/ServiceType.js +7 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/UI/Components/AlertBanner/AlertBanner.js +48 -19
- package/build/dist/UI/Components/AlertBanner/AlertBanner.js.map +1 -1
- package/build/dist/UI/Components/BulkUpdate/BulkArchiveActions.js +10 -2
- package/build/dist/UI/Components/BulkUpdate/BulkArchiveActions.js.map +1 -1
- package/build/dist/UI/Components/Card/Card.js +34 -17
- package/build/dist/UI/Components/Card/Card.js.map +1 -1
- package/build/dist/UI/Components/Checkbox/Checkbox.js +6 -4
- package/build/dist/UI/Components/Checkbox/Checkbox.js.map +1 -1
- package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -1
- package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/Detail/Detail.js +74 -15
- package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js +33 -5
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/EmptyState/EmptyState.js +3 -3
- package/build/dist/UI/Components/EmptyState/EmptyState.js.map +1 -1
- package/build/dist/UI/Components/EmptyState/EmptyStateGuideLinks.js +47 -0
- package/build/dist/UI/Components/EmptyState/EmptyStateGuideLinks.js.map +1 -0
- package/build/dist/UI/Components/ErrorBoundary.js +34 -0
- package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
- 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/LogsEntityNames.js +535 -0
- package/build/dist/UI/Components/LogsViewer/LogsEntityNames.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +117 -57
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js +3 -7
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/FacetSection.js +31 -44
- package/build/dist/UI/Components/LogsViewer/components/FacetSection.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js +17 -3
- package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +19 -3
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +64 -18
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +100 -41
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +13 -5
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/types.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/InlineReferences.js +403 -0
- package/build/dist/UI/Components/Markdown.tsx/InlineReferences.js.map +1 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +197 -179
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +30 -21
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +12 -0
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/ModelDetail.js +46 -12
- package/build/dist/UI/Components/ModelDetail/ModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelList/ModelList.js +26 -7
- package/build/dist/UI/Components/ModelList/ModelList.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/Page/ModelPage.js +62 -34
- package/build/dist/UI/Components/Page/ModelPage.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/Table/Table.js +3 -1
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +8 -1
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +111 -0
- package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/ResourceFacetConfigs.js +22 -0
- package/build/dist/UI/Components/TelemetryViewer/ResourceFacetConfigs.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/FacetSearchInput.js +36 -0
- package/build/dist/UI/Components/TelemetryViewer/components/FacetSearchInput.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/FacetSectionHeader.js +21 -0
- package/build/dist/UI/Components/TelemetryViewer/components/FacetSectionHeader.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/FacetShowMoreButton.js +14 -0
- package/build/dist/UI/Components/TelemetryViewer/components/FacetShowMoreButton.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.js +27 -0
- package/build/dist/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +202 -0
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js +2 -6
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js +111 -12
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSection.js +27 -40
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSection.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +70 -10
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js +17 -3
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/types.js +0 -4
- package/build/dist/UI/Components/TelemetryViewer/types.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/useFacetSearchExemptions.js +70 -0
- package/build/dist/UI/Components/TelemetryViewer/useFacetSearchExemptions.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/useFacetSectionSearch.js +52 -0
- package/build/dist/UI/Components/TelemetryViewer/useFacetSectionSearch.js.map +1 -0
- package/build/dist/UI/Utils/Clipboard.js +59 -2
- package/build/dist/UI/Utils/Clipboard.js.map +1 -1
- package/build/dist/UI/Utils/Navigation.js +11 -2
- package/build/dist/UI/Utils/Navigation.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 +479 -0
- package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js.map +1 -0
- package/build/dist/UI/Utils/Telemetry/UseTelemetryEntityNames.js +113 -0
- package/build/dist/UI/Utils/Telemetry/UseTelemetryEntityNames.js.map +1 -0
- package/build/dist/Utils/AI/InvestigationReport.js +1241 -0
- package/build/dist/Utils/AI/InvestigationReport.js.map +1 -0
- package/build/dist/Utils/API.js +25 -0
- 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/Markdown/MarkdownEscape.js +49 -0
- package/build/dist/Utils/Markdown/MarkdownEscape.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +112 -34
- package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +22 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/NetbiosNameUtil.js +129 -0
- package/build/dist/Utils/NetworkDiscovery/NetbiosNameUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/RunImportedDeviceNaming.js +255 -0
- package/build/dist/Utils/NetworkDiscovery/RunImportedDeviceNaming.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/ShortDeviceNamePlanner.js +184 -0
- package/build/dist/Utils/NetworkDiscovery/ShortDeviceNamePlanner.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/ShortHostnameUtil.js +79 -0
- package/build/dist/Utils/NetworkDiscovery/ShortHostnameUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +21 -12
- package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -1
- package/build/dist/Utils/Project/DataResidency.js +51 -0
- package/build/dist/Utils/Project/DataResidency.js.map +1 -0
- package/build/dist/Utils/Rules/RuleRunSummary.js +197 -0
- package/build/dist/Utils/Rules/RuleRunSummary.js.map +1 -0
- package/build/dist/Utils/Rum/SessionReplayHealth.js +10 -0
- package/build/dist/Utils/Rum/SessionReplayHealth.js.map +1 -1
- package/build/dist/Utils/Rum/SessionReplayRecordingEnded.js +54 -0
- package/build/dist/Utils/Rum/SessionReplayRecordingEnded.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.js +311 -0
- package/build/dist/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.js +150 -0
- package/build/dist/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.js +328 -0
- package/build/dist/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.js +405 -0
- package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.js +212 -0
- package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Connectors/OktaNormalizer.js +351 -0
- package/build/dist/Utils/SecurityEvent/Connectors/OktaNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Connectors/SplunkNormalizer.js +348 -0
- package/build/dist/Utils/SecurityEvent/Connectors/SplunkNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js +103 -10
- package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js.map +1 -1
- 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/CrossSignalScope.js +16 -5
- package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
- package/build/dist/Utils/Telemetry/EntityRelationship.js +7 -0
- package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
- package/build/dist/Utils/Telemetry/LockedFilterSearch.js +252 -0
- package/build/dist/Utils/Telemetry/LockedFilterSearch.js.map +1 -0
- package/build/dist/Utils/Telemetry/NetworkHost.js +39 -0
- package/build/dist/Utils/Telemetry/NetworkHost.js.map +1 -0
- package/build/dist/Utils/Telemetry/OriginAllowList.js +105 -4
- package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -1
- package/build/dist/Utils/Traces/CriticalPath.js +9 -4
- package/build/dist/Utils/Traces/CriticalPath.js.map +1 -1
- package/package.json +1 -1
- package/Server/API/GoogleSecOpsConnectionAPI.ts +0 -79
- package/Server/Services/GoogleSecOpsConnectionService.ts +0 -101
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +0 -774
- package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +0 -423
- package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +0 -724
- package/Tests/Server/API/GoogleSecOpsConnectionAPI.test.ts +0 -248
- package/Tests/Server/Services/GoogleSecOpsDiagnosticsModel.test.ts +0 -153
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.test.ts +0 -711
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsDiagnostics.test.ts +0 -838
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +0 -716
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +0 -860
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +0 -1231
- package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +0 -600
- package/Types/SecurityEvent/GoogleSecOpsDiagnostics.ts +0 -56
- package/UI/Components/GanttChart/Bar/BarLabel.tsx +0 -17
- package/UI/Components/GanttChart/Bar/Index.tsx +0 -149
- package/UI/Components/GanttChart/ChartContainer.tsx +0 -50
- package/UI/Components/GanttChart/Index.tsx +0 -90
- package/UI/Components/GanttChart/Row/Index.tsx +0 -22
- package/UI/Components/GanttChart/Row/Row.tsx +0 -231
- package/UI/Components/GanttChart/Row/RowLabel.tsx +0 -30
- package/UI/Components/GanttChart/Rows.tsx +0 -59
- package/UI/Components/GanttChart/Timeline/Index.tsx +0 -46
- package/UI/Components/GanttChart/Timeline/TimelineInterval.tsx +0 -33
- package/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.tsx +0 -43
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +0 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js.map +0 -1
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js +0 -56
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js.map +0 -1
- package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js.map +0 -1
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +0 -62
- 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/GoogleSecOpsPoller.js +0 -577
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +0 -1
- 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/GanttChart/Bar/BarLabel.js +0 -8
- package/build/dist/UI/Components/GanttChart/Bar/BarLabel.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Bar/Index.js +0 -77
- package/build/dist/UI/Components/GanttChart/Bar/Index.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/ChartContainer.js +0 -33
- package/build/dist/UI/Components/GanttChart/ChartContainer.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Index.js +0 -39
- package/build/dist/UI/Components/GanttChart/Index.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Row/Index.js +0 -7
- package/build/dist/UI/Components/GanttChart/Row/Index.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Row/Row.js +0 -106
- package/build/dist/UI/Components/GanttChart/Row/Row.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Row/RowLabel.js +0 -10
- package/build/dist/UI/Components/GanttChart/Row/RowLabel.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Rows.js +0 -19
- package/build/dist/UI/Components/GanttChart/Rows.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Timeline/Index.js +0 -16
- package/build/dist/UI/Components/GanttChart/Timeline/Index.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Timeline/TimelineInterval.js +0 -13
- package/build/dist/UI/Components/GanttChart/Timeline/TimelineInterval.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.js +0 -13
- package/build/dist/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.js.map +0 -1
|
@@ -15,6 +15,11 @@ import { JSONObject } from "../../../Types/JSON";
|
|
|
15
15
|
import ObjectID from "../../../Types/ObjectID";
|
|
16
16
|
import OneUptimeDate from "../../../Types/Date";
|
|
17
17
|
import ChunkMath from "../../../Utils/Rum/ChunkMath";
|
|
18
|
+
import {
|
|
19
|
+
SessionReplayTabEndFacts,
|
|
20
|
+
hasSessionRecordingEnded,
|
|
21
|
+
hasTabRecordingEnded,
|
|
22
|
+
} from "../../../Utils/Rum/SessionReplayRecordingEnded";
|
|
18
23
|
import {
|
|
19
24
|
MAX_SESSION_REPLAY_CHUNKS_PER_READ,
|
|
20
25
|
MAX_SESSION_REPLAY_READ_BYTES,
|
|
@@ -35,6 +40,7 @@ import {
|
|
|
35
40
|
} from "../../../Types/Rum/SessionReplayApi";
|
|
36
41
|
import BadDataException from "../../../Types/Exception/BadDataException";
|
|
37
42
|
import CaptureSpan from "../Telemetry/CaptureSpan";
|
|
43
|
+
import ServiceType from "../../../Types/Telemetry/ServiceType";
|
|
38
44
|
|
|
39
45
|
/*
|
|
40
46
|
* Bespoke ClickHouse reads for session-replay playback.
|
|
@@ -95,6 +101,15 @@ const READ_QUERY_SETTINGS: string = getQuerySettings({
|
|
|
95
101
|
export const DEFAULT_SESSION_REPLAY_LIST_LIMIT: number = 50;
|
|
96
102
|
export const MAX_SESSION_REPLAY_LIST_LIMIT: number = 200;
|
|
97
103
|
|
|
104
|
+
/*
|
|
105
|
+
* Audit tables resolve the opaque session ids on one page in a single
|
|
106
|
+
* ClickHouse read. Keep both the number of bound IN values and each value's
|
|
107
|
+
* size bounded; session ids are browser-minted 32-character hex strings, but
|
|
108
|
+
* older recorders and hand-written API callers may have stored another shape.
|
|
109
|
+
*/
|
|
110
|
+
export const MAX_SESSION_REPLAY_SUMMARIES_BATCH_SIZE: number = 200;
|
|
111
|
+
export const MAX_SESSION_REPLAY_SESSION_ID_LENGTH: number = 128;
|
|
112
|
+
|
|
98
113
|
/*
|
|
99
114
|
* Page sizes for the per-user rollup (listUsers). Same figures as the
|
|
100
115
|
* list, but the cost model differs: every page of the rollup
|
|
@@ -219,6 +234,11 @@ export interface SessionReplayListRequest {
|
|
|
219
234
|
* as well.
|
|
220
235
|
*/
|
|
221
236
|
includeIdentifiedUserLabel: boolean;
|
|
237
|
+
/*
|
|
238
|
+
* Server "now" in unix ms for the hasRecordingEnded grace. Absent means
|
|
239
|
+
* Date.now(); a test seam, like getApplicationActivitySummary's.
|
|
240
|
+
*/
|
|
241
|
+
nowUnixMs?: number | undefined;
|
|
222
242
|
}
|
|
223
243
|
|
|
224
244
|
export interface SessionReplayListItem {
|
|
@@ -278,6 +298,22 @@ export interface SessionReplayListItem {
|
|
|
278
298
|
tags: Record<string, string>;
|
|
279
299
|
startTimeUnixMs: number;
|
|
280
300
|
endTimeUnixMs: number;
|
|
301
|
+
/*
|
|
302
|
+
* True when the session is not finalized yet but every tab of it has
|
|
303
|
+
* ended (sent its final chunk, or stored its last permitted chunk
|
|
304
|
+
* index) and nothing has been stored for any of them for
|
|
305
|
+
* SESSION_REPLAY_ENDED_FINALIZE_GRACE_MS, judged from the chunk rows by
|
|
306
|
+
* the shared rule in Common/Utils/Rum/SessionReplayRecordingEnded.ts.
|
|
307
|
+
* "Not finalized" only says the finalizer has not run; this says the
|
|
308
|
+
* recording itself is over, which is what the Dashboard needs to stop
|
|
309
|
+
* calling a closed tab "Recording now". The grace is the finalizer's
|
|
310
|
+
* own, measured on the same server clock, so a multi-page app's next
|
|
311
|
+
* page (a new tab id whose first chunk is still on its way) does not
|
|
312
|
+
* flip a live session to "ended" for a poll. Always false for a
|
|
313
|
+
* finalized session, and false when the chunk rows could not be read -
|
|
314
|
+
* the list never fails for it.
|
|
315
|
+
*/
|
|
316
|
+
hasRecordingEnded: boolean;
|
|
281
317
|
}
|
|
282
318
|
|
|
283
319
|
export interface SessionReplayListResult {
|
|
@@ -285,6 +321,29 @@ export interface SessionReplayListResult {
|
|
|
285
321
|
nextCursor: SessionReplayListCursor | null;
|
|
286
322
|
}
|
|
287
323
|
|
|
324
|
+
export interface SessionReplaySummariesRequest {
|
|
325
|
+
projectId: ObjectID;
|
|
326
|
+
rumApplicationId: ObjectID;
|
|
327
|
+
sessionIds: Array<string>;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/*
|
|
331
|
+
* Deliberately excludes every identity field. An audit list needs enough
|
|
332
|
+
* context to distinguish recordings, not the person or browser identifier
|
|
333
|
+
* attached to them.
|
|
334
|
+
*/
|
|
335
|
+
export interface SessionReplaySummary {
|
|
336
|
+
sessionId: string;
|
|
337
|
+
startTime: Date;
|
|
338
|
+
startTimeUnixMs: number;
|
|
339
|
+
durationMs: number;
|
|
340
|
+
entryUrl: string;
|
|
341
|
+
browserName: string;
|
|
342
|
+
browserVersion: string;
|
|
343
|
+
osName: string;
|
|
344
|
+
deviceType: string;
|
|
345
|
+
}
|
|
346
|
+
|
|
288
347
|
/* Routes projected onto a list row; the table shows three and says "(N pages)". */
|
|
289
348
|
export const MAX_LIST_ROUTES: number = 5;
|
|
290
349
|
|
|
@@ -425,6 +484,19 @@ export interface SessionReplaySessionHeader {
|
|
|
425
484
|
*/
|
|
426
485
|
identifiedUserKey: string;
|
|
427
486
|
visitorId: string;
|
|
487
|
+
/*
|
|
488
|
+
* Same meaning as SessionReplayListItem.hasRecordingEnded.
|
|
489
|
+
*
|
|
490
|
+
* JUDGED ONLY BY getManifest; getSessionHeader always answers false.
|
|
491
|
+
* The header read is also the authorization lookup behind every chunk
|
|
492
|
+
* and heartbeat request, and its result is cached for 30s there, so a
|
|
493
|
+
* chunk-table read on it would add a query to every uncached seek and
|
|
494
|
+
* cache an answer that goes stale the moment a tab closes. The manifest
|
|
495
|
+
* is the one read that hands the header to the Dashboard, it always
|
|
496
|
+
* resolves the header fresh, and it is pinned to the application the
|
|
497
|
+
* caller was authorized against - which the chunk read needs.
|
|
498
|
+
*/
|
|
499
|
+
hasRecordingEnded: boolean;
|
|
428
500
|
/*
|
|
429
501
|
* Never populated by getSessionHeader. The manifest handler fills them
|
|
430
502
|
* from getSessionIdentity ONLY after canReadIdentifiedUserLabel passes,
|
|
@@ -468,6 +540,24 @@ export interface SessionReplayManifestTab {
|
|
|
468
540
|
totalPayloadBytes: number;
|
|
469
541
|
/* Where this tab's footage begins on the session clock. */
|
|
470
542
|
firstChunkStartOffsetMs: number;
|
|
543
|
+
/*
|
|
544
|
+
* Whether THIS tab has stopped recording, so the player can list open
|
|
545
|
+
* tabs before closed ones. A session id is shared by every tab and every
|
|
546
|
+
* page load of a multi-page app (the recorder mints a new tab id per
|
|
547
|
+
* load), so the header's hasRecordingEnded - "every tab has ended" -
|
|
548
|
+
* cannot say which of them is still open.
|
|
549
|
+
*
|
|
550
|
+
* - A finalized header: true for every tab, with no extra read.
|
|
551
|
+
* - Otherwise judged by getManifest from the same grouped chunk read as
|
|
552
|
+
* the header's hasRecordingEnded: true when the session as a whole has
|
|
553
|
+
* ended, or when hasTabRecordingEnded holds for this tab's facts. There
|
|
554
|
+
* is no grace per tab: the grace exists because a NEW tab id may still
|
|
555
|
+
* be about to register, which says nothing about whether this one
|
|
556
|
+
* sealed.
|
|
557
|
+
* - No facts for the tab, or a failed read: false, the same "report it
|
|
558
|
+
* as still recording" fallback the header uses.
|
|
559
|
+
*/
|
|
560
|
+
hasRecordingEnded: boolean;
|
|
471
561
|
}
|
|
472
562
|
|
|
473
563
|
export interface SessionReplayManifest {
|
|
@@ -694,6 +784,36 @@ const HEADER_AGGREGATES: Array<AggregatedColumn> = [
|
|
|
694
784
|
{ alias: "aggTags", expression: argMaxColumn("tags") },
|
|
695
785
|
];
|
|
696
786
|
|
|
787
|
+
/*
|
|
788
|
+
* The narrow projection used by the audit-table summary lookup. Derive it
|
|
789
|
+
* from the list's aggregates so live duration and replacement-row handling
|
|
790
|
+
* cannot drift between the two reads.
|
|
791
|
+
*/
|
|
792
|
+
const SESSION_SUMMARY_AGGREGATE_ALIASES: ReadonlyArray<string> = [
|
|
793
|
+
"aggStartTime",
|
|
794
|
+
"aggDurationMs",
|
|
795
|
+
"aggEntryUrl",
|
|
796
|
+
"aggBrowserName",
|
|
797
|
+
"aggBrowserVersion",
|
|
798
|
+
"aggOsName",
|
|
799
|
+
"aggDeviceType",
|
|
800
|
+
];
|
|
801
|
+
|
|
802
|
+
const SESSION_SUMMARY_AGGREGATES: Array<AggregatedColumn> =
|
|
803
|
+
SESSION_SUMMARY_AGGREGATE_ALIASES.map((alias: string): AggregatedColumn => {
|
|
804
|
+
const column: AggregatedColumn | undefined = HEADER_AGGREGATES.find(
|
|
805
|
+
(candidate: AggregatedColumn): boolean => {
|
|
806
|
+
return candidate.alias === alias;
|
|
807
|
+
},
|
|
808
|
+
);
|
|
809
|
+
|
|
810
|
+
if (!column) {
|
|
811
|
+
throw new Error(`HEADER_AGGREGATES has no column aliased ${alias}`);
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
return column;
|
|
815
|
+
});
|
|
816
|
+
|
|
697
817
|
/* Only the manifest needs these; the list never renders them. */
|
|
698
818
|
const HEADER_DETAIL_AGGREGATES: Array<AggregatedColumn> = [
|
|
699
819
|
{ alias: "aggMaskingMode", expression: argMaxColumn("maskingMode") },
|
|
@@ -1015,6 +1135,135 @@ function readDate(row: JSONObject, key: string): Date {
|
|
|
1015
1135
|
return new Date(readNumber(row, key));
|
|
1016
1136
|
}
|
|
1017
1137
|
|
|
1138
|
+
/*
|
|
1139
|
+
* A number that has to be MEASURED, not defaulted. readNumber answers 0 for
|
|
1140
|
+
* a missing or garbled value, which is the right degradation for a counter
|
|
1141
|
+
* on a table row but the wrong one for a clock the "has this tab ended?"
|
|
1142
|
+
* rule compares: a missing last-chunk start read as 0 would sit before
|
|
1143
|
+
* every final chunk and call a live tab ended. NaN instead, which the
|
|
1144
|
+
* shared rule refuses outright.
|
|
1145
|
+
*/
|
|
1146
|
+
function readMeasuredNumber(row: JSONObject, key: string): number {
|
|
1147
|
+
const value: unknown = row[key];
|
|
1148
|
+
|
|
1149
|
+
if (typeof value === "number") {
|
|
1150
|
+
return Number.isFinite(value) ? value : Number.NaN;
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
/* Number("") and Number(" ") are 0, which is exactly the default above. */
|
|
1154
|
+
if (typeof value === "string" && value.trim().length > 0) {
|
|
1155
|
+
const parsed: number = Number(value);
|
|
1156
|
+
return Number.isFinite(parsed) ? parsed : Number.NaN;
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
return Number.NaN;
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
/*
|
|
1163
|
+
* The per-tab facts the shared rule in
|
|
1164
|
+
* Common/Utils/Rum/SessionReplayRecordingEnded.ts is judged on, written
|
|
1165
|
+
* exactly as that file documents them. The clocks and the version are
|
|
1166
|
+
* wrapped in toFloat64 for the same reason as every wide column above:
|
|
1167
|
+
* ClickHouse's JSON format quotes Int64 and UInt64 as strings. The chunk
|
|
1168
|
+
* index is an Int32 and would come back as a number anyway; it is wrapped
|
|
1169
|
+
* too so every fact in the group parses the same way. The aliases do not
|
|
1170
|
+
* collide with a real column (see the NOTE on aliases at the top of this
|
|
1171
|
+
* file).
|
|
1172
|
+
*
|
|
1173
|
+
* Two of the five are not about the tab's own clock:
|
|
1174
|
+
*
|
|
1175
|
+
* - tabMaxChunkIndex lets the rule call a tab that stored its last
|
|
1176
|
+
* permitted chunk index ended. The ingest gate refuses everything past
|
|
1177
|
+
* it, the recorder's own truncation seal included, so that tab never
|
|
1178
|
+
* gets a final chunk and would otherwise read as "recording" until the
|
|
1179
|
+
* idle finalizer.
|
|
1180
|
+
* - tabLastChunkStoredAtUnixMs is max(version): the SERVER unix ms at
|
|
1181
|
+
* which the tab's newest chunk row was written. The grace is measured
|
|
1182
|
+
* on it, never on the device clock the chunk times come from.
|
|
1183
|
+
*/
|
|
1184
|
+
const TAB_HAS_FINAL_CHUNK_ALIAS: string = "tabHasFinalChunk";
|
|
1185
|
+
const TAB_FINAL_CHUNK_END_ALIAS: string = "tabFinalChunkEndUnixMs";
|
|
1186
|
+
const TAB_LAST_CHUNK_START_ALIAS: string = "tabLastChunkStartUnixMs";
|
|
1187
|
+
const TAB_MAX_CHUNK_INDEX_ALIAS: string = "tabMaxChunkIndex";
|
|
1188
|
+
const TAB_LAST_CHUNK_STORED_AT_ALIAS: string = "tabLastChunkStoredAtUnixMs";
|
|
1189
|
+
|
|
1190
|
+
const TAB_END_FACT_AGGREGATES: Array<AggregatedColumn> = [
|
|
1191
|
+
{
|
|
1192
|
+
alias: TAB_HAS_FINAL_CHUNK_ALIAS,
|
|
1193
|
+
expression: "max(toUInt8(isFinal))",
|
|
1194
|
+
},
|
|
1195
|
+
{
|
|
1196
|
+
alias: TAB_FINAL_CHUNK_END_ALIAS,
|
|
1197
|
+
expression:
|
|
1198
|
+
"toFloat64(toUnixTimestamp64Milli(maxIf(chunkEndTime, isFinal)))",
|
|
1199
|
+
},
|
|
1200
|
+
{
|
|
1201
|
+
alias: TAB_LAST_CHUNK_START_ALIAS,
|
|
1202
|
+
expression: "toFloat64(toUnixTimestamp64Milli(max(chunkStartTime)))",
|
|
1203
|
+
},
|
|
1204
|
+
{
|
|
1205
|
+
alias: TAB_MAX_CHUNK_INDEX_ALIAS,
|
|
1206
|
+
expression: "toFloat64(max(chunkIndex))",
|
|
1207
|
+
},
|
|
1208
|
+
{
|
|
1209
|
+
alias: TAB_LAST_CHUNK_STORED_AT_ALIAS,
|
|
1210
|
+
expression: "toFloat64(max(version))",
|
|
1211
|
+
},
|
|
1212
|
+
];
|
|
1213
|
+
|
|
1214
|
+
/* One tab-end-facts row, read with the defensive readers above. */
|
|
1215
|
+
function readTabEndFacts(row: JSONObject): SessionReplayTabEndFacts {
|
|
1216
|
+
return {
|
|
1217
|
+
hasFinalChunk: readBoolean(row, TAB_HAS_FINAL_CHUNK_ALIAS),
|
|
1218
|
+
finalChunkEndUnixMs: readMeasuredNumber(row, TAB_FINAL_CHUNK_END_ALIAS),
|
|
1219
|
+
lastChunkStartUnixMs: readMeasuredNumber(row, TAB_LAST_CHUNK_START_ALIAS),
|
|
1220
|
+
maxChunkIndex: readMeasuredNumber(row, TAB_MAX_CHUNK_INDEX_ALIAS),
|
|
1221
|
+
lastChunkStoredAtUnixMs: readMeasuredNumber(
|
|
1222
|
+
row,
|
|
1223
|
+
TAB_LAST_CHUNK_STORED_AT_ALIAS,
|
|
1224
|
+
),
|
|
1225
|
+
};
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
/*
|
|
1229
|
+
* GROUP BY sessionId, tabId makes every (session, tab) pair one row, so
|
|
1230
|
+
* this only ever runs on a result that repeats a pair. It folds the two
|
|
1231
|
+
* rows with the same maxima the GROUP BY applies, which is what one group
|
|
1232
|
+
* over both rows' chunks would have answered. A value that was not
|
|
1233
|
+
* measured on either side stays unmeasured (NaN), so a fold can never
|
|
1234
|
+
* read as "ended" on less evidence than its rows had.
|
|
1235
|
+
*/
|
|
1236
|
+
function foldTabEndFacts(
|
|
1237
|
+
first: SessionReplayTabEndFacts,
|
|
1238
|
+
second: SessionReplayTabEndFacts,
|
|
1239
|
+
): SessionReplayTabEndFacts {
|
|
1240
|
+
const maxMeasured: (a: number, b: number) => number = (
|
|
1241
|
+
a: number,
|
|
1242
|
+
b: number,
|
|
1243
|
+
): number => {
|
|
1244
|
+
return Number.isFinite(a) && Number.isFinite(b)
|
|
1245
|
+
? Math.max(a, b)
|
|
1246
|
+
: Number.NaN;
|
|
1247
|
+
};
|
|
1248
|
+
|
|
1249
|
+
return {
|
|
1250
|
+
hasFinalChunk: first.hasFinalChunk || second.hasFinalChunk,
|
|
1251
|
+
finalChunkEndUnixMs: maxMeasured(
|
|
1252
|
+
first.finalChunkEndUnixMs,
|
|
1253
|
+
second.finalChunkEndUnixMs,
|
|
1254
|
+
),
|
|
1255
|
+
lastChunkStartUnixMs: maxMeasured(
|
|
1256
|
+
first.lastChunkStartUnixMs,
|
|
1257
|
+
second.lastChunkStartUnixMs,
|
|
1258
|
+
),
|
|
1259
|
+
maxChunkIndex: maxMeasured(first.maxChunkIndex, second.maxChunkIndex),
|
|
1260
|
+
lastChunkStoredAtUnixMs: maxMeasured(
|
|
1261
|
+
first.lastChunkStoredAtUnixMs,
|
|
1262
|
+
second.lastChunkStoredAtUnixMs,
|
|
1263
|
+
),
|
|
1264
|
+
};
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1018
1267
|
/*
|
|
1019
1268
|
* The capability list chunk 0 declared, filtered to the vocabulary this
|
|
1020
1269
|
* build knows so a stored typo never reaches the player as a capability.
|
|
@@ -1088,6 +1337,120 @@ export default class SessionReplayReadService {
|
|
|
1088
1337
|
activitySummaryCache.clear();
|
|
1089
1338
|
}
|
|
1090
1339
|
|
|
1340
|
+
/*
|
|
1341
|
+
* Resolve the opaque ids stored on audit rows into compact session facts.
|
|
1342
|
+
* This is intentionally one bespoke query instead of N getSessionHeader
|
|
1343
|
+
* calls (or AnalyticsModelAPI, which RumSession does not expose). The
|
|
1344
|
+
* project and application are both pinned before the caller-controlled IN
|
|
1345
|
+
* list, and argMax collapses provisional/finalized ReplacingMergeTree rows.
|
|
1346
|
+
*/
|
|
1347
|
+
@CaptureSpan()
|
|
1348
|
+
public static async getSessionSummaries(
|
|
1349
|
+
request: SessionReplaySummariesRequest,
|
|
1350
|
+
): Promise<Array<SessionReplaySummary>> {
|
|
1351
|
+
if (request.sessionIds.length === 0) {
|
|
1352
|
+
throw new BadDataException("sessionIds must contain at least one id");
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
if (request.sessionIds.length > MAX_SESSION_REPLAY_SUMMARIES_BATCH_SIZE) {
|
|
1356
|
+
throw new BadDataException(
|
|
1357
|
+
`sessionIds must contain at most ${MAX_SESSION_REPLAY_SUMMARIES_BATCH_SIZE} ids`,
|
|
1358
|
+
);
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1361
|
+
for (const sessionId of request.sessionIds) {
|
|
1362
|
+
if (typeof sessionId !== "string" || sessionId.length === 0) {
|
|
1363
|
+
throw new BadDataException(
|
|
1364
|
+
"Every sessionId must be a non-empty string",
|
|
1365
|
+
);
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1368
|
+
if (sessionId.length > MAX_SESSION_REPLAY_SESSION_ID_LENGTH) {
|
|
1369
|
+
throw new BadDataException(
|
|
1370
|
+
`Every sessionId must be at most ${MAX_SESSION_REPLAY_SESSION_ID_LENGTH} characters.`,
|
|
1371
|
+
);
|
|
1372
|
+
}
|
|
1373
|
+
}
|
|
1374
|
+
|
|
1375
|
+
/* Preserve first occurrence order while binding every id only once. */
|
|
1376
|
+
const sessionIds: Array<string> = Array.from(
|
|
1377
|
+
new Set<string>(request.sessionIds),
|
|
1378
|
+
);
|
|
1379
|
+
|
|
1380
|
+
const statement: Statement = SQL`
|
|
1381
|
+
SELECT
|
|
1382
|
+
sessionId,
|
|
1383
|
+
`;
|
|
1384
|
+
|
|
1385
|
+
statement.append(` ${toSelectList(SESSION_SUMMARY_AGGREGATES)}`);
|
|
1386
|
+
|
|
1387
|
+
statement.append(SQL`
|
|
1388
|
+
FROM ${AnalyticsTableName.RumSession}
|
|
1389
|
+
WHERE projectId = ${{
|
|
1390
|
+
type: TableColumnType.ObjectID,
|
|
1391
|
+
value: request.projectId,
|
|
1392
|
+
}}
|
|
1393
|
+
AND rumApplicationId = ${{
|
|
1394
|
+
type: TableColumnType.ObjectID,
|
|
1395
|
+
value: request.rumApplicationId,
|
|
1396
|
+
}}
|
|
1397
|
+
AND sessionId IN (${{
|
|
1398
|
+
type: TableColumnType.Text,
|
|
1399
|
+
value: new Includes(sessionIds),
|
|
1400
|
+
}})
|
|
1401
|
+
`);
|
|
1402
|
+
|
|
1403
|
+
statement.append(RETENTION_FILTER);
|
|
1404
|
+
statement.append(
|
|
1405
|
+
" GROUP BY projectId, rumApplicationId, sessionId ORDER BY aggStartTime DESC",
|
|
1406
|
+
);
|
|
1407
|
+
statement.append(READ_QUERY_SETTINGS);
|
|
1408
|
+
|
|
1409
|
+
const dbResult: Results = await RumSessionService.executeQuery(statement);
|
|
1410
|
+
const response: DbJSONResponse = await dbResult.json<{
|
|
1411
|
+
data?: Array<JSONObject>;
|
|
1412
|
+
}>();
|
|
1413
|
+
|
|
1414
|
+
const requestedIds: Set<string> = new Set<string>(sessionIds);
|
|
1415
|
+
const summariesById: Map<string, SessionReplaySummary> = new Map<
|
|
1416
|
+
string,
|
|
1417
|
+
SessionReplaySummary
|
|
1418
|
+
>();
|
|
1419
|
+
|
|
1420
|
+
for (const row of response.data || []) {
|
|
1421
|
+
const sessionId: string = readString(row, "sessionId");
|
|
1422
|
+
|
|
1423
|
+
/* A malformed/unexpected driver row can never add data to the reply. */
|
|
1424
|
+
if (!requestedIds.has(sessionId) || summariesById.has(sessionId)) {
|
|
1425
|
+
continue;
|
|
1426
|
+
}
|
|
1427
|
+
|
|
1428
|
+
const startTime: Date = readDate(row, "aggStartTime");
|
|
1429
|
+
|
|
1430
|
+
summariesById.set(sessionId, {
|
|
1431
|
+
sessionId: sessionId,
|
|
1432
|
+
startTime: startTime,
|
|
1433
|
+
startTimeUnixMs: startTime.getTime(),
|
|
1434
|
+
durationMs: readNumber(row, "aggDurationMs"),
|
|
1435
|
+
entryUrl: readString(row, "aggEntryUrl"),
|
|
1436
|
+
browserName: readString(row, "aggBrowserName"),
|
|
1437
|
+
browserVersion: readString(row, "aggBrowserVersion"),
|
|
1438
|
+
osName: readString(row, "aggOsName"),
|
|
1439
|
+
deviceType: readString(row, "aggDeviceType"),
|
|
1440
|
+
});
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
/* Stable request order makes consumers deterministic; missing ids omit. */
|
|
1444
|
+
return sessionIds.flatMap(
|
|
1445
|
+
(sessionId: string): Array<SessionReplaySummary> => {
|
|
1446
|
+
const summary: SessionReplaySummary | undefined =
|
|
1447
|
+
summariesById.get(sessionId);
|
|
1448
|
+
|
|
1449
|
+
return summary ? [summary] : [];
|
|
1450
|
+
},
|
|
1451
|
+
);
|
|
1452
|
+
}
|
|
1453
|
+
|
|
1091
1454
|
/*
|
|
1092
1455
|
* Session list.
|
|
1093
1456
|
*
|
|
@@ -1304,6 +1667,8 @@ export default class SessionReplayReadService {
|
|
|
1304
1667
|
tags: readStringMap(row, "aggTags"),
|
|
1305
1668
|
startTimeUnixMs: startTime.getTime(),
|
|
1306
1669
|
endTimeUnixMs: endTime.getTime(),
|
|
1670
|
+
/* Judged below, only for the page's unfinalized sessions. */
|
|
1671
|
+
hasRecordingEnded: false,
|
|
1307
1672
|
};
|
|
1308
1673
|
|
|
1309
1674
|
if (request.includeIdentifiedUserLabel) {
|
|
@@ -1318,6 +1683,44 @@ export default class SessionReplayReadService {
|
|
|
1318
1683
|
},
|
|
1319
1684
|
);
|
|
1320
1685
|
|
|
1686
|
+
/*
|
|
1687
|
+
* "Recording now" or "recording ended"? The header cannot say: a
|
|
1688
|
+
* provisional header stays unfinalized for the whole idle window
|
|
1689
|
+
* after its last tab closed, which is how a closed tab kept its
|
|
1690
|
+
* "Recording now" badge for 10-15 minutes. The chunk rows can, so the
|
|
1691
|
+
* page's unfinalized sessions - and only those - get ONE follow-up
|
|
1692
|
+
* read over the chunk table. A page of finalized sessions (the
|
|
1693
|
+
* overwhelming majority of any list older than a few minutes) runs
|
|
1694
|
+
* no second query at all.
|
|
1695
|
+
*
|
|
1696
|
+
* It is a separate statement rather than a JOIN on the list query
|
|
1697
|
+
* because the list's own read is a range over the HEADER table's sort
|
|
1698
|
+
* key, and joining the chunk table there would aggregate chunk rows
|
|
1699
|
+
* for every session in the window before the LIMIT picked a page.
|
|
1700
|
+
*/
|
|
1701
|
+
const unfinalizedSessionIds: Array<string> = sessions
|
|
1702
|
+
.filter((session: SessionReplayListItem): boolean => {
|
|
1703
|
+
return !session.isFinalized;
|
|
1704
|
+
})
|
|
1705
|
+
.map((session: SessionReplayListItem): string => {
|
|
1706
|
+
return session.sessionId;
|
|
1707
|
+
});
|
|
1708
|
+
|
|
1709
|
+
if (unfinalizedSessionIds.length > 0) {
|
|
1710
|
+
const endedSessionIds: Set<string> =
|
|
1711
|
+
await SessionReplayReadService.readRecordingEndedSessionIds({
|
|
1712
|
+
projectId: request.projectId,
|
|
1713
|
+
rumApplicationId: request.rumApplicationId,
|
|
1714
|
+
sessionIds: unfinalizedSessionIds,
|
|
1715
|
+
nowUnixMs: request.nowUnixMs ?? Date.now(),
|
|
1716
|
+
});
|
|
1717
|
+
|
|
1718
|
+
for (const session of sessions) {
|
|
1719
|
+
session.hasRecordingEnded =
|
|
1720
|
+
!session.isFinalized && endedSessionIds.has(session.sessionId);
|
|
1721
|
+
}
|
|
1722
|
+
}
|
|
1723
|
+
|
|
1321
1724
|
const lastSession: SessionReplayListItem | undefined =
|
|
1322
1725
|
sessions[sessions.length - 1];
|
|
1323
1726
|
|
|
@@ -1719,6 +2122,12 @@ export default class SessionReplayReadService {
|
|
|
1719
2122
|
recorderCapabilities: readRecorderCapabilities(row),
|
|
1720
2123
|
identifiedUserKey: readString(row, "aggIdentifiedUserKey"),
|
|
1721
2124
|
visitorId: readString(row, "aggVisitorId"),
|
|
2125
|
+
/*
|
|
2126
|
+
* Not judged here: see SessionReplaySessionHeader.hasRecordingEnded.
|
|
2127
|
+
* getManifest, the read that returns this header to the Dashboard,
|
|
2128
|
+
* replaces it for an unfinalized session.
|
|
2129
|
+
*/
|
|
2130
|
+
hasRecordingEnded: false,
|
|
1722
2131
|
};
|
|
1723
2132
|
}
|
|
1724
2133
|
|
|
@@ -1870,6 +2279,11 @@ export default class SessionReplayReadService {
|
|
|
1870
2279
|
*/
|
|
1871
2280
|
rumApplicationId: ObjectID;
|
|
1872
2281
|
sessionId: string;
|
|
2282
|
+
/*
|
|
2283
|
+
* Server "now" in unix ms for the hasRecordingEnded grace. Absent
|
|
2284
|
+
* means Date.now(); a test seam, like listSessions'.
|
|
2285
|
+
*/
|
|
2286
|
+
nowUnixMs?: number | undefined;
|
|
1873
2287
|
}): Promise<SessionReplayManifest> {
|
|
1874
2288
|
/*
|
|
1875
2289
|
* LIMIT 1 BY (tabId, chunkIndex) after ORDER BY ... version DESC
|
|
@@ -1929,8 +2343,63 @@ export default class SessionReplayReadService {
|
|
|
1929
2343
|
|
|
1930
2344
|
statement.append(READ_QUERY_SETTINGS);
|
|
1931
2345
|
|
|
1932
|
-
|
|
1933
|
-
|
|
2346
|
+
/*
|
|
2347
|
+
* Whether this unfinalized session's recording is already over, read
|
|
2348
|
+
* alongside the manifest rather than after it: the player re-fetches
|
|
2349
|
+
* the manifest every 30s while a session is not finalized, and this
|
|
2350
|
+
* is what lets it stop calling a closed session "Live" once the
|
|
2351
|
+
* ended grace has passed, instead of waiting for a finalizer run to
|
|
2352
|
+
* seal the header. The same helper, the same grace and the same
|
|
2353
|
+
* clock the list uses, so the list badge and the player pill can
|
|
2354
|
+
* never disagree about one session.
|
|
2355
|
+
*
|
|
2356
|
+
* Its own grouped read rather than a fold over the rows below: those
|
|
2357
|
+
* rows are capped at MAX_MANIFEST_ROWS in (tabId, chunkIndex) order, so
|
|
2358
|
+
* a truncated manifest would lose a tab's newest chunks - exactly the
|
|
2359
|
+
* rows that say whether it kept recording after its final chunk. A
|
|
2360
|
+
* finalized header is authoritative and runs no second read. The
|
|
2361
|
+
* helper never rejects (a failure answers "no facts", which is "not
|
|
2362
|
+
* ended"), so it cannot fail the manifest. The manifest statement is
|
|
2363
|
+
* issued first.
|
|
2364
|
+
*
|
|
2365
|
+
* The same one read also answers each tab's own hasRecordingEnded:
|
|
2366
|
+
* it is already grouped per tab, because the session rule is per tab.
|
|
2367
|
+
*/
|
|
2368
|
+
const manifestResultPromise: Promise<Results> =
|
|
2369
|
+
RumSessionChunkService.executeQuery(statement);
|
|
2370
|
+
|
|
2371
|
+
const tabEndFactsPromise: Promise<Map<string, SessionReplayTabEndFacts>> =
|
|
2372
|
+
data.header.isFinalized
|
|
2373
|
+
? Promise.resolve(new Map<string, SessionReplayTabEndFacts>())
|
|
2374
|
+
: SessionReplayReadService.readTabEndFactsBySession({
|
|
2375
|
+
projectId: data.projectId,
|
|
2376
|
+
rumApplicationId: data.rumApplicationId,
|
|
2377
|
+
sessionIds: [data.sessionId],
|
|
2378
|
+
}).then(
|
|
2379
|
+
(
|
|
2380
|
+
factsBySessionId: Map<
|
|
2381
|
+
string,
|
|
2382
|
+
Map<string, SessionReplayTabEndFacts>
|
|
2383
|
+
>,
|
|
2384
|
+
): Map<string, SessionReplayTabEndFacts> => {
|
|
2385
|
+
return (
|
|
2386
|
+
factsBySessionId.get(data.sessionId) ||
|
|
2387
|
+
new Map<string, SessionReplayTabEndFacts>()
|
|
2388
|
+
);
|
|
2389
|
+
},
|
|
2390
|
+
);
|
|
2391
|
+
|
|
2392
|
+
const [dbResult, tabEndFactsByTabId]: [
|
|
2393
|
+
Results,
|
|
2394
|
+
Map<string, SessionReplayTabEndFacts>,
|
|
2395
|
+
] = await Promise.all([manifestResultPromise, tabEndFactsPromise]);
|
|
2396
|
+
|
|
2397
|
+
const hasRecordingEnded: boolean =
|
|
2398
|
+
!data.header.isFinalized &&
|
|
2399
|
+
hasSessionRecordingEnded(
|
|
2400
|
+
Array.from(tabEndFactsByTabId.values()),
|
|
2401
|
+
data.nowUnixMs ?? Date.now(),
|
|
2402
|
+
);
|
|
1934
2403
|
const response: DbJSONResponse = await dbResult.json<{
|
|
1935
2404
|
data?: Array<JSONObject>;
|
|
1936
2405
|
}>();
|
|
@@ -2024,6 +2493,13 @@ export default class SessionReplayReadService {
|
|
|
2024
2493
|
},
|
|
2025
2494
|
Number.POSITIVE_INFINITY,
|
|
2026
2495
|
),
|
|
2496
|
+
hasRecordingEnded: SessionReplayReadService.isManifestTabRecordingEnded(
|
|
2497
|
+
{
|
|
2498
|
+
isSessionFinalized: data.header.isFinalized,
|
|
2499
|
+
hasSessionRecordingEnded: hasRecordingEnded,
|
|
2500
|
+
tabEndFacts: tabEndFactsByTabId.get(tabId),
|
|
2501
|
+
},
|
|
2502
|
+
),
|
|
2027
2503
|
});
|
|
2028
2504
|
}
|
|
2029
2505
|
|
|
@@ -2040,6 +2516,7 @@ export default class SessionReplayReadService {
|
|
|
2040
2516
|
liveDurationMs: liveDurationMs,
|
|
2041
2517
|
liveEventCount: liveEventCount,
|
|
2042
2518
|
liveMaxChunkIndex: liveMaxChunkIndex,
|
|
2519
|
+
hasRecordingEnded: hasRecordingEnded,
|
|
2043
2520
|
}),
|
|
2044
2521
|
tabs: tabs,
|
|
2045
2522
|
isChunkIndexTruncated: rows.length >= MAX_MANIFEST_ROWS,
|
|
@@ -2051,6 +2528,10 @@ export default class SessionReplayReadService {
|
|
|
2051
2528
|
* 0 and eventCount 0 while its chunk rows say otherwise; the manifest
|
|
2052
2529
|
* has just read every chunk row, so it reports what the rows prove. A
|
|
2053
2530
|
* finalized header is authoritative and returned untouched.
|
|
2531
|
+
*
|
|
2532
|
+
* hasRecordingEnded is set on every unfinalized header, including one
|
|
2533
|
+
* whose chunk rows have not landed yet: getSessionHeader never judges
|
|
2534
|
+
* it, so the manifest is the only place the field is ever true.
|
|
2054
2535
|
*/
|
|
2055
2536
|
private static reconcileLiveHeader(data: {
|
|
2056
2537
|
header: SessionReplaySessionHeader;
|
|
@@ -2058,11 +2539,19 @@ export default class SessionReplayReadService {
|
|
|
2058
2539
|
liveDurationMs: number;
|
|
2059
2540
|
liveEventCount: number;
|
|
2060
2541
|
liveMaxChunkIndex: number;
|
|
2542
|
+
hasRecordingEnded: boolean;
|
|
2061
2543
|
}): SessionReplaySessionHeader {
|
|
2062
|
-
if (data.header.isFinalized
|
|
2544
|
+
if (data.header.isFinalized) {
|
|
2063
2545
|
return data.header;
|
|
2064
2546
|
}
|
|
2065
2547
|
|
|
2548
|
+
if (data.chunkRowCount === 0) {
|
|
2549
|
+
return {
|
|
2550
|
+
...data.header,
|
|
2551
|
+
hasRecordingEnded: data.hasRecordingEnded,
|
|
2552
|
+
};
|
|
2553
|
+
}
|
|
2554
|
+
|
|
2066
2555
|
const durationMs: number = Math.max(
|
|
2067
2556
|
data.header.durationMs,
|
|
2068
2557
|
data.liveDurationMs,
|
|
@@ -2083,9 +2572,231 @@ export default class SessionReplayReadService {
|
|
|
2083
2572
|
data.header.maxChunkIndex,
|
|
2084
2573
|
data.liveMaxChunkIndex,
|
|
2085
2574
|
),
|
|
2575
|
+
hasRecordingEnded: data.hasRecordingEnded,
|
|
2086
2576
|
};
|
|
2087
2577
|
}
|
|
2088
2578
|
|
|
2579
|
+
/*
|
|
2580
|
+
* One manifest tab's hasRecordingEnded (see
|
|
2581
|
+
* SessionReplayManifestTab.hasRecordingEnded). A finalized session or one
|
|
2582
|
+
* that has ended as a whole ends every tab, including a tab the grouped
|
|
2583
|
+
* read has no facts for (its rows can land in the manifest read and not
|
|
2584
|
+
* yet in the facts read, or the other way round). Otherwise the tab is
|
|
2585
|
+
* judged on its own facts, and no facts is "not known to have ended".
|
|
2586
|
+
*/
|
|
2587
|
+
private static isManifestTabRecordingEnded(data: {
|
|
2588
|
+
isSessionFinalized: boolean;
|
|
2589
|
+
hasSessionRecordingEnded: boolean;
|
|
2590
|
+
tabEndFacts: SessionReplayTabEndFacts | undefined;
|
|
2591
|
+
}): boolean {
|
|
2592
|
+
if (data.isSessionFinalized || data.hasSessionRecordingEnded) {
|
|
2593
|
+
return true;
|
|
2594
|
+
}
|
|
2595
|
+
|
|
2596
|
+
if (!data.tabEndFacts) {
|
|
2597
|
+
return false;
|
|
2598
|
+
}
|
|
2599
|
+
|
|
2600
|
+
return hasTabRecordingEnded(data.tabEndFacts);
|
|
2601
|
+
}
|
|
2602
|
+
|
|
2603
|
+
/*
|
|
2604
|
+
* Which of these unfinalized sessions have stopped recording, judged by
|
|
2605
|
+
* the shared rule (Common/Utils/Rum/SessionReplayRecordingEnded.ts) over
|
|
2606
|
+
* the tab end facts readTabEndFactsBySession reads. The list badge's
|
|
2607
|
+
* helper; getManifest reads the same facts itself because it also judges
|
|
2608
|
+
* each tab, and applies the same rule to the same one read, so the list
|
|
2609
|
+
* badge and the player's Live pill can never disagree about a session.
|
|
2610
|
+
*
|
|
2611
|
+
* Best-effort, like the read: a failure answers "nothing has ended".
|
|
2612
|
+
*/
|
|
2613
|
+
private static async readRecordingEndedSessionIds(data: {
|
|
2614
|
+
projectId: ObjectID;
|
|
2615
|
+
rumApplicationId: ObjectID;
|
|
2616
|
+
sessionIds: Array<string>;
|
|
2617
|
+
/* Server unix ms the grace is measured against. */
|
|
2618
|
+
nowUnixMs: number;
|
|
2619
|
+
}): Promise<Set<string>> {
|
|
2620
|
+
const endedSessionIds: Set<string> = new Set<string>();
|
|
2621
|
+
|
|
2622
|
+
const factsBySessionId: Map<
|
|
2623
|
+
string,
|
|
2624
|
+
Map<string, SessionReplayTabEndFacts>
|
|
2625
|
+
> = await SessionReplayReadService.readTabEndFactsBySession({
|
|
2626
|
+
projectId: data.projectId,
|
|
2627
|
+
rumApplicationId: data.rumApplicationId,
|
|
2628
|
+
sessionIds: data.sessionIds,
|
|
2629
|
+
});
|
|
2630
|
+
|
|
2631
|
+
for (const [sessionId, tabEndFactsByTabId] of factsBySessionId) {
|
|
2632
|
+
if (
|
|
2633
|
+
hasSessionRecordingEnded(
|
|
2634
|
+
Array.from(tabEndFactsByTabId.values()),
|
|
2635
|
+
data.nowUnixMs,
|
|
2636
|
+
)
|
|
2637
|
+
) {
|
|
2638
|
+
endedSessionIds.add(sessionId);
|
|
2639
|
+
}
|
|
2640
|
+
}
|
|
2641
|
+
|
|
2642
|
+
return endedSessionIds;
|
|
2643
|
+
}
|
|
2644
|
+
|
|
2645
|
+
/*
|
|
2646
|
+
* The per-tab end facts of these sessions, keyed by sessionId and then
|
|
2647
|
+
* tabId, for the shared rule in
|
|
2648
|
+
* Common/Utils/Rum/SessionReplayRecordingEnded.ts. The one read behind
|
|
2649
|
+
* the list badge, the player's Live pill and each manifest tab's own
|
|
2650
|
+
* hasRecordingEnded.
|
|
2651
|
+
*
|
|
2652
|
+
* One statement for any number of sessions:
|
|
2653
|
+
*
|
|
2654
|
+
* WHERE projectId = ? AND sessionId IN (...) AND rumApplicationId = ?
|
|
2655
|
+
* GROUP BY sessionId, tabId
|
|
2656
|
+
*
|
|
2657
|
+
* A KEY-RANGE READ. RumSessionChunk is sorted (and primary-keyed) by
|
|
2658
|
+
* (projectId, sessionId, tabId, chunkIndex), so projectId plus a
|
|
2659
|
+
* sessionId IN list is a prefix of the primary index: ClickHouse reads
|
|
2660
|
+
* only the granules of the named sessions - a handful of narrow columns
|
|
2661
|
+
* over at most a few hundred rows each - and never the payload column.
|
|
2662
|
+
* The GROUP BY follows the same key order. rumApplicationId is a plain
|
|
2663
|
+
* column filtered over those granules, and it is not optional: the
|
|
2664
|
+
* table's replace key has no application in it, so two applications
|
|
2665
|
+
* that share a browser-minted sessionId share one key space, and
|
|
2666
|
+
* without the pin one application's closed tab could end another's
|
|
2667
|
+
* recording.
|
|
2668
|
+
*
|
|
2669
|
+
* Grouped per tab, never per session, because the rule is per tab: a
|
|
2670
|
+
* session shared by several tabs (or several page loads of a multi-page
|
|
2671
|
+
* app) is over only when every one of them is. The five aggregates are
|
|
2672
|
+
* maxima, so a redelivered chunk's duplicate row - or a pinned copy -
|
|
2673
|
+
* cannot make a live tab look ended and no LIMIT 1 BY is needed. Such a
|
|
2674
|
+
* row can carry a NEWER version than the original, which only restarts
|
|
2675
|
+
* the grace once; it never shortens it. The retention filter is kept
|
|
2676
|
+
* like on every other replay read.
|
|
2677
|
+
*
|
|
2678
|
+
* The grace. Every tab having ended is not enough on its own: in a
|
|
2679
|
+
* multi-page app, page A's final chunk lands while page B - a new tab id
|
|
2680
|
+
* under the same session - has not stored its first chunk yet, and for
|
|
2681
|
+
* that moment the only tab the rows know about has ended. So the rule
|
|
2682
|
+
* also wants the newest stored chunk of the session to be at least
|
|
2683
|
+
* SESSION_REPLAY_ENDED_FINALIZE_GRACE_MS older than nowUnixMs, the same
|
|
2684
|
+
* grace the finalizer waits on, measured on the same server clock (the
|
|
2685
|
+
* rows' version against this process's Date.now()). The list, the player
|
|
2686
|
+
* and the finalizer therefore call a session ended at the same moment,
|
|
2687
|
+
* give or take the finalizer's one-minute schedule, and none of them
|
|
2688
|
+
* depends on Redis for it. The grace is judged by the callers; this read
|
|
2689
|
+
* only returns the facts it is judged on.
|
|
2690
|
+
*
|
|
2691
|
+
* Best-effort. Never rejects: a failure logs a warning and answers an
|
|
2692
|
+
* empty map, which every caller reads as "nothing has ended" - what the
|
|
2693
|
+
* Dashboard showed before this existed; neither the list nor the
|
|
2694
|
+
* manifest may fail because of it. A session with no chunk rows is
|
|
2695
|
+
* absent from the map, and no tabs is "not known", never "ended".
|
|
2696
|
+
*/
|
|
2697
|
+
private static async readTabEndFactsBySession(data: {
|
|
2698
|
+
projectId: ObjectID;
|
|
2699
|
+
rumApplicationId: ObjectID;
|
|
2700
|
+
sessionIds: Array<string>;
|
|
2701
|
+
}): Promise<Map<string, Map<string, SessionReplayTabEndFacts>>> {
|
|
2702
|
+
const factsBySessionId: Map<
|
|
2703
|
+
string,
|
|
2704
|
+
Map<string, SessionReplayTabEndFacts>
|
|
2705
|
+
> = new Map<string, Map<string, SessionReplayTabEndFacts>>();
|
|
2706
|
+
|
|
2707
|
+
const sessionIds: Array<string> = Array.from(
|
|
2708
|
+
new Set<string>(
|
|
2709
|
+
data.sessionIds.filter((sessionId: string): boolean => {
|
|
2710
|
+
return sessionId.length > 0;
|
|
2711
|
+
}),
|
|
2712
|
+
),
|
|
2713
|
+
);
|
|
2714
|
+
|
|
2715
|
+
if (sessionIds.length === 0) {
|
|
2716
|
+
return factsBySessionId;
|
|
2717
|
+
}
|
|
2718
|
+
|
|
2719
|
+
const statement: Statement = SQL`
|
|
2720
|
+
SELECT
|
|
2721
|
+
sessionId,
|
|
2722
|
+
tabId,
|
|
2723
|
+
`;
|
|
2724
|
+
|
|
2725
|
+
statement.append(` ${toSelectList(TAB_END_FACT_AGGREGATES)}`);
|
|
2726
|
+
|
|
2727
|
+
statement.append(SQL`
|
|
2728
|
+
FROM ${AnalyticsTableName.RumSessionChunk}
|
|
2729
|
+
WHERE projectId = ${{
|
|
2730
|
+
type: TableColumnType.ObjectID,
|
|
2731
|
+
value: data.projectId,
|
|
2732
|
+
}}
|
|
2733
|
+
AND sessionId IN (${{
|
|
2734
|
+
type: TableColumnType.Text,
|
|
2735
|
+
value: new Includes(sessionIds),
|
|
2736
|
+
}})
|
|
2737
|
+
AND rumApplicationId = ${{
|
|
2738
|
+
type: TableColumnType.ObjectID,
|
|
2739
|
+
value: data.rumApplicationId,
|
|
2740
|
+
}}
|
|
2741
|
+
`);
|
|
2742
|
+
|
|
2743
|
+
statement.append(RETENTION_FILTER);
|
|
2744
|
+
statement.append(" GROUP BY sessionId, tabId");
|
|
2745
|
+
statement.append(READ_QUERY_SETTINGS);
|
|
2746
|
+
|
|
2747
|
+
let rows: Array<JSONObject>;
|
|
2748
|
+
|
|
2749
|
+
try {
|
|
2750
|
+
const dbResult: Results =
|
|
2751
|
+
await RumSessionChunkService.executeQuery(statement);
|
|
2752
|
+
const response: DbJSONResponse = await dbResult.json<{
|
|
2753
|
+
data?: Array<JSONObject>;
|
|
2754
|
+
}>();
|
|
2755
|
+
|
|
2756
|
+
rows = response.data || [];
|
|
2757
|
+
} catch (err: unknown) {
|
|
2758
|
+
logger.warn(
|
|
2759
|
+
"SessionReplayReadService: could not read chunk rows to tell whether unfinalized sessions have ended; reporting them as still recording",
|
|
2760
|
+
);
|
|
2761
|
+
logger.warn(err);
|
|
2762
|
+
|
|
2763
|
+
return factsBySessionId;
|
|
2764
|
+
}
|
|
2765
|
+
|
|
2766
|
+
const requested: Set<string> = new Set<string>(sessionIds);
|
|
2767
|
+
|
|
2768
|
+
for (const row of rows) {
|
|
2769
|
+
const sessionId: string = readString(row, "sessionId");
|
|
2770
|
+
|
|
2771
|
+
/* Defensive: a row for a session nobody asked about decides nothing. */
|
|
2772
|
+
if (!requested.has(sessionId)) {
|
|
2773
|
+
continue;
|
|
2774
|
+
}
|
|
2775
|
+
|
|
2776
|
+
const tabId: string = readString(row, "tabId");
|
|
2777
|
+
const facts: SessionReplayTabEndFacts = readTabEndFacts(row);
|
|
2778
|
+
|
|
2779
|
+
let tabEndFactsByTabId:
|
|
2780
|
+
| Map<string, SessionReplayTabEndFacts>
|
|
2781
|
+
| undefined = factsBySessionId.get(sessionId);
|
|
2782
|
+
|
|
2783
|
+
if (!tabEndFactsByTabId) {
|
|
2784
|
+
tabEndFactsByTabId = new Map<string, SessionReplayTabEndFacts>();
|
|
2785
|
+
factsBySessionId.set(sessionId, tabEndFactsByTabId);
|
|
2786
|
+
}
|
|
2787
|
+
|
|
2788
|
+
const existing: SessionReplayTabEndFacts | undefined =
|
|
2789
|
+
tabEndFactsByTabId.get(tabId);
|
|
2790
|
+
|
|
2791
|
+
tabEndFactsByTabId.set(
|
|
2792
|
+
tabId,
|
|
2793
|
+
existing ? foldTabEndFacts(existing, facts) : facts,
|
|
2794
|
+
);
|
|
2795
|
+
}
|
|
2796
|
+
|
|
2797
|
+
return factsBySessionId;
|
|
2798
|
+
}
|
|
2799
|
+
|
|
2089
2800
|
/*
|
|
2090
2801
|
* The payload read. The only query in the system that names the
|
|
2091
2802
|
* `payload` column.
|
|
@@ -2263,14 +2974,28 @@ export default class SessionReplayReadService {
|
|
|
2263
2974
|
* fingerprint present only on a superseded row does not produce a false
|
|
2264
2975
|
* positive.
|
|
2265
2976
|
*
|
|
2266
|
-
*
|
|
2267
|
-
*
|
|
2268
|
-
*
|
|
2977
|
+
* Typed RUM and fully unscoped legacy lookups are windowed in WHERE for
|
|
2978
|
+
* partition pruning. Scoped non-RUM and ID-only type-unknown lookups apply
|
|
2979
|
+
* the window in QUALIFY: their instance-proven session ids must first be
|
|
2980
|
+
* checked across every retained application in the project so a duplicate
|
|
2981
|
+
* id cannot be hidden outside the caller's time or authorization scope.
|
|
2269
2982
|
*/
|
|
2270
2983
|
@CaptureSpan()
|
|
2271
2984
|
public static async getSessionsForException(data: {
|
|
2272
2985
|
projectId: ObjectID;
|
|
2273
2986
|
exceptionFingerprint: string;
|
|
2987
|
+
/*
|
|
2988
|
+
* Exception fingerprints are unique per primary entity, not per project.
|
|
2989
|
+
* Keep this optional for older callers, but exception pages should always
|
|
2990
|
+
* provide it so neither the live side index nor finalized headers can mix
|
|
2991
|
+
* identically fingerprinted groups from different services.
|
|
2992
|
+
*/
|
|
2993
|
+
primaryEntityId?: ObjectID | undefined;
|
|
2994
|
+
/*
|
|
2995
|
+
* Identifies the owning entity table. ID-only is accepted as a rolling
|
|
2996
|
+
* compatibility mode and uses the conservative scoped-unknown branch.
|
|
2997
|
+
*/
|
|
2998
|
+
primaryEntityType?: ServiceType | undefined;
|
|
2274
2999
|
/*
|
|
2275
3000
|
* null means "no label restriction". An EMPTY array means the caller
|
|
2276
3001
|
* can reach no applications at all and must get no rows - the two are
|
|
@@ -2284,6 +3009,20 @@ export default class SessionReplayReadService {
|
|
|
2284
3009
|
sessionId?: string | undefined;
|
|
2285
3010
|
limit: number;
|
|
2286
3011
|
}): Promise<Array<SessionReplayExceptionSession>> {
|
|
3012
|
+
const hasPrimaryEntityId: boolean = data.primaryEntityId !== undefined;
|
|
3013
|
+
const hasPrimaryEntityType: boolean = data.primaryEntityType !== undefined;
|
|
3014
|
+
|
|
3015
|
+
if (!hasPrimaryEntityId && hasPrimaryEntityType) {
|
|
3016
|
+
throw new BadDataException("primaryEntityId is required with its type");
|
|
3017
|
+
}
|
|
3018
|
+
|
|
3019
|
+
if (
|
|
3020
|
+
data.primaryEntityType !== undefined &&
|
|
3021
|
+
!Object.values(ServiceType).includes(data.primaryEntityType)
|
|
3022
|
+
) {
|
|
3023
|
+
throw new BadDataException("primaryEntityType is not valid");
|
|
3024
|
+
}
|
|
3025
|
+
|
|
2287
3026
|
if (
|
|
2288
3027
|
data.accessibleRumApplicationIds &&
|
|
2289
3028
|
data.accessibleRumApplicationIds.length === 0
|
|
@@ -2308,11 +3047,28 @@ export default class SessionReplayReadService {
|
|
|
2308
3047
|
await SessionReplayReadService.getSessionIdsForExceptionInstances({
|
|
2309
3048
|
projectId: data.projectId,
|
|
2310
3049
|
exceptionFingerprint: data.exceptionFingerprint,
|
|
3050
|
+
primaryEntityId: data.primaryEntityId,
|
|
3051
|
+
primaryEntityType: data.primaryEntityType,
|
|
2311
3052
|
startTime: startTime,
|
|
2312
3053
|
endTime: endTime,
|
|
2313
3054
|
sessionId: data.sessionId,
|
|
2314
3055
|
});
|
|
2315
3056
|
|
|
3057
|
+
const isScopedRumException: boolean =
|
|
3058
|
+
data.primaryEntityType === ServiceType.RealUserMonitor;
|
|
3059
|
+
const isScopedNonRumOrUnknownException: boolean =
|
|
3060
|
+
hasPrimaryEntityId && !isScopedRumException;
|
|
3061
|
+
|
|
3062
|
+
/*
|
|
3063
|
+
* A finalized replay header has only a flat fingerprint list. For a
|
|
3064
|
+
* non-RUM or legacy type-unknown entity that list cannot prove ownership,
|
|
3065
|
+
* so only the scoped instance side index may admit a session. Failure or
|
|
3066
|
+
* an empty lookup must therefore fail closed.
|
|
3067
|
+
*/
|
|
3068
|
+
if (isScopedNonRumOrUnknownException && instanceSessionIds.length === 0) {
|
|
3069
|
+
return [];
|
|
3070
|
+
}
|
|
3071
|
+
|
|
2316
3072
|
const selectList: string = toSelectList([
|
|
2317
3073
|
{ alias: "aggStartTime", expression: argMaxDateTime("startTime") },
|
|
2318
3074
|
{ alias: "aggEndTime", expression: argMaxDateTime("endTime") },
|
|
@@ -2362,6 +3118,13 @@ export default class SessionReplayReadService {
|
|
|
2362
3118
|
|
|
2363
3119
|
statement.append(` ${selectList}`);
|
|
2364
3120
|
|
|
3121
|
+
if (isScopedNonRumOrUnknownException) {
|
|
3122
|
+
/* One grouped row per application makes this a cross-app collision count. */
|
|
3123
|
+
statement.append(
|
|
3124
|
+
", count() OVER (PARTITION BY sessionId) AS matchedApplicationCount",
|
|
3125
|
+
);
|
|
3126
|
+
}
|
|
3127
|
+
|
|
2365
3128
|
statement.append(SQL`
|
|
2366
3129
|
FROM ${AnalyticsTableName.RumSession}
|
|
2367
3130
|
WHERE projectId = ${{
|
|
@@ -2370,7 +3133,12 @@ export default class SessionReplayReadService {
|
|
|
2370
3133
|
}}
|
|
2371
3134
|
`);
|
|
2372
3135
|
|
|
2373
|
-
|
|
3136
|
+
/*
|
|
3137
|
+
* For non-RUM and legacy type-unknown exceptions, authorization belongs
|
|
3138
|
+
* in QUALIFY after the window has counted inaccessible applications too.
|
|
3139
|
+
* Applying it here would make an ambiguous id appear unique.
|
|
3140
|
+
*/
|
|
3141
|
+
if (!isScopedNonRumOrUnknownException && data.accessibleRumApplicationIds) {
|
|
2374
3142
|
statement.append(
|
|
2375
3143
|
SQL` AND rumApplicationId IN (${{
|
|
2376
3144
|
type: TableColumnType.ObjectID,
|
|
@@ -2379,15 +3147,17 @@ export default class SessionReplayReadService {
|
|
|
2379
3147
|
);
|
|
2380
3148
|
}
|
|
2381
3149
|
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
|
|
3150
|
+
if (!isScopedNonRumOrUnknownException) {
|
|
3151
|
+
statement.append(
|
|
3152
|
+
SQL` AND startTime >= ${{
|
|
3153
|
+
type: TableColumnType.DateTime64,
|
|
3154
|
+
value: startTime,
|
|
3155
|
+
}} AND startTime <= ${{
|
|
3156
|
+
type: TableColumnType.DateTime64,
|
|
3157
|
+
value: endTime,
|
|
3158
|
+
}}`,
|
|
3159
|
+
);
|
|
3160
|
+
}
|
|
2391
3161
|
|
|
2392
3162
|
statement.append(RETENTION_FILTER);
|
|
2393
3163
|
|
|
@@ -2400,33 +3170,35 @@ export default class SessionReplayReadService {
|
|
|
2400
3170
|
);
|
|
2401
3171
|
}
|
|
2402
3172
|
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
|
|
2407
|
-
|
|
2408
|
-
|
|
3173
|
+
if (isScopedRumException && data.primaryEntityId) {
|
|
3174
|
+
/* Both finalized fingerprints and instance-proven ids stay in this RUM app. */
|
|
3175
|
+
statement.append(
|
|
3176
|
+
SQL` AND rumApplicationId = ${{
|
|
3177
|
+
type: TableColumnType.ObjectID,
|
|
3178
|
+
value: data.primaryEntityId,
|
|
3179
|
+
}}`,
|
|
3180
|
+
);
|
|
3181
|
+
}
|
|
3182
|
+
|
|
3183
|
+
statement.append(" AND (");
|
|
2409
3184
|
|
|
2410
|
-
if (
|
|
3185
|
+
if (isScopedNonRumOrUnknownException) {
|
|
2411
3186
|
statement.append(
|
|
2412
|
-
SQL`
|
|
3187
|
+
SQL`sessionId IN (${{
|
|
2413
3188
|
type: TableColumnType.Text,
|
|
2414
3189
|
value: new Includes(instanceSessionIds),
|
|
2415
3190
|
}})`,
|
|
2416
3191
|
);
|
|
3192
|
+
} else {
|
|
3193
|
+
statement.append(
|
|
3194
|
+
SQL`hasAny(exceptionFingerprints, [${{
|
|
3195
|
+
type: TableColumnType.Text,
|
|
3196
|
+
value: data.exceptionFingerprint,
|
|
3197
|
+
}}])`,
|
|
3198
|
+
);
|
|
2417
3199
|
}
|
|
2418
3200
|
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
statement.append(
|
|
2422
|
-
SQL` GROUP BY projectId, rumApplicationId, sessionId
|
|
2423
|
-
HAVING (hasAny(aggExceptionFingerprints, [${{
|
|
2424
|
-
type: TableColumnType.Text,
|
|
2425
|
-
value: data.exceptionFingerprint,
|
|
2426
|
-
}}])`,
|
|
2427
|
-
);
|
|
2428
|
-
|
|
2429
|
-
if (instanceSessionIds.length > 0) {
|
|
3201
|
+
if (!isScopedNonRumOrUnknownException && instanceSessionIds.length > 0) {
|
|
2430
3202
|
statement.append(
|
|
2431
3203
|
SQL` OR sessionId IN (${{
|
|
2432
3204
|
type: TableColumnType.Text,
|
|
@@ -2437,6 +3209,53 @@ export default class SessionReplayReadService {
|
|
|
2437
3209
|
|
|
2438
3210
|
statement.append(")");
|
|
2439
3211
|
|
|
3212
|
+
statement.append(" GROUP BY projectId, rumApplicationId, sessionId");
|
|
3213
|
+
|
|
3214
|
+
if (isScopedNonRumOrUnknownException) {
|
|
3215
|
+
/*
|
|
3216
|
+
* Windowing happens over every application before either the time
|
|
3217
|
+
* window or accessible-app filter is applied. QUALIFY also precedes
|
|
3218
|
+
* ORDER/LIMIT, so a second application can never be sorted away.
|
|
3219
|
+
*/
|
|
3220
|
+
statement.append(" QUALIFY matchedApplicationCount = 1");
|
|
3221
|
+
statement.append(
|
|
3222
|
+
SQL` AND aggStartTime >= ${{
|
|
3223
|
+
type: TableColumnType.BigNumber,
|
|
3224
|
+
value: startTime.getTime(),
|
|
3225
|
+
}} AND aggStartTime <= ${{
|
|
3226
|
+
type: TableColumnType.BigNumber,
|
|
3227
|
+
value: endTime.getTime(),
|
|
3228
|
+
}}`,
|
|
3229
|
+
);
|
|
3230
|
+
|
|
3231
|
+
if (data.accessibleRumApplicationIds) {
|
|
3232
|
+
statement.append(
|
|
3233
|
+
SQL` AND rumApplicationId IN (${{
|
|
3234
|
+
type: TableColumnType.ObjectID,
|
|
3235
|
+
value: new Includes(data.accessibleRumApplicationIds),
|
|
3236
|
+
}})`,
|
|
3237
|
+
);
|
|
3238
|
+
}
|
|
3239
|
+
} else {
|
|
3240
|
+
statement.append(" HAVING (");
|
|
3241
|
+
statement.append(
|
|
3242
|
+
SQL`hasAny(aggExceptionFingerprints, [${{
|
|
3243
|
+
type: TableColumnType.Text,
|
|
3244
|
+
value: data.exceptionFingerprint,
|
|
3245
|
+
}}])`,
|
|
3246
|
+
);
|
|
3247
|
+
if (instanceSessionIds.length > 0) {
|
|
3248
|
+
statement.append(
|
|
3249
|
+
SQL` OR sessionId IN (${{
|
|
3250
|
+
type: TableColumnType.Text,
|
|
3251
|
+
value: new Includes(instanceSessionIds),
|
|
3252
|
+
}})`,
|
|
3253
|
+
);
|
|
3254
|
+
}
|
|
3255
|
+
|
|
3256
|
+
statement.append(")");
|
|
3257
|
+
}
|
|
3258
|
+
|
|
2440
3259
|
statement.append(
|
|
2441
3260
|
SQL` ORDER BY aggStartTime DESC
|
|
2442
3261
|
LIMIT ${{
|
|
@@ -2452,7 +3271,21 @@ export default class SessionReplayReadService {
|
|
|
2452
3271
|
data?: Array<JSONObject>;
|
|
2453
3272
|
}>();
|
|
2454
3273
|
|
|
2455
|
-
|
|
3274
|
+
const responseRows: Array<JSONObject> = (response.data || []).filter(
|
|
3275
|
+
(row: JSONObject): boolean => {
|
|
3276
|
+
/*
|
|
3277
|
+
* QUALIFY is authoritative. Its count was computed over every app
|
|
3278
|
+
* before ORDER/LIMIT, so retaining only count=1 is also a fail-closed
|
|
3279
|
+
* guard if a changed driver ever returns a row that should not survive.
|
|
3280
|
+
*/
|
|
3281
|
+
return (
|
|
3282
|
+
!isScopedNonRumOrUnknownException ||
|
|
3283
|
+
readNumber(row, "matchedApplicationCount") === 1
|
|
3284
|
+
);
|
|
3285
|
+
},
|
|
3286
|
+
);
|
|
3287
|
+
|
|
3288
|
+
return responseRows.map(
|
|
2456
3289
|
(row: JSONObject): SessionReplayExceptionSession => {
|
|
2457
3290
|
return {
|
|
2458
3291
|
sessionId: readString(row, "sessionId"),
|
|
@@ -2484,9 +3317,10 @@ export default class SessionReplayReadService {
|
|
|
2484
3317
|
* session, so a session that started inside the window threw inside
|
|
2485
3318
|
* [startTime, endTime + max session length].
|
|
2486
3319
|
*
|
|
2487
|
-
* Best-effort
|
|
2488
|
-
* a failure
|
|
2489
|
-
*
|
|
3320
|
+
* Best-effort for fully unscoped legacy and typed RUM lookups: there it only
|
|
3321
|
+
* ADDS live sessions, so a failure degrades to finalized headers. Scoped
|
|
3322
|
+
* non-RUM and ID-only lookups rely on it as their sole entity-ownership
|
|
3323
|
+
* proof and therefore fail closed.
|
|
2490
3324
|
*
|
|
2491
3325
|
* A caller-pinned sessionId narrows the lookup rather than bypassing it,
|
|
2492
3326
|
* so the pin can never assert that a session threw something the
|
|
@@ -2495,6 +3329,8 @@ export default class SessionReplayReadService {
|
|
|
2495
3329
|
private static async getSessionIdsForExceptionInstances(data: {
|
|
2496
3330
|
projectId: ObjectID;
|
|
2497
3331
|
exceptionFingerprint: string;
|
|
3332
|
+
primaryEntityId?: ObjectID | undefined;
|
|
3333
|
+
primaryEntityType?: ServiceType | undefined;
|
|
2498
3334
|
startTime: Date;
|
|
2499
3335
|
endTime: Date;
|
|
2500
3336
|
sessionId?: string | undefined;
|
|
@@ -2523,6 +3359,32 @@ export default class SessionReplayReadService {
|
|
|
2523
3359
|
}}
|
|
2524
3360
|
`;
|
|
2525
3361
|
|
|
3362
|
+
if (data.primaryEntityId) {
|
|
3363
|
+
statement.append(
|
|
3364
|
+
SQL` AND primaryEntityId = ${{
|
|
3365
|
+
type: TableColumnType.ObjectID,
|
|
3366
|
+
value: data.primaryEntityId,
|
|
3367
|
+
}}`,
|
|
3368
|
+
);
|
|
3369
|
+
}
|
|
3370
|
+
|
|
3371
|
+
if (data.primaryEntityType === ServiceType.OpenTelemetry) {
|
|
3372
|
+
/* NULL/empty is the historical discriminator for an OTel service. */
|
|
3373
|
+
statement.append(
|
|
3374
|
+
SQL` AND (ifNull(primaryEntityType, '') = '' OR primaryEntityType = ${{
|
|
3375
|
+
type: TableColumnType.Text,
|
|
3376
|
+
value: ServiceType.OpenTelemetry as string,
|
|
3377
|
+
}})`,
|
|
3378
|
+
);
|
|
3379
|
+
} else if (data.primaryEntityType) {
|
|
3380
|
+
statement.append(
|
|
3381
|
+
SQL` AND primaryEntityType = ${{
|
|
3382
|
+
type: TableColumnType.Text,
|
|
3383
|
+
value: data.primaryEntityType as string,
|
|
3384
|
+
}}`,
|
|
3385
|
+
);
|
|
3386
|
+
}
|
|
3387
|
+
|
|
2526
3388
|
/*
|
|
2527
3389
|
* A pinned sessionId narrows this lookup; it does NOT replace it.
|
|
2528
3390
|
*
|
|
@@ -2572,7 +3434,7 @@ export default class SessionReplayReadService {
|
|
|
2572
3434
|
});
|
|
2573
3435
|
} catch (err: unknown) {
|
|
2574
3436
|
logger.warn(
|
|
2575
|
-
"SessionReplayReadService: could not look up exception instances by session;
|
|
3437
|
+
"SessionReplayReadService: could not look up exception instances by session; scoped non-RUM lookups fail closed and other lookups answer from finalized headers only",
|
|
2576
3438
|
);
|
|
2577
3439
|
logger.warn(err);
|
|
2578
3440
|
|