Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions src/simulator_worker/omotes_logging.py
Original file line number Diff line number Diff line change
@@ -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
4 changes: 3 additions & 1 deletion src/simulator_worker/simulator_worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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))
Expand Down
Loading