From f70349560d66be17e578a84e81de85ae094f2cdd Mon Sep 17 00:00:00 2001 From: thanawat saiyota Date: Mon, 15 Jun 2026 18:32:25 +0700 Subject: [PATCH] fix adv upload --- main.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index c669171..d4fabde 100644 --- a/main.py +++ b/main.py @@ -8,6 +8,7 @@ import os import re import json import io +import socket import stat as stat_mod import time from datetime import datetime @@ -112,6 +113,7 @@ ADV_SFTP_PORT = int(os.getenv("ADV_SFTP_PORT", "22")) ADV_SFTP_USER = os.getenv("ADV_SFTP_USER", "fssservice") ADV_SFTP_PASSWORD = os.getenv("ADV_SFTP_PASSWORD", "") ADV_SFTP_REMOTE_DIR = os.getenv("ADV_SFTP_REMOTE_DIR") +ADV_SFTP_CONNECT_TIMEOUT = float(os.getenv("ADV_SFTP_CONNECT_TIMEOUT", "10")) # Per-country SFTP overrides. Each country can target a different host. # JSON map keyed by lowercase country code; any omitted field falls back to the @@ -183,10 +185,19 @@ def open_adv_sftp(cfg: dict): raise HTTPException(500, f"ADV SFTP remote_dir not configured for host {cfg.get('host')}") if not cfg.get("password"): raise HTTPException(500, f"ADV SFTP password not configured for host {cfg.get('host')}") - transport = paramiko.Transport((cfg["host"], cfg["port"])) + print( + f"[ADV SFTP] Connecting to {cfg['host']}:{cfg['port']} " + f"as {cfg['user']} (timeout={ADV_SFTP_CONNECT_TIMEOUT}s)", + flush=True + ) + sock = socket.create_connection((cfg["host"], cfg["port"]), timeout=ADV_SFTP_CONNECT_TIMEOUT) + transport = paramiko.Transport(sock) + transport.banner_timeout = ADV_SFTP_CONNECT_TIMEOUT + transport.auth_timeout = ADV_SFTP_CONNECT_TIMEOUT _enable_legacy_ssh(transport) transport.connect(username=cfg["user"], password=cfg["password"]) sftp = paramiko.SFTPClient.from_transport(transport) + print(f"[ADV SFTP] Connected to {cfg['host']}:{cfg['port']}", flush=True) return transport, sftp def sftp_ensure_dir(sftp, remote_dir: str):