feat(simple_metrics): warn when frequency_alert is below the 1m floor (SIENTIAPDE-2190)
This commit is contained in:
@@ -1023,3 +1023,41 @@ def test_filter_notification_reports_ignore_models_id_explicit_none_does_not_rai
|
||||
response = formatters.filter_notification_reports(input_data)
|
||||
|
||||
assert response['test_group_1']['notifications'] == input_data['notification_package']
|
||||
|
||||
|
||||
def _schedule_config_with_frequency_alert(frequency_alert):
|
||||
return {
|
||||
'metadata': {},
|
||||
'current_schedule_config': {'laborious': {}},
|
||||
'schedule_config': {
|
||||
'laborious': {
|
||||
'm1-simple_metrics-60m': {
|
||||
'workflow_type': 'simple_metrics',
|
||||
'model_id': 'm1',
|
||||
'model_name': 'm1',
|
||||
'frequency': '1h',
|
||||
'frequency_alert': frequency_alert,
|
||||
'updated_at': '2026-10-07',
|
||||
}
|
||||
},
|
||||
'scouter': {},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def test_create_schedule_config_warns_on_frequency_alert_below_floor(formatters):
|
||||
result = formatters.create_schedule_config(_schedule_config_with_frequency_alert('30s'))
|
||||
|
||||
# The configured value is kept.
|
||||
assert result['to_create']['laborious']['m1-simple_metrics-60m']['frequency_alert'] == '30s'
|
||||
formatters.send_notification.assert_called_once()
|
||||
kwargs = formatters.send_notification.call_args.kwargs
|
||||
assert kwargs['notification_id'] == 'SIMPLE_METRICS_FREQUENCY_ALERT_BELOW_FLOOR'
|
||||
assert kwargs['level'] == NotificationLevel.WARNING
|
||||
assert kwargs['metadata']['schedule_name'] == 'm1-simple_metrics-60m'
|
||||
|
||||
|
||||
def test_create_schedule_config_no_warning_at_or_above_floor(formatters):
|
||||
formatters.create_schedule_config(_schedule_config_with_frequency_alert('5m'))
|
||||
|
||||
formatters.send_notification.assert_not_called()
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
from unittest.mock import call, patch
|
||||
|
||||
from pytest import mark
|
||||
|
||||
from orchestrator.utils.orchestrator_functions import (
|
||||
base_scouter,
|
||||
build_tag_config,
|
||||
common_config,
|
||||
drift,
|
||||
frequency_alert_warning,
|
||||
gather_read_tags,
|
||||
minimal_retrain,
|
||||
overlap_filter_config,
|
||||
@@ -800,3 +803,19 @@ def test_pi_web_api_scouter_with_no_timeout():
|
||||
'runtime': 'legacy',
|
||||
}
|
||||
assert result == expected
|
||||
|
||||
|
||||
@mark.parametrize(
|
||||
'frequency_alert, warns',
|
||||
[
|
||||
(None, False),
|
||||
('5m', False),
|
||||
('1m', False), # the floor itself is allowed
|
||||
('60s', False),
|
||||
('30s', True),
|
||||
('5min', True), # unparseable
|
||||
(5, True), # not a string: must warn, never raise
|
||||
],
|
||||
)
|
||||
def test_frequency_alert_warning(frequency_alert, warns):
|
||||
assert (frequency_alert_warning(frequency_alert) is not None) is warns
|
||||
|
||||
Reference in New Issue
Block a user