From ea04594e96d18024b5bf5c8f1ab871ec2c676deb Mon Sep 17 00:00:00 2001 From: Henrique Joaquim Date: Thu, 26 Jan 2023 17:52:03 +0000 Subject: [PATCH] Logging login (#4046) * basic logging for the login * removing unused import * hacking the logs custom filter to not filter the email * black * cooping with the new changes * removing redundant method --- openbb_terminal/core/log/generation/common.py | 18 +++++++++++++ .../core/log/generation/custom_logger.py | 25 +++++++++++++++++ .../generation/formatter_with_exceptions.py | 7 +++++ .../core/log/generation/settings_logger.py | 17 +++--------- .../core/log/generation/user_logger.py | 27 +++++++++++++++++++ openbb_terminal/session/user.py | 10 +++++++ openbb_terminal/terminal_controller.py | 8 ++---- 7 files changed, 93 insertions(+), 19 deletions(-) create mode 100644 openbb_terminal/core/log/generation/common.py create mode 100644 openbb_terminal/core/log/generation/custom_logger.py create mode 100644 openbb_terminal/core/log/generation/user_logger.py diff --git a/openbb_terminal/core/log/generation/common.py b/openbb_terminal/core/log/generation/common.py new file mode 100644 index 00000000000..f2a10557370 --- /dev/null +++ b/openbb_terminal/core/log/generation/common.py @@ -0,0 +1,18 @@ +# IMPORTATION STANDARD +import logging + +# IMPORTATION THIRDPARTY + + +# IMPORTATION INTERNAL +from openbb_terminal.core.log.generation.path_tracking_file_handler import ( + PathTrackingFileHandler, +) + + +def do_rollover(): + """RollOver the log file.""" + + for handler in logging.getLogger().handlers: + if isinstance(handler, PathTrackingFileHandler): + handler.doRollover() diff --git a/openbb_terminal/core/log/generation/custom_logger.py b/openbb_terminal/core/log/generation/custom_logger.py new file mode 100644 index 00000000000..42c7682a2a0 --- /dev/null +++ b/openbb_terminal/core/log/generation/custom_logger.py @@ -0,0 +1,25 @@ +# IMPORTATION STANDARD +import logging + +# IMPORTATION THIRDPARTY + + +# IMPORTATION INTERNAL +from openbb_terminal.loggers import setup_logging +from openbb_terminal.core.log.generation import settings_logger +from openbb_terminal.core.log.generation import user_logger +from openbb_terminal.core.log.generation.common import do_rollover + +logger = logging.getLogger(__name__) + + +def log_terminal(test_mode: bool): + """Logs for the terminal""" + + if not test_mode: + setup_logging() + + logger.info("START") + settings_logger.log_all_settings(with_rollover=False) + user_logger.log_user(with_rollover=False) + do_rollover() diff --git a/openbb_terminal/core/log/generation/formatter_with_exceptions.py b/openbb_terminal/core/log/generation/formatter_with_exceptions.py index 58a39f1639b..28c85a4e5a0 100644 --- a/openbb_terminal/core/log/generation/formatter_with_exceptions.py +++ b/openbb_terminal/core/log/generation/formatter_with_exceptions.py @@ -5,9 +5,13 @@ import re # IMPORTATION THIRDPARTY # IMPORTATION INTERNAL +from openbb_terminal.core.log.generation.user_logger import __name__ as user_logger_name from openbb_terminal.core.config.paths import HOME_DIRECTORY from openbb_terminal.core.log.generation.settings import AppSettings +# considering starting at 0 and after the logging prefix i.e., just the text to be filtered +MODULE_POSITION = 1 + class FormatterWithExceptions(logging.Formatter): """Logging Formatter that includes formatting of Exceptions""" @@ -54,6 +58,9 @@ class FormatterWithExceptions(logging.Formatter): @staticmethod def mock_email(text: str) -> str: + if text.split("|")[MODULE_POSITION] == user_logger_name: + return text + pattern = r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" replacement = " FILTERED_EMAIL " text_mocked = re.sub(pattern, replacement, text) diff --git a/openbb_terminal/core/log/generation/settings_logger.py b/openbb_terminal/core/log/generation/settings_logger.py index 46221e64114..3cb5980b95c 100644 --- a/openbb_terminal/core/log/generation/settings_logger.py +++ b/openbb_terminal/core/log/generation/settings_logger.py @@ -11,9 +11,7 @@ from types import FunctionType, ModuleType import openbb_terminal.feature_flags as obbff from openbb_terminal import config_terminal as cfg from openbb_terminal.terminal_helper import is_packaged_application -from openbb_terminal.core.log.generation.path_tracking_file_handler import ( - PathTrackingFileHandler, -) +from openbb_terminal.core.log.generation.common import do_rollover SENSITIVE_WORDS = [ @@ -31,14 +29,15 @@ SENSITIVE_WORDS = [ logger = logging.getLogger(__name__) -def log_all_settings() -> None: +def log_all_settings(with_rollover: bool = True) -> None: """Log all settings""" log_settings() log_config_terminal() log_feature_flags() log_keys() - do_rollover() + if with_rollover: + do_rollover() def log_settings() -> None: @@ -117,11 +116,3 @@ def log_keys() -> None: current_keys[cfg_var_name] = "not_defined" logger.info("KEYS: %s ", json.dumps(current_keys)) - - -def do_rollover(): - """RollOver the log file.""" - - for handler in logging.getLogger().handlers: - if isinstance(handler, PathTrackingFileHandler): - handler.doRollover() diff --git a/openbb_terminal/core/log/generation/user_logger.py b/openbb_terminal/core/log/generation/user_logger.py new file mode 100644 index 00000000000..2c117b2377c --- /dev/null +++ b/openbb_terminal/core/log/generation/user_logger.py @@ -0,0 +1,27 @@ +# IMPORTATION STANDARD +import json +import logging + +# IMPORTATION THIRDPARTY + + +# IMPORTATION INTERNAL +from openbb_terminal.session.user import User +from openbb_terminal.core.log.generation.common import do_rollover + +logger = logging.getLogger(__name__) + + +def log_user(with_rollover: bool = True): + """Log user""" + if not User.is_guest(): + log_user_info() + + if with_rollover: + do_rollover() + + +def log_user_info(): + """Log user info""" + user_info = {"user_uuid": User.get_uuid(), "user_email": User.get_email()} + logger.info("USER: %s ", json.dumps(user_info)) diff --git a/openbb_terminal/session/user.py b/openbb_terminal/session/user.py index 238f38969c1..4c181dadcfa 100644 --- a/openbb_terminal/session/user.py +++ b/openbb_terminal/session/user.py @@ -39,6 +39,16 @@ class User: if obbff.USE_FLAIR == ":openbb" or username in obbff.USE_FLAIR: setattr(obbff, "USE_FLAIR", username + " 🦋") + @classmethod + def get_uuid(cls): + """Get uuid.""" + return User._UUID + + @classmethod + def get_email(cls): + """Get email.""" + return User._EMAIL + @classmethod def whoami(cls): """Display user info.""" diff --git a/openbb_terminal/terminal_controller.py b/openbb_terminal/terminal_controller.py index 86a852a0d0b..a2f6dc352c7 100644 --- a/openbb_terminal/terminal_controller.py +++ b/openbb_terminal/terminal_controller.py @@ -43,8 +43,6 @@ from openbb_terminal.helper_funcs import ( get_flair, EXPORT_ONLY_RAW_DATA_ALLOWED, ) -from openbb_terminal.loggers import setup_logging -from openbb_terminal.core.log.generation.settings_logger import log_all_settings from openbb_terminal.menu import session, is_papermill from openbb_terminal.parent_classes import BaseController from openbb_terminal.rich_config import console, MenuText @@ -62,6 +60,7 @@ from openbb_terminal.helper_funcs import parse_and_split_input from openbb_terminal.keys_model import first_time_user from openbb_terminal.common import feedparser_view from openbb_terminal.reports.reports_model import ipykernel_launcher +from openbb_terminal.core.log.generation.custom_logger import log_terminal # pylint: disable=too-many-public-methods,import-outside-toplevel, too-many-function-args # pylint: disable=too-many-branches,no-member,C0302,too-many-return-statements @@ -807,10 +806,7 @@ def terminal(jobs_cmds: List[str] = None, test_mode=False): if module.startswith("openbb"): importlib.reload(sys.modules[module]) - if not test_mode: - setup_logging() - logger.info("START") - log_all_settings() + log_terminal(test_mode=test_mode) if jobs_cmds is not None and jobs_cmds: logger.info("INPUT: %s", "/".join(jobs_cmds))