From 08b99ab34069aa61673c7e7bf19d4d0fe1e7cc19 Mon Sep 17 00:00:00 2001 From: grymphen Date: Sun, 10 May 2026 16:22:43 +0200 Subject: [PATCH] sync errors --- sftp.py | 11 ++++++++++- sync.py | 5 ++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/sftp.py b/sftp.py index df34c15..0d49b88 100644 --- a/sftp.py +++ b/sftp.py @@ -1,12 +1,15 @@ import io import logging import posixpath +import socket import stat from dataclasses import dataclass from pathlib import Path import paramiko +CONNECT_TIMEOUT = 30 # seconds for TCP + SSH handshake + import db from config import SFTPConfig @@ -46,12 +49,18 @@ def get_key_fingerprint(pem: str) -> str | None: def _make_transport(cfg: SFTPConfig) -> paramiko.Transport: - transport = paramiko.Transport((cfg.host, cfg.port)) + log.debug("Opening TCP connection to %s:%s", cfg.host, cfg.port) + sock = socket.create_connection((cfg.host, cfg.port), timeout=CONNECT_TIMEOUT) + transport = paramiko.Transport(sock) + transport.banner_timeout = CONNECT_TIMEOUT + transport.handshake_timeout = CONNECT_TIMEOUT + log.debug("Starting SSH handshake") if cfg.auth_method == "key" and cfg.key: key = _load_private_key(cfg.key) transport.connect(username=cfg.user, pkey=key) else: transport.connect(username=cfg.user, password=cfg.password) + log.debug("SSH authenticated") return transport diff --git a/sync.py b/sync.py index bac4d2a..99f2ccd 100644 --- a/sync.py +++ b/sync.py @@ -35,13 +35,16 @@ def run_sync(limit: int | None = None) -> None: counters = dict(zips_found=0, zips_new=0, books_uploaded=0, books_skipped=0, books_errored=0) try: + log.info("Sync started (limit=%s)", limit) cfg = config.load() _validate_config(cfg) + log.info("Config OK — work dir: %s", cfg.local_work_dir) work_dir = Path(cfg.local_work_dir) work_dir.mkdir(parents=True, exist_ok=True) + log.info("Work dir ready: %s", work_dir) - log.info("Listing remote zips at %s@%s:%s", cfg.sftp.user, cfg.sftp.host, cfg.sftp.remote_path) + log.info("Connecting to SFTP %s@%s:%s ...", cfg.sftp.user, cfg.sftp.host, cfg.sftp.port) new_zips = sftp_module.list_new_zips(cfg.sftp) counters["zips_found"] = len(new_zips)