#2470: implement PR suggestions
This commit is contained in:
@@ -21,29 +21,6 @@ This section configures how PrimAITE saves data during simulation and training.
|
|||||||
log_level: INFO
|
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``
|
``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``.
|
Optional. Default value is ``False``.
|
||||||
|
|
||||||
If ``True``, then the log files which contain all node actions during the simulation will be saved.
|
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>
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class PrimaiteIO:
|
|||||||
"""Whether to save system logs."""
|
"""Whether to save system logs."""
|
||||||
write_sys_log_to_terminal: bool = False
|
write_sys_log_to_terminal: bool = False
|
||||||
"""Whether to write the sys log to the terminal."""
|
"""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."""
|
"""The level of log that should be included in the logfiles/logged into terminal."""
|
||||||
|
|
||||||
def __init__(self, settings: Optional[Settings] = None) -> None:
|
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_pcap_logs = self.settings.save_pcap_logs
|
||||||
SIM_OUTPUT.save_sys_logs = self.settings.save_sys_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.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:
|
def generate_session_path(self, timestamp: Optional[datetime] = None) -> Path:
|
||||||
"""Create a folder for the session and return the path to it."""
|
"""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."""
|
"""Create an instance of PrimaiteIO based on a configuration dict."""
|
||||||
config = config or {}
|
config = config or {}
|
||||||
|
|
||||||
if config.get("log_level"):
|
if config.get("sys_log_level"):
|
||||||
config["log_level"] = LogLevel[config["log_level"].upper()] # convert to enum
|
config["sys_log_level"] = LogLevel[config["sys_log_level"].upper()] # convert to enum
|
||||||
|
|
||||||
new = cls(settings=cls.Settings(**config))
|
new = cls(settings=cls.Settings(**config))
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"""Warning: SIM_OUTPUT is a mutable global variable for the simulation output directory."""
|
"""Warning: SIM_OUTPUT is a mutable global variable for the simulation output directory."""
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from enum import Enum
|
from enum import IntEnum
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from primaite import _PRIMAITE_ROOT
|
from primaite import _PRIMAITE_ROOT
|
||||||
@@ -8,20 +8,18 @@ from primaite import _PRIMAITE_ROOT
|
|||||||
__all__ = ["SIM_OUTPUT"]
|
__all__ = ["SIM_OUTPUT"]
|
||||||
|
|
||||||
|
|
||||||
class LogLevel(Enum):
|
class LogLevel(IntEnum):
|
||||||
"""Enum containing all the available log levels for PrimAITE simulation output."""
|
"""Enum containing all the available log levels for PrimAITE simulation output."""
|
||||||
|
|
||||||
OFF = 999
|
DEBUG = 10
|
||||||
"""No logs will be output to terminal or log file."""
|
|
||||||
DEBUG = 1
|
|
||||||
"""Debug items will be output to terminal or log file."""
|
"""Debug items will be output to terminal or log file."""
|
||||||
INFO = 2
|
INFO = 20
|
||||||
"""Info items will be output to terminal or log file."""
|
"""Info items will be output to terminal or log file."""
|
||||||
WARNING = 3
|
WARNING = 30
|
||||||
"""Warnings will be output to terminal or log file."""
|
"""Warnings will be output to terminal or log file."""
|
||||||
ERROR = 4
|
ERROR = 40
|
||||||
"""Errors will be output to terminal or log file."""
|
"""Errors will be output to terminal or log file."""
|
||||||
CRITICAL = 5
|
CRITICAL = 50
|
||||||
"""Critical errors will be output to terminal or log file."""
|
"""Critical errors will be output to terminal or log file."""
|
||||||
|
|
||||||
|
|
||||||
@@ -33,7 +31,7 @@ class _SimOutput:
|
|||||||
self.save_pcap_logs: bool = False
|
self.save_pcap_logs: bool = False
|
||||||
self.save_sys_logs: bool = False
|
self.save_sys_logs: bool = False
|
||||||
self.write_sys_log_to_terminal: 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
|
@property
|
||||||
def path(self) -> Path:
|
def path(self) -> Path:
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ class SysLog:
|
|||||||
:param msg: The message to be logged.
|
:param msg: The message to be logged.
|
||||||
:param to_terminal: If True, prints to the terminal too.
|
: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
|
return
|
||||||
|
|
||||||
if SIM_OUTPUT.save_sys_logs:
|
if SIM_OUTPUT.save_sys_logs:
|
||||||
@@ -113,7 +113,7 @@ class SysLog:
|
|||||||
:param msg: The message to be logged.
|
:param msg: The message to be logged.
|
||||||
:param to_terminal: If True, prints to the terminal too.
|
: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
|
return
|
||||||
|
|
||||||
if SIM_OUTPUT.save_sys_logs:
|
if SIM_OUTPUT.save_sys_logs:
|
||||||
@@ -127,7 +127,7 @@ class SysLog:
|
|||||||
:param msg: The message to be logged.
|
:param msg: The message to be logged.
|
||||||
:param to_terminal: If True, prints to the terminal too.
|
: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
|
return
|
||||||
|
|
||||||
if SIM_OUTPUT.save_sys_logs:
|
if SIM_OUTPUT.save_sys_logs:
|
||||||
@@ -141,7 +141,7 @@ class SysLog:
|
|||||||
:param msg: The message to be logged.
|
:param msg: The message to be logged.
|
||||||
:param to_terminal: If True, prints to the terminal too.
|
: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
|
return
|
||||||
|
|
||||||
if SIM_OUTPUT.save_sys_logs:
|
if SIM_OUTPUT.save_sys_logs:
|
||||||
@@ -155,7 +155,7 @@ class SysLog:
|
|||||||
:param msg: The message to be logged.
|
:param msg: The message to be logged.
|
||||||
:param to_terminal: If True, prints to the terminal too.
|
: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
|
return
|
||||||
|
|
||||||
if SIM_OUTPUT.save_sys_logs:
|
if SIM_OUTPUT.save_sys_logs:
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ io_settings:
|
|||||||
save_step_metadata: false
|
save_step_metadata: false
|
||||||
save_pcap_logs: true
|
save_pcap_logs: true
|
||||||
save_sys_logs: true
|
save_sys_logs: true
|
||||||
log_level: WARNING
|
sys_log_level: WARNING
|
||||||
|
|
||||||
|
|
||||||
game:
|
game:
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ def test_io_settings():
|
|||||||
|
|
||||||
assert env.io.settings is not None
|
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_pcap_logs
|
||||||
assert env.io.settings.save_sys_logs
|
assert env.io.settings.save_sys_logs
|
||||||
assert env.io.settings.save_step_metadata is False
|
assert env.io.settings.save_step_metadata is False
|
||||||
|
|||||||
@@ -11,32 +11,9 @@ def syslog() -> SysLog:
|
|||||||
return SysLog(hostname="test")
|
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."""
|
"""Test that the debug log level logs debug syslogs and above."""
|
||||||
SIM_OUTPUT.log_level = LogLevel.OFF
|
SIM_OUTPUT.sys_log_level = LogLevel.DEBUG
|
||||||
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.write_sys_log_to_terminal = True
|
SIM_OUTPUT.write_sys_log_to_terminal = True
|
||||||
|
|
||||||
test_string = str(uuid4())
|
test_string = str(uuid4())
|
||||||
@@ -57,9 +34,9 @@ def test_debug_log_level(syslog, capsys):
|
|||||||
assert "CRITICAL" in captured
|
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."""
|
"""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
|
SIM_OUTPUT.write_sys_log_to_terminal = True
|
||||||
|
|
||||||
test_string = str(uuid4())
|
test_string = str(uuid4())
|
||||||
@@ -80,9 +57,9 @@ def test_info_log_level(syslog, capsys):
|
|||||||
assert "CRITICAL" in captured
|
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."""
|
"""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
|
SIM_OUTPUT.write_sys_log_to_terminal = True
|
||||||
|
|
||||||
test_string = str(uuid4())
|
test_string = str(uuid4())
|
||||||
@@ -103,9 +80,9 @@ def test_warning_log_level(syslog, capsys):
|
|||||||
assert "CRITICAL" in captured
|
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."""
|
"""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
|
SIM_OUTPUT.write_sys_log_to_terminal = True
|
||||||
|
|
||||||
test_string = str(uuid4())
|
test_string = str(uuid4())
|
||||||
@@ -126,9 +103,9 @@ def test_error_log_level(syslog, capsys):
|
|||||||
assert "CRITICAL" in captured
|
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."""
|
"""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
|
SIM_OUTPUT.write_sys_log_to_terminal = True
|
||||||
|
|
||||||
test_string = str(uuid4())
|
test_string = str(uuid4())
|
||||||
|
|||||||
Reference in New Issue
Block a user