refactor: defer OpenVPN log output to avoid redundant logging during initialization

This commit is contained in:
baoweise-bot
2026-06-05 19:18:02 +08:00
parent 7e4f7ce27b
commit 031666845f
+19 -8
View File
@@ -735,24 +735,25 @@ def run_openvpn_until_ready(config_file: str, keep_alive: bool, route_nopull: bo
lines: queue.Queue[str | None] = queue.Queue()
startup_done = [False]
openvpn_logs: list[str] = []
def reader() -> None:
assert process.stdout is not None
for line in process.stdout:
line_str = line.rstrip()
level = "INFO"
line_lower = line_str.lower()
if "error" in line_lower or "failed" in line_lower or "cannot" in line_lower or "fatal" in line_lower or "permission denied" in line_lower:
level = "ERROR"
elif "warning" in line_lower or "warn" in line_lower or "deprecated" in line_lower:
level = "WARNING"
log_to_json(level, "VPN", f"[OpenVPN] {line_str}")
if not startup_done[0]:
openvpn_logs.append(line_str)
lines.put(line_str)
else:
if keep_alive:
print(f"[OpenVPN] {line_str}", flush=True)
level = "INFO"
line_lower = line_str.lower()
if "error" in line_lower or "failed" in line_lower or "cannot" in line_lower or "fatal" in line_lower or "permission denied" in line_lower:
level = "ERROR"
elif "warning" in line_lower or "warn" in line_lower or "deprecated" in line_lower:
level = "WARNING"
log_to_json(level, "VPN", f"[OpenVPN] {line_str}")
if not startup_done[0]:
lines.put(None)
@@ -791,6 +792,16 @@ def run_openvpn_until_ready(config_file: str, keep_alive: bool, route_nopull: bo
else:
message = f"OpenVPN timeout after {limit}s."
# Bulk write accumulated startup logs
for line_str in openvpn_logs:
level = "INFO"
line_lower = line_str.lower()
if "error" in line_lower or "failed" in line_lower or "cannot" in line_lower or "fatal" in line_lower or "permission denied" in line_lower:
level = "ERROR"
elif "warning" in line_lower or "warn" in line_lower or "deprecated" in line_lower:
level = "WARNING"
log_to_json(level, "VPN", f"[OpenVPN] {line_str}")
if not ok:
err_code, diag_msg = vpn_utils.diagnose_openvpn_failure(tail)
message = f"[错误代码 {err_code}] {diag_msg} (原始日志尾部: {tail[-1][-100:] if tail else ''})"