Hier ist eine reduzierte Version des Handlers, der die Verbindung direkt nach dem Upload schließt:
Code: Select all
import os, logging, paramiko
class SFTPFileHandle(paramiko.SFTPHandle):
def __init__(self, flags, upload_file, file_name, file_path, rename_file) -> None:
super().__init__(flags)
self.upload_file = upload_file
self.file_name = file_name
self.file_path = file_path
self.rename_file = rename_file
def chattr(self, path, attr):
pass
def stat(self):
return paramiko.SFTPAttributes.from_stat(os.fstat(self.readfile.fileno()))
def close(self):
try:
super().close()
try:
exists = os.path.exists(self.file_path)
size = os.path.getsize(self.file_path) if exists else -1
logging.info(f"[Close] path='{self.file_path}' exists={exists} size={size}")
except Exception as e:
logging.warning(f"[Close] stat failed for '{self.file_path}': {e}")
fname = self.rename_file(file_name=self.file_name, file_path=self.file_path)
if fname:
if fname == "camera_off":
try:
os.remove(self.file_path)
logging.info("[Cleanup] removed local file (camera_off)")
except Exception as e:
logging.warning(f"[Cleanup] remove failed: {e}")
else:
ok = self.upload_file(fname, self.file_path)
if ok:
try:
os.remove(self.file_path)
logging.info("[Cleanup] removed local file after upload")
except Exception as e:
logging.warning(f"[Cleanup] remove failed after upload: {e}")
else:
logging.error("[Close] upload failed")
else:
logging.error("[Close] failed to build final name")
except Exception:
logging.exception("[Close] error while finalizing")
Das deutet darauf hin, dass mein Client beim Schließen kein klares Erfolgssignal erhalten hat...
PS: Falls sich jemand fragt, wie ich mich selbst gefragt habe: Leider nein, es ist nicht möglich, auf Protokolle auf dem NVR zuzugreifen, um zu sehen, was passiert, nachdem der Upload abgeschlossen ist. Bei den NVRs handelt es sich um Kartoffelkameras mit wenig bis gar keiner Verwaltung, mit eingebetteter Software, die nur die Änderung des DNS des SFTP-Servers ermöglicht und keine andere Option zur Verfügung stellt.
Mobile version