diff --git a/src/simulator_worker/omotes_logging.py b/src/simulator_worker/omotes_logging.py new file mode 100644 index 0000000..c2bcf4f --- /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 = True) -> 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..c1ec446 100644 --- a/src/simulator_worker/simulator_worker.py +++ b/src/simulator_worker/simulator_worker.py @@ -36,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() @@ -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))