Fix broken monitoring verbosity (#793).

This commit is contained in:
Dan Helfman
2025-04-05 16:11:42 -07:00
parent 445f700b09
commit edee3c3788
7 changed files with 51 additions and 31 deletions
+1 -1
View File
@@ -95,7 +95,7 @@ class Monitoring_hooks:
self.config_filename = config_filename
self.config = config
self.dry_run = global_arguments.dry_run
self.monitoring_log_level = verbosity_to_log_level(global_arguments.monitoring_verbosity)
self.monitoring_log_level = verbosity_to_log_level(config.get('monitoring_verbosity'))
self.monitoring_hooks_are_activated = (
using_primary_action and self.monitoring_log_level != DISABLED
)
+6 -2
View File
@@ -38,11 +38,13 @@ class Forgetful_buffering_handler(logging.Handler):
self.forgot = True
def add_handler(handler): # pragma: no cover
def add_handler(handler):
'''
Add the given handler to the global logger.
'''
logging.getLogger().addHandler(handler)
logger = logging.getLogger()
logger.addHandler(handler)
logger.setLevel(min(handler.level for handler in logger.handlers))
def get_handler(identifier):
@@ -90,3 +92,5 @@ def remove_handler(identifier):
logger.removeHandler(get_handler(identifier))
except ValueError:
pass
logger.setLevel(min(handler.level for handler in logger.handlers))
@@ -8,13 +8,17 @@ from borgmatic.hooks.monitoring import apprise as module
def test_destroy_monitor_removes_apprise_handler():
logger = logging.getLogger()
original_handlers = list(logger.handlers)
# Don't mess with the actual log level because it can impact downstream tests.
flexmock(logger).should_receive('setLevel')
module.borgmatic.hooks.monitoring.logs.add_handler(
module.borgmatic.hooks.monitoring.logs.Forgetful_buffering_handler(
identifier=module.HANDLER_IDENTIFIER, byte_capacity=100, log_level=1
)
)
module.destroy_monitor(flexmock(), flexmock(), flexmock(), flexmock())
module.destroy_monitor(
hook_config=flexmock(), config=flexmock(), monitoring_log_level=1, dry_run=False
)
assert logger.handlers == original_handlers
@@ -23,6 +27,10 @@ def test_destroy_monitor_without_apprise_handler_does_not_raise():
logger = logging.getLogger()
original_handlers = list(logger.handlers)
module.destroy_monitor(flexmock(), flexmock(), flexmock(), flexmock())
# Don't mess with the actual log level because it can impact downstream tests.
flexmock(logger).should_receive('setLevel')
module.destroy_monitor(
hook_config=flexmock(), config=flexmock(), monitoring_log_level=1, dry_run=False
)
assert logger.handlers == original_handlers
@@ -8,13 +8,18 @@ from borgmatic.hooks.monitoring import healthchecks as module
def test_destroy_monitor_removes_healthchecks_handler():
logger = logging.getLogger()
original_handlers = list(logger.handlers)
# Don't mess with the actual log level because it can impact downstream tests.
flexmock(logger).should_receive('setLevel')
module.borgmatic.hooks.monitoring.logs.add_handler(
module.borgmatic.hooks.monitoring.logs.Forgetful_buffering_handler(
identifier=module.HANDLER_IDENTIFIER, byte_capacity=100, log_level=1
)
)
module.destroy_monitor(flexmock(), flexmock(), flexmock(), flexmock())
module.destroy_monitor(
hook_config=flexmock(), config=flexmock(), monitoring_log_level=1, dry_run=False
)
assert logger.handlers == original_handlers
@@ -23,6 +28,10 @@ def test_destroy_monitor_without_healthchecks_handler_does_not_raise():
logger = logging.getLogger()
original_handlers = list(logger.handlers)
module.destroy_monitor(flexmock(), flexmock(), flexmock(), flexmock())
# Don't mess with the actual log level because it can impact downstream tests.
flexmock(logger).should_receive('setLevel')
module.destroy_monitor(
hook_config=flexmock(), config=flexmock(), monitoring_log_level=1, dry_run=False
)
assert logger.handlers == original_handlers
@@ -3,18 +3,10 @@ from flexmock import flexmock
from borgmatic.hooks.monitoring import healthchecks as module
def mock_logger():
logger = flexmock()
logger.should_receive('addHandler')
logger.should_receive('removeHandler')
flexmock(module.logging).should_receive('getLogger').and_return(logger)
def test_initialize_monitor_creates_log_handler_with_ping_body_limit():
ping_body_limit = 100
monitoring_log_level = 1
mock_logger()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
'Forgetful_buffering_handler'
).with_args(
@@ -22,6 +14,7 @@ def test_initialize_monitor_creates_log_handler_with_ping_body_limit():
ping_body_limit - len(module.borgmatic.hooks.monitoring.logs.PAYLOAD_TRUNCATION_INDICATOR),
monitoring_log_level,
).once()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive('add_handler')
module.initialize_monitor(
{'ping_body_limit': ping_body_limit}, {}, 'test.yaml', monitoring_log_level, dry_run=False
@@ -31,7 +24,6 @@ def test_initialize_monitor_creates_log_handler_with_ping_body_limit():
def test_initialize_monitor_creates_log_handler_with_default_ping_body_limit():
monitoring_log_level = 1
mock_logger()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
'Forgetful_buffering_handler'
).with_args(
@@ -40,6 +32,7 @@ def test_initialize_monitor_creates_log_handler_with_default_ping_body_limit():
- len(module.borgmatic.hooks.monitoring.logs.PAYLOAD_TRUNCATION_INDICATOR),
monitoring_log_level,
).once()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive('add_handler')
module.initialize_monitor({}, {}, 'test.yaml', monitoring_log_level, dry_run=False)
@@ -48,10 +41,10 @@ def test_initialize_monitor_creates_log_handler_with_zero_ping_body_limit():
ping_body_limit = 0
monitoring_log_level = 1
mock_logger()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
'Forgetful_buffering_handler'
).with_args(module.HANDLER_IDENTIFIER, ping_body_limit, monitoring_log_level).once()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive('add_handler')
module.initialize_monitor(
{'ping_body_limit': ping_body_limit}, {}, 'test.yaml', monitoring_log_level, dry_run=False
@@ -59,10 +52,10 @@ def test_initialize_monitor_creates_log_handler_with_zero_ping_body_limit():
def test_initialize_monitor_creates_log_handler_when_send_logs_true():
mock_logger()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
'Forgetful_buffering_handler'
).once()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive('add_handler')
module.initialize_monitor(
{'send_logs': True}, {}, 'test.yaml', monitoring_log_level=1, dry_run=False
@@ -70,10 +63,10 @@ def test_initialize_monitor_creates_log_handler_when_send_logs_true():
def test_initialize_monitor_bails_when_send_logs_false():
mock_logger()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
'Forgetful_buffering_handler'
).never()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive('add_handler')
module.initialize_monitor(
{'send_logs': False}, {}, 'test.yaml', monitoring_log_level=1, dry_run=False
+14 -1
View File
@@ -37,6 +37,16 @@ def test_forgetful_buffering_handler_emit_forgets_log_records_when_capacity_reac
assert handler.forgot
def test_add_handler_does_not_raise():
logger = flexmock(handlers=[flexmock(level=0)])
flexmock(module.logging).should_receive('getLogger').and_return(logger)
flexmock(logger).should_receive('addHandler')
flexmock(logger).should_receive('removeHandler')
flexmock(logger).should_receive('setLevel')
module.add_handler(flexmock())
def test_get_handler_matches_by_identifier():
handlers = [
flexmock(),
@@ -92,7 +102,10 @@ def test_format_buffered_logs_for_payload_without_handler_produces_empty_payload
def test_remove_handler_with_matching_handler_does_not_raise():
flexmock(module).should_receive('get_handler').and_return(flexmock())
flexmock(module.logging.getLogger()).should_receive('removeHandler')
logger = flexmock(handlers=[flexmock(level=0)])
flexmock(module.logging).should_receive('getLogger').and_return(logger)
flexmock(logger).should_receive('removeHandler')
flexmock(logger).should_receive('setLevel')
module.remove_handler('test')
+3 -10
View File
@@ -3,29 +3,22 @@ from flexmock import flexmock
from borgmatic.hooks.monitoring import pagerduty as module
def mock_logger():
logger = flexmock()
logger.should_receive('addHandler')
logger.should_receive('removeHandler')
flexmock(module.logging).should_receive('getLogger').and_return(logger)
def test_initialize_monitor_creates_log_handler():
monitoring_log_level = 1
mock_logger()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
'Forgetful_buffering_handler'
).once()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive('add_handler')
module.initialize_monitor({}, {}, 'test.yaml', monitoring_log_level, dry_run=False)
def test_initialize_monitor_creates_log_handler_when_send_logs_true():
mock_logger()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
'Forgetful_buffering_handler'
).once()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive('add_handler')
module.initialize_monitor(
{'send_logs': True}, {}, 'test.yaml', monitoring_log_level=1, dry_run=False
@@ -33,10 +26,10 @@ def test_initialize_monitor_creates_log_handler_when_send_logs_true():
def test_initialize_monitor_bails_when_send_logs_false():
mock_logger()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
'Forgetful_buffering_handler'
).never()
flexmock(module.borgmatic.hooks.monitoring.logs).should_receive('add_handler')
module.initialize_monitor(
{'send_logs': False}, {}, 'test.yaml', monitoring_log_level=1, dry_run=False