@oneuptime/common 13.0.3 → 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.
Files changed (687) hide show
  1. package/Models/DatabaseModels/Index.ts +4 -0
  2. package/Models/DatabaseModels/RumApplication.ts +1 -1
  3. package/Models/DatabaseModels/SecurityEventConnection.ts +457 -0
  4. package/Models/DatabaseModels/SecurityEventConnectionRun.ts +263 -0
  5. package/Models/DatabaseModels/TelemetryIngestionKey.ts +2 -2
  6. package/Server/API/AIInvestigationAPI.ts +484 -24
  7. package/Server/API/GoogleSecOpsConnectionAPI.ts +249 -8
  8. package/Server/API/SecurityEventConnectionAPI.ts +250 -0
  9. package/Server/API/TelemetryAPI.ts +402 -265
  10. package/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.ts +99 -0
  11. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  12. package/Server/Middleware/TelemetryIngest.ts +101 -6
  13. package/Server/Services/ExceptionAggregationService.ts +7 -16
  14. package/Server/Services/GoogleSecOpsConnectionService.ts +15 -0
  15. package/Server/Services/Index.ts +4 -0
  16. package/Server/Services/InventoryItemService.ts +28 -0
  17. package/Server/Services/LogAggregationService.ts +17 -23
  18. package/Server/Services/MetricAggregationService.ts +4 -14
  19. package/Server/Services/SecurityEventConnectionRunService.ts +10 -0
  20. package/Server/Services/SecurityEventConnectionService.ts +538 -0
  21. package/Server/Services/TraceAggregationService.ts +77 -28
  22. package/Server/Types/AnalyticsDatabase/ModelPermission.ts +9 -0
  23. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +13 -1
  24. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +15 -1
  25. package/Server/Utils/AI/SRE/InvestigationEvidence.ts +658 -0
  26. package/Server/Utils/AI/SRE/InvestigationReferences.ts +324 -0
  27. package/Server/Utils/AI/Toolbox/Index.ts +38 -0
  28. package/Server/Utils/AI/Toolbox/TimelineTools.ts +9 -2
  29. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +80 -0
  30. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +5 -3
  31. package/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.ts +1108 -0
  32. package/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.ts +732 -0
  33. package/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.ts +495 -0
  34. package/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.ts +689 -0
  35. package/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.ts +767 -0
  36. package/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.ts +571 -0
  37. package/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.ts +827 -0
  38. package/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.ts +610 -0
  39. package/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.ts +549 -0
  40. package/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.ts +830 -0
  41. package/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.ts +684 -0
  42. package/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.ts +487 -0
  43. package/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.ts +778 -0
  44. package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.ts +1002 -0
  45. package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.ts +556 -0
  46. package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.ts +275 -0
  47. package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.ts +53 -0
  48. package/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.ts +709 -0
  49. package/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.ts +596 -0
  50. package/Server/Utils/SecurityEvent/Connectors/Types.ts +191 -0
  51. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.ts +353 -65
  52. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.ts +777 -0
  53. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +747 -148
  54. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.ts +48 -2
  55. package/Server/Utils/SecurityEvent/SecurityEventDedupe.ts +81 -0
  56. package/Server/Utils/SessionReplay/SessionReplayReadService.ts +741 -40
  57. package/Server/Utils/StartServer.ts +10 -0
  58. package/Server/Utils/Telemetry/EntityRegistry.ts +8 -0
  59. package/Server/Utils/Telemetry/KubernetesResourceAttributes.ts +108 -0
  60. package/Server/Utils/Telemetry/ResourceEntityFilter.ts +174 -93
  61. package/Server/Utils/Telemetry/ResourceFacetPlanner.ts +251 -0
  62. package/Server/Utils/Telemetry/ResourceFacetResolver.ts +248 -413
  63. package/Server/Utils/Telemetry/ServiceDependencyDiscovery.ts +668 -0
  64. package/Server/Utils/Telemetry/TraceContextPropagation.ts +348 -0
  65. package/Server/Utils/Telemetry.ts +18 -0
  66. package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +413 -0
  67. package/Tests/App/Dashboard/AIRootCauseFeedItem.test.tsx +285 -0
  68. package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +242 -0
  69. package/Tests/App/Dashboard/AlertEpisodeViewFields.test.tsx +601 -15
  70. package/Tests/App/Dashboard/ChangeAlertStateAIHeader.test.tsx +835 -0
  71. package/Tests/App/Dashboard/CloudResourceTelemetryScope.test.ts +41 -0
  72. package/Tests/App/Dashboard/ConnectionTestModal.test.tsx +604 -0
  73. package/Tests/App/Dashboard/ConnectorTestReportView.test.tsx +738 -0
  74. package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +153 -6
  75. package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +165 -0
  76. package/Tests/App/Dashboard/EpisodeChangeState.test.tsx +1069 -0
  77. package/Tests/App/Dashboard/EpisodeMembersCard.test.tsx +772 -0
  78. package/Tests/App/Dashboard/EventOverviewPages.test.tsx +2354 -0
  79. package/Tests/App/Dashboard/EventOverviewSkeleton.test.tsx +210 -0
  80. package/Tests/App/Dashboard/EventStatBar.test.tsx +392 -0
  81. package/Tests/App/Dashboard/EventStatusPanel.test.tsx +247 -0
  82. package/Tests/App/Dashboard/ExceptionAIAssistance.test.tsx +606 -0
  83. package/Tests/App/Dashboard/ExceptionBreadcrumbTimeline.test.tsx +273 -0
  84. package/Tests/App/Dashboard/ExceptionDetailSideMenu.test.tsx +176 -0
  85. package/Tests/App/Dashboard/ExceptionOverviewCards.test.tsx +366 -0
  86. package/Tests/App/Dashboard/ExceptionSignalPages.test.tsx +371 -0
  87. package/Tests/App/Dashboard/ExceptionStackFrameViewer.test.tsx +440 -0
  88. package/Tests/App/Dashboard/ExceptionSummary.test.tsx +381 -0
  89. package/Tests/App/Dashboard/ExceptionTriage.test.tsx +306 -0
  90. package/Tests/App/Dashboard/ExceptionsResourceFacets.test.tsx +604 -0
  91. package/Tests/App/Dashboard/ExceptionsViewerEntityChips.test.tsx +706 -0
  92. package/Tests/App/Dashboard/FeedOrdering.test.ts +32 -0
  93. package/Tests/App/Dashboard/GoogleSecOpsConnectionForm.test.tsx +838 -0
  94. package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +18 -0
  95. package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +297 -20
  96. package/Tests/App/Dashboard/IncidentEpisodeViewFields.test.tsx +618 -13
  97. package/Tests/App/Dashboard/InfrastructureExplorer.test.tsx +254 -207
  98. package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +303 -135
  99. package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +1251 -0
  100. package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +303 -0
  101. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +876 -8
  102. package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +35 -0
  103. package/Tests/App/Dashboard/InvestigationReferenceLink.test.tsx +177 -0
  104. package/Tests/App/Dashboard/InvestigationReportView.test.tsx +1295 -0
  105. package/Tests/App/Dashboard/KubernetesImageReferenceView.test.tsx +114 -0
  106. package/Tests/App/Dashboard/KubernetesLogsTabChips.test.tsx +285 -0
  107. package/Tests/App/Dashboard/LogsEntityChipNames.test.tsx +316 -0
  108. package/Tests/App/Dashboard/LogsResourceFacetChips.test.tsx +361 -0
  109. package/Tests/App/Dashboard/ProfileTableEntityNames.test.tsx +432 -0
  110. package/Tests/App/Dashboard/ProfileViewEntityName.test.tsx +250 -0
  111. package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +10 -0
  112. package/Tests/App/Dashboard/ResourceLogsTabsBareLayout.test.tsx +700 -0
  113. package/Tests/App/Dashboard/ResourcePageEntityNameProps.test.tsx +803 -0
  114. package/Tests/App/Dashboard/RumSessionReplaySideMenu.test.tsx +11 -1
  115. package/Tests/App/Dashboard/ScheduledMaintenanceChangeState.test.tsx +1026 -0
  116. package/Tests/App/Dashboard/ScheduledMaintenanceFeedRefresh.test.tsx +436 -0
  117. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +1195 -0
  118. package/Tests/App/Dashboard/SecurityEventConnectionFormModal.test.tsx +1022 -0
  119. package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +905 -0
  120. package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +247 -0
  121. package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +375 -274
  122. package/Tests/App/Dashboard/SessionReplayAuditTable.test.tsx +410 -0
  123. package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +774 -0
  124. package/Tests/App/Dashboard/TopErrorsPanelResourceNames.test.tsx +316 -0
  125. package/Tests/App/Dashboard/TopologyDataLoading.test.tsx +30 -0
  126. package/Tests/App/Dashboard/TopologyPageNavigation.test.tsx +88 -24
  127. package/Tests/App/Dashboard/TraceExplorer.test.tsx +1590 -0
  128. package/Tests/App/Dashboard/TraceWaterfall.test.tsx +488 -0
  129. package/Tests/App/Dashboard/TracesAnalyticsSeriesLabels.test.tsx +367 -0
  130. package/Tests/App/Dashboard/TracesEntityNames.test.tsx +585 -0
  131. package/Tests/App/Dashboard/TracesResourceFacets.test.tsx +613 -0
  132. package/Tests/App/Dashboard/UseServiceNames.test.tsx +359 -0
  133. package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +7 -0
  134. package/Tests/Models/InventoryItemNaming.test.ts +132 -16
  135. package/Tests/Models/SecurityDomainAccessControl.test.ts +61 -17
  136. package/Tests/Server/API/AIInvestigationAPI.test.ts +611 -2
  137. package/Tests/Server/API/AIInvestigationEvidenceAPI.test.ts +1098 -0
  138. package/Tests/Server/API/GoogleSecOpsConnectionAPI.test.ts +409 -0
  139. package/Tests/Server/API/SecurityEventConnectionAPI.test.ts +856 -0
  140. package/Tests/Server/API/SessionReplayAPI.test.ts +528 -1
  141. package/Tests/Server/API/TelemetryFacetsAPI.test.ts +810 -0
  142. package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +240 -0
  143. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +229 -0
  144. package/Tests/Server/Services/InventoryItemDisplayName.test.ts +66 -0
  145. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +28 -1
  146. package/Tests/Server/Services/SecurityEventConnectionService.test.ts +1233 -0
  147. package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +53 -0
  148. package/Tests/Server/Services/TelemetryResourceFacetCounting.test.ts +218 -0
  149. package/Tests/Server/Services/TelemetryResourceFacetFilters.test.ts +155 -1
  150. package/Tests/Server/Services/TraceAggregationExceptionScope.test.ts +142 -0
  151. package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +85 -24
  152. package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +33 -0
  153. package/Tests/Server/Utils/AI/InvestigationEvidence.test.ts +1395 -0
  154. package/Tests/Server/Utils/AI/InvestigationReferences.test.ts +616 -0
  155. package/Tests/Server/Utils/AI/TimelineTools.test.ts +119 -0
  156. package/Tests/Server/Utils/AI/Toolbox/AIToolbox.test.ts +151 -0
  157. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +65 -0
  158. package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorExceptionScope.test.ts +224 -0
  159. package/Tests/Server/Utils/LoggerCore.test.ts +597 -0
  160. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPerSeriesFanout.test.ts +55 -2
  161. package/Tests/Server/Utils/Monitor/MonitorTemplateUtil.test.ts +1109 -0
  162. package/Tests/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.test.ts +1240 -0
  163. package/Tests/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.test.ts +1853 -0
  164. package/Tests/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.test.ts +1129 -0
  165. package/Tests/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.test.ts +1066 -0
  166. package/Tests/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.test.ts +1568 -0
  167. package/Tests/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.test.ts +930 -0
  168. package/Tests/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.test.ts +1409 -0
  169. package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.test.ts +763 -0
  170. package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.test.ts +1296 -0
  171. package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.test.ts +1102 -0
  172. package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.test.ts +1174 -0
  173. package/Tests/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.test.ts +1032 -0
  174. package/Tests/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.test.ts +1558 -0
  175. package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.test.ts +3041 -0
  176. package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.test.ts +1168 -0
  177. package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.test.ts +906 -0
  178. package/Tests/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.test.ts +1068 -0
  179. package/Tests/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.test.ts +1004 -0
  180. package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.test.ts +784 -0
  181. package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.test.ts +113 -1
  182. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClient.test.ts +5 -1
  183. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsDiagnostics.test.ts +93 -13
  184. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsHttpIntegration.test.ts +23 -1
  185. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +25 -3
  186. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +22 -8
  187. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +82 -16
  188. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsSearchDetections.test.ts +730 -0
  189. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsThreePassPoller.test.ts +1577 -0
  190. package/Tests/Server/Utils/SessionReplay/SessionReplayOriginAllowlist.test.ts +41 -0
  191. package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1453 -18
  192. package/Tests/Server/Utils/Telemetry/EntityRegistry.test.ts +711 -0
  193. package/Tests/Server/Utils/Telemetry/KubernetesResourceAttributes.test.ts +162 -0
  194. package/Tests/Server/Utils/Telemetry/ResourceEntityFilter.test.ts +460 -13
  195. package/Tests/Server/Utils/Telemetry/ResourceFacetPlanner.test.ts +678 -0
  196. package/Tests/Server/Utils/Telemetry/ResourceFacetResolver.test.ts +868 -0
  197. package/Tests/Server/Utils/Telemetry/ServiceDependencyDiscovery.test.ts +525 -0
  198. package/Tests/Server/Utils/Telemetry/TraceContextPropagation.test.ts +420 -0
  199. package/Tests/Types/OnCallDutyPolicy/LayerUtilCorePaths.test.ts +1014 -0
  200. package/Tests/Types/OnCallDutyPolicy/LayerUtilExhaustiveRotation.test.ts +9 -6
  201. package/Tests/Types/Rules/RuleCriteriaFieldRegistry.test.ts +276 -0
  202. package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +73 -0
  203. package/Tests/Types/Rum/SessionReplayTransportContracts.test.ts +95 -0
  204. package/Tests/Types/SecurityEvent/Connectors/ConnectorDiagnostics.test.ts +82 -0
  205. package/Tests/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.test.ts +314 -0
  206. package/Tests/Types/Telemetry/ExceptionSpanScope.test.ts +89 -0
  207. package/Tests/Types/Telemetry/LlmConventions.test.ts +495 -0
  208. package/Tests/Types/Telemetry/ResourceEntityFacet.test.ts +96 -0
  209. package/Tests/Types/Telemetry/ResourceFacetCatalog.test.ts +304 -0
  210. package/Tests/UI/Components/ActiveFilterChipsLockedFilters.test.tsx +357 -0
  211. package/Tests/UI/Components/Card.test.tsx +312 -1
  212. package/Tests/UI/Components/CardModelDetailHeaderLayout.test.tsx +253 -0
  213. package/Tests/UI/Components/CardModelDetailRefresher.test.tsx +342 -0
  214. package/Tests/UI/Components/Checkbox.test.tsx +79 -0
  215. package/Tests/UI/Components/CopyTextButton.test.tsx +142 -0
  216. package/Tests/UI/Components/DetailCompactStyle.test.tsx +621 -0
  217. package/Tests/UI/Components/ErrorBoundary.test.tsx +60 -0
  218. package/Tests/UI/Components/FacetSections.test.tsx +581 -0
  219. package/Tests/UI/Components/FacetSidebarControls.test.tsx +812 -0
  220. package/Tests/UI/Components/FacetVisibility.test.ts +429 -0
  221. package/Tests/UI/Components/LockedFilterActions.test.tsx +396 -0
  222. package/Tests/UI/Components/LockedFilterChip.test.tsx +651 -0
  223. package/Tests/UI/Components/LogsEntityNames.test.ts +1769 -0
  224. package/Tests/UI/Components/LogsEntityNamesComponents.test.tsx +696 -0
  225. package/Tests/UI/Components/LogsFacetSidebarHiddenFacets.test.tsx +600 -0
  226. package/Tests/UI/Components/LogsViewerEntityNames.test.tsx +713 -0
  227. package/Tests/UI/Components/MarkdownInlineReferences.test.tsx +2079 -0
  228. package/Tests/UI/Components/MemberRoleAssignment.test.tsx +446 -0
  229. package/Tests/UI/Components/ModelDetailRefetch.test.tsx +397 -0
  230. package/Tests/UI/Components/ModelListRefetch.test.tsx +233 -0
  231. package/Tests/UI/Components/ModelPageModelChange.test.tsx +409 -0
  232. package/Tests/UI/Components/PaginationIntegration.test.tsx +25 -0
  233. package/Tests/UI/Components/ResourceFacetConfigs.test.ts +172 -0
  234. package/Tests/UI/Components/SavedViewsSidebarIntegration.test.tsx +32 -14
  235. package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +44 -1
  236. package/Tests/UI/Components/TelemetryActiveFilterChipsLockedFilters.test.tsx +304 -0
  237. package/Tests/UI/Components/TelemetryFacetSidebarHiddenFacets.test.tsx +718 -0
  238. package/Tests/UI/Monitor/EvaluationLogList.test.tsx +303 -0
  239. package/Tests/UI/Monitor/MonitorSummarySnapshotRender.test.tsx +55 -1
  240. package/Tests/UI/Rum/FidelityNotices.test.ts +22 -0
  241. package/Tests/UI/Rum/RecordingHealthCard.test.tsx +120 -136
  242. package/Tests/UI/Rum/RecordingHealthDashboard.test.tsx +988 -0
  243. package/Tests/UI/Rum/ReplayCard.test.tsx +32 -0
  244. package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +709 -12
  245. package/Tests/UI/Rum/ReplayHeader.test.tsx +50 -1
  246. package/Tests/UI/Rum/ReplayPinControl.test.tsx +67 -10
  247. package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +41 -12
  248. package/Tests/UI/Rum/ReplayStage.test.tsx +663 -1
  249. package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +173 -0
  250. package/Tests/UI/Rum/ReplayUi.test.tsx +189 -2
  251. package/Tests/UI/Rum/ReplayUserSessionsMenu.test.tsx +91 -0
  252. package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +1 -1
  253. package/Tests/UI/Rum/SessionReplaySettingsPolicyLoading.test.tsx +585 -0
  254. package/Tests/UI/Rum/SessionReplayTable.test.tsx +844 -51
  255. package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +29 -1
  256. package/Tests/UI/Telemetry/TelemetryDetailPanel.test.tsx +288 -0
  257. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +31 -1
  258. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +6 -0
  259. package/Tests/UI/Utils/Clipboard.test.ts +154 -0
  260. package/Tests/UI/Utils/Navigation.test.ts +24 -0
  261. package/Tests/UI/Utils/Telemetry/TelemetryEntityNames.test.ts +2205 -0
  262. package/Tests/UI/Utils/Telemetry/UseTelemetryEntityNames.test.tsx +844 -0
  263. package/Tests/Utils/AI/InvestigationReport.test.ts +2430 -0
  264. package/Tests/Utils/APIOutgoingRequestTracer.test.ts +137 -0
  265. package/Tests/Utils/Rum/SessionReplayHealth.test.ts +884 -0
  266. package/Tests/Utils/Rum/SessionReplayHealthDiagnosis.test.ts +40 -0
  267. package/Tests/Utils/Rum/SessionReplayRecordingEnded.test.ts +619 -0
  268. package/Tests/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.test.ts +631 -0
  269. package/Tests/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.test.ts +479 -0
  270. package/Tests/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.test.ts +507 -0
  271. package/Tests/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.test.ts +686 -0
  272. package/Tests/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.test.ts +474 -0
  273. package/Tests/Utils/SecurityEvent/Connectors/OktaNormalizer.test.ts +736 -0
  274. package/Tests/Utils/SecurityEvent/Connectors/SplunkNormalizer.test.ts +407 -0
  275. package/Tests/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.test.ts +129 -0
  276. package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +57 -1
  277. package/Tests/Utils/Telemetry/EntityRelationship.test.ts +36 -0
  278. package/Tests/Utils/Telemetry/LockedFilterSearch.test.ts +600 -0
  279. package/Tests/Utils/Telemetry/NetworkHost.test.ts +48 -0
  280. package/Tests/Utils/Telemetry/OriginAllowList.test.ts +154 -0
  281. package/Tests/Utils/Traces/CriticalPath.test.ts +25 -0
  282. package/Types/AI/AIChatTypes.ts +8 -0
  283. package/Types/AI/InvestigationEvidence.ts +96 -0
  284. package/Types/Monitor/MonitorEvaluationSummary.ts +5 -0
  285. package/Types/OnCallDutyPolicy/Layer.ts +12 -0
  286. package/Types/Permission.ts +2 -2
  287. package/Types/Rules/RuleCriteriaFieldRegistry.ts +12 -0
  288. package/Types/Rum/SessionReplay.ts +109 -0
  289. package/Types/Rum/SessionReplayApi.ts +31 -0
  290. package/Types/SecurityEvent/Connectors/ConnectorDiagnostics.ts +111 -0
  291. package/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.ts +87 -0
  292. package/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.ts +492 -0
  293. package/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.ts +41 -0
  294. package/Types/SecurityEvent/GoogleSecOpsDiagnostics.ts +56 -1
  295. package/Types/SecurityEvent/GoogleSecOpsRegion.ts +34 -0
  296. package/Types/Telemetry/EntityType.ts +14 -0
  297. package/Types/Telemetry/ExceptionSpanScope.ts +83 -0
  298. package/Types/Telemetry/LockedFilterDetail.ts +46 -0
  299. package/Types/Telemetry/ResourceEntityFacet.ts +17 -10
  300. package/Types/Telemetry/ResourceFacetCatalog.ts +171 -0
  301. package/UI/Components/Card/Card.tsx +118 -83
  302. package/UI/Components/Checkbox/Checkbox.tsx +8 -5
  303. package/UI/Components/CopyTextButton/CopyTextButton.tsx +7 -1
  304. package/UI/Components/CustomFields/CustomFieldsDetail.tsx +4 -1
  305. package/UI/Components/Detail/Detail.tsx +137 -22
  306. package/UI/Components/ErrorBoundary.tsx +38 -0
  307. package/UI/Components/LogsViewer/LogsEntityNames.ts +912 -0
  308. package/UI/Components/LogsViewer/LogsViewer.tsx +156 -77
  309. package/UI/Components/LogsViewer/components/ActiveFilterChips.tsx +28 -11
  310. package/UI/Components/LogsViewer/components/FacetSection.tsx +66 -79
  311. package/UI/Components/LogsViewer/components/FacetValueRow.tsx +17 -2
  312. package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +45 -5
  313. package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +100 -19
  314. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +156 -39
  315. package/UI/Components/LogsViewer/components/LogsTable.tsx +30 -8
  316. package/UI/Components/LogsViewer/types.ts +6 -0
  317. package/UI/Components/Markdown.tsx/InlineReferences.tsx +628 -0
  318. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +385 -312
  319. package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +50 -22
  320. package/UI/Components/ModelDetail/CardModelDetail.tsx +15 -0
  321. package/UI/Components/ModelDetail/ModelDetail.tsx +64 -19
  322. package/UI/Components/ModelList/ModelList.tsx +33 -8
  323. package/UI/Components/Page/ModelPage.tsx +119 -54
  324. package/UI/Components/Table/Table.tsx +8 -0
  325. package/UI/Components/Table/TableRow.tsx +13 -5
  326. package/UI/Components/TelemetryViewer/FacetVisibility.ts +229 -0
  327. package/UI/Components/TelemetryViewer/ResourceFacetConfigs.ts +46 -0
  328. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +11 -0
  329. package/UI/Components/TelemetryViewer/components/FacetSearchInput.tsx +79 -0
  330. package/UI/Components/TelemetryViewer/components/FacetSectionHeader.tsx +69 -0
  331. package/UI/Components/TelemetryViewer/components/FacetShowMoreButton.tsx +36 -0
  332. package/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.tsx +88 -0
  333. package/UI/Components/TelemetryViewer/components/LockedFilterActions.tsx +205 -0
  334. package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +496 -0
  335. package/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.tsx +30 -10
  336. package/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.tsx +203 -10
  337. package/UI/Components/TelemetryViewer/components/TelemetryFacetSection.tsx +60 -73
  338. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +94 -7
  339. package/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.tsx +17 -2
  340. package/UI/Components/TelemetryViewer/types.ts +19 -0
  341. package/UI/Components/TelemetryViewer/useFacetSearchExemptions.ts +158 -0
  342. package/UI/Components/TelemetryViewer/useFacetSectionSearch.ts +102 -0
  343. package/UI/Utils/Clipboard.ts +68 -2
  344. package/UI/Utils/Navigation.ts +17 -2
  345. package/UI/Utils/Telemetry/TelemetryEntityNames.ts +620 -0
  346. package/UI/Utils/Telemetry/UseTelemetryEntityNames.ts +151 -0
  347. package/Utils/AI/InvestigationReport.ts +1789 -0
  348. package/Utils/API.ts +90 -1
  349. package/Utils/Rum/SessionReplayHealth.ts +11 -0
  350. package/Utils/Rum/SessionReplayRecordingEnded.ts +134 -0
  351. package/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.ts +427 -0
  352. package/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.ts +197 -0
  353. package/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.ts +464 -0
  354. package/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.ts +567 -0
  355. package/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.ts +299 -0
  356. package/Utils/SecurityEvent/Connectors/OktaNormalizer.ts +467 -0
  357. package/Utils/SecurityEvent/Connectors/SplunkNormalizer.ts +439 -0
  358. package/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.ts +124 -12
  359. package/Utils/Telemetry/CrossSignalScope.ts +22 -8
  360. package/Utils/Telemetry/EntityRelationship.ts +8 -0
  361. package/Utils/Telemetry/LockedFilterSearch.ts +412 -0
  362. package/Utils/Telemetry/NetworkHost.ts +43 -0
  363. package/Utils/Telemetry/OriginAllowList.ts +139 -4
  364. package/Utils/Traces/CriticalPath.ts +10 -4
  365. package/build/dist/Models/DatabaseModels/Index.js +4 -0
  366. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  367. package/build/dist/Models/DatabaseModels/RumApplication.js +1 -1
  368. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  369. package/build/dist/Models/DatabaseModels/SecurityEventConnection.js +490 -0
  370. package/build/dist/Models/DatabaseModels/SecurityEventConnection.js.map +1 -0
  371. package/build/dist/Models/DatabaseModels/SecurityEventConnectionRun.js +287 -0
  372. package/build/dist/Models/DatabaseModels/SecurityEventConnectionRun.js.map +1 -0
  373. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +2 -2
  374. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +1 -1
  375. package/build/dist/Server/API/AIInvestigationAPI.js +336 -27
  376. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  377. package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js +182 -7
  378. package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js.map +1 -1
  379. package/build/dist/Server/API/SecurityEventConnectionAPI.js +171 -0
  380. package/build/dist/Server/API/SecurityEventConnectionAPI.js.map +1 -0
  381. package/build/dist/Server/API/TelemetryAPI.js +248 -170
  382. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  383. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.js +40 -0
  384. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.js.map +1 -0
  385. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  386. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  387. package/build/dist/Server/Middleware/TelemetryIngest.js +57 -4
  388. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  389. package/build/dist/Server/Services/ExceptionAggregationService.js +7 -16
  390. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  391. package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +8 -0
  392. package/build/dist/Server/Services/GoogleSecOpsConnectionService.js.map +1 -1
  393. package/build/dist/Server/Services/Index.js +4 -0
  394. package/build/dist/Server/Services/Index.js.map +1 -1
  395. package/build/dist/Server/Services/InventoryItemService.js +22 -0
  396. package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
  397. package/build/dist/Server/Services/LogAggregationService.js +8 -17
  398. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  399. package/build/dist/Server/Services/MetricAggregationService.js +4 -14
  400. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  401. package/build/dist/Server/Services/SecurityEventConnectionRunService.js +9 -0
  402. package/build/dist/Server/Services/SecurityEventConnectionRunService.js.map +1 -0
  403. package/build/dist/Server/Services/SecurityEventConnectionService.js +356 -0
  404. package/build/dist/Server/Services/SecurityEventConnectionService.js.map +1 -0
  405. package/build/dist/Server/Services/TraceAggregationService.js +51 -25
  406. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  407. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +9 -0
  408. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
  409. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +3 -0
  410. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  411. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +14 -7
  412. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  413. package/build/dist/Server/Utils/AI/SRE/InvestigationEvidence.js +468 -0
  414. package/build/dist/Server/Utils/AI/SRE/InvestigationEvidence.js.map +1 -0
  415. package/build/dist/Server/Utils/AI/SRE/InvestigationReferences.js +230 -0
  416. package/build/dist/Server/Utils/AI/SRE/InvestigationReferences.js.map +1 -0
  417. package/build/dist/Server/Utils/AI/Toolbox/Index.js +32 -0
  418. package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
  419. package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js +6 -2
  420. package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js.map +1 -1
  421. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +59 -0
  422. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  423. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +5 -3
  424. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  425. package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.js +752 -0
  426. package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.js.map +1 -0
  427. package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.js +493 -0
  428. package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.js.map +1 -0
  429. package/build/dist/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.js +352 -0
  430. package/build/dist/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.js.map +1 -0
  431. package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.js +405 -0
  432. package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.js.map +1 -0
  433. package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.js +466 -0
  434. package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.js.map +1 -0
  435. package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.js +344 -0
  436. package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.js.map +1 -0
  437. package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.js +511 -0
  438. package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.js.map +1 -0
  439. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.js +406 -0
  440. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.js.map +1 -0
  441. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.js +336 -0
  442. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.js.map +1 -0
  443. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.js +474 -0
  444. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.js.map +1 -0
  445. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.js +417 -0
  446. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.js.map +1 -0
  447. package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.js +314 -0
  448. package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.js.map +1 -0
  449. package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.js +494 -0
  450. package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.js.map +1 -0
  451. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.js +719 -0
  452. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.js.map +1 -0
  453. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.js +404 -0
  454. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.js.map +1 -0
  455. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.js +209 -0
  456. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.js.map +1 -0
  457. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.js +40 -0
  458. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.js.map +1 -0
  459. package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.js +494 -0
  460. package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.js.map +1 -0
  461. package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.js +379 -0
  462. package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.js.map +1 -0
  463. package/build/dist/Server/Utils/SecurityEvent/Connectors/Types.js +27 -0
  464. package/build/dist/Server/Utils/SecurityEvent/Connectors/Types.js.map +1 -0
  465. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js +234 -61
  466. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +1 -1
  467. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.js +537 -0
  468. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.js.map +1 -0
  469. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +572 -115
  470. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
  471. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js +35 -1
  472. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js.map +1 -1
  473. package/build/dist/Server/Utils/SecurityEvent/SecurityEventDedupe.js +52 -0
  474. package/build/dist/Server/Utils/SecurityEvent/SecurityEventDedupe.js.map +1 -0
  475. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +521 -32
  476. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
  477. package/build/dist/Server/Utils/StartServer.js +10 -0
  478. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  479. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +8 -0
  480. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  481. package/build/dist/Server/Utils/Telemetry/KubernetesResourceAttributes.js +80 -0
  482. package/build/dist/Server/Utils/Telemetry/KubernetesResourceAttributes.js.map +1 -0
  483. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +122 -67
  484. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
  485. package/build/dist/Server/Utils/Telemetry/ResourceFacetPlanner.js +146 -0
  486. package/build/dist/Server/Utils/Telemetry/ResourceFacetPlanner.js.map +1 -0
  487. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +174 -248
  488. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
  489. package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js +492 -0
  490. package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js.map +1 -0
  491. package/build/dist/Server/Utils/Telemetry/TraceContextPropagation.js +259 -0
  492. package/build/dist/Server/Utils/Telemetry/TraceContextPropagation.js.map +1 -0
  493. package/build/dist/Server/Utils/Telemetry.js +11 -5
  494. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  495. package/build/dist/Types/AI/InvestigationEvidence.js +2 -0
  496. package/build/dist/Types/AI/InvestigationEvidence.js.map +1 -0
  497. package/build/dist/Types/OnCallDutyPolicy/Layer.js +11 -0
  498. package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
  499. package/build/dist/Types/Permission.js +2 -2
  500. package/build/dist/Types/Permission.js.map +1 -1
  501. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +9 -0
  502. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
  503. package/build/dist/Types/Rum/SessionReplay.js +95 -0
  504. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  505. package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -1
  506. package/build/dist/Types/SecurityEvent/Connectors/ConnectorDiagnostics.js +18 -0
  507. package/build/dist/Types/SecurityEvent/Connectors/ConnectorDiagnostics.js.map +1 -0
  508. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.js +2 -0
  509. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.js.map +1 -0
  510. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js +374 -0
  511. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js.map +1 -0
  512. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.js +35 -0
  513. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.js.map +1 -0
  514. package/build/dist/Types/SecurityEvent/GoogleSecOpsRegion.js +35 -0
  515. package/build/dist/Types/SecurityEvent/GoogleSecOpsRegion.js.map +1 -0
  516. package/build/dist/Types/Telemetry/EntityType.js +14 -0
  517. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  518. package/build/dist/Types/Telemetry/ExceptionSpanScope.js +59 -0
  519. package/build/dist/Types/Telemetry/ExceptionSpanScope.js.map +1 -0
  520. package/build/dist/Types/Telemetry/LockedFilterDetail.js +16 -0
  521. package/build/dist/Types/Telemetry/LockedFilterDetail.js.map +1 -0
  522. package/build/dist/Types/Telemetry/ResourceEntityFacet.js +16 -10
  523. package/build/dist/Types/Telemetry/ResourceEntityFacet.js.map +1 -1
  524. package/build/dist/Types/Telemetry/ResourceFacetCatalog.js +119 -0
  525. package/build/dist/Types/Telemetry/ResourceFacetCatalog.js.map +1 -0
  526. package/build/dist/UI/Components/Card/Card.js +34 -17
  527. package/build/dist/UI/Components/Card/Card.js.map +1 -1
  528. package/build/dist/UI/Components/Checkbox/Checkbox.js +6 -4
  529. package/build/dist/UI/Components/Checkbox/Checkbox.js.map +1 -1
  530. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -1
  531. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
  532. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +1 -1
  533. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
  534. package/build/dist/UI/Components/Detail/Detail.js +63 -13
  535. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  536. package/build/dist/UI/Components/ErrorBoundary.js +34 -0
  537. package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
  538. package/build/dist/UI/Components/LogsViewer/LogsEntityNames.js +535 -0
  539. package/build/dist/UI/Components/LogsViewer/LogsEntityNames.js.map +1 -0
  540. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +117 -57
  541. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  542. package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js +5 -7
  543. package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js.map +1 -1
  544. package/build/dist/UI/Components/LogsViewer/components/FacetSection.js +31 -44
  545. package/build/dist/UI/Components/LogsViewer/components/FacetSection.js.map +1 -1
  546. package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js +17 -3
  547. package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js.map +1 -1
  548. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +19 -3
  549. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
  550. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +64 -18
  551. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
  552. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +100 -41
  553. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  554. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +13 -5
  555. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
  556. package/build/dist/UI/Components/LogsViewer/types.js.map +1 -1
  557. package/build/dist/UI/Components/Markdown.tsx/InlineReferences.js +403 -0
  558. package/build/dist/UI/Components/Markdown.tsx/InlineReferences.js.map +1 -0
  559. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +197 -179
  560. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  561. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +30 -21
  562. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
  563. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +12 -0
  564. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
  565. package/build/dist/UI/Components/ModelDetail/ModelDetail.js +46 -12
  566. package/build/dist/UI/Components/ModelDetail/ModelDetail.js.map +1 -1
  567. package/build/dist/UI/Components/ModelList/ModelList.js +26 -7
  568. package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
  569. package/build/dist/UI/Components/Page/ModelPage.js +62 -34
  570. package/build/dist/UI/Components/Page/ModelPage.js.map +1 -1
  571. package/build/dist/UI/Components/Table/Table.js +3 -1
  572. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  573. package/build/dist/UI/Components/Table/TableRow.js +8 -1
  574. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  575. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +111 -0
  576. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -0
  577. package/build/dist/UI/Components/TelemetryViewer/ResourceFacetConfigs.js +22 -0
  578. package/build/dist/UI/Components/TelemetryViewer/ResourceFacetConfigs.js.map +1 -0
  579. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +1 -1
  580. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  581. package/build/dist/UI/Components/TelemetryViewer/components/FacetSearchInput.js +36 -0
  582. package/build/dist/UI/Components/TelemetryViewer/components/FacetSearchInput.js.map +1 -0
  583. package/build/dist/UI/Components/TelemetryViewer/components/FacetSectionHeader.js +21 -0
  584. package/build/dist/UI/Components/TelemetryViewer/components/FacetSectionHeader.js.map +1 -0
  585. package/build/dist/UI/Components/TelemetryViewer/components/FacetShowMoreButton.js +14 -0
  586. package/build/dist/UI/Components/TelemetryViewer/components/FacetShowMoreButton.js.map +1 -0
  587. package/build/dist/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.js +27 -0
  588. package/build/dist/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.js.map +1 -0
  589. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterActions.js +88 -0
  590. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterActions.js.map +1 -0
  591. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +228 -0
  592. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -0
  593. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js +6 -6
  594. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js.map +1 -1
  595. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js +111 -12
  596. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js.map +1 -1
  597. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSection.js +27 -40
  598. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSection.js.map +1 -1
  599. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +70 -10
  600. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  601. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js +17 -3
  602. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js.map +1 -1
  603. package/build/dist/UI/Components/TelemetryViewer/types.js +0 -4
  604. package/build/dist/UI/Components/TelemetryViewer/types.js.map +1 -1
  605. package/build/dist/UI/Components/TelemetryViewer/useFacetSearchExemptions.js +70 -0
  606. package/build/dist/UI/Components/TelemetryViewer/useFacetSearchExemptions.js.map +1 -0
  607. package/build/dist/UI/Components/TelemetryViewer/useFacetSectionSearch.js +52 -0
  608. package/build/dist/UI/Components/TelemetryViewer/useFacetSectionSearch.js.map +1 -0
  609. package/build/dist/UI/Utils/Clipboard.js +59 -2
  610. package/build/dist/UI/Utils/Clipboard.js.map +1 -1
  611. package/build/dist/UI/Utils/Navigation.js +11 -2
  612. package/build/dist/UI/Utils/Navigation.js.map +1 -1
  613. package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js +471 -0
  614. package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js.map +1 -0
  615. package/build/dist/UI/Utils/Telemetry/UseTelemetryEntityNames.js +113 -0
  616. package/build/dist/UI/Utils/Telemetry/UseTelemetryEntityNames.js.map +1 -0
  617. package/build/dist/Utils/AI/InvestigationReport.js +1241 -0
  618. package/build/dist/Utils/AI/InvestigationReport.js.map +1 -0
  619. package/build/dist/Utils/API.js +25 -0
  620. package/build/dist/Utils/API.js.map +1 -1
  621. package/build/dist/Utils/Rum/SessionReplayHealth.js +10 -0
  622. package/build/dist/Utils/Rum/SessionReplayHealth.js.map +1 -1
  623. package/build/dist/Utils/Rum/SessionReplayRecordingEnded.js +54 -0
  624. package/build/dist/Utils/Rum/SessionReplayRecordingEnded.js.map +1 -0
  625. package/build/dist/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.js +311 -0
  626. package/build/dist/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.js.map +1 -0
  627. package/build/dist/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.js +150 -0
  628. package/build/dist/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.js.map +1 -0
  629. package/build/dist/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.js +328 -0
  630. package/build/dist/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.js.map +1 -0
  631. package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.js +405 -0
  632. package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.js.map +1 -0
  633. package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.js +212 -0
  634. package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.js.map +1 -0
  635. package/build/dist/Utils/SecurityEvent/Connectors/OktaNormalizer.js +351 -0
  636. package/build/dist/Utils/SecurityEvent/Connectors/OktaNormalizer.js.map +1 -0
  637. package/build/dist/Utils/SecurityEvent/Connectors/SplunkNormalizer.js +348 -0
  638. package/build/dist/Utils/SecurityEvent/Connectors/SplunkNormalizer.js.map +1 -0
  639. package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js +103 -10
  640. package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js.map +1 -1
  641. package/build/dist/Utils/Telemetry/CrossSignalScope.js +16 -5
  642. package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
  643. package/build/dist/Utils/Telemetry/EntityRelationship.js +7 -0
  644. package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
  645. package/build/dist/Utils/Telemetry/LockedFilterSearch.js +277 -0
  646. package/build/dist/Utils/Telemetry/LockedFilterSearch.js.map +1 -0
  647. package/build/dist/Utils/Telemetry/NetworkHost.js +39 -0
  648. package/build/dist/Utils/Telemetry/NetworkHost.js.map +1 -0
  649. package/build/dist/Utils/Telemetry/OriginAllowList.js +105 -4
  650. package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -1
  651. package/build/dist/Utils/Traces/CriticalPath.js +9 -4
  652. package/build/dist/Utils/Traces/CriticalPath.js.map +1 -1
  653. package/package.json +1 -1
  654. package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +0 -600
  655. package/UI/Components/GanttChart/Bar/BarLabel.tsx +0 -17
  656. package/UI/Components/GanttChart/Bar/Index.tsx +0 -149
  657. package/UI/Components/GanttChart/ChartContainer.tsx +0 -50
  658. package/UI/Components/GanttChart/Index.tsx +0 -90
  659. package/UI/Components/GanttChart/Row/Index.tsx +0 -22
  660. package/UI/Components/GanttChart/Row/Row.tsx +0 -231
  661. package/UI/Components/GanttChart/Row/RowLabel.tsx +0 -30
  662. package/UI/Components/GanttChart/Rows.tsx +0 -59
  663. package/UI/Components/GanttChart/Timeline/Index.tsx +0 -46
  664. package/UI/Components/GanttChart/Timeline/TimelineInterval.tsx +0 -33
  665. package/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.tsx +0 -43
  666. package/build/dist/UI/Components/GanttChart/Bar/BarLabel.js +0 -8
  667. package/build/dist/UI/Components/GanttChart/Bar/BarLabel.js.map +0 -1
  668. package/build/dist/UI/Components/GanttChart/Bar/Index.js +0 -77
  669. package/build/dist/UI/Components/GanttChart/Bar/Index.js.map +0 -1
  670. package/build/dist/UI/Components/GanttChart/ChartContainer.js +0 -33
  671. package/build/dist/UI/Components/GanttChart/ChartContainer.js.map +0 -1
  672. package/build/dist/UI/Components/GanttChart/Index.js +0 -39
  673. package/build/dist/UI/Components/GanttChart/Index.js.map +0 -1
  674. package/build/dist/UI/Components/GanttChart/Row/Index.js +0 -7
  675. package/build/dist/UI/Components/GanttChart/Row/Index.js.map +0 -1
  676. package/build/dist/UI/Components/GanttChart/Row/Row.js +0 -106
  677. package/build/dist/UI/Components/GanttChart/Row/Row.js.map +0 -1
  678. package/build/dist/UI/Components/GanttChart/Row/RowLabel.js +0 -10
  679. package/build/dist/UI/Components/GanttChart/Row/RowLabel.js.map +0 -1
  680. package/build/dist/UI/Components/GanttChart/Rows.js +0 -19
  681. package/build/dist/UI/Components/GanttChart/Rows.js.map +0 -1
  682. package/build/dist/UI/Components/GanttChart/Timeline/Index.js +0 -16
  683. package/build/dist/UI/Components/GanttChart/Timeline/Index.js.map +0 -1
  684. package/build/dist/UI/Components/GanttChart/Timeline/TimelineInterval.js +0 -13
  685. package/build/dist/UI/Components/GanttChart/Timeline/TimelineInterval.js.map +0 -1
  686. package/build/dist/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.js +0 -13
  687. package/build/dist/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.js.map +0 -1
