From a6a98bed10bd3db5bdec0be377cff7e96859441d Mon Sep 17 00:00:00 2001 From: mike cullerton Date: Mon, 14 Mar 2022 11:56:36 -0400 Subject: [PATCH 1/4] Include workflow_spec_id when adding a log --- crc/services/task_logging_service.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/crc/services/task_logging_service.py b/crc/services/task_logging_service.py index 1d0f1e5e..dd5f5c84 100644 --- a/crc/services/task_logging_service.py +++ b/crc/services/task_logging_service.py @@ -1,6 +1,7 @@ from crc import app, session from crc.api.common import ApiError from crc.models.task_log import TaskLogModel, TaskLogLevels, TaskLogQuery, TaskLogModelSchema +from crc.models.workflow import WorkflowModel from crc.services.user_service import UserService from sqlalchemy import desc @@ -24,15 +25,22 @@ class TaskLoggingService(object): user_uid = UserService.current_user().uid except ApiError as e: user_uid = "unknown" - log_message = f"Workflow {workflow_id}, study {study_id}, task {task.get_name()}, user {user_uid}: {message}" + if workflow_id: + workflow_spec_id = session.query(WorkflowModel.workflow_spec_id).\ + filter(WorkflowModel.id == workflow_id).\ + scalar() + else: + workflow_spec_id = None + log_message = f"Workflow Spec {workflow_spec_id}, study {study_id}, task {task.get_name()}, user {user_uid}: {message}" app.logger.log(TaskLogLevels[level].value, log_message) log_model = TaskLogModel(level=level, code=code, - user_uid=user_uid, message=message, study_id=study_id, workflow_id=workflow_id, - task=task.get_name()) + task=task.get_name(), + user_uid=user_uid, + workflow_spec_id=workflow_spec_id) session.add(log_model) session.commit() return log_model From ace988d551100fb7b6a529294835c9335200ddbe Mon Sep 17 00:00:00 2001 From: mike cullerton Date: Mon, 14 Mar 2022 12:02:11 -0400 Subject: [PATCH 2/4] assert we get category and workflow in all the places --- tests/scripts/test_task_logging.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/scripts/test_task_logging.py b/tests/scripts/test_task_logging.py index e66cdcf0..8eb95089 100644 --- a/tests/scripts/test_task_logging.py +++ b/tests/scripts/test_task_logging.py @@ -42,6 +42,7 @@ class TestTaskLogging(BaseTest): self.assertEqual('test_code', log_model.code) self.assertEqual('info', log_model.level) self.assertEqual('Activity_LogEvent', log_model.task) + self.assertEqual('logging_task', log_model.workflow_spec_id) def test_add_metrics_log(self): log_data = {'level': 'metrics', @@ -51,6 +52,7 @@ class TestTaskLogging(BaseTest): log_model = session.query(TaskLogModel).filter(TaskLogModel.id == log_id).first() self.assertEqual('metrics', log_model.level) + self.assertEqual('logging_task', log_model.workflow_spec_id) def test_get_logging_validation(self): self.load_test_spec('empty_workflow', master_spec=True) @@ -71,6 +73,10 @@ class TestTaskLogging(BaseTest): self.assertIn(task.data['logging_models_debug_post'][0], task.data['logging_models_all_post']) self.assertEqual('test_code', task.data['logging_models_info_post'][0]['code']) self.assertEqual('debug_test_code', task.data['logging_models_debug_post'][0]['code']) + self.assertEqual('Test Workflows', task.data['logging_models_info_post'][0]['category']) + self.assertEqual('Test Workflows', task.data['logging_models_debug_post'][0]['category']) + self.assertEqual('get_logging', task.data['logging_models_info_post'][0]['workflow']) + self.assertEqual('get_logging', task.data['logging_models_debug_post'][0]['workflow']) def test_get_logs_for_study(self): self.add_studies() @@ -102,7 +108,11 @@ class TestTaskLogging(BaseTest): workflow_logs = task_api.data['workflow_logs'] study_logs = task_api.data['study_logs'] self.assertEqual(3, len(workflow_logs)) + self.assertEqual('Test Workflows', workflow_logs[0]['category']) + self.assertEqual('get_logging_for_study', workflow_logs[0]['workflow']) self.assertEqual(5, len(study_logs)) + self.assertEqual('Test Workflows', study_logs[0]['category']) + self.assertEqual('hello_world', study_logs[0]['workflow']) def test_logging_api(self): workflow = self.create_workflow('logging_task') @@ -129,6 +139,8 @@ class TestTaskLogging(BaseTest): self.assertEqual('info', logs[0]['level']) self.assertEqual(self.test_uid, logs[0]['user_uid']) self.assertEqual('You forgot to include the correct data.', logs[0]['message']) + self.assertEqual('Test Workflows', logs[0]['category']) + self.assertEqual('logging_task', logs[0]['workflow']) def test_logging_service_paginates_and_sorts(self): self.add_studies() From 3b049e358dc2a707917edd76ec8b79ecf88e5135 Mon Sep 17 00:00:00 2001 From: mike cullerton Date: Mon, 14 Mar 2022 12:02:48 -0400 Subject: [PATCH 3/4] Remove unused imports --- crc/api/workflow.py | 5 ----- crc/scripts/log.py | 5 ----- 2 files changed, 10 deletions(-) diff --git a/crc/api/workflow.py b/crc/api/workflow.py index ea1af58b..3e439371 100644 --- a/crc/api/workflow.py +++ b/crc/api/workflow.py @@ -1,7 +1,5 @@ -import time import uuid -from SpiffWorkflow.util.metrics import firsttime, timeit, sincetime from flask import g from crc import session @@ -9,13 +7,10 @@ from crc.api.common import ApiError, ApiErrorSchema from crc.models.api_models import WorkflowApiSchema from crc.models.study import StudyModel, WorkflowMetadata, StudyStatus from crc.models.task_event import TaskEventModel, TaskEvent, TaskEventSchema -from crc.models.task_log import TaskLogModelSchema, TaskLogQuery, TaskLogQuerySchema from crc.models.workflow import WorkflowModel, WorkflowSpecInfoSchema, WorkflowSpecCategorySchema from crc.services.error_service import ValidationErrorService from crc.services.lookup_service import LookupService -from crc.services.spec_file_service import SpecFileService from crc.services.study_service import StudyService -from crc.services.task_logging_service import TaskLoggingService from crc.services.user_service import UserService from crc.services.workflow_processor import WorkflowProcessor from crc.services.workflow_service import WorkflowService diff --git a/crc/scripts/log.py b/crc/scripts/log.py index 5f0a4692..7d79a3e3 100644 --- a/crc/scripts/log.py +++ b/crc/scripts/log.py @@ -1,7 +1,5 @@ from SpiffWorkflow.exceptions import WorkflowTaskExecException -from crc import session -from crc.api.common import ApiError from crc.models.task_log import TaskLogModel, TaskLogModelSchema, TaskLogLevels from crc.scripts.script import Script from crc.services.task_logging_service import TaskLoggingService @@ -45,8 +43,6 @@ class TaskLog(Script): raise WorkflowTaskExecException(task, 'You must include a level, code, and message' ' when calling the log() script') - - def do_task_validate_only(self, task, study_id, workflow_id, *args, **kwargs): level, code, message = self.get_arguments(task, *args, **kwargs) log_model = TaskLogModel(level=level, @@ -61,4 +57,3 @@ class TaskLog(Script): level, code, message = self.get_arguments(task, *args, **kwargs) log_model = TaskLoggingService.add_log(task, level, code, message, study_id, workflow_id) return TaskLogModelSchema().dump(log_model) - From a974b65333d9127a3a2ea2474489d04dd871dfe8 Mon Sep 17 00:00:00 2001 From: mike cullerton Date: Mon, 14 Mar 2022 12:03:11 -0400 Subject: [PATCH 4/4] Remove unused code --- crc/scripts/get_logs_for_workflow.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/crc/scripts/get_logs_for_workflow.py b/crc/scripts/get_logs_for_workflow.py index 8af426af..0598479a 100644 --- a/crc/scripts/get_logs_for_workflow.py +++ b/crc/scripts/get_logs_for_workflow.py @@ -43,6 +43,4 @@ class GetLogsByWorkflow(Script): def do_task(self, task, study_id, workflow_id, *args, **kwargs): level, code, size = self.get_parameters(args, kwargs) log_models = TaskLoggingService().get_logs_for_workflow(workflow_id=workflow_id, level=level, code=code, size=size) - # query = TaskLogQuery(code=code, per_page=size) - # log_models = TaskLoggingService.get_logs_for_workflow(workflow_id, query).items return TaskLogModelSchema(many=True).dump(log_models)