2023-11-17 10:20:26 +00:00
|
|
|
"""Warning: SIM_OUTPUT is a mutable global variable for the simulation output directory."""
|
2023-09-06 11:35:41 +01:00
|
|
|
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
|
2023-09-06 11:35:41 +01:00
|
|
|
|
2024-05-01 14:02:40 +01:00
|
|
|
from primaite import _PRIMAITE_ROOT, PRIMAITE_CONFIG, PRIMAITE_PATHS
|
2023-08-07 19:33:52 +01:00
|
|
|
|
2023-11-17 10:20:26 +00:00
|
|
|
__all__ = ["SIM_OUTPUT"]
|
2023-09-06 11:35:41 +01:00
|
|
|
|
2024-04-30 19:36:22 +01:00
|
|
|
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):
|
2024-04-17 18:13:00 +01:00
|
|
|
"""Enum containing all the available log levels for PrimAITE simulation output."""
|
|
|
|
|
|
2024-04-18 16:38:42 +01:00
|
|
|
DEBUG = 10
|
2024-04-17 18:13:00 +01:00
|
|
|
"""Debug items will be output to terminal or log file."""
|
2024-04-18 16:38:42 +01:00
|
|
|
INFO = 20
|
2024-04-17 18:13:00 +01:00
|
|
|
"""Info items will be output to terminal or log file."""
|
2024-04-18 16:38:42 +01:00
|
|
|
WARNING = 30
|
2024-04-17 18:13:00 +01:00
|
|
|
"""Warnings will be output to terminal or log file."""
|
2024-04-18 16:38:42 +01:00
|
|
|
ERROR = 40
|
2024-04-17 18:13:00 +01:00
|
|
|
"""Errors will be output to terminal or log file."""
|
2024-04-18 16:38:42 +01:00
|
|
|
CRITICAL = 50
|
2024-04-17 18:13:00 +01:00
|
|
|
"""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):
|
2024-05-01 14:02:40 +01:00
|
|
|
date_str = datetime.now().strftime("%Y-%m-%d")
|
|
|
|
|
time_str = datetime.now().strftime("%H-%M-%S")
|
|
|
|
|
|
|
|
|
|
path = PRIMAITE_PATHS.user_sessions_path / date_str / time_str
|
|
|
|
|
|
|
|
|
|
if is_dev_mode():
|
|
|
|
|
# if dev mode is enabled, if output dir is not set, print to primaite repo root
|
|
|
|
|
path: Path = _PRIMAITE_ROOT.parent.parent / "sessions" / date_str / time_str / "simulation_output"
|
|
|
|
|
# otherwise print to output dir
|
|
|
|
|
|
|
|
|
|
self._path = path
|
2024-04-30 19:15:54 +01:00
|
|
|
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:
|
2024-04-30 19:15:54 +01:00
|
|
|
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)
|
|
|
|
|
|
2024-04-30 19:15:54 +01:00
|
|
|
@property
|
|
|
|
|
def save_pcap_logs(self) -> bool:
|
|
|
|
|
if is_dev_mode():
|
2024-04-30 19:36:22 +01:00
|
|
|
return PRIMAITE_CONFIG.get("developer_mode").get("output_pcap_logs")
|
2024-04-30 19:15:54 +01:00
|
|
|
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():
|
2024-04-30 19:36:22 +01:00
|
|
|
return PRIMAITE_CONFIG.get("developer_mode").get("output_sys_logs")
|
2024-04-30 19:15:54 +01:00
|
|
|
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():
|
2024-04-30 19:36:22 +01:00
|
|
|
return PRIMAITE_CONFIG.get("developer_mode").get("output_to_terminal")
|
2024-04-30 19:15:54 +01:00
|
|
|
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():
|
2024-04-30 19:36:22 +01:00
|
|
|
return LogLevel[PRIMAITE_CONFIG.get("developer_mode").get("sys_log_level")]
|
2024-04-30 19:15:54 +01:00
|
|
|
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()
|