def test_log_this_with_extra_payload(self, mock_log):
        logger = DBEventLogger()

        @logger.log_this_with_extra_payload
        def test_func(arg1, add_extra_log_payload, karg1=1):
            time.sleep(0.1)
            add_extra_log_payload(foo="bar")
            return arg1 * karg1

        with app.test_request_context():
            result = test_func(1, karg1=2)  # pylint: disable=no-value-for-parameter
            payload = mock_log.call_args[1]
            self.assertEqual(result, 2)
            self.assertEqual(
                payload["records"],
                [
                    {
                        "foo": "bar",
                        "path": "/",
                        "karg1": 2,
                        "object_ref": test_func.__qualname__,
                    }
                ],
            )
            self.assertGreaterEqual(payload["duration_ms"], 100)
Exemplo n.º 2
0
    def test_log_this_decorator(self, mock_log):
        logger = DBEventLogger()

        @logger.log_this
        def test_func():
            time.sleep(0.05)
            return 1

        with app.test_request_context():
            result = test_func()
            self.assertEqual(result, 1)
            assert mock_log.call_args[1]["duration_ms"] >= 50
Exemplo n.º 3
0
    def test_log_manually_decorator(self, mock_log):
        logger = DBEventLogger()

        @logger.log_manually
        def test_func(arg1, update_log_payload, karg1=1):
            time.sleep(0.1)
            update_log_payload(foo="bar")
            return arg1 * karg1

        with app.test_request_context():
            result = test_func(1, karg1=2)  # pylint: disable=no-value-for-parameter
            self.assertEqual(result, 2)
            # should contain only manual payload
            self.assertEqual(mock_log.call_args[1]["records"], [{
                "foo": "bar"
            }])
            assert mock_log.call_args[1]["duration_ms"] >= 100
Exemplo n.º 4
0
    def test_log_this(self, mock_log):
        logger = DBEventLogger()

        @logger.log_this
        def test_func():
            time.sleep(0.05)
            return 1

        with app.test_request_context("/superset/dashboard/1/?myparam=foo"):
            result = test_func()
            payload = mock_log.call_args[1]
            self.assertEqual(result, 1)
            self.assertEqual(
                payload["records"],
                [{
                    "myparam": "foo",
                    "path": "/superset/dashboard/1/",
                    "url_rule": "/superset/dashboard/<dashboard_id_or_slug>/",
                    "object_ref": test_func.__qualname__,
                }],
            )
            self.assertGreaterEqual(payload["duration_ms"], 50)
Exemplo n.º 5
0
    BaseTemplateProcessor, )
from superset.stats_logger import DummyStatsLogger
from superset.typing import CacheConfig
from superset.utils.log import DBEventLogger
from superset.utils.logging_configurator import DefaultLoggingConfigurator

logger = logging.getLogger(__name__)

if TYPE_CHECKING:
    from flask_appbuilder.security.sqla import models  # pylint: disable=unused-import

    from superset.models.core import Database  # pylint: disable=unused-import

# Realtime stats logger, a StatsD implementation exists
STATS_LOGGER = DummyStatsLogger()
EVENT_LOGGER = DBEventLogger()

SUPERSET_LOG_VIEW = True

BASE_DIR = os.path.abspath(os.path.dirname(__file__))
if "SUPERSET_HOME" in os.environ:
    DATA_DIR = os.environ["SUPERSET_HOME"]
else:
    DATA_DIR = os.path.join(os.path.expanduser("~"), ".superset")

# ---------------------------------------------------------
# Superset specific config
# ---------------------------------------------------------
VERSION_INFO_FILE = os.path.join(BASE_DIR, "static", "version_info.json")
PACKAGE_JSON_FILE = os.path.join(BASE_DIR, "static", "assets", "package.json")
Exemplo n.º 6
0
 def setup_event_logger(self) -> None:
     _event_logger["event_logger"] = get_event_logger_from_cfg_value(
         self.superset_app.config.get("EVENT_LOGGER", DBEventLogger()))
Exemplo n.º 7
0
        security_manager_class=custom_sm,
        update_perms=False,  # Run `superset init` to update FAB's perms
    )

security_manager = appbuilder.sm

results_backend = app.config.get("RESULTS_BACKEND")
results_backend_use_msgpack = app.config.get("RESULTS_BACKEND_USE_MSGPACK")

# Merge user defined feature flags with default feature flags
_feature_flags = app.config.get("DEFAULT_FEATURE_FLAGS") or {}
_feature_flags.update(app.config.get("FEATURE_FLAGS") or {})

# Event Logger
event_logger = get_event_logger_from_cfg_value(
    app.config.get("EVENT_LOGGER", DBEventLogger()))


def get_feature_flags():
    GET_FEATURE_FLAGS_FUNC = app.config.get("GET_FEATURE_FLAGS_FUNC")
    if GET_FEATURE_FLAGS_FUNC:
        return GET_FEATURE_FLAGS_FUNC(deepcopy(_feature_flags))
    return _feature_flags


def is_feature_enabled(feature):
    """Utility function for checking whether a feature is turned on"""
    return get_feature_flags().get(feature)


# Flask-Compress
Exemplo n.º 8
0
 def setup_event_logger(self):
     _event_logger["event_logger"] = get_event_logger_from_cfg_value(
         self.flask_app.config.get("EVENT_LOGGER", DBEventLogger()))
 def test_correct_config_object(self):
     # test that assignment of concrete AbstractBaseClass impl returns
     # unmodified object
     obj = DBEventLogger()
     res = get_event_logger_from_cfg_value(obj)
     self.assertIs(obj, res)