#2470: implement PR suggestions

This commit is contained in:
Czar Echavez
2024-04-18 16:38:42 +01:00
parent 2a1203675d
commit 34773ed225
7 changed files with 53 additions and 77 deletions

View File

@@ -21,29 +21,6 @@ This section configures how PrimAITE saves data during simulation and training.
log_level: INFO
``log_level``
-------------
Optional. Default value is ``INFO``.
The level of logging that should be visible in the sys logs or the logs output to the terminal.
Available options are:
- ``OFF``: No logs
- ``DEBUG``: Debug level items and the items below
- ``INFO``: Info level items and the items below
- ``WARNING``: Warning level items and the items below
- ``ERROR``: Error level items and the items below
- ``CRITICAL``: Only critical level logs
See also |logging_levels|
.. |logging_levels| raw:: html
<a href="https://docs.python.org/3/library/logging.html#logging-levels" target="blank">Python logging levels</a>
``save_logs``
-------------
@@ -79,3 +56,27 @@ If ``True``, then the pcap files which contain all network traffic during the si
Optional. Default value is ``False``.
If ``True``, then the log files which contain all node actions during the simulation will be saved.
``sys_log_level``
-------------
Optional. Default value is ``INFO``.
The level of logging that should be visible in the sys logs or the logs output to the terminal.
``save_sys_logs`` has to be set to ``True`` for this setting to be used.
Available options are:
- ``DEBUG``: Debug level items and the items below
- ``INFO``: Info level items and the items below
- ``WARNING``: Warning level items and the items below
- ``ERROR``: Error level items and the items below
- ``CRITICAL``: Only critical level logs
See also |logging_levels|
.. |logging_levels| raw:: html
<a href="https://docs.python.org/3/library/logging.html#logging-levels" target="blank">Python logging levels</a>

View File

@@ -35,7 +35,7 @@ class PrimaiteIO:
"""Whether to save system logs."""
write_sys_log_to_terminal: bool = False
"""Whether to write the sys log to the terminal."""
log_level: LogLevel = LogLevel.INFO
sys_log_level: LogLevel = LogLevel.INFO
"""The level of log that should be included in the logfiles/logged into terminal."""
def __init__(self, settings: Optional[Settings] = None) -> None:
@@ -52,7 +52,7 @@ class PrimaiteIO:
SIM_OUTPUT.save_pcap_logs = self.settings.save_pcap_logs
SIM_OUTPUT.save_sys_logs = self.settings.save_sys_logs
SIM_OUTPUT.write_sys_log_to_terminal = self.settings.write_sys_log_to_terminal
SIM_OUTPUT.log_level = self.settings.log_level
SIM_OUTPUT.sys_log_level = self.settings.sys_log_level
def generate_session_path(self, timestamp: Optional[datetime] = None) -> Path:
"""Create a folder for the session and return the path to it."""
@@ -100,8 +100,8 @@ class PrimaiteIO:
"""Create an instance of PrimaiteIO based on a configuration dict."""
config = config or {}
if config.get("log_level"):
config["log_level"] = LogLevel[config["log_level"].upper()] # convert to enum
if config.get("sys_log_level"):
config["sys_log_level"] = LogLevel[config["sys_log_level"].upper()] # convert to enum
new = cls(settings=cls.Settings(**config))

View File

@@ -1,6 +1,6 @@
"""Warning: SIM_OUTPUT is a mutable global variable for the simulation output directory."""
from datetime import datetime
from enum import Enum
from enum import IntEnum
from pathlib import Path
from primaite import _PRIMAITE_ROOT
@@ -8,20 +8,18 @@ from primaite import _PRIMAITE_ROOT
__all__ = ["SIM_OUTPUT"]
class LogLevel(Enum):
class LogLevel(IntEnum):
"""Enum containing all the available log levels for PrimAITE simulation output."""
OFF = 999
"""No logs will be output to terminal or log file."""
DEBUG = 1
DEBUG = 10
"""Debug items will be output to terminal or log file."""
INFO = 2
INFO = 20
"""Info items will be output to terminal or log file."""
WARNING = 3
WARNING = 30
"""Warnings will be output to terminal or log file."""
ERROR = 4
ERROR = 40
"""Errors will be output to terminal or log file."""
CRITICAL = 5
CRITICAL = 50
"""Critical errors will be output to terminal or log file."""
@@ -33,7 +31,7 @@ class _SimOutput:
self.save_pcap_logs: bool = False
self.save_sys_logs: bool = False
self.write_sys_log_to_terminal: bool = False
self.log_level: LogLevel = LogLevel.INFO # default log level is at INFO
self.sys_log_level: LogLevel = LogLevel.INFO # default log level is at INFO
@property
def path(self) -> Path:

View File

