mirror of
https://github.com/baoweise-bot/aimili-vpngate.git
synced 2026-09-05 07:36:42 +08:00
refactor: defer OpenVPN log output to avoid redundant logging during initialization
This commit is contained in:
+19
-8
@@ -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 '无'})"
|
||||
|
||||
Reference in New Issue
Block a user