@oneuptime/common 13.0.4 → 13.0.5
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/DatabaseModels/Index.ts +4 -0
- package/Models/DatabaseModels/RumApplication.ts +1 -1
- package/Models/DatabaseModels/SecurityEventConnection.ts +457 -0
- package/Models/DatabaseModels/SecurityEventConnectionRun.ts +263 -0
- package/Models/DatabaseModels/TelemetryIngestionKey.ts +2 -2
- package/Server/API/AIInvestigationAPI.ts +484 -24
- package/Server/API/GoogleSecOpsConnectionAPI.ts +249 -8
- package/Server/API/SecurityEventConnectionAPI.ts +250 -0
- package/Server/API/TelemetryAPI.ts +402 -265
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.ts +99 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Middleware/TelemetryIngest.ts +101 -6
- package/Server/Services/ExceptionAggregationService.ts +7 -16
- package/Server/Services/GoogleSecOpsConnectionService.ts +15 -0
- package/Server/Services/Index.ts +4 -0
- package/Server/Services/InventoryItemService.ts +28 -0
- package/Server/Services/LogAggregationService.ts +17 -23
- package/Server/Services/MetricAggregationService.ts +4 -14
- package/Server/Services/SecurityEventConnectionRunService.ts +10 -0
- package/Server/Services/SecurityEventConnectionService.ts +538 -0
- package/Server/Services/TraceAggregationService.ts +77 -28
- package/Server/Types/AnalyticsDatabase/ModelPermission.ts +9 -0
- package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +13 -1
- 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/Index.ts +38 -0
- package/Server/Utils/AI/Toolbox/TimelineTools.ts +9 -2
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +80 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +5 -3
- 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 +495 -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/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 +1002 -0
- package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.ts +556 -0
- package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.ts +275 -0
- package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.ts +53 -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 +191 -0
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.ts +353 -65
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.ts +777 -0
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +747 -148
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.ts +48 -2
- package/Server/Utils/SecurityEvent/SecurityEventDedupe.ts +81 -0
- package/Server/Utils/SessionReplay/SessionReplayReadService.ts +741 -40
- package/Server/Utils/StartServer.ts +10 -0
- 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 +413 -0
- package/Tests/App/Dashboard/AIRootCauseFeedItem.test.tsx +285 -0
- package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +242 -0
- package/Tests/App/Dashboard/AlertEpisodeViewFields.test.tsx +601 -15
- package/Tests/App/Dashboard/ChangeAlertStateAIHeader.test.tsx +835 -0
- 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 +738 -0
- package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +153 -6
- package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +165 -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 +2354 -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/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/GoogleSecOpsConnectionForm.test.tsx +838 -0
- package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +18 -0
- package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +297 -20
- 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 +1251 -0
- package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +303 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +876 -8
- package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +35 -0
- package/Tests/App/Dashboard/InvestigationReferenceLink.test.tsx +177 -0
- package/Tests/App/Dashboard/InvestigationReportView.test.tsx +1295 -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/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/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/SecurityEventConnectionFormModal.test.tsx +1022 -0
- package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +905 -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/TelemetryResourceRetentionSettings.test.tsx +774 -0
- package/Tests/App/Dashboard/TopErrorsPanelResourceNames.test.tsx +316 -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 +585 -0
- package/Tests/App/Dashboard/TracesResourceFacets.test.tsx +613 -0
- package/Tests/App/Dashboard/UseServiceNames.test.tsx +359 -0
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +7 -0
- package/Tests/Models/InventoryItemNaming.test.ts +132 -16
- package/Tests/Models/SecurityDomainAccessControl.test.ts +61 -17
- package/Tests/Server/API/AIInvestigationAPI.test.ts +611 -2
- package/Tests/Server/API/AIInvestigationEvidenceAPI.test.ts +1098 -0
- package/Tests/Server/API/GoogleSecOpsConnectionAPI.test.ts +409 -0
- package/Tests/Server/API/SecurityEventConnectionAPI.test.ts +856 -0
- package/Tests/Server/API/SessionReplayAPI.test.ts +528 -1
- package/Tests/Server/API/TelemetryFacetsAPI.test.ts +810 -0
- package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +240 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +229 -0
- package/Tests/Server/Services/InventoryItemDisplayName.test.ts +66 -0
- package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +28 -1
- package/Tests/Server/Services/SecurityEventConnectionService.test.ts +1233 -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/TraceAggregationExceptionScope.test.ts +142 -0
- package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +85 -24
- package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +33 -0
- 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/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/Monitor/MonitorCriteriaEvaluatorPerSeriesFanout.test.ts +55 -2
- 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/ConnectorPlatformHealth.test.ts +1129 -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/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 +3041 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.test.ts +1168 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.test.ts +906 -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/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.test.ts +784 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.test.ts +113 -1
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClient.test.ts +5 -1
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsDiagnostics.test.ts +93 -13
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsHttpIntegration.test.ts +23 -1
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +25 -3
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +22 -8
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +82 -16
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsSearchDetections.test.ts +730 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsThreePassPoller.test.ts +1577 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayOriginAllowlist.test.ts +41 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1453 -18
- 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/Rum/SessionReplayApiContracts.test.ts +73 -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 +314 -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 +357 -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/DetailCompactStyle.test.tsx +621 -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/LockedFilterActions.test.tsx +396 -0
- package/Tests/UI/Components/LockedFilterChip.test.tsx +651 -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/PaginationIntegration.test.tsx +25 -0
- package/Tests/UI/Components/ResourceFacetConfigs.test.ts +172 -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 +304 -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/ReplayHeader.test.tsx +50 -1
- package/Tests/UI/Rum/ReplayPinControl.test.tsx +67 -10
- package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +41 -12
- package/Tests/UI/Rum/ReplayStage.test.tsx +663 -1
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +173 -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/Navigation.test.ts +24 -0
- package/Tests/UI/Utils/Telemetry/TelemetryEntityNames.test.ts +2205 -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/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/Telemetry/CrossSignalScope.test.ts +57 -1
- package/Tests/Utils/Telemetry/EntityRelationship.test.ts +36 -0
- package/Tests/Utils/Telemetry/LockedFilterSearch.test.ts +600 -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/Monitor/MonitorEvaluationSummary.ts +5 -0
- package/Types/Permission.ts +2 -2
- package/Types/Rum/SessionReplay.ts +109 -0
- package/Types/Rum/SessionReplayApi.ts +31 -0
- package/Types/SecurityEvent/Connectors/ConnectorDiagnostics.ts +111 -0
- package/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.ts +87 -0
- package/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.ts +492 -0
- package/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.ts +41 -0
- package/Types/SecurityEvent/GoogleSecOpsDiagnostics.ts +56 -1
- package/Types/SecurityEvent/GoogleSecOpsRegion.ts +34 -0
- package/Types/Telemetry/EntityType.ts +14 -0
- package/Types/Telemetry/ExceptionSpanScope.ts +83 -0
- package/Types/Telemetry/LockedFilterDetail.ts +46 -0
- package/Types/Telemetry/ResourceEntityFacet.ts +17 -10
- package/Types/Telemetry/ResourceFacetCatalog.ts +171 -0
- 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 +137 -22
- package/UI/Components/ErrorBoundary.tsx +38 -0
- package/UI/Components/LogsViewer/LogsEntityNames.ts +912 -0
- package/UI/Components/LogsViewer/LogsViewer.tsx +156 -77
- package/UI/Components/LogsViewer/components/ActiveFilterChips.tsx +28 -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/Page/ModelPage.tsx +119 -54
- 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 +11 -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/LockedFilterActions.tsx +205 -0
- package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +496 -0
- package/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.tsx +30 -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/Telemetry/TelemetryEntityNames.ts +620 -0
- package/UI/Utils/Telemetry/UseTelemetryEntityNames.ts +151 -0
- package/Utils/AI/InvestigationReport.ts +1789 -0
- package/Utils/API.ts +90 -1
- 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/Telemetry/CrossSignalScope.ts +22 -8
- package/Utils/Telemetry/EntityRelationship.ts +8 -0
- package/Utils/Telemetry/LockedFilterSearch.ts +412 -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/DatabaseModels/Index.js +4 -0
- package/build/dist/Models/DatabaseModels/Index.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/SecurityEventConnection.js +490 -0
- package/build/dist/Models/DatabaseModels/SecurityEventConnection.js.map +1 -0
- package/build/dist/Models/DatabaseModels/SecurityEventConnectionRun.js +287 -0
- package/build/dist/Models/DatabaseModels/SecurityEventConnectionRun.js.map +1 -0
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +2 -2
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +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/GoogleSecOpsConnectionAPI.js +182 -7
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js.map +1 -1
- package/build/dist/Server/API/SecurityEventConnectionAPI.js +171 -0
- package/build/dist/Server/API/SecurityEventConnectionAPI.js.map +1 -0
- 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/Index.js +2 -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/ExceptionAggregationService.js +7 -16
- package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +8 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +4 -0
- 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/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/SecurityEventConnectionRunService.js +9 -0
- package/build/dist/Server/Services/SecurityEventConnectionRunService.js.map +1 -0
- package/build/dist/Server/Services/SecurityEventConnectionService.js +356 -0
- package/build/dist/Server/Services/SecurityEventConnectionService.js.map +1 -0
- package/build/dist/Server/Services/TraceAggregationService.js +51 -25
- package/build/dist/Server/Services/TraceAggregationService.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/Chat/ObservabilityAssistant.js +3 -0
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.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/Index.js +32 -0
- package/build/dist/Server/Utils/AI/Toolbox/Index.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/Monitor/MonitorCriteriaEvaluator.js +5 -3
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.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 +352 -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/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 +719 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.js +404 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.js +209 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.js +40 -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 +27 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Types.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js +234 -61
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.js +537 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +572 -115
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js +35 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js.map +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/SessionReplay/SessionReplayReadService.js +521 -32
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +10 -0
- package/build/dist/Server/Utils/StartServer.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/Permission.js +2 -2
- package/build/dist/Types/Permission.js.map +1 -1
- 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 +2 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.js.map +1 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js +374 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js.map +1 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.js +35 -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/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/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 +63 -13
- package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
- package/build/dist/UI/Components/ErrorBoundary.js +34 -0
- package/build/dist/UI/Components/ErrorBoundary.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 +5 -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/Page/ModelPage.js +62 -34
- package/build/dist/UI/Components/Page/ModelPage.js.map +1 -1
- 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/LockedFilterActions.js +88 -0
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterActions.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +228 -0
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js +6 -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/Telemetry/TelemetryEntityNames.js +471 -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/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/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 +277 -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/Tests/UI/Rum/RecordingHealthStrip.test.tsx +0 -600
- 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/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
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Regional service endpoint prefixes published for chronicle.googleapis.com.
|
|
3
|
+
*
|
|
4
|
+
* Keep this list shared by server-side validation and the connection form. A
|
|
5
|
+
* free-text form in front of a stricter server allowlist lets a typo survive
|
|
6
|
+
* until save, while two copied allowlists eventually disagree as Google adds
|
|
7
|
+
* endpoints.
|
|
8
|
+
*
|
|
9
|
+
* Source: https://cloud.google.com/chronicle/docs/reference/rest
|
|
10
|
+
*/
|
|
11
|
+
export const GOOGLE_SECOPS_SUPPORTED_REGIONS: ReadonlyArray<string> = [
|
|
12
|
+
"us",
|
|
13
|
+
"eu",
|
|
14
|
+
"europe",
|
|
15
|
+
"africa-south1",
|
|
16
|
+
"asia-east1",
|
|
17
|
+
"asia-northeast1",
|
|
18
|
+
"asia-northeast3",
|
|
19
|
+
"asia-south1",
|
|
20
|
+
"asia-southeast1",
|
|
21
|
+
"asia-southeast2",
|
|
22
|
+
"australia-southeast1",
|
|
23
|
+
"europe-central2",
|
|
24
|
+
"europe-west12",
|
|
25
|
+
"europe-west2",
|
|
26
|
+
"europe-west3",
|
|
27
|
+
"europe-west6",
|
|
28
|
+
"europe-west9",
|
|
29
|
+
"me-central1",
|
|
30
|
+
"me-central2",
|
|
31
|
+
"me-west1",
|
|
32
|
+
"northamerica-northeast2",
|
|
33
|
+
"southamerica-east1",
|
|
34
|
+
];
|
|
@@ -72,6 +72,20 @@ enum EntityType {
|
|
|
72
72
|
DockerSwarmService = "docker.swarm.service",
|
|
73
73
|
DockerSwarmTask = "docker.swarm.task",
|
|
74
74
|
TelemetrySdk = "telemetry.sdk",
|
|
75
|
+
/*
|
|
76
|
+
* Dependency types, discovered from the CLIENT / PRODUCER spans of an
|
|
77
|
+
* instrumented service rather than from a resource of their own. They are
|
|
78
|
+
* the far end of a call nothing on the other side reported: a PostgreSQL
|
|
79
|
+
* or Redis a service queries (`db.system.name` / `db.system`), or an HTTP /
|
|
80
|
+
* gRPC / messaging endpoint it talks to (`server.address`, `peer.service`,
|
|
81
|
+
* `messaging.system`). OneUptime-defined — semconv describes these only as
|
|
82
|
+
* span attributes, never as entities. Discovered (heartbeat-bumped by the
|
|
83
|
+
* ComputeServiceDependencies cron), so they age out like any other
|
|
84
|
+
* discovered row. Deliberately distinct from the manual ExternalService /
|
|
85
|
+
* ExternalDatabase types below, which nothing ever observes.
|
|
86
|
+
*/
|
|
87
|
+
Database = "database",
|
|
88
|
+
RemoteService = "remote.service",
|
|
75
89
|
/*
|
|
76
90
|
* Inventory-mirrored types. Unlike everything above, these are never
|
|
77
91
|
* derived from an OTLP resource — the estate they describe is collected
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Scope a span query to the spans that raised one exception group.
|
|
3
|
+
*
|
|
4
|
+
* Spans carry no fingerprint of their own; an exception group's occurrences
|
|
5
|
+
* (ExceptionInstance rows) record the (traceId, spanId) they were raised in.
|
|
6
|
+
* The server compiles this scope to
|
|
7
|
+
*
|
|
8
|
+
* (traceId, spanId) IN (
|
|
9
|
+
* SELECT traceId, spanId FROM <exception occurrences>
|
|
10
|
+
* WHERE projectId = <the query's project>
|
|
11
|
+
* AND fingerprint = <fingerprint>
|
|
12
|
+
* [AND primaryEntityId = <service>]
|
|
13
|
+
* )
|
|
14
|
+
*
|
|
15
|
+
* so the span list, its count, the histogram and the facets all describe
|
|
16
|
+
* exactly the spans behind the exception's occurrences — with no cap on how
|
|
17
|
+
* many occurrences there are. It only ever narrows a query: authorization
|
|
18
|
+
* still runs on the span query's own projectId and primaryEntityId.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
// The synthetic query key the span list endpoint reads.
|
|
22
|
+
export const EXCEPTION_SPAN_SCOPE_QUERY_KEY: string = "exceptionScope";
|
|
23
|
+
|
|
24
|
+
// Fingerprints are SHA-256 hex today; the cap only rejects junk.
|
|
25
|
+
export const EXCEPTION_SPAN_SCOPE_MAX_FINGERPRINT_LENGTH: number = 512;
|
|
26
|
+
|
|
27
|
+
export interface ExceptionSpanScope {
|
|
28
|
+
fingerprint: string;
|
|
29
|
+
// The exception group's service; a fingerprint is only unique per service.
|
|
30
|
+
primaryEntityId?: string | undefined;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const UUID_PATTERN: RegExp =
|
|
34
|
+
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
35
|
+
|
|
36
|
+
/*
|
|
37
|
+
* Validate an untrusted scope (request body, deserialized query). Returns
|
|
38
|
+
* null for anything malformed so callers can decide how to fail; a blank or
|
|
39
|
+
* oversized fingerprint, or a service id that is not a UUID, is malformed.
|
|
40
|
+
*/
|
|
41
|
+
export function parseExceptionSpanScope(
|
|
42
|
+
value: unknown,
|
|
43
|
+
): ExceptionSpanScope | null {
|
|
44
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const record: Record<string, unknown> = value as Record<string, unknown>;
|
|
49
|
+
const fingerprint: unknown = record["fingerprint"];
|
|
50
|
+
|
|
51
|
+
if (typeof fingerprint !== "string") {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const trimmedFingerprint: string = fingerprint.trim();
|
|
56
|
+
|
|
57
|
+
if (
|
|
58
|
+
trimmedFingerprint.length === 0 ||
|
|
59
|
+
trimmedFingerprint.length > EXCEPTION_SPAN_SCOPE_MAX_FINGERPRINT_LENGTH
|
|
60
|
+
) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const rawEntityId: unknown = record["primaryEntityId"];
|
|
65
|
+
|
|
66
|
+
if (rawEntityId === undefined || rawEntityId === null || rawEntityId === "") {
|
|
67
|
+
return { fingerprint: trimmedFingerprint };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const primaryEntityId: string =
|
|
71
|
+
typeof rawEntityId === "string"
|
|
72
|
+
? rawEntityId.trim()
|
|
73
|
+
: typeof rawEntityId === "object" &&
|
|
74
|
+
typeof (rawEntityId as Record<string, unknown>)["value"] === "string"
|
|
75
|
+
? ((rawEntityId as Record<string, unknown>)["value"] as string).trim()
|
|
76
|
+
: "";
|
|
77
|
+
|
|
78
|
+
if (!UUID_PATTERN.test(primaryEntityId)) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return { fingerprint: trimmedFingerprint, primaryEntityId };
|
|
83
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* What a LOCKED telemetry filter chip can explain about itself.
|
|
3
|
+
*
|
|
4
|
+
* A resource page (a Kubernetes cluster, a Docker host, a RUM application,
|
|
5
|
+
* an incident's stored query, ...) pins the telemetry explorers it embeds to
|
|
6
|
+
* its own scope. The viewer shows that scope as a grey chip with a lock icon
|
|
7
|
+
* — "Cluster: production" — and nothing else, so a reader cannot tell whether
|
|
8
|
+
* the match is by resource attribute, by entity membership, by service id,
|
|
9
|
+
* or by something else, nor how to reproduce it on the main explorer page.
|
|
10
|
+
*
|
|
11
|
+
* The chip builders in the Dashboard fill one of these per locked chip; the
|
|
12
|
+
* shared chip renderer turns it into a rich tooltip and into the
|
|
13
|
+
* "Copy filter" affordance. Display-only: nothing here changes the query.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/** One predicate the server evaluates for the locked filter. */
|
|
17
|
+
export interface LockedFilterPredicate {
|
|
18
|
+
/** "Attribute", "Entity key", "Entity id", "Trace ID", ... */
|
|
19
|
+
label: string;
|
|
20
|
+
/** The predicate as text, e.g. `resource.k8s.cluster.name = "prod-eks-01"`. */
|
|
21
|
+
expression: string;
|
|
22
|
+
/** Optional plain-language note under the expression. */
|
|
23
|
+
note?: string | undefined;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** How several predicates of one locked filter combine. Defaults to "all". */
|
|
27
|
+
export type LockedFilterCombinator = "any" | "all";
|
|
28
|
+
|
|
29
|
+
export interface LockedFilterDetail {
|
|
30
|
+
/** Why the chip is locked, e.g. "Pinned by this page". */
|
|
31
|
+
source: string;
|
|
32
|
+
/** Plain-language summary, e.g. "Only logs from this Kubernetes cluster are shown." */
|
|
33
|
+
summary: string;
|
|
34
|
+
/** How rows are matched, in display order. */
|
|
35
|
+
predicates: Array<LockedFilterPredicate>;
|
|
36
|
+
/** "any" when the predicates are OR-ed (entity scope), "all" otherwise. */
|
|
37
|
+
combinator?: LockedFilterCombinator | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Search-bar text that reproduces this filter on the explorer for the same
|
|
40
|
+
* signal, e.g. `@resource.k8s.cluster.name:prod-eks-01`. Absent when the
|
|
41
|
+
* grammar cannot express the filter.
|
|
42
|
+
*/
|
|
43
|
+
searchToken?: string | undefined;
|
|
44
|
+
/** Why `searchToken` is absent, when it is — shown in place of the syntax. */
|
|
45
|
+
searchTokenUnavailableReason?: string | undefined;
|
|
46
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { RESOURCE_FACET_CATALOG_KEYS } from "./ResourceFacetCatalog";
|
|
2
|
+
|
|
1
3
|
/*
|
|
2
4
|
* The resource facets of the telemetry explorers (Logs / Traces), split by
|
|
3
5
|
* how a selection has to be turned into a predicate.
|
|
@@ -8,8 +10,9 @@
|
|
|
8
10
|
* selection has to be matched against depends on the ingestion path:
|
|
9
11
|
*
|
|
10
12
|
* - Agent-ingested resource telemetry (Infrastructure / Docker / Podman /
|
|
11
|
-
* Kubernetes
|
|
12
|
-
*
|
|
13
|
+
* Kubernetes / Proxmox / Ceph / VMware ... agents) has no
|
|
14
|
+
* `service.name`, so the resource IS the primary entity and
|
|
15
|
+
* `primaryEntityId` holds its Postgres id.
|
|
13
16
|
* - OTLP telemetry that carries a `service.name` is primary-keyed on its
|
|
14
17
|
* Service (`OtelIngestBaseService.selectPrimaryEntity`); the host /
|
|
15
18
|
* cluster it runs on is recorded only in `entityKeys`.
|
|
@@ -34,16 +37,20 @@ export const SERVICE_FACET_KEYS: ReadonlyArray<string> = [
|
|
|
34
37
|
];
|
|
35
38
|
|
|
36
39
|
/**
|
|
37
|
-
* Facets whose values are ids of a NON-Service resource row
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
40
|
+
* Facets whose values are ids of a NON-Service resource row — every entry
|
|
41
|
+
* of the shared resource facet catalog, in catalog (sidebar) order. The
|
|
42
|
+
* value is a Postgres id which the server resolves, where the resource type
|
|
43
|
+
* has a telemetry identity, to its identifying value and from there to its
|
|
44
|
+
* entity key and resource attribute (see ResourceEntityFilter). Types with
|
|
45
|
+
* no such identity keep an id-only `primaryEntityId IN (...)` predicate.
|
|
46
|
+
*
|
|
47
|
+
* Derived rather than listed: a hand-kept copy of the catalog is exactly
|
|
48
|
+
* how Proxmox / vCenter / Ceph / Docker Swarm / Serverless / Cloud / RUM /
|
|
49
|
+
* IoT selections ended up silently dropped by the parser below while their
|
|
50
|
+
* facets were already on screen.
|
|
41
51
|
*/
|
|
42
52
|
export const RESOURCE_ENTITY_FACET_KEYS: ReadonlyArray<string> = [
|
|
43
|
-
|
|
44
|
-
"dockerHostId",
|
|
45
|
-
"podmanHostId",
|
|
46
|
-
"kubernetesClusterId",
|
|
53
|
+
...RESOURCE_FACET_CATALOG_KEYS,
|
|
47
54
|
];
|
|
48
55
|
|
|
49
56
|
const RESOURCE_ENTITY_FACET_KEY_SET: ReadonlySet<string> = new Set<string>(
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import IconProp from "../Icon/IconProp";
|
|
2
|
+
import ServiceType from "./ServiceType";
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* The one list of non-Service resource types the telemetry explorers
|
|
6
|
+
* (Logs / Traces / Exceptions) offer as filter facets.
|
|
7
|
+
*
|
|
8
|
+
* Every per-resource table used to be copied by hand — the facet keys a
|
|
9
|
+
* viewer requests, the sidebar titles, the ServiceType each aggregation
|
|
10
|
+
* service counts, the keys the server resolves from Postgres — and the
|
|
11
|
+
* copies drifted: Host / Docker / Podman / Kubernetes were wired end to
|
|
12
|
+
* end while Proxmox, vCenter, Ceph, Docker Swarm, Serverless, Cloud, RUM
|
|
13
|
+
* and IoT were each missing from one layer or another. Deriving those
|
|
14
|
+
* tables from this catalog keeps a new resource type a one-line change.
|
|
15
|
+
*
|
|
16
|
+
* Kept free of React and database models so both the server and the
|
|
17
|
+
* browser (and plain unit tests) can import it.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export interface ResourceFacetDefinition {
|
|
21
|
+
// Facet key used on the wire, in chips and in saved views.
|
|
22
|
+
facetKey: string;
|
|
23
|
+
/*
|
|
24
|
+
* `primaryEntityType` stamped on telemetry whose primary entity is this
|
|
25
|
+
* resource. IoT fleet telemetry is stamped `IoTDevice` with the fleet id
|
|
26
|
+
* (there is no fleet member), and RUM applications `RealUserMonitor`.
|
|
27
|
+
*/
|
|
28
|
+
serviceType: ServiceType;
|
|
29
|
+
// Singular, title-cased label ("Kubernetes Cluster").
|
|
30
|
+
label: string;
|
|
31
|
+
// Plural label for sentences ("Kubernetes Clusters").
|
|
32
|
+
pluralLabel: string;
|
|
33
|
+
icon: IconProp;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export const RESOURCE_FACET_CATALOG: ReadonlyArray<ResourceFacetDefinition> = [
|
|
37
|
+
{
|
|
38
|
+
facetKey: "hostId",
|
|
39
|
+
serviceType: ServiceType.Host,
|
|
40
|
+
label: "Host",
|
|
41
|
+
pluralLabel: "Hosts",
|
|
42
|
+
icon: IconProp.Server,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
facetKey: "dockerHostId",
|
|
46
|
+
serviceType: ServiceType.DockerHost,
|
|
47
|
+
label: "Docker Host",
|
|
48
|
+
pluralLabel: "Docker Hosts",
|
|
49
|
+
icon: IconProp.Docker,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
facetKey: "podmanHostId",
|
|
53
|
+
serviceType: ServiceType.PodmanHost,
|
|
54
|
+
label: "Podman Host",
|
|
55
|
+
pluralLabel: "Podman Hosts",
|
|
56
|
+
icon: IconProp.Podman,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
facetKey: "kubernetesClusterId",
|
|
60
|
+
serviceType: ServiceType.KubernetesCluster,
|
|
61
|
+
label: "Kubernetes Cluster",
|
|
62
|
+
pluralLabel: "Kubernetes Clusters",
|
|
63
|
+
icon: IconProp.Kubernetes,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
facetKey: "dockerSwarmClusterId",
|
|
67
|
+
serviceType: ServiceType.DockerSwarmCluster,
|
|
68
|
+
label: "Docker Swarm Cluster",
|
|
69
|
+
pluralLabel: "Docker Swarm Clusters",
|
|
70
|
+
icon: IconProp.DockerSwarm,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
facetKey: "proxmoxClusterId",
|
|
74
|
+
serviceType: ServiceType.ProxmoxCluster,
|
|
75
|
+
label: "Proxmox Cluster",
|
|
76
|
+
pluralLabel: "Proxmox Clusters",
|
|
77
|
+
icon: IconProp.Proxmox,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
facetKey: "vmwareVCenterId",
|
|
81
|
+
serviceType: ServiceType.VMwareVCenter,
|
|
82
|
+
label: "vCenter",
|
|
83
|
+
pluralLabel: "vCenters",
|
|
84
|
+
icon: IconProp.VMware,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
facetKey: "cephClusterId",
|
|
88
|
+
serviceType: ServiceType.CephCluster,
|
|
89
|
+
label: "Ceph Cluster",
|
|
90
|
+
pluralLabel: "Ceph Clusters",
|
|
91
|
+
icon: IconProp.Ceph,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
facetKey: "serverlessFunctionId",
|
|
95
|
+
serviceType: ServiceType.ServerlessFunction,
|
|
96
|
+
label: "Serverless Function",
|
|
97
|
+
pluralLabel: "Serverless Functions",
|
|
98
|
+
icon: IconProp.Bolt,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
facetKey: "cloudResourceId",
|
|
102
|
+
serviceType: ServiceType.CloudResource,
|
|
103
|
+
label: "Cloud Resource",
|
|
104
|
+
pluralLabel: "Cloud Resources",
|
|
105
|
+
icon: IconProp.Cloud,
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
facetKey: "rumApplicationId",
|
|
109
|
+
serviceType: ServiceType.RealUserMonitor,
|
|
110
|
+
label: "RUM Application",
|
|
111
|
+
pluralLabel: "RUM Applications",
|
|
112
|
+
icon: IconProp.Globe,
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
facetKey: "iotFleetId",
|
|
116
|
+
serviceType: ServiceType.IoTDevice,
|
|
117
|
+
label: "IoT Fleet",
|
|
118
|
+
pluralLabel: "IoT Fleets",
|
|
119
|
+
icon: IconProp.IoT,
|
|
120
|
+
},
|
|
121
|
+
];
|
|
122
|
+
|
|
123
|
+
// Catalog order — the order the sidebars list resource facets in.
|
|
124
|
+
export const RESOURCE_FACET_CATALOG_KEYS: ReadonlyArray<string> =
|
|
125
|
+
RESOURCE_FACET_CATALOG.map((definition: ResourceFacetDefinition): string => {
|
|
126
|
+
return definition.facetKey;
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
const DEFINITIONS_BY_KEY: ReadonlyMap<string, ResourceFacetDefinition> =
|
|
130
|
+
new Map<string, ResourceFacetDefinition>(
|
|
131
|
+
RESOURCE_FACET_CATALOG.map(
|
|
132
|
+
(
|
|
133
|
+
definition: ResourceFacetDefinition,
|
|
134
|
+
): [string, ResourceFacetDefinition] => {
|
|
135
|
+
return [definition.facetKey, definition];
|
|
136
|
+
},
|
|
137
|
+
),
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
export function getResourceFacetDefinition(
|
|
141
|
+
facetKey: string,
|
|
142
|
+
): ResourceFacetDefinition | undefined {
|
|
143
|
+
return DEFINITIONS_BY_KEY.get(facetKey);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export function isCatalogResourceFacetKey(facetKey: string): boolean {
|
|
147
|
+
return DEFINITIONS_BY_KEY.has(facetKey);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/*
|
|
151
|
+
* facetKey → ServiceType, the shape the aggregation services count
|
|
152
|
+
* resource facets with (`primaryEntityType = <ServiceType>`).
|
|
153
|
+
*/
|
|
154
|
+
export function getResourceFacetServiceTypeMap(): Map<string, ServiceType> {
|
|
155
|
+
return new Map<string, ServiceType>(
|
|
156
|
+
RESOURCE_FACET_CATALOG.map(
|
|
157
|
+
(definition: ResourceFacetDefinition): [string, ServiceType] => {
|
|
158
|
+
return [definition.facetKey, definition.serviceType];
|
|
159
|
+
},
|
|
160
|
+
),
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// facetKey → singular label, for chip keys and section titles.
|
|
165
|
+
export function getResourceFacetLabelMap(): Record<string, string> {
|
|
166
|
+
const labels: Record<string, string> = {};
|
|
167
|
+
for (const definition of RESOURCE_FACET_CATALOG) {
|
|
168
|
+
labels[definition.facetKey] = definition.label;
|
|
169
|
+
}
|
|
170
|
+
return labels;
|
|
171
|
+
}
|
|
@@ -21,6 +21,18 @@ export interface CardButtonSchema {
|
|
|
21
21
|
buttonSize?: ButtonSize | undefined;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
/*
|
|
25
|
+
* How the header shares its width.
|
|
26
|
+
*
|
|
27
|
+
* "default" puts the actions to the right of the title on md and up, which
|
|
28
|
+
* suits a full-width card. In a narrow column (the one-third sidebar of an
|
|
29
|
+
* overview page) that squeezes the title and description into a column a
|
|
30
|
+
* word or two wide beside the buttons, so "stacked" gives the title and
|
|
31
|
+
* description the whole width and moves the actions onto their own row
|
|
32
|
+
* underneath.
|
|
33
|
+
*/
|
|
34
|
+
export type CardHeaderLayout = "default" | "stacked";
|
|
35
|
+
|
|
24
36
|
export interface ComponentProps {
|
|
25
37
|
title?: string | ReactElement | undefined;
|
|
26
38
|
description?: string | ReactElement | undefined;
|
|
@@ -29,106 +41,129 @@ export interface ComponentProps {
|
|
|
29
41
|
className?: string | undefined;
|
|
30
42
|
bodyClassName?: string | undefined;
|
|
31
43
|
rightElement?: ReactElement | undefined;
|
|
44
|
+
headerLayout?: CardHeaderLayout | undefined;
|
|
32
45
|
}
|
|
33
46
|
|
|
34
47
|
const Card: FunctionComponent<ComponentProps> = (
|
|
35
48
|
props: ComponentProps,
|
|
36
49
|
): ReactElement => {
|
|
37
50
|
const { translateValue } = useTranslateValue();
|
|
38
|
-
const
|
|
39
|
-
|
|
51
|
+
const hasButtons: boolean = Boolean(
|
|
52
|
+
props.buttons && props.buttons.length > 0,
|
|
53
|
+
);
|
|
54
|
+
const noRightElementsOrButtons: boolean = !props.rightElement && !hasButtons;
|
|
55
|
+
const isStacked: boolean = props.headerLayout === "stacked";
|
|
40
56
|
const translatedTitle: string | ReactElement | undefined = translateValue(
|
|
41
57
|
props.title,
|
|
42
58
|
);
|
|
43
59
|
const translatedDescription: string | ReactElement | undefined =
|
|
44
60
|
translateValue(props.description);
|
|
45
61
|
|
|
62
|
+
const renderButtons: () => Array<ReactElement> = (): Array<ReactElement> => {
|
|
63
|
+
return (props.buttons || []).map(
|
|
64
|
+
(button: CardButtonSchema | ReactElement, i: number) => {
|
|
65
|
+
return (
|
|
66
|
+
<div key={i} className="flex items-center">
|
|
67
|
+
{React.isValidElement(button) ? button : null}
|
|
68
|
+
{React.isValidElement(button) ? null : (
|
|
69
|
+
<Button
|
|
70
|
+
key={i}
|
|
71
|
+
title={(button as CardButtonSchema).title}
|
|
72
|
+
buttonStyle={(button as CardButtonSchema).buttonStyle}
|
|
73
|
+
buttonSize={(button as CardButtonSchema).buttonSize}
|
|
74
|
+
className={(button as CardButtonSchema).className}
|
|
75
|
+
onClick={() => {
|
|
76
|
+
if ((button as CardButtonSchema).onClick) {
|
|
77
|
+
(button as CardButtonSchema).onClick();
|
|
78
|
+
}
|
|
79
|
+
}}
|
|
80
|
+
disabled={(button as CardButtonSchema).disabled}
|
|
81
|
+
tooltip={(button as CardButtonSchema).tooltip}
|
|
82
|
+
icon={(button as CardButtonSchema).icon}
|
|
83
|
+
shortcutKey={(button as CardButtonSchema).shortcutKey}
|
|
84
|
+
dataTestId="card-button"
|
|
85
|
+
isLoading={(button as CardButtonSchema).isLoading}
|
|
86
|
+
/>
|
|
87
|
+
)}
|
|
88
|
+
</div>
|
|
89
|
+
);
|
|
90
|
+
},
|
|
91
|
+
);
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const titleAndDescription: ReactElement = (
|
|
95
|
+
<React.Fragment>
|
|
96
|
+
{translatedTitle && (
|
|
97
|
+
<h2
|
|
98
|
+
data-testid="card-details-heading"
|
|
99
|
+
id="card-details-heading"
|
|
100
|
+
className="text-lg font-semibold leading-6 text-gray-900"
|
|
101
|
+
>
|
|
102
|
+
{translatedTitle}
|
|
103
|
+
</h2>
|
|
104
|
+
)}
|
|
105
|
+
{translatedDescription && (
|
|
106
|
+
<p
|
|
107
|
+
data-testid="card-description"
|
|
108
|
+
className="mt-1.5 text-sm text-gray-500 w-full hidden md:block leading-relaxed"
|
|
109
|
+
>
|
|
110
|
+
{translatedDescription}
|
|
111
|
+
</p>
|
|
112
|
+
)}
|
|
113
|
+
</React.Fragment>
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
/*
|
|
117
|
+
* Button carries a left margin for the side-by-side header (ml-1 or
|
|
118
|
+
* md:ml-3, depending on its style). On a row of its own that margin only
|
|
119
|
+
* pushes the first button off the title's left edge, and the gap already
|
|
120
|
+
* spaces the rest, so it is cleared here.
|
|
121
|
+
*/
|
|
122
|
+
const stackedHeader: ReactElement = (
|
|
123
|
+
<div data-testid="card-header" data-header-layout="stacked">
|
|
124
|
+
<div className="w-full min-w-0">{titleAndDescription}</div>
|
|
125
|
+
{(props.rightElement || hasButtons) && (
|
|
126
|
+
<div
|
|
127
|
+
data-testid="card-header-actions"
|
|
128
|
+
className="mt-3 flex flex-wrap items-center gap-2 [&_button]:ml-0 [&_button]:md:ml-0"
|
|
129
|
+
>
|
|
130
|
+
{props.rightElement && (
|
|
131
|
+
<div className="flex items-center">{props.rightElement}</div>
|
|
132
|
+
)}
|
|
133
|
+
{hasButtons && renderButtons()}
|
|
134
|
+
</div>
|
|
135
|
+
)}
|
|
136
|
+
</div>
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
const defaultHeader: ReactElement = (
|
|
140
|
+
<div className="flex flex-col md:flex-row md:justify-between md:items-start">
|
|
141
|
+
<div
|
|
142
|
+
className={`${noRightElementsOrButtons ? "w-full" : "flex-1 min-w-0"}`}
|
|
143
|
+
>
|
|
144
|
+
{titleAndDescription}
|
|
145
|
+
</div>
|
|
146
|
+
{(props.rightElement || hasButtons) && (
|
|
147
|
+
<div className="flex flex-col md:flex-row md:items-center md:w-fit mt-4 md:mt-0 md:ml-4 gap-2 md:gap-0 flex-shrink-0 items-center">
|
|
148
|
+
{props.rightElement && (
|
|
149
|
+
<div className="mb-2 md:mb-0 md:mr-3">{props.rightElement}</div>
|
|
150
|
+
)}
|
|
151
|
+
{hasButtons && (
|
|
152
|
+
<div className="flex flex-wrap items-center gap-1.5">
|
|
153
|
+
{renderButtons()}
|
|
154
|
+
</div>
|
|
155
|
+
)}
|
|
156
|
+
</div>
|
|
157
|
+
)}
|
|
158
|
+
</div>
|
|
159
|
+
);
|
|
160
|
+
|
|
46
161
|
return (
|
|
47
162
|
<React.Fragment>
|
|
48
163
|
<div data-testid="card" className={`mb-5 ${props.className || ""}`}>
|
|
49
164
|
<div className="bg-white border border-gray-200 rounded-xl shadow-sm overflow-visible">
|
|
50
165
|
<div className="py-6 px-5 md:px-6">
|
|
51
|
-
|
|
52
|
-
<div
|
|
53
|
-
className={`${noRightElementsOrButtons ? "w-full" : "flex-1 min-w-0"}`}
|
|
54
|
-
>
|
|
55
|
-
{translatedTitle && (
|
|
56
|
-
<h2
|
|
57
|
-
data-testid="card-details-heading"
|
|
58
|
-
id="card-details-heading"
|
|
59
|
-
className="text-lg font-semibold leading-6 text-gray-900"
|
|
60
|
-
>
|
|
61
|
-
{translatedTitle}
|
|
62
|
-
</h2>
|
|
63
|
-
)}
|
|
64
|
-
{translatedDescription && (
|
|
65
|
-
<p
|
|
66
|
-
data-testid="card-description"
|
|
67
|
-
className="mt-1.5 text-sm text-gray-500 w-full hidden md:block leading-relaxed"
|
|
68
|
-
>
|
|
69
|
-
{translatedDescription}
|
|
70
|
-
</p>
|
|
71
|
-
)}
|
|
72
|
-
</div>
|
|
73
|
-
{(props.rightElement ||
|
|
74
|
-
(props.buttons && props.buttons.length > 0)) && (
|
|
75
|
-
<div className="flex flex-col md:flex-row md:items-center md:w-fit mt-4 md:mt-0 md:ml-4 gap-2 md:gap-0 flex-shrink-0 items-center">
|
|
76
|
-
{props.rightElement && (
|
|
77
|
-
<div className="mb-2 md:mb-0 md:mr-3">
|
|
78
|
-
{props.rightElement}
|
|
79
|
-
</div>
|
|
80
|
-
)}
|
|
81
|
-
{props.buttons && props.buttons.length > 0 && (
|
|
82
|
-
<div className="flex flex-wrap items-center gap-1.5">
|
|
83
|
-
{props.buttons.map(
|
|
84
|
-
(
|
|
85
|
-
button: CardButtonSchema | ReactElement,
|
|
86
|
-
i: number,
|
|
87
|
-
) => {
|
|
88
|
-
return (
|
|
89
|
-
<div key={i} className="flex items-center">
|
|
90
|
-
{React.isValidElement(button) ? button : null}
|
|
91
|
-
{React.isValidElement(button) ? null : (
|
|
92
|
-
<Button
|
|
93
|
-
key={i}
|
|
94
|
-
title={(button as CardButtonSchema).title}
|
|
95
|
-
buttonStyle={
|
|
96
|
-
(button as CardButtonSchema).buttonStyle
|
|
97
|
-
}
|
|
98
|
-
buttonSize={
|
|
99
|
-
(button as CardButtonSchema).buttonSize
|
|
100
|
-
}
|
|
101
|
-
className={
|
|
102
|
-
(button as CardButtonSchema).className
|
|
103
|
-
}
|
|
104
|
-
onClick={() => {
|
|
105
|
-
if ((button as CardButtonSchema).onClick) {
|
|
106
|
-
(button as CardButtonSchema).onClick();
|
|
107
|
-
}
|
|
108
|
-
}}
|
|
109
|
-
disabled={
|
|
110
|
-
(button as CardButtonSchema).disabled
|
|
111
|
-
}
|
|
112
|
-
tooltip={(button as CardButtonSchema).tooltip}
|
|
113
|
-
icon={(button as CardButtonSchema).icon}
|
|
114
|
-
shortcutKey={
|
|
115
|
-
(button as CardButtonSchema).shortcutKey
|
|
116
|
-
}
|
|
117
|
-
dataTestId="card-button"
|
|
118
|
-
isLoading={
|
|
119
|
-
(button as CardButtonSchema).isLoading
|
|
120
|
-
}
|
|
121
|
-
/>
|
|
122
|
-
)}
|
|
123
|
-
</div>
|
|
124
|
-
);
|
|
125
|
-
},
|
|
126
|
-
)}
|
|
127
|
-
</div>
|
|
128
|
-
)}
|
|
129
|
-
</div>
|
|
130
|
-
)}
|
|
131
|
-
</div>
|
|
166
|
+
{isStacked ? stackedHeader : defaultHeader}
|
|
132
167
|
|
|
133
168
|
{props.children && (
|
|
134
169
|
<div className={props.bodyClassName || "mt-4"}>
|
|
@@ -38,6 +38,8 @@ export interface CategoryProps {
|
|
|
38
38
|
const CheckboxElement: FunctionComponent<CategoryProps> = (
|
|
39
39
|
props: CategoryProps,
|
|
40
40
|
): ReactElement => {
|
|
41
|
+
const checkboxId: string = React.useId();
|
|
42
|
+
const descriptionId: string = `${checkboxId}-description`;
|
|
41
43
|
const [value, setValue] = React.useState<boolean>(
|
|
42
44
|
props.initialValue || false,
|
|
43
45
|
);
|
|
@@ -65,6 +67,7 @@ const CheckboxElement: FunctionComponent<CategoryProps> = (
|
|
|
65
67
|
>
|
|
66
68
|
<div className="flex h-6 items-center">
|
|
67
69
|
<input
|
|
70
|
+
id={checkboxId}
|
|
68
71
|
checked={value}
|
|
69
72
|
onChange={(event: React.ChangeEvent<HTMLInputElement>) => {
|
|
70
73
|
setValue(event.target.checked);
|
|
@@ -83,9 +86,7 @@ const CheckboxElement: FunctionComponent<CategoryProps> = (
|
|
|
83
86
|
data-testid={props.dataTestId}
|
|
84
87
|
aria-label={props.ariaLabel}
|
|
85
88
|
title={props.hoverText}
|
|
86
|
-
aria-describedby={
|
|
87
|
-
props.description ? "checkbox-description" : undefined
|
|
88
|
-
}
|
|
89
|
+
aria-describedby={props.description ? descriptionId : undefined}
|
|
89
90
|
aria-invalid={props.error ? "true" : undefined}
|
|
90
91
|
type="checkbox"
|
|
91
92
|
className={`accent-indigo-600 h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600 ${
|
|
@@ -94,9 +95,11 @@ const CheckboxElement: FunctionComponent<CategoryProps> = (
|
|
|
94
95
|
/>
|
|
95
96
|
</div>
|
|
96
97
|
<div className="ml-3 text-sm leading-6">
|
|
97
|
-
<label className="font-medium text-gray-900"
|
|
98
|
+
<label className="font-medium text-gray-900" htmlFor={checkboxId}>
|
|
99
|
+
{props.title}
|
|
100
|
+
</label>
|
|
98
101
|
{props.description && (
|
|
99
|
-
<div id=
|
|
102
|
+
<div id={descriptionId} className="text-gray-500">
|
|
100
103
|
{props.description}
|
|
101
104
|
</div>
|
|
102
105
|
)}
|