From e6098171fc38a8c41ef0ade54be349e0f6879e84 Mon Sep 17 00:00:00 2001 From: data Date: Mon, 31 Mar 2025 21:35:21 +0200 Subject: [PATCH] Convert Fehler behoben --- app/cfg/settings.yaml | 1 + app/class_file_convert.py | 8 +++--- app/class_file_convert_read_out.py | 1 + app/class_file_path.py | 16 ++++++----- app/class_settings.py | 43 +++++++++++++++++++++++++----- 5 files changed, 54 insertions(+), 15 deletions(-) diff --git a/app/cfg/settings.yaml b/app/cfg/settings.yaml index 3dc7125..c56e9f5 100644 --- a/app/cfg/settings.yaml +++ b/app/cfg/settings.yaml @@ -1,5 +1,6 @@ log_file: "server.log" log_level: DEBUG +log_rotation: time path_file: "media_path.yaml" server_ip: "0.0.0.0" server_port: 8000 diff --git a/app/class_file_convert.py b/app/class_file_convert.py index 351e4e3..cae76c3 100644 --- a/app/class_file_convert.py +++ b/app/class_file_convert.py @@ -8,7 +8,6 @@ class Convert: self.yaml = cfg self.obj_path = obj_path self.obj_websocket = websocket - self.obj_process = Process(websocket) self.active_tasks = set() self.active_process = set() @@ -40,6 +39,8 @@ class Convert: async def convert_video(self, obj): """Startet die Videokonvertierung asynchron.""" + obj_process = Process(self.obj_websocket) + obj.convert_start = time.time() command = self.convert_cmd(obj) result = None @@ -57,7 +58,7 @@ class Convert: self.active_process.add(obj) obj.process_start = time.time() - await self.obj_process.read_out(obj) + await obj_process.read_out(obj) await obj.process.wait() # Prozess beendet, Status auswerten @@ -74,13 +75,14 @@ class Convert: except Exception as e: obj.status = 2 - logging.error(f"Fehler in video_convert(): {e}", exc_info=True) + logging.error(f"Fehler in video_convert(): {e}") finally: logging.info(f"Prozess {result}({obj.process.returncode}): {obj.source_file_name}") await self.obj_websocket.send_websocket(obj.to_dict()) self.active_process.discard(obj) self.active_tasks.discard(obj) + self.obj_path.save_paths() obj.convert_end = time.time() diff --git a/app/class_file_convert_read_out.py b/app/class_file_convert_read_out.py index 1f4048f..0bfbf97 100644 --- a/app/class_file_convert_read_out.py +++ b/app/class_file_convert_read_out.py @@ -22,6 +22,7 @@ class Process: async def read_out(self, obj): self.id = obj.id + self.line_empty = 0 i = 100 while True: diff --git a/app/class_file_path.py b/app/class_file_path.py index c11732f..6161b2e 100644 --- a/app/class_file_path.py +++ b/app/class_file_path.py @@ -30,10 +30,13 @@ class Path: Saves the extrated Paths in a File :return: True or False """ - paths_extrat_dict:dict = {} + paths:list = [] - for obj_id, obj in self.paths.items(): - paths_extrat_dict.update({id: obj.__dict__}) + for obj in self.paths.values(): + if obj.status is None: + paths.append(obj.source_file) + + paths_extrat_dict = {"paths": paths} try: with open(f"app/cfg/{self.yaml["path_file"]}", "w", encoding="utf8") as file: @@ -91,11 +94,12 @@ class Path: pattern = r"(?<=\.mkv\s|\.mp4\s|\.avi\s)|(?<=\.webm\s)" paths = re.split(pattern, var_paths) - print(paths) - for path in paths: self.get_with_ffprobe(path) + print(paths) + self.save_paths() + return 1 @staticmethod @@ -153,7 +157,7 @@ class Path: return 1 except Exception as e: - logging.error(f"Get Video Information: {e}", exc_info=True) + logging.error(f"Get Video Information: {e}") return 0 def search_paths(self, path): diff --git a/app/class_settings.py b/app/class_settings.py index f4c9397..7063539 100644 --- a/app/class_settings.py +++ b/app/class_settings.py @@ -1,5 +1,14 @@ import logging import yaml +import traceback +from logging.handlers import TimedRotatingFileHandler, RotatingFileHandler + + +class CustomFormatter(logging.Formatter): + def format(self, record): + if record.levelno >= logging.ERROR and record.exc_info: + record.msg = f"{record.msg}\n{traceback.format_exc()}" + return super().format(record) class Settings: def __init__(self): @@ -17,11 +26,33 @@ class Settings: def set_logging(self): print(self.yaml) + + log_level = self.yaml.get("log_level", "INFO") + log_file = self.yaml.get("log_file", "app.log") + log_mode = self.yaml.get("log_rotation", "size") # "time" oder "size" + + handlers = [logging.StreamHandler()] + + # Handler je nach Modus erstellen + if log_mode == "time": + log_handler = TimedRotatingFileHandler( + f"app/logs/{log_file}", when="midnight", interval=1, backupCount=7, encoding="utf-8" + ) + else: + log_handler = RotatingFileHandler( + f"app/logs/{log_file}", maxBytes=5 * 1024 * 1024, backupCount=5, encoding="utf-8" + ) + + handlers.append(log_handler) + + # Logger konfigurieren logging.basicConfig( - level=self.yaml["log_level"], + level=log_level, format="%(asctime)s - %(levelname)s - %(message)s", - handlers=[ - logging.StreamHandler(), - logging.FileHandler(f"app/logs/{self.yaml['log_file']}") - ] - ) \ No newline at end of file + handlers=handlers + ) + + # Traceback-Formatter setzen + formatter = CustomFormatter("%(asctime)s - %(levelname)s - %(message)s") + for handler in logging.getLogger().handlers: + handler.setFormatter(formatter) \ No newline at end of file