diff --git a/model_server/base/api.py b/model_server/base/api.py index 5d29cff44d678924a5d26f9e8293eff5754ba0f2..752ed48a0dcc41f62490f6e05b650348410f6231 100644 --- a/model_server/base/api.py +++ b/model_server/base/api.py @@ -62,6 +62,10 @@ def restart_session(root: str = None) -> dict: session.restart(root=root) return session.describe_loaded_models() +@app.get('/session/logs') +def list_session_log() -> list: + return session.get_log_data() + @app.get('/models') def list_active_models(): return session.describe_loaded_models() diff --git a/model_server/base/session.py b/model_server/base/session.py index bd76709f74275199fa4059091397383af633b73b..18c8b61d039dfa5e16e3f618e70c6c35a97c4c7c 100644 --- a/model_server/base/session.py +++ b/model_server/base/session.py @@ -79,6 +79,15 @@ class Session(object, metaclass=Singleton): idx += 1 return f'{yyyymmdd}-{idx:04d}' + def get_log_data(self) -> list: + log = [] + with open(self.logfile, 'r') as fh: + for line in fh: + k = ['datatime', 'level', 'message'] + v = line.strip().split(' - ')[0:3] + log.insert(0, dict(zip(k, v))) + return log + def log_info(self, msg): logger.info(msg) diff --git a/tests/test_api.py b/tests/test_api.py index 2afc8e93a9bb20c3ce4cef8a07e288574b289735..aa3023382890b14aada48e2f22aa00f035372931 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -171,4 +171,9 @@ class TestApiFromAutomatedClient(TestServerBaseClass): ) self.assertEqual(resp_change.status_code, 200) resp_check = self._get('paths') - self.assertEqual(resp_inpath.json()['outbound_images'], resp_check.json()['outbound_images']) \ No newline at end of file + self.assertEqual(resp_inpath.json()['outbound_images'], resp_check.json()['outbound_images']) + + def test_get_logs(self): + resp = self._get('session/logs') + self.assertEqual(resp.status_code, 200) + self.assertEqual(resp.json()[0]['message'], 'Initialized session') \ No newline at end of file diff --git a/tests/test_session.py b/tests/test_session.py index 6d998c331b14379c6d9be0c16e0a200ffee7e7a7..6a85f199453fd230917b6e43b6631b53a7d015df 100644 --- a/tests/test_session.py +++ b/tests/test_session.py @@ -65,6 +65,15 @@ class TestGetSessionObject(unittest.TestCase): log = fh.read() self.assertTrue(msg in log) + def test_get_logs(self): + self.sesh.log_info('Info example 1') + self.sesh.log_warning('Example warning') + self.sesh.log_info('Info example 2') + logs = self.sesh.get_log_data() + self.assertEqual(len(logs), 4) + self.assertEqual(logs[1]['level'], 'WARNING') + self.assertEqual(logs[-1]['message'], 'Initialized session') + def test_session_records_workflow(self): di = WorkflowRunRecord( model_id='test_model',