@@ -558,6 +558,47 @@ const NetworkView: React.FC = () => {
558558 }
559559 } , [ networkLogs , devices , servicesRecords ] )
560560
561+ // Filter network logs based on selected node/link
562+ const filteredNetworkLogs = useMemo ( ( ) => {
563+ if ( ! selectedNode && ! selectedLink ) {
564+ return networkLogs
565+ }
566+
567+ return networkLogs . filter ( log => {
568+ const allTraffic = [
569+ ...( log . virtualTraffic || [ ] ) . map ( ( t : any ) => ( { ...t , type : 'virtual' } ) ) ,
570+ ...( log . subnetTraffic || [ ] ) . map ( ( t : any ) => ( { ...t , type : 'subnet' } ) ) ,
571+ ...( log . physicalTraffic || [ ] ) . map ( ( t : any ) => ( { ...t , type : 'physical' } ) )
572+ ]
573+
574+ return allTraffic . some ( traffic => {
575+ const srcIP = extractIP ( traffic . src )
576+ const dstIP = extractIP ( traffic . dst )
577+
578+ if ( selectedNode ) {
579+ // Check if this traffic involves the selected node
580+ const nodeIPs = selectedNode . ips || [ selectedNode . ip ]
581+ return nodeIPs . some ( ip => ip === srcIP || ip === dstIP )
582+ }
583+
584+ if ( selectedLink ) {
585+ // Check if this traffic matches the selected link
586+ const linkSourceIP = typeof selectedLink . source === 'string' ?
587+ selectedLink . originalSource :
588+ selectedLink . originalSource
589+ const linkTargetIP = typeof selectedLink . target === 'string' ?
590+ selectedLink . originalTarget :
591+ selectedLink . originalTarget
592+
593+ return ( srcIP === linkSourceIP && dstIP === linkTargetIP ) ||
594+ ( srcIP === linkTargetIP && dstIP === linkSourceIP )
595+ }
596+
597+ return false
598+ } )
599+ } )
600+ } , [ networkLogs , selectedNode , selectedLink ] )
601+
561602 // Apply filters
562603 const filteredData = useMemo ( ( ) => {
563604 let filteredNodes = nodes . filter ( node => {
@@ -1339,12 +1380,22 @@ const NetworkView: React.FC = () => {
13391380
13401381 { /* Log Viewer */ }
13411382 < LogViewer
1342- networkLogs = { networkLogs as any [ ] }
1383+ networkLogs = { filteredNetworkLogs as any [ ] }
13431384 devices = { devices }
13441385 searchQuery = { searchQuery }
13451386 protocolFilters = { protocolFilters }
13461387 trafficTypeFilters = { trafficTypeFilters }
13471388 onHeightChange = { setLogViewerHeight }
1389+ selectedNode = { selectedNode }
1390+ selectedLink = { selectedLink ? {
1391+ ...selectedLink ,
1392+ source : typeof selectedLink . source === 'string' ? selectedLink . source : selectedLink . source . id ,
1393+ target : typeof selectedLink . target === 'string' ? selectedLink . target : selectedLink . target . id
1394+ } : null }
1395+ onClearSelection = { ( ) => {
1396+ setSelectedNode ( null )
1397+ setSelectedLink ( null )
1398+ } }
13481399 onSelectLog = { ( logEntry ) => {
13491400 // Highlight the corresponding nodes in the graph
13501401 const srcNode = nodes . find ( n =>
0 commit comments