Files
PrimAITE/src/primaite/simulator/__init__.py

89 lines
2.8 KiB
Python
Raw Normal View History

2023-11-17 10:20:26 +00:00
"""Warning: SIM_OUTPUT is a mutable global variable for the simulation output directory."""
from datetime import datetime
2024-04-18 16:38:42 +01:00
from enum import IntEnum
2023-11-17 10:20:26 +00:00
from pathlib import Path
from primaite import _PRIMAITE_ROOT, PRIMAITE_CONFIG
2023-11-17 10:20:26 +00:00
__all__ = ["SIM_OUTPUT"]
from primaite.utils.cli.primaite_config_utils import is_dev_mode
2024-04-29 13:45:10 +01:00
2023-11-17 10:20:26 +00:00
2024-04-18 16:38:42 +01:00
class LogLevel(IntEnum):
"""Enum containing all the available log levels for PrimAITE simulation output."""
2024-04-18 16:38:42 +01:00
DEBUG = 10
"""Debug items will be output to terminal or log file."""
2024-04-18 16:38:42 +01:00
INFO = 20
"""Info items will be output to terminal or log file."""
2024-04-18 16:38:42 +01:00
WARNING = 30
"""Warnings will be output to terminal or log file."""
2024-04-18 16:38:42 +01:00
ERROR = 40
"""Errors will be output to terminal or log file."""
2024-04-18 16:38:42 +01:00
CRITICAL = 50
"""Critical errors will be output to terminal or log file."""
2024-01-05 11:25:57 +00:00
class _SimOutput:
2023-11-17 10:20:26 +00:00
def __init__(self):
self._path: Path = (
_PRIMAITE_ROOT.parent.parent / "simulation_output" / datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
)
self._save_pcap_logs: bool = False
self._save_sys_logs: bool = False
self._write_sys_log_to_terminal: bool = False
self._sys_log_level: LogLevel = LogLevel.WARNING # default log level is at WARNING
2024-04-29 13:45:10 +01:00
2023-11-17 10:20:26 +00:00
@property
def path(self) -> Path:
return self._path
2023-11-17 10:20:26 +00:00
@path.setter
def path(self, new_path: Path) -> None:
self._path = new_path
self._path.mkdir(exist_ok=True, parents=True)
@property
def save_pcap_logs(self) -> bool:
if is_dev_mode():
return PRIMAITE_CONFIG.get("developer_mode").get("output_pcap_logs")
return self._save_pcap_logs
@save_pcap_logs.setter
def save_pcap_logs(self, save_pcap_logs: bool) -> None:
self._save_pcap_logs = save_pcap_logs
@property
def save_sys_logs(self) -> bool:
if is_dev_mode():
return PRIMAITE_CONFIG.get("developer_mode").get("output_sys_logs")
return self._save_sys_logs
@save_sys_logs.setter
def save_sys_logs(self, save_sys_logs: bool) -> None:
self._save_sys_logs = save_sys_logs
@property
def write_sys_log_to_terminal(self) -> bool:
if is_dev_mode():
return PRIMAITE_CONFIG.get("developer_mode").get("output_to_terminal")
return self._write_sys_log_to_terminal
@write_sys_log_to_terminal.setter
def write_sys_log_to_terminal(self, write_sys_log_to_terminal: bool) -> None:
self._write_sys_log_to_terminal = write_sys_log_to_terminal
@property
def sys_log_level(self) -> LogLevel:
if is_dev_mode():
return LogLevel[PRIMAITE_CONFIG.get("developer_mode").get("sys_log_level")]
return self._sys_log_level
@sys_log_level.setter
def sys_log_level(self, sys_log_level: LogLevel) -> None:
self._sys_log_level = sys_log_level
2023-11-17 10:20:26 +00:00
2024-01-05 11:25:57 +00:00
SIM_OUTPUT = _SimOutput()