diff --git a/docker-compose.yml b/docker-compose.yml index 1a9f711..0d549d2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,6 +5,10 @@ services: ports: - "3001:3001" environment: + # Root path on the Docker host to mount inside the container. + # Linux VM: HOST_BROWSE_ROOT=/home/wnc + # Windows Docker Desktop: HOST_BROWSE_ROOT=C:/Users + # Then enter paths under /host/... in the dashboard settings. - HOST_BROWSE_ROOT=${HOST_BROWSE_ROOT:-C:/Users} - HOST_MOUNT_ROOT=/host volumes: diff --git a/server/dashboard.db b/server/dashboard.db index e681de2..7b3e118 100644 Binary files a/server/dashboard.db and b/server/dashboard.db differ diff --git a/server/dashboard.db-shm b/server/dashboard.db-shm index 2e18eaa..839c7b2 100644 Binary files a/server/dashboard.db-shm and b/server/dashboard.db-shm differ diff --git a/server/dashboard.db-wal b/server/dashboard.db-wal index e234230..5793d4a 100644 Binary files a/server/dashboard.db-wal and b/server/dashboard.db-wal differ diff --git a/server/parser.py b/server/parser.py index 76a8b36..66acf22 100644 --- a/server/parser.py +++ b/server/parser.py @@ -23,6 +23,7 @@ def parse_target_filename(filename, parent_dir): band = next((s for s in segments if re.match(r"^\dGHZ$", s)), None) channel = next((s for s in segments if re.match(r"^CH\d+$", s)), None) bandwidth = next((s for s in segments if re.match(r"^BW\d+$", s)), None) + sp = next ((s for s in segments if re.match(r"^SP", s)), None) last_segment = segments[-1] if segments else None direction = last_segment if last_segment in DIRECTION_TYPES else None @@ -45,6 +46,7 @@ def parse_target_filename(filename, parent_dir): "direction": direction, "rotation": rotation, "throttled": throttled, + "sp": sp, } diff --git a/server/scanner.py b/server/scanner.py index fb8fcc0..23d42c8 100644 --- a/server/scanner.py +++ b/server/scanner.py @@ -58,8 +58,8 @@ def resolve_runtime_path(path_value): if raw_path.startswith("\\\\") or raw_path.startswith("//"): return raw_path - # Map Windows host paths when backend runs in Linux container. - if os.name != "nt" and _WIN_DRIVE_PATH_RE.match(raw_path): + # Map host paths (Windows or Linux) to the container mount point when running in a container. + if os.name != "nt": mount_root = os.getenv("HOST_MOUNT_ROOT", "/host").strip() or "/host" host_root = os.getenv("HOST_BROWSE_ROOT", "").strip() @@ -171,8 +171,10 @@ def scan_results_only(results_dir, results_dir_ref): scan_results(results_dir) scan_results(results_dir_ref) - update_p2p_coe_pairs() - update_p3p_throttle_pairs() + coe_pairs = update_all_p2p_coe_pairs_sql() + print(f"[scanner] coe_pair updated for {coe_pairs} P2P test(s)") + p3p_pairs = update_all_p3p_pairs_sql() + print(f"[scanner] p3p_pair updated for {p3p_pairs} P3P test(s)") finally: _scan_finished() @@ -240,12 +242,25 @@ def scan_targets(target_dir): for filename in files: parsed = parse_target_filename(filename, parent_name) if not parsed["test_id"]: - print(f"[scanner] skip (no test_id): {parent_name}/{filename}") + #print(f"[scanner] skip (no test_id): {parent_name}/{filename}") continue - print( - f"[scanner] found: {parent_name}/{filename} -> test_id={parsed['test_id']}" - ) + # Remove SP testcases from all ROT + if parsed["sp"]: + #print(f"[scanner] skip (SP test): {parent_name}/{filename}") + continue + + # Remove P2P testcases with no ROT and BW320 + if parsed["interference"] == "P2P" and not parsed["rotation"] and parsed["bandwidth"] == "BW320": + #print(f"[scanner] skip (P2P no ROT BW320): {parent_name}/{filename}") + continue + + #Remove P3P testcases for CGW452 + if parsed["interference"] == "P3P" and parsed["device"] == "CGW452": + #print(f"[scanner] skip (P3P CGW452): {parent_name}/{filename}") + continue + + #print( f"[scanner] found: {parent_name}/{filename} -> test_id={parsed['test_id']}") upsert_test( { "id": parsed["id"], @@ -320,10 +335,10 @@ def process_result_dir(results_dir, result_dir_name): completed_at = parse_timestamp(latest_log) data = extract_log_data(log_path) - print( + '''print( f"[scanner] completed: {test_id} device={device} " f"duration={data['duration_seconds']}s stations={len(data['tputResults'])} at={completed_at}" - ) + )''' mark_completed( test_id, device,