@@ -23,6 +23,12 @@ const FacetValueRow: FunctionComponent<FacetValueRowProps> = (
23
23
 
24
24
  const displayLabel: string = props.displayValue || props.value || "(empty)";
25
25
  const isActive: boolean = props.isActive || false;
26
+ /*
27
+ * Resource facets list every resource in the project, including ones with
28
+ * no telemetry in the range (count 0). Muting those lets the rows that do
29
+ * have data stand out without dropping the rest from the list.
30
+ */
31
+ const isZeroCount: boolean = props.count === 0 && !isActive;
26
32
 
27
33
  return (
28
34
  <div className="group flex items-center gap-2 py-0.5">
@@ -54,7 +60,11 @@ const FacetValueRow: FunctionComponent<FacetValueRowProps> = (
54
60
  )}
55
61
  <span
56
62
  className={`min-w-0 truncate text-[12px] ${
57
- isActive ? "font-medium text-indigo-700" : "text-gray-700"
63
+ isActive
64
+ ? "font-medium text-indigo-700"
65
+ : isZeroCount
66
+ ? "text-gray-400"
67
+ : "text-gray-700"
58
68
  }`}
59
69
  >
60
70
  {displayLabel}
@@ -77,7 +87,11 @@ const FacetValueRow: FunctionComponent<FacetValueRowProps> = (
77
87
  </div>
78
88
  <span
79
89
  className={`min-w-[2rem] text-right font-mono text-[10px] tabular-nums ${
80
- isActive ? "font-medium text-indigo-600" : "text-gray-400"
90
+ isActive
91
+ ? "font-medium text-indigo-600"
92
+ : isZeroCount
93
+ ? "text-gray-300"
94
+ : "text-gray-400"
81
95
  }`}
82
96
  >
83
97
  {props.count.toLocaleString()}
@@ -92,6 +106,7 @@ const FacetValueRow: FunctionComponent<FacetValueRowProps> = (
92
106
  props.onExclude(props.value);
93
107
  }}
94
108
  title={`Exclude ${displayLabel}`}
109
+ aria-label={`Exclude ${displayLabel}`}
95
110
  >
96
111
  -
97
112
  </button>
@@ -31,6 +31,15 @@ import { APP_API_URL } from "../../../Config";
31
31
  import HTTPResponse from "../../../../Types/API/HTTPResponse";
32
32
  import HTTPErrorResponse from "../../../../Types/API/HTTPErrorResponse";
33
33
  import ObjectID from "../../../../Types/ObjectID";
34
+ import {
35
+ DEFAULT_TELEMETRY_ENTITY_LABEL,
36
+ TelemetryEntityNameMap,
37
+ } from "../../../Utils/Telemetry/TelemetryEntityNames";
38
+ import {
39
+ getLogEntityDisplay,
40
+ LogEntityDisplay,
41
+ LogsResourceEntityMaps,
42
+ } from "../LogsEntityNames";
34
43
 
35
44
  type LogDetailTab = "details" | "context";
36
45
 
@@ -39,6 +48,17 @@ export type LogContextScope = "nearby" | "trace";
39
48
  export interface LogDetailsPanelProps {
40
49
  log: Log;
41
50
  serviceMap: Dictionary<Service>;
51
+ /*
52
+ * Names for primaryEntityIds serviceMap does not hold (RUM application,
53
+ * host, …) so the header names the entity instead of printing its id.
54
+ */
55
+ entityNameMap?: TelemetryEntityNameMap | undefined;
56
+ /*
57
+ * Preloaded host / Docker host / Podman host / Kubernetes cluster maps.
58
+ * Agent-ingested telemetry is primary-keyed on those rows, and such ids
59
+ * are named from these maps rather than sent to the resolver.
60
+ */
61
+ resourceEntityMaps?: LogsResourceEntityMaps | undefined;
42
62
  onClose?: () => void;
43
63
  getTraceRoute?:
44
64
  | ((traceId: string, log: Log) => Route | URL | undefined)
@@ -231,11 +251,23 @@ const LogDetailsPanel: FunctionComponent<LogDetailsPanelProps> = (
231
251
 
232
252
  const variant: "floating" | "embedded" = props.variant || "floating";
233
253
  const primaryEntityId: string = props.log.primaryEntityId?.toString() || "";
234
- const service: Service | undefined = props.serviceMap[primaryEntityId];
235
- const serviceName: string =
236
- service?.name || primaryEntityId || "Unknown service";
237
- const serviceColor: string =
238
- (service?.serviceColor && service?.serviceColor.toString()) || "#64748b";
254
+ const entityDisplay: LogEntityDisplay = getLogEntityDisplay({
255
+ primaryEntityId,
256
+ serviceMap: props.serviceMap,
257
+ resourceMaps: props.resourceEntityMaps,
258
+ entityNameMap: props.entityNameMap,
259
+ });
260
+ const serviceName: string = entityDisplay.name || "Unknown service";
261
+ const serviceColor: string = entityDisplay.color || "#64748b";
262
+ /*
263
+ * "Service" is what the header has always implied; only a different kind
264
+ * of entity (a RUM application, a host) earns an explicit type badge.
265
+ */
266
+ const entityTypeBadge: string | undefined =
267
+ entityDisplay.typeLabel &&
268
+ entityDisplay.typeLabel !== DEFAULT_TELEMETRY_ENTITY_LABEL
269
+ ? entityDisplay.typeLabel
270
+ : undefined;
239
271
 
240
272
  const bodyDetails: PreparedBody = useMemo(() => {
241
273
  return prepareBody(props.log.body?.toString());
@@ -626,6 +658,14 @@ const LogDetailsPanel: FunctionComponent<LogDetailsPanelProps> = (
626
658
  <SeverityBadge severity={props.log.severityText} />
627
659
  </div>
628
660
  <div className="flex flex-wrap items-center gap-2">
661
+ {entityTypeBadge && (
662
+ <span
663
+ className={smallBadgeClass}
664
+ data-testid="log-details-entity-type"
665
+ >
666
+ {entityTypeBadge}
667
+ </span>
668
+ )}
629
669
  {props.log.time && (
630
670
  <span className={smallBadgeClass}>
631
671
  <Icon icon={IconProp.Clock} className="h-3 w-3" />
@@ -35,6 +35,15 @@ import { APP_API_URL } from "../../../Config";
35
35
  import ModelAPI from "../../../Utils/ModelAPI/ModelAPI";
36
36
  import ComponentLoader from "../../ComponentLoader/ComponentLoader";
37
37
  import OneUptimeDate from "../../../../Types/Date";
38
+ import useTelemetryEntityNames from "../../../Utils/Telemetry/UseTelemetryEntityNames";
39
+ import { TelemetryEntityNameMap } from "../../../Utils/Telemetry/TelemetryEntityNames";
40
+ import {
41
+ collectAnalyticsEntityIds,
42
+ getAnalyticsDimensionLabel,
43
+ getAnalyticsGroupValueLabel,
44
+ getAnalyticsSeriesLabel,
45
+ LogsEntityResolutionRequest,
46
+ } from "../LogsEntityNames";
38
47
 
39
48
  type AnalyticsChartType = "timeseries" | "toplist" | "table";
40
49
  type AnalyticsAggregation = "count" | "unique";
@@ -107,12 +116,22 @@ interface PivotedTimeseriesRow {
107
116
  [key: string]: number | string;
108
117
  }
109
118
 
110
- function pivotTimeseriesData(rows: Array<AnalyticsTimeseriesRow>): {
119
+ /*
120
+ * Series keys stay the raw joined group values (ids for an entity
121
+ * dimension) so two entities that share a name remain two series;
122
+ * `seriesLabels` carries what the legend and tooltip print for each key.
123
+ */
124
+ export function pivotTimeseriesData(
125
+ rows: Array<AnalyticsTimeseriesRow>,
126
+ entityNameMap?: TelemetryEntityNameMap | undefined,
127
+ ): {
111
128
  pivotedData: Array<PivotedTimeseriesRow>;
112
129
  seriesKeys: Array<string>;
130
+ seriesLabels: Record<string, string>;
113
131
  } {
114
132
  const map: Map<string, PivotedTimeseriesRow> = new Map();
115
133
  const seriesKeysSet: Set<string> = new Set();
134
+ const seriesLabels: Record<string, string> = {};
116
135
 
117
136
  for (const row of rows) {
118
137
  let pivotRow: PivotedTimeseriesRow | undefined = map.get(row.time);
@@ -122,15 +141,20 @@ function pivotTimeseriesData(rows: Array<AnalyticsTimeseriesRow>): {
122
141
  map.set(row.time, pivotRow);
123
142
  }
124
143
 
125
- const groupKey: string =
126
- Object.values(row.groupValues).join(" / ") || "count";
144
+ const groupValues: Record<string, string> = row.groupValues || {};
145
+ const groupKey: string = Object.values(groupValues).join(" / ") || "count";
127
146
  seriesKeysSet.add(groupKey);
147
+ if (seriesLabels[groupKey] === undefined) {
148
+ seriesLabels[groupKey] =
149
+ getAnalyticsSeriesLabel(groupValues, entityNameMap) || groupKey;
150
+ }
128
151
  pivotRow[groupKey] = ((pivotRow[groupKey] as number) || 0) + row.count;
129
152
  }
130
153
 
131
154
  return {
132
155
  pivotedData: Array.from(map.values()),
133
156
  seriesKeys: Array.from(seriesKeysSet),
157
+ seriesLabels,
134
158
  };
135
159
  }
136
160
 
@@ -205,6 +229,8 @@ function computeDefaultBucketSize(startTime: Date, endTime: Date): number {
205
229
  interface AnalyticsTooltipProps {
206
230
  active?: boolean;
207
231
  label?: string;
232
+ // Series key -> printed label (entity names instead of ids).
233
+ seriesLabels?: Record<string, string> | undefined;
208
234
  payload?: Array<{
209
235
  dataKey: string;
210
236
  value: number;
@@ -266,7 +292,9 @@ const AnalyticsTooltip: FunctionComponent<AnalyticsTooltipProps> = (
266
292
  className="inline-block h-2.5 w-2.5 rounded-[3px]"
267
293
  style={{ backgroundColor: entry.color }}
268
294
  />
269
- <span className="text-xs text-gray-600">{entry.key}</span>
295
+ <span className="text-xs text-gray-600">
296
+ {props.seriesLabels?.[entry.key] || entry.key}
297
+ </span>
270
298
  </div>
271
299
  <span className="font-mono text-xs font-semibold tabular-nums text-gray-800">
272
300
  {entry.value.toLocaleString()}
@@ -304,6 +332,14 @@ const LogsAnalyticsView: FunctionComponent<LogsAnalyticsViewProps> = (
304
332
  >([]);
305
333
  const [topListData, setTopListData] = useState<Array<AnalyticsTopItem>>([]);
306
334
  const [tableData, setTableData] = useState<Array<AnalyticsTableRow>>([]);
335
+ /*
336
+ * The group-by the data on screen was fetched with. The picker can move
337
+ * ahead of the data while a refetch is in flight, and labels must follow
338
+ * the data (a top list row's value belongs to this dimension).
339
+ */
340
+ const [resultGroupByFields, setResultGroupByFields] = useState<Array<string>>(
341
+ [],
342
+ );
307
343
 
308
344
  const allDimensionOptions: Array<{ value: string; label: string }> =
309
345
  useMemo(() => {
@@ -340,15 +376,17 @@ const LogsAnalyticsView: FunctionComponent<LogsAnalyticsViewProps> = (
340
376
  bucketSizeInMinutes: computeDefaultBucketSize(startTime, endTime),
341
377
  } as JSONObject;
342
378
 
343
- if (
379
+ const requestGroupBy: Array<string> =
344
380
  groupByFields.length > 0 &&
345
381
  groupByFields[0] &&
346
382
  groupByFields[0].length > 0
347
- ) {
348
- (requestData as Record<string, unknown>)["groupBy"] =
349
- groupByFields.filter((f: string) => {
350
- return f.length > 0;
351
- });
383
+ ? groupByFields.filter((f: string) => {
384
+ return f.length > 0;
385
+ })
386
+ : [];
387
+
388
+ if (requestGroupBy.length > 0) {
389
+ (requestData as Record<string, unknown>)["groupBy"] = requestGroupBy;
352
390
  }
353
391
 
354
392
  if (aggregation === "unique" && aggregationField) {
@@ -437,6 +475,8 @@ const LogsAnalyticsView: FunctionComponent<LogsAnalyticsViewProps> = (
437
475
 
438
476
  const data: unknown = response.data["data"] || [];
439
477
 
478
+ setResultGroupByFields(requestGroupBy);
479
+
440
480
  if (chartType === "timeseries") {
441
481
  setTimeseriesData(data as Array<AnalyticsTimeseriesRow>);
442
482
  } else if (chartType === "toplist") {
@@ -468,9 +508,34 @@ const LogsAnalyticsView: FunctionComponent<LogsAnalyticsViewProps> = (
468
508
  void fetchAnalytics();
469
509
  }, [fetchAnalytics]);
470
510
 
471
- const { pivotedData, seriesKeys } = useMemo(() => {
472
- return pivotTimeseriesData(timeseriesData);
473
- }, [timeseriesData]);
511
+ /*
512
+ * Group values of an entity dimension (primaryEntityId, hostId, …) are
513
+ * ids — for a RUM application's logs the RumApplication id. One resolver
514
+ * request names every id the current result shows. Grouped rows are read
515
+ * by their own groupValues keys, not resultGroupByFields: after a chart
516
+ * type switch the rows on screen may predate the last fetch's group-by.
517
+ */
518
+ const entityResolutionRequest: LogsEntityResolutionRequest = useMemo(() => {
519
+ return collectAnalyticsEntityIds({
520
+ groupByFields: resultGroupByFields,
521
+ groupedRows:
522
+ chartType === "timeseries"
523
+ ? timeseriesData
524
+ : chartType === "table"
525
+ ? tableData
526
+ : [],
527
+ topListItems: chartType === "toplist" ? topListData : [],
528
+ });
529
+ }, [resultGroupByFields, chartType, timeseriesData, tableData, topListData]);
530
+
531
+ const entityNameMap: TelemetryEntityNameMap = useTelemetryEntityNames(
532
+ entityResolutionRequest.ids,
533
+ { typeHints: entityResolutionRequest.typeHints },
534
+ );
535
+
536
+ const { pivotedData, seriesKeys, seriesLabels } = useMemo(() => {
537
+ return pivotTimeseriesData(timeseriesData, entityNameMap);
538
+ }, [timeseriesData, entityNameMap]);
474
539
 
475
540
  const renderSelectControl: (
476
541
  label: string,
@@ -633,7 +698,9 @@ const LogsAnalyticsView: FunctionComponent<LogsAnalyticsViewProps> = (
633
698
  backgroundColor: CHART_COLORS[index % CHART_COLORS.length],
634
699
  }}
635
700
  />
636
- <span className="text-[11px] text-gray-500">{key}</span>
701
+ <span className="text-[11px] text-gray-500">
702
+ {seriesLabels[key] || key}
703
+ </span>
637
704
  </div>
638
705
  );
639
706
  })}
@@ -708,7 +775,7 @@ const LogsAnalyticsView: FunctionComponent<LogsAnalyticsViewProps> = (
708
775
  tickFormatter={formatYAxisTick}
709
776
  />
710
777
  <Tooltip
711
- content={<AnalyticsTooltip />}
778
+ content={<AnalyticsTooltip seriesLabels={seriesLabels} />}
712
779
  cursor={{
713
780
  stroke: "var(--ou-accent-muted, #c7d2fe)",
714
781
  strokeWidth: 1,
@@ -767,7 +834,7 @@ const LogsAnalyticsView: FunctionComponent<LogsAnalyticsViewProps> = (
767
834
  tickFormatter={formatYAxisTick}
768
835
  />
769
836
  <Tooltip
770
- content={<AnalyticsTooltip />}
837
+ content={<AnalyticsTooltip seriesLabels={seriesLabels} />}
771
838
  cursor={{ fill: "rgba(99,102,241,0.04)" }}
772
839
  />
773
840
  {seriesKeys.map((key: string, index: number) => {
@@ -840,7 +907,11 @@ const LogsAnalyticsView: FunctionComponent<LogsAnalyticsViewProps> = (
840
907
  style={{ backgroundColor: color }}
841
908
  />
842
909
  <div className="w-44 min-w-0 truncate text-sm font-medium text-gray-700">
843
- {item.value || "(empty)"}
910
+ {getAnalyticsGroupValueLabel(
911
+ resultGroupByFields[0],
912
+ item.value,
913
+ entityNameMap,
914
+ ) || "(empty)"}
844
915
  </div>
845
916
  <div className="flex-1">
846
917
  <div className="relative h-7 w-full overflow-hidden rounded-md bg-gray-50">
@@ -901,7 +972,13 @@ const LogsAnalyticsView: FunctionComponent<LogsAnalyticsViewProps> = (
901
972
  key={key}
902
973
  className="px-4 py-2.5 text-left text-[11px] font-semibold uppercase tracking-wider text-gray-400"
903
974
  >
904
- {key}
975
+ {getAnalyticsDimensionLabel(
976
+ key,
977
+ tableData.map((row: AnalyticsTableRow): string => {
978
+ return row.groupValues?.[key] || "";
979
+ }),
980
+ entityNameMap,
981
+ )}
905
982
  </th>
906
983
  );
907
984
  })}
@@ -934,7 +1011,11 @@ const LogsAnalyticsView: FunctionComponent<LogsAnalyticsViewProps> = (
934
1011
  key={key}
935
1012
  className="whitespace-nowrap px-4 py-2.5 text-sm text-gray-700"
936
1013
  >
937
- {row.groupValues[key] || "(empty)"}
1014
+ {getAnalyticsGroupValueLabel(
1015
+ key,
1016
+ row.groupValues[key] || "",
1017
+ entityNameMap,
1018
+ ) || "(empty)"}
938
1019
  </td>
939
1020
  );
940
1021
  })}
@@ -1,4 +1,10 @@
1
- import React, { FunctionComponent, ReactElement, useMemo } from "react";
1
+ import React, {
2
+ FunctionComponent,
3
+ ReactElement,
4
+ useId,
5
+ useMemo,
6
+ useState,
7
+ } from "react";
2
8
  import {
3
9
  FacetData,
4
10
  FacetValue,
@@ -16,6 +22,24 @@ import Dictionary from "../../../../Types/Dictionary";
16
22
  import ComponentLoader from "../../ComponentLoader/ComponentLoader";
17
23
  import { getSeverityColor } from "./severityColors";
18
24
  import LogSeverity from "../../../../Types/Log/LogSeverity";
25
+ import { TelemetryEntityNameMap } from "../../../Utils/Telemetry/TelemetryEntityNames";
26
+ import { mergeFacetValueDisplayMap } from "../LogsEntityNames";
27
+ import IconProp from "../../../../Types/Icon/IconProp";
28
+ import {
29
+ RESOURCE_FACET_CATALOG_KEYS,
30
+ ResourceFacetDefinition,
31
+ getResourceFacetDefinition,
32
+ isCatalogResourceFacetKey,
33
+ } from "../../../../Types/Telemetry/ResourceFacetCatalog";
34
+ import HiddenFacetsFooter from "../../TelemetryViewer/components/HiddenFacetsFooter";
35
+ import {
36
+ FacetVisibility,
37
+ computeFacetVisibility,
38
+ getSidebarFacetEmptyStateText,
39
+ } from "../../TelemetryViewer/FacetVisibility";
40
+ import useFacetSearchExemptions, {
41
+ FacetSearchExemptions,
42
+ } from "../../TelemetryViewer/useFacetSearchExemptions";
19
43
 
20
44
  export interface LogsFacetSidebarProps {
21
45
  facetData: FacetData;
@@ -25,6 +49,12 @@ export interface LogsFacetSidebarProps {
25
49
  dockerHostMap?: Dictionary<DockerHost>;
26
50
  podmanHostMap?: Dictionary<PodmanHost>;
27
51
  kubernetesClusterMap?: Dictionary<KubernetesCluster>;
52
+ /*
53
+ * Generic resolver names for resource facet values the maps above do not
54
+ * hold (e.g. a RUM application id under "Service"). Used only when the
55
+ * server sent no displayName and no preloaded map names the value.
56
+ */
57
+ entityNameMap?: TelemetryEntityNameMap | undefined;
28
58
  onIncludeFilter: (facetKey: string, value: string) => void;
29
59
  onExcludeFilter: (facetKey: string, value: string) => void;
30
60
  activeFilters?: Array<ActiveFilter> | undefined;
@@ -43,13 +73,21 @@ export interface LogsFacetSidebarProps {
43
73
  | undefined;
44
74
  }
45
75
 
46
- const RESOURCE_FACET_KEYS: ReadonlySet<string> = new Set([
47
- "primaryEntityId",
48
- "hostId",
49
- "dockerHostId",
50
- "podmanHostId",
51
- "kubernetesClusterId",
52
- ]);
76
+ /*
77
+ * Facets whose search box also asks the server: the Service facet and every
78
+ * resource type in the catalog, all resolved against Postgres.
79
+ */
80
+ function isServerSearchableFacetKey(key: string): boolean {
81
+ return key === "primaryEntityId" || isCatalogResourceFacetKey(key);
82
+ }
83
+
84
+ /*
85
+ * Only resource facets fold away while empty — an empty list there means the
86
+ * project has no resource of that type. Service and severity always show.
87
+ */
88
+ function isHideableFacetKey(key: string): boolean {
89
+ return isCatalogResourceFacetKey(key);
90
+ }
53
91
 
54
92
  const SEVERITY_ORDER: Array<string> = [
55
93
  LogSeverity.Fatal,
@@ -167,13 +205,16 @@ function buildClusterDisplayMap(
167
205
  }
168
206
 
169
207
  function getFacetTitle(key: string): string {
208
+ const resourceDefinition: ResourceFacetDefinition | undefined =
209
+ getResourceFacetDefinition(key);
210
+
211
+ if (resourceDefinition) {
212
+ return resourceDefinition.label;
213
+ }
214
+
170
215
  const titleMap: Record<string, string> = {
171
216
  severityText: "Severity",
172
217
  primaryEntityId: "Service",
173
- hostId: "Host",
174
- dockerHostId: "Docker Host",
175
- podmanHostId: "Podman Host",
176
- kubernetesClusterId: "Kubernetes Cluster",
177
218
  traceId: "Trace ID",
178
219
  spanId: "Span ID",
179
220
  };
@@ -181,6 +222,21 @@ function getFacetTitle(key: string): string {
181
222
  return titleMap[key] || key;
182
223
  }
183
224
 
225
+ function getFacetIcon(key: string): IconProp | undefined {
226
+ if (key === "primaryEntityId" || key === "serviceId") {
227
+ return IconProp.SquareStack;
228
+ }
229
+
230
+ return getResourceFacetDefinition(key)?.icon;
231
+ }
232
+
233
+ // Severity, then Service, then resources in catalog order.
234
+ const PRIORITY_FACET_KEYS: ReadonlyArray<string> = [
235
+ "severityText",
236
+ "primaryEntityId",
237
+ ...RESOURCE_FACET_CATALOG_KEYS,
238
+ ];
239
+
184
240
  const LogsFacetSidebar: FunctionComponent<LogsFacetSidebarProps> = (
185
241
  props: LogsFacetSidebarProps,
186
242
  ): ReactElement => {
@@ -189,45 +245,60 @@ const LogsFacetSidebar: FunctionComponent<LogsFacetSidebarProps> = (
189
245
  }, []);
190
246
 
191
247
  const serviceDisplayMap: Record<string, string> = useMemo(() => {
192
- return buildServiceDisplayMap(props.serviceMap);
193
- }, [props.serviceMap]);
248
+ return mergeFacetValueDisplayMap(
249
+ buildServiceDisplayMap(props.serviceMap),
250
+ props.entityNameMap,
251
+ );
252
+ }, [props.serviceMap, props.entityNameMap]);
194
253
 
195
254
  const serviceColorMap: Record<string, string> = useMemo(() => {
196
255
  return buildServiceColorMap(props.serviceMap);
197
256
  }, [props.serviceMap]);
198
257
 
199
258
  const hostDisplayMap: Record<string, string> = useMemo(() => {
200
- return buildHostDisplayMap(props.hostMap);
201
- }, [props.hostMap]);
259
+ return mergeFacetValueDisplayMap(
260
+ buildHostDisplayMap(props.hostMap),
261
+ props.entityNameMap,
262
+ );
263
+ }, [props.hostMap, props.entityNameMap]);
202
264
 
203
265
  const dockerHostDisplayMap: Record<string, string> = useMemo(() => {
204
- return buildDockerHostDisplayMap(props.dockerHostMap);
205
- }, [props.dockerHostMap]);
266
+ return mergeFacetValueDisplayMap(
267
+ buildDockerHostDisplayMap(props.dockerHostMap),
268
+ props.entityNameMap,
269
+ );
270
+ }, [props.dockerHostMap, props.entityNameMap]);
206
271
 
207
272
  const podmanHostDisplayMap: Record<string, string> = useMemo(() => {
208
- return buildPodmanHostDisplayMap(props.podmanHostMap);
209
- }, [props.podmanHostMap]);
273
+ return mergeFacetValueDisplayMap(
274
+ buildPodmanHostDisplayMap(props.podmanHostMap),
275
+ props.entityNameMap,
276
+ );
277
+ }, [props.podmanHostMap, props.entityNameMap]);
210
278
 
211
279
  const clusterDisplayMap: Record<string, string> = useMemo(() => {
212
- return buildClusterDisplayMap(props.kubernetesClusterMap);
213
- }, [props.kubernetesClusterMap]);
280
+ return mergeFacetValueDisplayMap(
281
+ buildClusterDisplayMap(props.kubernetesClusterMap),
282
+ props.entityNameMap,
283
+ );
284
+ }, [props.kubernetesClusterMap, props.entityNameMap]);
285
+
286
+ /*
287
+ * Resource types the viewer preloads no map for (Proxmox, vCenter, Ceph,
288
+ * ...) still get the resolver's names underneath the server displayName.
289
+ */
290
+ const entityNameDisplayMap: Record<string, string> = useMemo(() => {
291
+ return mergeFacetValueDisplayMap({}, props.entityNameMap);
292
+ }, [props.entityNameMap]);
214
293
 
215
294
  const facetKeys: Array<string> = useMemo(() => {
216
- const priorityKeys: Array<string> = [
217
- "severityText",
218
- "primaryEntityId",
219
- "hostId",
220
- "dockerHostId",
221
- "podmanHostId",
222
- "kubernetesClusterId",
223
- ];
224
295
  const otherKeys: Array<string> = Object.keys(props.facetData).filter(
225
296
  (key: string) => {
226
- return !priorityKeys.includes(key);
297
+ return !PRIORITY_FACET_KEYS.includes(key);
227
298
  },
228
299
  );
229
300
  return [
230
- ...priorityKeys.filter((key: string) => {
301
+ ...PRIORITY_FACET_KEYS.filter((key: string) => {
231
302
  return props.facetData[key] !== undefined;
232
303
  }),
233
304
  ...otherKeys.sort(),
@@ -251,6 +322,32 @@ const LogsFacetSidebar: FunctionComponent<LogsFacetSidebarProps> = (
251
322
  return map;
252
323
  }, [props.activeFilters]);
253
324
 
325
+ const [showHidden, setShowHidden] = useState<boolean>(false);
326
+ const facetListId: string = useId();
327
+
328
+ const facetSearch: FacetSearchExemptions = useFacetSearchExemptions({
329
+ facetData: props.facetData,
330
+ onFacetSearchChange: props.onFacetSearchChange,
331
+ });
332
+
333
+ const visibility: FacetVisibility = useMemo(() => {
334
+ return computeFacetVisibility({
335
+ keys: facetKeys,
336
+ facetData: props.facetData,
337
+ isHideable: isHideableFacetKey,
338
+ activeValuesByKey: activeValuesByKey,
339
+ searchExemptKeys: facetSearch.searchExemptKeys,
340
+ showHidden: showHidden,
341
+ getTitle: getFacetTitle,
342
+ });
343
+ }, [
344
+ facetKeys,
345
+ props.facetData,
346
+ activeValuesByKey,
347
+ facetSearch.searchExemptKeys,
348
+ showHidden,
349
+ ]);
350
+
254
351
  return (
255
352
  <div className="flex h-full w-56 flex-none flex-col overflow-y-auto rounded-lg border border-gray-200 bg-white">
256
353
  <div className="border-b border-gray-100 px-3 py-2.5">
@@ -265,7 +362,7 @@ const LogsFacetSidebar: FunctionComponent<LogsFacetSidebarProps> = (
265
362
  </div>
266
363
  )}
267
364
 
268
- <div className="flex-1 overflow-y-auto">
365
+ <div id={facetListId} className="flex-1 overflow-y-auto">
269
366
  {props.savedViews && props.savedViews.length > 0 && (
270
367
  <SavedViewsFacetSection
271
368
  savedViews={props.savedViews}
@@ -275,13 +372,13 @@ const LogsFacetSidebar: FunctionComponent<LogsFacetSidebarProps> = (
275
372
  />
276
373
  )}
277
374
 
278
- {facetKeys.map((key: string) => {
375
+ {visibility.visibleKeys.map((key: string) => {
279
376
  const values: Array<FacetValue> = props.facetData[key] || [];
280
377
 
281
378
  let valueDisplayMap: Record<string, string> | undefined;
282
379
  let valueColorMap: Record<string, string> | undefined;
283
380
 
284
- if (key === "primaryEntityId") {
381
+ if (key === "primaryEntityId" || key === "serviceId") {
285
382
  valueDisplayMap = serviceDisplayMap;
286
383
  valueColorMap = serviceColorMap;
287
384
  } else if (key === "hostId") {
@@ -294,13 +391,13 @@ const LogsFacetSidebar: FunctionComponent<LogsFacetSidebarProps> = (
294
391
  valueDisplayMap = clusterDisplayMap;
295
392
  } else if (key === "severityText") {
296
393
  valueColorMap = severityColorMap;
394
+ } else if (isCatalogResourceFacetKey(key)) {
395
+ valueDisplayMap = entityNameDisplayMap;
297
396
  }
298
397
 
299
398
  const onSearchChange: ((text: string) => void) | undefined =
300
- RESOURCE_FACET_KEYS.has(key) && props.onFacetSearchChange
301
- ? (text: string) => {
302
- props.onFacetSearchChange!(key, text);
303
- }
399
+ isServerSearchableFacetKey(key)
400
+ ? facetSearch.getSearchChangeHandler(key)
304
401
  : undefined;
305
402
 
306
403
  return (
@@ -315,9 +412,29 @@ const LogsFacetSidebar: FunctionComponent<LogsFacetSidebarProps> = (
315
412
  valueColorMap={valueColorMap}
316
413
  activeValues={activeValuesByKey[key]}
317
414
  onSearchChange={onSearchChange}
415
+ icon={getFacetIcon(key)}
416
+ searchText={facetSearch.searchTextByKey[key] ?? ""}
417
+ onSearchTextChange={(text: string) => {
418
+ facetSearch.setSearchText(key, text);
419
+ }}
420
+ emptyStateText={getSidebarFacetEmptyStateText({
421
+ isHideable: isHideableFacetKey(key),
422
+ emptyStateNoun: getResourceFacetDefinition(key)?.pluralLabel,
423
+ searchedAtArrivalText: facetSearch.searchedAtArrivalByKey[key],
424
+ })}
318
425
  />
319
426
  );
320
427
  })}
428
+
429
+ <HiddenFacetsFooter
430
+ hiddenCount={visibility.hiddenCount}
431
+ hiddenTitles={visibility.hiddenTitles}
432
+ isShowingHidden={showHidden}
433
+ controlsId={facetListId}
434
+ onToggle={() => {
435
+ setShowHidden(!showHidden);
436
+ }}
437
+ />
321
438
  </div>
322
439
  </div>
323
440
  );