From 7b9e2dc1d0e51b0a04ad4fd3b7aadb656ff6478f Mon Sep 17 00:00:00 2001 From: Michiel Tukker Date: Fri, 21 Mar 2025 08:28:28 +0100 Subject: [PATCH 1/3] logging handler implementation --- src/simulator_worker/omotes_logging.py | 46 ++++++++++++++++++++++++ src/simulator_worker/simulator_worker.py | 4 ++- 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/simulator_worker/omotes_logging.py diff --git a/src/simulator_worker/omotes_logging.py b/src/simulator_worker/omotes_logging.py new file mode 100644 index 0000000..a544076 --- /dev/null +++ b/src/simulator_worker/omotes_logging.py @@ -0,0 +1,46 @@ +import logging + +from omotes_sdk.internal.orchestrator_worker_events.esdl_messages import ( + EsdlMessage, + MessageSeverity, +) + +logger = logging.getLogger(__name__) + +SEVERITY_MAP = { + logging.CRITICAL: MessageSeverity.ERROR, + logging.ERROR: MessageSeverity.ERROR, + logging.WARNING: MessageSeverity.WARNING, + logging.INFO: MessageSeverity.INFO, + logging.DEBUG: MessageSeverity.DEBUG, +} + + +class OmotesEsdlMessageHandler(logging.Handler): + """Custom logging handler for simulator messages.""" + + esdl_msgs: list[EsdlMessage] = [] # ClassVariable for shared storage (.append is threadsafe). + + def emit(self, record: logging.LogRecord) -> None: + """Emit a log record.""" + esdl_object_id = record.__dict__.get("esdl_object_id", None) + self.esdl_msgs.append( + EsdlMessage( + esdl_object_id=esdl_object_id, + severity=SEVERITY_MAP.get(record.levelno, MessageSeverity.INFO), + technical_message=record.getMessage(), + ) + ) + + +def setup_logging(debug: bool = False) -> OmotesEsdlMessageHandler: + """Setup logging for the simulator.""" + level = logging.DEBUG if debug else logging.INFO + root = logging.getLogger() + + formatter = logging.Formatter("%(asctime)s [%(levelname)s]:%(name)s - %(message)s") + esdl_handler = OmotesEsdlMessageHandler() + esdl_handler.setLevel(level) + esdl_handler.setFormatter(formatter) + root.addHandler(esdl_handler) + return esdl_handler diff --git a/src/simulator_worker/simulator_worker.py b/src/simulator_worker/simulator_worker.py index 0a5a350..6f51ea4 100644 --- a/src/simulator_worker/simulator_worker.py +++ b/src/simulator_worker/simulator_worker.py @@ -21,6 +21,7 @@ from uuid import uuid4 import dotenv +from omotes_logging import OmotesEsdlMessageHandler, setup_logging from omotes_sdk.internal.orchestrator_worker_events.esdl_messages import EsdlMessage from omotes_sdk.internal.worker.worker import UpdateProgressHandler, initialize_worker from omotes_sdk.types import ProtobufDict @@ -112,12 +113,13 @@ def simulator_worker_task( # Write output_esdl to file for debugging # with open(f"result_{simulation_id}.esdl", "w") as file: # file.writelines(output_esdl) - return output_esdl, [] + return output_esdl, OmotesEsdlMessageHandler.esdl_msgs def start_app() -> None: """Design Toolkit Application application.""" try: + setup_logging() initialize_worker("simulator", simulator_worker_task) except Exception as error: logger.error("Error occured: %s at: %s", error, traceback.format_exc(limit=-1)) From 5b082d6523fe6b7b1c231682875528cd0e21320f Mon Sep 17 00:00:00 2001 From: Michiel Tukker Date: Fri, 21 Mar 2025 08:43:48 +0100 Subject: [PATCH 2/3] Set DEBUG loglevel by default. Filtering is done in frontend --- src/simulator_worker/omotes_logging.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/simulator_worker/omotes_logging.py b/src/simulator_worker/omotes_logging.py index a544076..c2bcf4f 100644 --- a/src/simulator_worker/omotes_logging.py +++ b/src/simulator_worker/omotes_logging.py @@ -33,7 +33,7 @@ def emit(self, record: logging.LogRecord) -> None: ) -def setup_logging(debug: bool = False) -> OmotesEsdlMessageHandler: +def setup_logging(debug: bool = True) -> OmotesEsdlMessageHandler: """Setup logging for the simulator.""" level = logging.DEBUG if debug else logging.INFO root = logging.getLogger() From 5a609ed4122a7d280d5257fb116ba897613930f9 Mon Sep 17 00:00:00 2001 From: Michiel Tukker Date: Fri, 21 Mar 2025 08:46:15 +0100 Subject: [PATCH 3/3] Fixed incorrect improt --- src/simulator_worker/simulator_worker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/simulator_worker/simulator_worker.py b/src/simulator_worker/simulator_worker.py index 6f51ea4..c1ec446 100644 --- a/src/simulator_worker/simulator_worker.py +++ b/src/simulator_worker/simulator_worker.py @@ -21,7 +21,6 @@ from uuid import uuid4 import dotenv -from omotes_logging import OmotesEsdlMessageHandler, setup_logging from omotes_sdk.internal.orchestrator_worker_events.esdl_messages import EsdlMessage from omotes_sdk.internal.worker.worker import UpdateProgressHandler, initialize_worker from omotes_sdk.types import ProtobufDict @@ -37,6 +36,7 @@ from omotes_simulator_core.infrastructure.simulation_manager import SimulationManager from omotes_simulator_core.infrastructure.utils import pyesdl_from_string +from simulator_worker.omotes_logging import OmotesEsdlMessageHandler, setup_logging from simulator_worker.utils import add_datetime_index, create_output_esdl dotenv.load_dotenv()