try to implement websockets
This commit is contained in:
@@ -6,7 +6,6 @@ import os
|
||||
import importlib
|
||||
import redis
|
||||
import time
|
||||
import math
|
||||
import random # Imported for jitter
|
||||
from typing import List, Set, Dict, Any, Tuple, Optional
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
@@ -38,13 +37,14 @@ class Scanner:
|
||||
UNIFIED: Combines comprehensive features with improved display formatting.
|
||||
"""
|
||||
|
||||
def __init__(self, session_config=None):
|
||||
def __init__(self, session_config=None, socketio=None):
|
||||
"""Initialize scanner with session-specific configuration."""
|
||||
try:
|
||||
# Use provided session config or create default
|
||||
if session_config is None:
|
||||
from core.session_config import create_session_config
|
||||
session_config = create_session_config()
|
||||
self.socketio = socketio
|
||||
|
||||
self.config = session_config
|
||||
self.graph = GraphManager()
|
||||
@@ -143,7 +143,8 @@ class Scanner:
|
||||
'rate_limiter',
|
||||
'logger',
|
||||
'status_logger_thread',
|
||||
'status_logger_stop_event'
|
||||
'status_logger_stop_event',
|
||||
'socketio'
|
||||
]
|
||||
|
||||
for attr in unpicklable_attrs:
|
||||
@@ -170,6 +171,7 @@ class Scanner:
|
||||
self.logger = get_forensic_logger()
|
||||
self.status_logger_thread = None
|
||||
self.status_logger_stop_event = threading.Event()
|
||||
self.socketio = None
|
||||
|
||||
if not hasattr(self, 'providers') or not self.providers:
|
||||
self._initialize_providers()
|
||||
@@ -1024,6 +1026,8 @@ class Scanner:
|
||||
"""
|
||||
if self.session_id:
|
||||
try:
|
||||
if self.socketio:
|
||||
self.socketio.emit('scan_update', self.get_scan_status())
|
||||
from core.session_manager import session_manager
|
||||
session_manager.update_session_scanner(self.session_id, self)
|
||||
except Exception:
|
||||
@@ -1048,7 +1052,7 @@ class Scanner:
|
||||
'progress_percentage': self._calculate_progress(),
|
||||
'total_tasks_ever_enqueued': self.total_tasks_ever_enqueued,
|
||||
'enabled_providers': [provider.get_name() for provider in self.providers],
|
||||
'graph_statistics': self.graph.get_statistics(),
|
||||
'graph': self.get_graph_data(),
|
||||
'task_queue_size': self.task_queue.qsize(),
|
||||
'currently_processing_count': currently_processing_count,
|
||||
'currently_processing': currently_processing_list[:5],
|
||||
|
||||
@@ -64,7 +64,7 @@ class SessionManager:
|
||||
"""Generates the Redis key for a session's stop signal."""
|
||||
return f"dnsrecon:stop:{session_id}"
|
||||
|
||||
def create_session(self) -> str:
|
||||
def create_session(self, socketio=None) -> str:
|
||||
"""
|
||||
FIXED: Create a new user session with thread-safe creation to prevent duplicates.
|
||||
"""
|
||||
@@ -76,7 +76,7 @@ class SessionManager:
|
||||
try:
|
||||
from core.session_config import create_session_config
|
||||
session_config = create_session_config()
|
||||
scanner_instance = Scanner(session_config=session_config)
|
||||
scanner_instance = Scanner(session_config=session_config, socketio=socketio)
|
||||
|
||||
# Set the session ID on the scanner for cross-process stop signal management
|
||||
scanner_instance.session_id = session_id
|
||||
|
||||
Reference in New Issue
Block a user