@@ -99,7 +99,7 @@ class SysLog:
:param msg: The message to be logged.
:param to_terminal: If True, prints to the terminal too.
"""
if SIM_OUTPUT.log_level.value > LogLevel.DEBUG.value:
if SIM_OUTPUT.sys_log_level > LogLevel.DEBUG:
return
if SIM_OUTPUT.save_sys_logs:
@@ -113,7 +113,7 @@ class SysLog:
:param msg: The message to be logged.
:param to_terminal: If True, prints to the terminal too.
"""
if SIM_OUTPUT.log_level.value > LogLevel.INFO.value:
if SIM_OUTPUT.sys_log_level > LogLevel.INFO:
return
if SIM_OUTPUT.save_sys_logs:
@@ -127,7 +127,7 @@ class SysLog:
:param msg: The message to be logged.
:param to_terminal: If True, prints to the terminal too.
"""
if SIM_OUTPUT.log_level.value > LogLevel.WARNING.value:
if SIM_OUTPUT.sys_log_level > LogLevel.WARNING:
return
if SIM_OUTPUT.save_sys_logs:
@@ -141,7 +141,7 @@ class SysLog:
:param msg: The message to be logged.
:param to_terminal: If True, prints to the terminal too.
"""
if SIM_OUTPUT.log_level.value > LogLevel.ERROR.value:
if SIM_OUTPUT.sys_log_level > LogLevel.ERROR:
return
if SIM_OUTPUT.save_sys_logs:
@@ -155,7 +155,7 @@ class SysLog:
:param msg: The message to be logged.
:param to_terminal: If True, prints to the terminal too.
"""
if LogLevel.CRITICAL.value < SIM_OUTPUT.log_level.value:
if LogLevel.CRITICAL < SIM_OUTPUT.sys_log_level:
return
if SIM_OUTPUT.save_sys_logs:

View File

@@ -8,7 +8,7 @@ io_settings:
save_step_metadata: false
save_pcap_logs: true
save_sys_logs: true
log_level: WARNING
sys_log_level: WARNING
game:

View File

@@ -28,7 +28,7 @@ def test_io_settings():
assert env.io.settings is not None
assert env.io.settings.log_level is LogLevel.WARNING
assert env.io.settings.sys_log_level is LogLevel.WARNING
assert env.io.settings.save_pcap_logs
assert env.io.settings.save_sys_logs
assert env.io.settings.save_step_metadata is False

View File

@@ -11,32 +11,9 @@ def syslog() -> SysLog:
return SysLog(hostname="test")
def test_off_log_level(syslog, capsys):
def test_debug_sys_log_level(syslog, capsys):
"""Test that the debug log level logs debug syslogs and above."""
SIM_OUTPUT.log_level = LogLevel.OFF
SIM_OUTPUT.write_sys_log_to_terminal = True
test_string = str(uuid4())
syslog.debug(test_string)
syslog.info(test_string)
syslog.warning(test_string)
syslog.error(test_string)
syslog.critical(test_string)
captured = "".join(capsys.readouterr())
assert test_string not in captured
assert "DEBUG" not in captured
assert "INFO" not in captured
assert "WARNING" not in captured
assert "ERROR" not in captured
assert "CRITICAL" not in captured
def test_debug_log_level(syslog, capsys):
"""Test that the debug log level logs debug syslogs and above."""
SIM_OUTPUT.log_level = LogLevel.DEBUG
SIM_OUTPUT.sys_log_level = LogLevel.DEBUG
SIM_OUTPUT.write_sys_log_to_terminal = True
test_string = str(uuid4())
@@ -57,9 +34,9 @@ def test_debug_log_level(syslog, capsys):
assert "CRITICAL" in captured
def test_info_log_level(syslog, capsys):
def test_info_sys_log_level(syslog, capsys):
"""Test that the debug log level logs debug syslogs and above."""
SIM_OUTPUT.log_level = LogLevel.INFO
SIM_OUTPUT.sys_log_level = LogLevel.INFO
SIM_OUTPUT.write_sys_log_to_terminal = True
test_string = str(uuid4())
@@ -80,9 +57,9 @@ def test_info_log_level(syslog, capsys):
assert "CRITICAL" in captured
def test_warning_log_level(syslog, capsys):
def test_warning_sys_log_level(syslog, capsys):
"""Test that the debug log level logs debug syslogs and above."""
SIM_OUTPUT.log_level = LogLevel.WARNING
SIM_OUTPUT.sys_log_level = LogLevel.WARNING
SIM_OUTPUT.write_sys_log_to_terminal = True
test_string = str(uuid4())
@@ -103,9 +80,9 @@ def test_warning_log_level(syslog, capsys):
assert "CRITICAL" in captured
def test_error_log_level(syslog, capsys):
def test_error_sys_log_level(syslog, capsys):
"""Test that the debug log level logs debug syslogs and above."""
SIM_OUTPUT.log_level = LogLevel.ERROR
SIM_OUTPUT.sys_log_level = LogLevel.ERROR
SIM_OUTPUT.write_sys_log_to_terminal = True
test_string = str(uuid4())
@@ -126,9 +103,9 @@ def test_error_log_level(syslog, capsys):
assert "CRITICAL" in captured
def test_critical_log_level(syslog, capsys):
def test_critical_sys_log_level(syslog, capsys):
"""Test that the debug log level logs debug syslogs and above."""
SIM_OUTPUT.log_level = LogLevel.CRITICAL
SIM_OUTPUT.sys_log_level = LogLevel.CRITICAL
SIM_OUTPUT.write_sys_log_to_terminal = True
test_string = str(uuid4())