mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-06-28 06:41:43 +00:00
refactor: remove custom access logger
It is fine when application is able to log request, however, normally it produces a lot noise, which has been handled by adding special logger. However, nowadays it requires a lot endpoints to be filtered and doesn't provide any choice. Instead of it lets disable access logger by default and let users decide do they need or not to see access log messages
This commit is contained in:
@ -1,16 +0,0 @@
|
||||
import logging
|
||||
import pytest
|
||||
|
||||
from ahriman.core.log.filtered_access_logger import FilteredAccessLogger
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def filtered_access_logger() -> FilteredAccessLogger:
|
||||
"""
|
||||
fixture for custom access logger
|
||||
|
||||
Returns:
|
||||
FilteredAccessLogger: custom access logger test instance
|
||||
"""
|
||||
logger = logging.getLogger()
|
||||
return FilteredAccessLogger(logger)
|
@ -1,136 +0,0 @@
|
||||
from pytest_mock import MockerFixture
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from ahriman.core.log.filtered_access_logger import FilteredAccessLogger
|
||||
|
||||
|
||||
def test_is_distributed_post() -> None:
|
||||
"""
|
||||
must correctly define distributed services ping request
|
||||
"""
|
||||
request = MagicMock()
|
||||
|
||||
request.method = "POST"
|
||||
request.path = "/api/v1/distributed"
|
||||
assert FilteredAccessLogger.is_distributed_post(request)
|
||||
|
||||
request.method = "GET"
|
||||
request.path = "/api/v1/distributed"
|
||||
assert not FilteredAccessLogger.is_distributed_post(request)
|
||||
|
||||
request.method = "POST"
|
||||
request.path = "/api/v1/distributed/path"
|
||||
assert not FilteredAccessLogger.is_distributed_post(request)
|
||||
|
||||
|
||||
def test_is_info_get() -> None:
|
||||
"""
|
||||
must correctly define health check request
|
||||
"""
|
||||
request = MagicMock()
|
||||
|
||||
request.method = "GET"
|
||||
request.path = "/api/v1/info"
|
||||
assert FilteredAccessLogger.is_info_get(request)
|
||||
|
||||
request.method = "POST"
|
||||
request.path = "/api/v1/info"
|
||||
assert not FilteredAccessLogger.is_info_get(request)
|
||||
|
||||
request.method = "GET"
|
||||
request.path = "/api/v1/infos"
|
||||
assert not FilteredAccessLogger.is_info_get(request)
|
||||
|
||||
|
||||
def test_is_logs_post() -> None:
|
||||
"""
|
||||
must correctly define if request belongs to logs posting
|
||||
"""
|
||||
request = MagicMock()
|
||||
|
||||
request.method = "POST"
|
||||
request.path = "/api/v1/packages/ahriman/logs"
|
||||
assert FilteredAccessLogger.is_logs_post(request)
|
||||
|
||||
request.method = "POST"
|
||||
request.path = "/api/v1/packages/linux-headers/logs"
|
||||
assert FilteredAccessLogger.is_logs_post(request)
|
||||
|
||||
request.method = "POST"
|
||||
request.path = "/api/v1/packages/memtest86+/logs"
|
||||
assert FilteredAccessLogger.is_logs_post(request)
|
||||
|
||||
request.method = "POST"
|
||||
request.path = "/api/v1/packages/memtest86%2B/logs"
|
||||
assert FilteredAccessLogger.is_logs_post(request)
|
||||
|
||||
request.method = "POST"
|
||||
request.path = "/api/v1/packages/python2.7/logs"
|
||||
assert FilteredAccessLogger.is_logs_post(request)
|
||||
|
||||
request.method = "GET"
|
||||
request.path = "/api/v1/packages/ahriman/logs"
|
||||
assert not FilteredAccessLogger.is_logs_post(request)
|
||||
|
||||
request.method = "POST"
|
||||
request.path = "/api/v1/packages/ahriman"
|
||||
assert not FilteredAccessLogger.is_logs_post(request)
|
||||
|
||||
request.method = "POST"
|
||||
request.path = "/api/v1/packages/ahriman/logs/random/path/after"
|
||||
assert not FilteredAccessLogger.is_logs_post(request)
|
||||
|
||||
|
||||
def test_is_process_get() -> None:
|
||||
"""
|
||||
must correctly define if request belongs to process get
|
||||
"""
|
||||
request = MagicMock()
|
||||
|
||||
request.method = "GET"
|
||||
request.path = "/api/v1/service/process/e7d67119-264a-48f4-b7e4-07bc96a7de00"
|
||||
assert FilteredAccessLogger.is_process_get(request)
|
||||
|
||||
request.method = "POST"
|
||||
request.path = "/api/v1/service/process/e7d67119-264a-48f4-b7e4-07bc96a7de00"
|
||||
assert not FilteredAccessLogger.is_process_get(request)
|
||||
|
||||
request.method = "GET"
|
||||
request.path = "/api/v1/service/process/e7d67119-264a-48f4-b7e4-07bc96a7de00/some/random/path"
|
||||
assert not FilteredAccessLogger.is_process_get(request)
|
||||
|
||||
request.method = "GET"
|
||||
request.path = "/api/v1/service/process"
|
||||
assert not FilteredAccessLogger.is_process_get(request)
|
||||
|
||||
request.method = "GET"
|
||||
request.path = "/api/v1/service/process/"
|
||||
assert not FilteredAccessLogger.is_process_get(request)
|
||||
|
||||
|
||||
def test_log(filtered_access_logger: FilteredAccessLogger, mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must emit log record
|
||||
"""
|
||||
request_mock = MagicMock()
|
||||
response_mock = MagicMock()
|
||||
is_log_path_mock = mocker.patch("ahriman.core.log.filtered_access_logger.FilteredAccessLogger.is_logs_post",
|
||||
return_value=False)
|
||||
log_mock = mocker.patch("aiohttp.web_log.AccessLogger.log")
|
||||
|
||||
filtered_access_logger.log(request_mock, response_mock, 0.001)
|
||||
is_log_path_mock.assert_called_once_with(request_mock)
|
||||
log_mock.assert_called_once_with(filtered_access_logger, request_mock, response_mock, 0.001)
|
||||
|
||||
|
||||
def test_log_filter_logs(filtered_access_logger: FilteredAccessLogger, mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must skip log record in case if it is from logs posting
|
||||
"""
|
||||
request_mock = MagicMock()
|
||||
response_mock = MagicMock()
|
||||
mocker.patch("ahriman.core.log.filtered_access_logger.FilteredAccessLogger.is_logs_post", return_value=True)
|
||||
log_mock = mocker.patch("aiohttp.web_log.AccessLogger.log")
|
||||
|
||||
filtered_access_logger.log(request_mock, response_mock, 0.001)
|
||||
log_mock.assert_not_called()
|
@ -7,7 +7,6 @@ from unittest.mock import call as MockCall
|
||||
|
||||
from ahriman.core.configuration import Configuration
|
||||
from ahriman.core.exceptions import InitializeError
|
||||
from ahriman.core.log.filtered_access_logger import FilteredAccessLogger
|
||||
from ahriman.core.spawn import Spawn
|
||||
from ahriman.core.status.watcher import Watcher
|
||||
from ahriman.web.keys import ConfigurationKey
|
||||
@ -104,7 +103,7 @@ def test_run(application: Application, mocker: MockerFixture) -> None:
|
||||
run_server(application)
|
||||
run_application_mock.assert_called_once_with(
|
||||
application, host="127.0.0.1", port=port, sock=None, handle_signals=True,
|
||||
access_log=pytest.helpers.anyvar(int), access_log_class=FilteredAccessLogger
|
||||
access_log=pytest.helpers.anyvar(int),
|
||||
)
|
||||
|
||||
|
||||
@ -119,7 +118,7 @@ def test_run_with_auth(application_with_auth: Application, mocker: MockerFixture
|
||||
run_server(application_with_auth)
|
||||
run_application_mock.assert_called_once_with(
|
||||
application_with_auth, host="127.0.0.1", port=port, sock=None, handle_signals=True,
|
||||
access_log=pytest.helpers.anyvar(int), access_log_class=FilteredAccessLogger
|
||||
access_log=pytest.helpers.anyvar(int),
|
||||
)
|
||||
|
||||
|
||||
@ -136,7 +135,7 @@ def test_run_with_socket(application: Application, mocker: MockerFixture) -> Non
|
||||
socket_mock.assert_called_once_with(application[ConfigurationKey], application)
|
||||
run_application_mock.assert_called_once_with(
|
||||
application, host="127.0.0.1", port=port, sock=42, handle_signals=True,
|
||||
access_log=pytest.helpers.anyvar(int), access_log_class=FilteredAccessLogger
|
||||
access_log=pytest.helpers.anyvar(int),
|
||||
)
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user