QTZPOC-20
QTZPOC-20: Implement structured logging with metadata for repository, worker, and OPC activities.
This commit is contained in:
@@ -27,25 +27,27 @@ from laborious.utils.repository.model_repository import (
|
||||
@patch('laborious.utils.repository.model_repository.gc')
|
||||
def test_force_memory_release_success(gc, ctypes):
|
||||
logger = MagicMock()
|
||||
metadata = {'model_name': 'my-model'}
|
||||
|
||||
force_memory_release(logger)
|
||||
force_memory_release(logger, metadata)
|
||||
|
||||
gc.collect.assert_called_once()
|
||||
ctypes.CDLL.return_value.malloc_trim.assert_called_once_with(0)
|
||||
logger.info.assert_called_once_with('Memory released')
|
||||
logger.custom_info.assert_called_once_with('Memory released', metadata)
|
||||
|
||||
|
||||
@patch('laborious.utils.repository.model_repository.ctypes')
|
||||
@patch('laborious.utils.repository.model_repository.gc')
|
||||
def test_force_memory_release_error(gc, ctypes):
|
||||
logger = MagicMock()
|
||||
metadata = {'model_name': 'my-model'}
|
||||
ctypes.CDLL.return_value.malloc_trim.side_effect = Exception('error')
|
||||
force_memory_release(logger)
|
||||
force_memory_release(logger, metadata)
|
||||
|
||||
gc.collect.assert_called_once()
|
||||
ctypes.CDLL.return_value.malloc_trim.assert_called_once_with(0)
|
||||
|
||||
logger.info.assert_called_once_with('Memory release failed: error')
|
||||
logger.custom_info.assert_called_once_with('Memory release failed: error', metadata)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -807,7 +809,7 @@ def test_check_cache_retention_true(datetime_mock, mlflow_repository):
|
||||
|
||||
def test_handle_valid_model(mlflow_repository):
|
||||
cache = {'target': {'model': 'model', 'artifact_path': 'test_artifact_path'}}
|
||||
output = mlflow_repository.handle_valid_model('model_name', cache)
|
||||
output = mlflow_repository.handle_valid_model('model_name', cache, {})
|
||||
assert output == {'model': 'model', 'artifact_path': 'test_artifact_path'}
|
||||
|
||||
|
||||
@@ -817,7 +819,7 @@ def test_handle_outdated_model(mlflow_repository):
|
||||
'target': {'model': 'model', 'artifact_path': 'test_artifact_path'}
|
||||
}
|
||||
}
|
||||
mlflow_repository.handle_outdated_model('model_name', 'model_name_transform')
|
||||
mlflow_repository.handle_outdated_model('model_name', 'model_name_transform', {})
|
||||
assert mlflow_repository.model_cache == {}
|
||||
|
||||
|
||||
@@ -857,7 +859,9 @@ async def test_get_model_cached_valid(mlflow_repository):
|
||||
)
|
||||
|
||||
mlflow_repository.handle_valid_model.assert_called_once_with(
|
||||
model_name='model_name', cache=mlflow_repository.model_cache['model_name_predict']
|
||||
model_name='model_name',
|
||||
cache=mlflow_repository.model_cache['model_name_predict'],
|
||||
metadata={},
|
||||
)
|
||||
|
||||
mlflow_repository.handle_outdated_model.assert_not_called()
|
||||
@@ -887,7 +891,7 @@ async def test_get_model_cached_outdated(mlflow_repository):
|
||||
)
|
||||
mlflow_repository.handle_valid_model.assert_not_called()
|
||||
mlflow_repository.handle_outdated_model.assert_called_once_with(
|
||||
model_name='model_name', model_key='model_name_predict'
|
||||
model_name='model_name', model_key='model_name_predict', metadata={}
|
||||
)
|
||||
|
||||
|
||||
@@ -916,7 +920,7 @@ async def test_get_cached_operation_retention_0(force_memory_release, mlflow_rep
|
||||
'model_name', data, 'transform', 0, 'sklearn', {}
|
||||
)
|
||||
assert output == model.predict.return_value
|
||||
force_memory_release.assert_called_once_with(mlflow_repository.logger)
|
||||
force_memory_release.assert_called_once_with(mlflow_repository.logger, {})
|
||||
|
||||
|
||||
@patch('laborious.utils.repository.model_repository.force_memory_release')
|
||||
@@ -1316,7 +1320,7 @@ async def test_create_new_experiment(
|
||||
]
|
||||
)
|
||||
|
||||
force_memory_release.assert_called_once_with(mlflow_repository.logger)
|
||||
force_memory_release.assert_called_once_with(mlflow_repository.logger, metadata['metadata'])
|
||||
|
||||
assert report == {
|
||||
'run_id': mlflow.start_run.return_value.__enter__.return_value.info.run_id,
|
||||
|
||||
@@ -210,7 +210,7 @@ class TestMainHappyPath:
|
||||
@patch('laborious.worker.worker.metrics.APP_UP')
|
||||
@patch('laborious.worker.worker.start_http_server')
|
||||
def test_start_prometheus_server_marks_the_app_up(mock_start_http_server, mock_app_up):
|
||||
start_prometheus_server()
|
||||
start_prometheus_server(MagicMock(), {})
|
||||
|
||||
mock_start_http_server.assert_called_once()
|
||||
mock_app_up.labels.return_value.set.assert_called_once_with(1)
|
||||
@@ -224,7 +224,7 @@ def test_start_prometheus_server_exits_the_process_on_failure(
|
||||
):
|
||||
mock_start_http_server.side_effect = OSError('port in use')
|
||||
|
||||
start_prometheus_server()
|
||||
start_prometheus_server(MagicMock(), {})
|
||||
|
||||
mock_os_exit.assert_called_once_with(1)
|
||||
mock_app_up.labels.return_value.set.assert_not_called()
|
||||
@@ -238,6 +238,6 @@ def test_start_prometheus_server_reads_the_configured_port(
|
||||
):
|
||||
monkeypatch.setenv('HTTP_METRICS_PORT', port_env)
|
||||
|
||||
start_prometheus_server()
|
||||
start_prometheus_server(MagicMock(), {})
|
||||
|
||||
mock_start_http_server.assert_called_once_with(int(port_env))
|
||||
|
||||
Reference in New Issue
Block a user