good layout
This commit is contained in:
@@ -20,6 +20,7 @@ from .widgets.sparkline import SparklineWidget
|
||||
from .widgets.metric_card import MetricCard
|
||||
from .widgets.flow_table_v2 import EnhancedFlowTable
|
||||
from .widgets.split_flow_details import FlowMainDetailsPanel, SubFlowDetailsPanel
|
||||
from .widgets.debug_panel import DebugPanel
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ...analysis.core import EthernetAnalyzer
|
||||
@@ -59,6 +60,7 @@ class StreamLensAppV2(App):
|
||||
bytes_per_sec = reactive(0.0)
|
||||
enhanced_flows = reactive(0)
|
||||
outlier_count = reactive(0)
|
||||
debug_visible = reactive(False) # Hide debug panel for now
|
||||
|
||||
# Update timers
|
||||
metric_timer: Timer = None
|
||||
@@ -90,7 +92,7 @@ class StreamLensAppV2(App):
|
||||
yield MetricCard("Enhanced", f"{self.enhanced_flows}", color="success", id="enhanced-metric")
|
||||
yield MetricCard("Outliers", f"{self.outlier_count}", color="warning" if self.outlier_count > 0 else "normal", id="outliers-metric")
|
||||
|
||||
# Main content area with 3 clean panels
|
||||
# Main content area with conditional debug panel
|
||||
with Horizontal(id="content-area"):
|
||||
# Left - Enhanced flow table
|
||||
yield EnhancedFlowTable(
|
||||
@@ -99,15 +101,32 @@ class StreamLensAppV2(App):
|
||||
classes="panel-wide"
|
||||
)
|
||||
|
||||
# Right top - Main flow details
|
||||
with Vertical(id="right-panels"):
|
||||
# Middle - Flow details
|
||||
with Vertical(id="flow-panels"):
|
||||
yield FlowMainDetailsPanel(id="main-flow-details")
|
||||
yield SubFlowDetailsPanel(id="sub-flow-details")
|
||||
|
||||
# Right - Debug panel (conditionally visible)
|
||||
if self.debug_visible:
|
||||
yield DebugPanel(id="debug-panel")
|
||||
|
||||
yield Footer()
|
||||
|
||||
def on_mount(self) -> None:
|
||||
"""Initialize the application with TipTop-style updates"""
|
||||
try:
|
||||
debug_panel = self.query_one("#debug-panel", DebugPanel)
|
||||
debug_panel.add_debug_message("APP: Application mounted, checking panels...")
|
||||
|
||||
try:
|
||||
main_panel = self.query_one("#main-flow-details", FlowMainDetailsPanel)
|
||||
sub_panel = self.query_one("#sub-flow-details", SubFlowDetailsPanel)
|
||||
debug_panel.add_debug_message("APP: Both panels found successfully")
|
||||
except Exception as e:
|
||||
debug_panel.add_debug_message(f"APP: Panel query failed: {e}")
|
||||
except:
|
||||
pass # Debug panel not visible
|
||||
|
||||
self.update_metrics()
|
||||
|
||||
# Set up update intervals like TipTop
|
||||
@@ -239,6 +258,13 @@ class StreamLensAppV2(App):
|
||||
|
||||
def on_enhanced_flow_table_flow_selected(self, event: EnhancedFlowTable.FlowSelected) -> None:
|
||||
"""Handle flow selection events"""
|
||||
try:
|
||||
debug_panel = self.query_one("#debug-panel", DebugPanel)
|
||||
flow_info = f"{event.flow.src_ip}:{event.flow.src_port}" if event.flow else "None"
|
||||
debug_panel.add_debug_message(f"APP: Flow selected - {flow_info}, subflow={event.subflow_type}")
|
||||
except:
|
||||
pass # Debug panel not visible
|
||||
|
||||
if event.flow:
|
||||
# Update main flow details panel
|
||||
main_panel = self.query_one("#main-flow-details", FlowMainDetailsPanel)
|
||||
|
||||
@@ -60,9 +60,9 @@ MetricCard {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* Right Panels - Details (compact) */
|
||||
#right-panels {
|
||||
width: 25%;
|
||||
/* Flow Panels - Details (30% width) */
|
||||
#flow-panels {
|
||||
width: 30%;
|
||||
background: #1a1a1a;
|
||||
padding: 0;
|
||||
}
|
||||
@@ -79,6 +79,12 @@ SubFlowDetailsPanel {
|
||||
border: solid #ff8800;
|
||||
}
|
||||
|
||||
/* Debug Panel - Fixed width when visible */
|
||||
#debug-panel {
|
||||
width: 25%;
|
||||
background: #1a1a1a;
|
||||
}
|
||||
|
||||
/* Sparkline Charts */
|
||||
SparklineWidget {
|
||||
height: 5;
|
||||
|
||||
69
analyzer/tui/textual/widgets/debug_panel.py
Normal file
69
analyzer/tui/textual/widgets/debug_panel.py
Normal file
@@ -0,0 +1,69 @@
|
||||
"""
|
||||
Debug Panel - Real-time debugging information in TUI
|
||||
"""
|
||||
|
||||
from textual.widget import Widget
|
||||
from textual.containers import Vertical
|
||||
from textual.widgets import Static
|
||||
from rich.text import Text
|
||||
from rich.console import RenderableType
|
||||
from typing import Optional, List
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class DebugPanel(Vertical):
|
||||
"""Debug panel showing real-time flow selection and logic information"""
|
||||
|
||||
DEFAULT_CSS = """
|
||||
DebugPanel {
|
||||
height: 1fr;
|
||||
padding: 1;
|
||||
background: #1a1a1a;
|
||||
border: solid #ff0080;
|
||||
}
|
||||
|
||||
DebugPanel Static {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
"""
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.debug_messages = []
|
||||
self.max_messages = 20
|
||||
|
||||
def compose(self):
|
||||
"""Create the debug panel layout"""
|
||||
yield Static("DEBUG PANEL", classes="panel-header")
|
||||
yield Static(
|
||||
"Waiting for flow selection...",
|
||||
id="debug-content"
|
||||
)
|
||||
|
||||
def add_debug_message(self, message: str) -> None:
|
||||
"""Add a debug message with timestamp"""
|
||||
timestamp = datetime.now().strftime("%H:%M:%S.%f")[:-3]
|
||||
full_message = f"[{timestamp}] {message}"
|
||||
|
||||
self.debug_messages.append(full_message)
|
||||
if len(self.debug_messages) > self.max_messages:
|
||||
self.debug_messages.pop(0)
|
||||
|
||||
self._update_display()
|
||||
|
||||
def _update_display(self) -> None:
|
||||
"""Update the debug display with recent messages"""
|
||||
content_widget = self.query_one("#debug-content", Static)
|
||||
|
||||
if not self.debug_messages:
|
||||
content_widget.update("No debug messages yet...")
|
||||
return
|
||||
|
||||
# Show recent messages, newest at bottom
|
||||
display_text = "\n".join(self.debug_messages[-15:]) # Show last 15 messages
|
||||
content_widget.update(Text(display_text, style="white"))
|
||||
|
||||
def clear_messages(self) -> None:
|
||||
"""Clear all debug messages"""
|
||||
self.debug_messages.clear()
|
||||
self._update_display()
|
||||
@@ -328,7 +328,7 @@ class EnhancedFlowTable(Vertical):
|
||||
subrows = []
|
||||
combinations = self._get_protocol_frame_combinations(flow)
|
||||
|
||||
for extended_proto, frame_type, count, percentage in combinations[:3]: # Max 3 subrows
|
||||
for extended_proto, frame_type, count, percentage in combinations: # Show all subrows
|
||||
# Calculate timing for this frame type if available
|
||||
frame_delta_t = ""
|
||||
frame_sigma = ""
|
||||
@@ -436,6 +436,18 @@ class EnhancedFlowTable(Vertical):
|
||||
"""Handle row highlight to update selection"""
|
||||
selected_flow = self.get_selected_flow()
|
||||
subflow_type = self.get_selected_subflow_type()
|
||||
|
||||
# Debug through app's debug panel
|
||||
flow_info = f"{selected_flow.src_ip}:{selected_flow.src_port}" if selected_flow else "None"
|
||||
table = self.query_one("#flows-data-table", DataTable)
|
||||
current_row = table.cursor_row if table.cursor_row is not None else -1
|
||||
|
||||
try:
|
||||
debug_panel = self.app.query_one("#debug-panel")
|
||||
debug_panel.add_debug_message(f"TABLE: Row {current_row} - {flow_info}, subflow:{subflow_type}")
|
||||
except:
|
||||
pass # Debug panel might not be available yet
|
||||
|
||||
self.post_message(self.FlowSelected(selected_flow, subflow_type))
|
||||
|
||||
# Helper methods from original implementation
|
||||
|
||||
@@ -44,6 +44,13 @@ class FlowMainDetailsPanel(Vertical):
|
||||
|
||||
def update_flow(self, flow: Optional['FlowStats']) -> None:
|
||||
"""Update panel with main flow details"""
|
||||
flow_info = f"{flow.src_ip}:{flow.src_port}" if flow else "None"
|
||||
try:
|
||||
debug_panel = self.app.query_one("#debug-panel")
|
||||
debug_panel.add_debug_message(f"MAIN_PANEL: Update called - {flow_info}")
|
||||
except:
|
||||
pass
|
||||
|
||||
self.current_flow = flow
|
||||
content_widget = self.query_one("#main-details-content", Static)
|
||||
|
||||
@@ -52,6 +59,14 @@ class FlowMainDetailsPanel(Vertical):
|
||||
return
|
||||
|
||||
details = self._create_main_flow_details(flow)
|
||||
|
||||
# Debug what content we're actually setting
|
||||
try:
|
||||
debug_panel = self.app.query_one("#debug-panel")
|
||||
debug_panel.add_debug_message(f"CONTENT: Setting panel content for {flow.src_ip}:{flow.src_port}")
|
||||
except:
|
||||
pass
|
||||
|
||||
content_widget.update(details)
|
||||
|
||||
def _create_main_flow_details(self, flow: 'FlowStats') -> RenderableType:
|
||||
@@ -91,21 +106,57 @@ class FlowMainDetailsPanel(Vertical):
|
||||
sections.append(Text("Enhanced Analysis", style="bold green"))
|
||||
sections.append(enhanced_table)
|
||||
|
||||
# Timing analysis with new columns
|
||||
timing_table = Table(show_header=False, box=None, padding=0)
|
||||
timing_table.add_column(style="dim", width=12)
|
||||
timing_table.add_column()
|
||||
# Timing analysis - only show if no sub-flows exist
|
||||
# Match the same logic as _should_show_subrows in flow_table_v2.py
|
||||
has_subflows = (len(flow.frame_types) > 1 or
|
||||
flow.enhanced_analysis.decoder_type != "Standard")
|
||||
|
||||
timing_table.add_row("Duration:", f"{flow.duration:.2f}s")
|
||||
timing_table.add_row("Avg ΔT:", f"{flow.avg_inter_arrival * 1000:.1f}ms")
|
||||
timing_table.add_row("Std σ:", f"{flow.std_inter_arrival * 1000:.1f}ms")
|
||||
timing_table.add_row("Outliers:", f"{len(flow.outlier_frames)}")
|
||||
timing_table.add_row("Jitter:", f"{flow.jitter * 1000:.2f}ms")
|
||||
timing_table.add_row("First Seen:", self._format_timestamp(flow.first_seen))
|
||||
timing_table.add_row("Last Seen:", self._format_timestamp(flow.last_seen))
|
||||
# Debug output
|
||||
try:
|
||||
debug_panel = self.app.query_one("#debug-panel")
|
||||
debug_panel.add_debug_message(f"TIMING_LOGIC: {flow.src_ip}:{flow.src_port} - types={len(flow.frame_types)}, decoder={flow.enhanced_analysis.decoder_type}, has_subflows={has_subflows}")
|
||||
except:
|
||||
pass
|
||||
|
||||
sections.append(Text("Timing Analysis", style="bold cyan"))
|
||||
sections.append(timing_table)
|
||||
if not has_subflows:
|
||||
try:
|
||||
debug_panel = self.app.query_one("#debug-panel")
|
||||
debug_panel.add_debug_message(f"BRANCH: Taking FULL timing branch for {flow.src_ip}:{flow.src_port}")
|
||||
except:
|
||||
pass
|
||||
|
||||
timing_table = Table(show_header=False, box=None, padding=0)
|
||||
timing_table.add_column(style="dim", width=12)
|
||||
timing_table.add_column()
|
||||
|
||||
timing_table.add_row("Duration:", f"{flow.duration:.2f}s")
|
||||
timing_table.add_row("Avg ΔT:", f"{flow.avg_inter_arrival * 1000:.1f}ms")
|
||||
timing_table.add_row("Std σ:", f"{flow.std_inter_arrival * 1000:.1f}ms")
|
||||
timing_table.add_row("Outliers:", f"{len(flow.outlier_frames)}")
|
||||
timing_table.add_row("Jitter:", f"{flow.jitter * 1000:.2f}ms")
|
||||
timing_table.add_row("First Seen:", self._format_timestamp(flow.first_seen))
|
||||
timing_table.add_row("Last Seen:", self._format_timestamp(flow.last_seen))
|
||||
|
||||
sections.append(Text("Timing Analysis", style="bold cyan"))
|
||||
sections.append(timing_table)
|
||||
else:
|
||||
try:
|
||||
debug_panel = self.app.query_one("#debug-panel")
|
||||
debug_panel.add_debug_message(f"BRANCH: Taking BASIC timeline branch for {flow.src_ip}:{flow.src_port}")
|
||||
except:
|
||||
pass
|
||||
|
||||
# Just show duration and timestamps for flows with sub-flows
|
||||
basic_timing_table = Table(show_header=False, box=None, padding=0)
|
||||
basic_timing_table.add_column(style="dim", width=12)
|
||||
basic_timing_table.add_column()
|
||||
|
||||
basic_timing_table.add_row("Duration:", f"{flow.duration:.2f}s")
|
||||
basic_timing_table.add_row("First Seen:", self._format_timestamp(flow.first_seen))
|
||||
basic_timing_table.add_row("Last Seen:", self._format_timestamp(flow.last_seen))
|
||||
|
||||
sections.append(Text("Flow Timeline", style="bold cyan"))
|
||||
sections.append(basic_timing_table)
|
||||
|
||||
return Group(*sections)
|
||||
|
||||
|
||||
237
debug.log
Normal file
237
debug.log
Normal file
@@ -0,0 +1,237 @@
|
||||
APP DEBUG: Application mounted, checking panels...
|
||||
APP DEBUG: Both panels found successfully
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=CH10-Data
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=UDP
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=UDP
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=UDP
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=TMATS
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:320 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:320 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:320 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:320 - frame_types=3, decoder=Standard, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:320 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:320 if event.flow else None, subflow_type=PTP-Signaling
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:320 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:320 - frame_types=3, decoder=Standard, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:320 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:320 if event.flow else None, subflow_type=PTP-Sync
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:320 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:320 - frame_types=3, decoder=Standard, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:320 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:320 if event.flow else None, subflow_type=PTP-Unknown (0x6)
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:320 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:320 - frame_types=3, decoder=Standard, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.202:5010 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.202:5010 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.202:5010 if flow else None
|
||||
PANEL DEBUG: 11.59.19.202:5010 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.202:5010 if selected_flow else None
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.202:5010 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.202:5010 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.202:5010 if flow else None
|
||||
PANEL DEBUG: 11.59.19.202:5010 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.202:5010 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.202:5010 if flow else None
|
||||
PANEL DEBUG: 11.59.19.202:5010 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:61112 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:61112 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:61112 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:61112 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:61113 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:61113 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:61113 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:61113 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:319 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:319 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:319 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:319 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:0 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:0 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:0 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:0 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:5353 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:5353 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:5353 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:5353 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:5353 if selected_flow else None
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:5353 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:5353 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:5353 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:5353 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:5353 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:5353 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:5353 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 169.254.0.1:5353 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=169.254.0.1:5353 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 169.254.0.1:5353 if flow else None
|
||||
PANEL DEBUG: 169.254.0.1:5353 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:5353 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:5353 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:5353 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:5353 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:5353 if selected_flow else None
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:5353 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:5353 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:5353 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:5353 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:5353 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:5353 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:5353 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:0 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:0 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:0 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:0 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:319 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:319 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:319 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:319 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:61113 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:61113 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:61113 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:61113 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:61112 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:61112 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:61112 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:61112 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.202:5010 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.202:5010 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.202:5010 if flow else None
|
||||
PANEL DEBUG: 11.59.19.202:5010 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:320 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:320 if event.flow else None, subflow_type=PTP-Unknown (0x6)
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:320 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:320 - frame_types=3, decoder=Standard, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:320 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:320 if event.flow else None, subflow_type=PTP-Sync
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:320 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:320 - frame_types=3, decoder=Standard, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:320 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:320 if event.flow else None, subflow_type=PTP-Signaling
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:320 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:320 - frame_types=3, decoder=Standard, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:320 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:320 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:320 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:320 - frame_types=3, decoder=Standard, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=TMATS
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=UDP
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=CH10-Data
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=CH10-Data
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=CH10-Data
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=CH10-Data
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=CH10-Data
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=CH10-Data
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=UDP
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:49154 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:49154 if event.flow else None, subflow_type=TMATS
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:49154 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:49154 - frame_types=10, decoder=Chapter10_Enhanced, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:320 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:320 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:320 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:320 - frame_types=3, decoder=Standard, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:320 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:320 if event.flow else None, subflow_type=PTP-Signaling
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:320 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:320 - frame_types=3, decoder=Standard, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:320 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:320 if event.flow else None, subflow_type=PTP-Sync
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:320 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:320 - frame_types=3, decoder=Standard, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:320 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:320 if event.flow else None, subflow_type=PTP-Unknown (0x6)
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:320 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:320 - frame_types=3, decoder=Standard, has_subflows=True
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.202:5010 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.202:5010 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.202:5010 if flow else None
|
||||
PANEL DEBUG: 11.59.19.202:5010 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:61112 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:61112 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:61112 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:61112 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:61112 if selected_flow else None
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:61112 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:61112 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:61112 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:61112 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:61112 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:61112 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:61112 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:61113 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:61113 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:61113 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:61113 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.4.89:319 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.4.89:319 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.4.89:319 if flow else None
|
||||
PANEL DEBUG: 192.168.4.89:319 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 11.59.19.204:0 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=11.59.19.204:0 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 11.59.19.204:0 if flow else None
|
||||
PANEL DEBUG: 11.59.19.204:0 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 192.168.43.111:5353 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=192.168.43.111:5353 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 192.168.43.111:5353 if flow else None
|
||||
PANEL DEBUG: 192.168.43.111:5353 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 169.254.0.1:5353 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=169.254.0.1:5353 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 169.254.0.1:5353 if flow else None
|
||||
PANEL DEBUG: 169.254.0.1:5353 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 169.254.0.1:5353 if selected_flow else None
|
||||
TABLE DEBUG: Row highlighted, posting FlowSelected event for 169.254.0.1:5353 if selected_flow else None
|
||||
APP DEBUG: Flow selected event - flow=169.254.0.1:5353 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 169.254.0.1:5353 if flow else None
|
||||
PANEL DEBUG: 169.254.0.1:5353 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
APP DEBUG: Flow selected event - flow=169.254.0.1:5353 if event.flow else None, subflow_type=None
|
||||
UPDATE_FLOW DEBUG: Called with flow 169.254.0.1:5353 if flow else None
|
||||
PANEL DEBUG: 169.254.0.1:5353 - frame_types=1, decoder=Standard, has_subflows=False
|
||||
61
debug_flow.py
Normal file
61
debug_flow.py
Normal file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Debug script to check flow data for the 192.168.7.168 source
|
||||
"""
|
||||
|
||||
import sys
|
||||
sys.path.append('.')
|
||||
|
||||
from analyzer.analysis.core import EthernetAnalyzer
|
||||
|
||||
def debug_flow():
|
||||
analyzer = EthernetAnalyzer()
|
||||
|
||||
# Load the sample file
|
||||
pcap_file = "1 PTPGM.pcapng"
|
||||
print(f"Loading {pcap_file}...")
|
||||
|
||||
try:
|
||||
analyzer.analyze_pcap(pcap_file) # Load the file
|
||||
|
||||
# Find the flow with source 192.168.7.168
|
||||
target_flow = None
|
||||
for flow in analyzer.flows.values():
|
||||
if flow.src_ip == "192.168.7.168":
|
||||
target_flow = flow
|
||||
break
|
||||
|
||||
if not target_flow:
|
||||
print("No flow found with source 192.168.7.168")
|
||||
print("Available flows:")
|
||||
for flow in analyzer.flows.values():
|
||||
print(f" {flow.src_ip}:{flow.src_port} -> {flow.dst_ip}:{flow.dst_port}")
|
||||
return
|
||||
|
||||
print(f"\n=== Flow: {target_flow.src_ip}:{target_flow.src_port} -> {target_flow.dst_ip}:{target_flow.dst_port} ===")
|
||||
print(f"Frame types: {len(target_flow.frame_types)} types")
|
||||
|
||||
if target_flow.frame_types:
|
||||
for frame_type, stats in target_flow.frame_types.items():
|
||||
print(f" - {frame_type}: {stats.count} packets")
|
||||
|
||||
print(f"Enhanced decoder: {target_flow.enhanced_analysis.decoder_type}")
|
||||
|
||||
# Check the subflow logic
|
||||
has_subflows_condition1 = len(target_flow.frame_types) > 1
|
||||
has_subflows_condition2 = target_flow.enhanced_analysis.decoder_type != "Standard"
|
||||
has_subflows = has_subflows_condition1 or has_subflows_condition2
|
||||
|
||||
print(f"\nSubflow logic:")
|
||||
print(f" Multiple frame types (>1): {has_subflows_condition1}")
|
||||
print(f" Enhanced decoder (!='Standard'): {has_subflows_condition2}")
|
||||
print(f" Should show subflows: {has_subflows}")
|
||||
print(f" Should show timing in main panel: {not has_subflows}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
if __name__ == "__main__":
|
||||
debug_flow()
|
||||
Reference in New Issue
Block a user