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
This commit is contained in:
Henrique Joaquim
2023-01-26 17:52:03 +00:00
committed by GitHub
parent da8031640f
commit ea04594e96
7 changed files with 93 additions and 19 deletions

View File

@@ -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()

View File

@@ -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()

View File

@@ -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)

View File

@@ -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()

View File

@@ -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))

View File

@@ -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."""

View File

@@ -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))