GUI
This commit is contained in:
@@ -26,9 +26,16 @@ def main():
|
||||
help='Outlier detection threshold in standard deviations (default: 3.0)')
|
||||
parser.add_argument('--report', action='store_true',
|
||||
help='Generate comprehensive outlier report and exit (no TUI)')
|
||||
parser.add_argument('--gui', action='store_true',
|
||||
help='Launch GUI mode (requires PySide6)')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# Handle GUI mode
|
||||
if args.gui:
|
||||
launch_gui(args)
|
||||
return
|
||||
|
||||
if not args.pcap and not args.live:
|
||||
print("Error: Must specify either --pcap file or --live capture")
|
||||
sys.exit(1)
|
||||
@@ -114,8 +121,13 @@ def main():
|
||||
# Give capture a moment to start
|
||||
time.sleep(1)
|
||||
|
||||
# Run TUI
|
||||
curses.wrapper(tui.run)
|
||||
# Run TUI with error handling
|
||||
try:
|
||||
curses.wrapper(tui.run)
|
||||
except curses.error as e:
|
||||
print(f"\nTUI error: {e}")
|
||||
print("Falling back to console mode...")
|
||||
print_console_results(analyzer)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
print("\nCapture interrupted by user")
|
||||
@@ -124,7 +136,12 @@ def main():
|
||||
else:
|
||||
# PCAP analysis mode
|
||||
try:
|
||||
curses.wrapper(tui.run)
|
||||
try:
|
||||
curses.wrapper(tui.run)
|
||||
except curses.error as e:
|
||||
print(f"\nTUI error: {e}")
|
||||
print("Terminal doesn't support curses. Falling back to console mode...")
|
||||
print_console_results(analyzer)
|
||||
except KeyboardInterrupt:
|
||||
print("\nAnalysis interrupted by user")
|
||||
|
||||
@@ -306,5 +323,40 @@ def generate_outlier_report(analyzer: EthernetAnalyzer, threshold_sigma: float):
|
||||
print("=" * 80)
|
||||
|
||||
|
||||
def launch_gui(args):
|
||||
"""Launch GUI mode"""
|
||||
try:
|
||||
from .gui import GUI_AVAILABLE, StreamLensMainWindow
|
||||
from PySide6.QtWidgets import QApplication
|
||||
|
||||
if not GUI_AVAILABLE:
|
||||
print("Error: PySide6 not available. Please install with: pip install PySide6")
|
||||
sys.exit(1)
|
||||
|
||||
# Create QApplication
|
||||
app = QApplication(sys.argv)
|
||||
app.setApplicationName("StreamLens")
|
||||
app.setApplicationDisplayName("StreamLens - Ethernet Traffic Analyzer")
|
||||
|
||||
# Create main window
|
||||
window = StreamLensMainWindow()
|
||||
window.show()
|
||||
|
||||
# If a PCAP file was specified, load it
|
||||
if args.pcap:
|
||||
window.load_pcap_file(args.pcap)
|
||||
|
||||
# Start event loop
|
||||
sys.exit(app.exec())
|
||||
|
||||
except ImportError as e:
|
||||
print(f"Error: GUI dependencies not available: {e}")
|
||||
print("Please install PySide6: pip install PySide6")
|
||||
sys.exit(1)
|
||||
except Exception as e:
|
||||
print(f"Error launching GUI: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user