Skip to content

Commit eae8e18

Browse files
authored
Merge pull request #118 from cloudblue/feature/LITE-28603-add-logger-to-task-manager
LITE-28603: Sending logger to main process that execute tasks
2 parents 2484416 + 5e7deaa commit eae8e18

File tree

3 files changed

+37
-24
lines changed

3 files changed

+37
-24
lines changed

connect_ext_ppr/tasks_manager.py

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
from connect_ext_ppr.constants import PPR_FILE_NAME_DELEGATION_L2, PPR_FILE_NAME_UPDATE_MARKETPLACES
1010
from connect_ext_ppr.db import get_cbc_extension_db, get_cbc_extension_db_engine, get_db_ctx_manager
1111
from connect_ext_ppr.models.configuration import Configuration
12-
from connect_ext_ppr.models.enums import CBCTaskLogStatus
1312
from connect_ext_ppr.models.enums import (
13+
CBCTaskLogStatus,
1414
DeploymentRequestStatusChoices,
1515
DeploymentStatusChoices,
1616
TasksStatusChoices,
@@ -390,7 +390,7 @@ def delegate_to_l2(deployment_request, cbc_service, connect_client, **kwargs):
390390
}
391391

392392

393-
def execute_tasks(db, config, tasks, connect_client): # noqa: CCR001
393+
def execute_tasks(db, config, tasks, connect_client, logger):
394394
was_succesfull = False
395395
cbc_service = None
396396

@@ -416,27 +416,28 @@ def execute_tasks(db, config, tasks, connect_client): # noqa: CCR001
416416
db=db,
417417
)
418418
task.status = TasksStatusChoices.done
419-
if not was_succesfull:
420-
task.status = TasksStatusChoices.error
419+
421420
except TaskException as ex:
422421
was_succesfull = False
423-
task.error_message = str(ex)
424-
task.status = TasksStatusChoices.error
425-
except Exception as err:
422+
task.error_message = str(ex)[:4000]
423+
except Exception as ex:
424+
logger.error(f'Task ID: {task.id} - {ex}')
426425
was_succesfull = False
427-
task.error_message = str(err)
428-
task.status = TasksStatusChoices.error
426+
task.error_message = 'Something went wrong.'
429427

430428
task.finished_at = datetime.utcnow()
431429
db.add(task)
432-
db.commit()
430+
433431
if not was_succesfull:
432+
task.status = TasksStatusChoices.error
433+
db.commit()
434434
break
435+
db.commit()
435436

436437
return was_succesfull
437438

438439

439-
def main_process(deployment_request_id, config, connect_client):
440+
def main_process(deployment_request_id, config, connect_client, logger):
440441

441442
with get_db_ctx_manager(config) as db:
442443
deployment_request = db.query(DeploymentRequest).options(
@@ -461,7 +462,11 @@ def main_process(deployment_request_id, config, connect_client):
461462
deployment_request_id=deployment_request_id,
462463
).order_by(Task.id).all()
463464

464-
was_succesfull = execute_tasks(db, config, tasks, connect_client)
465+
try:
466+
was_succesfull = execute_tasks(db, config, tasks, connect_client, logger)
467+
except Exception as ex:
468+
was_succesfull = False
469+
logger.error(f'DeploymentRequest ID: {deployment_request_id} - {ex}')
465470

466471
db.refresh(deployment_request, with_for_update=True)
467472

connect_ext_ppr/webapp.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ def add_dep_request(
167167
db, deployment_request, deployment, account_id, logger,
168168
)
169169

170-
self.thread_pool.submit(main_process, instance.id, config, client)
170+
self.thread_pool.submit(main_process, instance.id, config, client, logger)
171171

172172
hub = get_client_object(client, 'hubs', instance.deployment.hub_id)
173173
response = get_deployment_request_schema(instance, hub)
@@ -341,11 +341,12 @@ def retry(
341341
client: ConnectClient = Depends(get_installation_client),
342342
installation: dict = Depends(get_installation),
343343
config: dict = Depends(get_config),
344+
logger: Logger = Depends(get_logger),
344345
):
345346
dr = get_deployment_request_by_id(depl_req_id, db, installation)
346347
dr = DeploymentRequestActionHandler.retry(db, dr)
347348

348-
self.thread_pool.submit(main_process, dr.id, config, client)
349+
self.thread_pool.submit(main_process, dr.id, config, client, logger)
349350

350351
hub = get_hub(client, dr.deployment.hub_id)
351352
return get_deployment_request_schema(dr, hub)

tests/test_tasks_manager.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -855,6 +855,7 @@ def test_main_process(
855855
mock_tasks,
856856
mocker,
857857
product_details,
858+
logger,
858859
):
859860
mock_get_product_details.return_value = product_details
860861
dep = deployment_factory()
@@ -865,7 +866,7 @@ def test_main_process(
865866
task_factory(deployment_request=dr, task_index='0003', type=TaskTypesChoices.delegate_to_l2)
866867

867868
mocker.patch('connect_ext_ppr.tasks_manager._get_cbc_service', return_value=CBCService())
868-
assert main_process(dr.id, {}, connect_client) == DeploymentRequestStatusChoices.done
869+
assert main_process(dr.id, {}, connect_client, logger) == DeploymentRequestStatusChoices.done
869870

870871
assert dbsession.query(Deployment).filter_by(status=DeploymentStatusChoices.synced).count() == 1
871872
assert dbsession.query(DeploymentRequest).filter_by(
@@ -892,6 +893,7 @@ def test_main_process_wo_l2_delegation(
892893
mock_tasks,
893894
mocker,
894895
product_details,
896+
logger,
895897
):
896898
mock_get_product_details.return_value = product_details
897899
dep = deployment_factory()
@@ -901,7 +903,7 @@ def test_main_process_wo_l2_delegation(
901903
task_factory(deployment_request=dr, task_index='0002', type=TaskTypesChoices.apply_and_delegate)
902904

903905
mocker.patch('connect_ext_ppr.tasks_manager._get_cbc_service', return_value=CBCService())
904-
assert main_process(dr.id, {}, connect_client) == DeploymentRequestStatusChoices.done
906+
assert main_process(dr.id, {}, connect_client, logger) == DeploymentRequestStatusChoices.done
905907

906908
assert dbsession.query(Deployment).filter_by(
907909
status=DeploymentStatusChoices.pending,
@@ -931,6 +933,7 @@ def test_main_process_deployment_w_new_ppr_version(
931933
mock_tasks,
932934
mocker,
933935
product_details,
936+
logger,
934937
):
935938
mock_get_product_details.return_value = product_details
936939
ppr_file = file_factory(id='MFL-123')
@@ -944,7 +947,7 @@ def test_main_process_deployment_w_new_ppr_version(
944947
task_factory(deployment_request=dr, task_index='0003', type=TaskTypesChoices.delegate_to_l2)
945948

946949
mocker.patch('connect_ext_ppr.tasks_manager._get_cbc_service', return_value=CBCService())
947-
assert main_process(dr.id, {}, connect_client) == DeploymentRequestStatusChoices.done
950+
assert main_process(dr.id, {}, connect_client, logger) == DeploymentRequestStatusChoices.done
948951

949952
assert dbsession.query(Deployment).filter_by(
950953
status=DeploymentStatusChoices.pending,
@@ -981,7 +984,7 @@ def test_main_process_ends_w_error(
981984
task_factory,
982985
ppr_version_factory,
983986
connect_client,
984-
mock_tasks,
987+
logger,
985988
):
986989
dep = deployment_factory()
987990
ppr = ppr_version_factory(id='PPR-123', product_version=1, deployment=dep, version=1)
@@ -993,12 +996,13 @@ def test_main_process_ends_w_error(
993996
my_mock = mocker.Mock()
994997

995998
def mock_get(key):
999+
print(key, ' :', key != type_function_to_mock)
9961000
return lambda **kwargs: key != type_function_to_mock
9971001
my_mock.get = mock_get
9981002

9991003
mocker.patch('connect_ext_ppr.tasks_manager._get_cbc_service', return_value=CBCService())
10001004
mocker.patch('connect_ext_ppr.tasks_manager.TASK_PER_TYPE', my_mock)
1001-
assert main_process(dr.id, {}, connect_client) == DeploymentRequestStatusChoices.error
1005+
assert main_process(dr.id, {}, connect_client, logger) == DeploymentRequestStatusChoices.error
10021006

10031007
assert dbsession.query(Deployment).filter_by(
10041008
status=DeploymentStatusChoices.pending,
@@ -1031,6 +1035,7 @@ def test_main_process_wo_hub_credentials(
10311035
task_factory,
10321036
connect_client,
10331037
mocker,
1038+
logger,
10341039
):
10351040
dep = deployment_factory()
10361041
ppr = ppr_version_factory(id='PPR-123', product_version=1, deployment=dep, version=1)
@@ -1039,7 +1044,7 @@ def test_main_process_wo_hub_credentials(
10391044
deployment_request=dr, task_index='0001', type=TaskTypesChoices.product_setup,
10401045
)
10411046
mocker.patch('connect_ext_ppr.client.utils.get_hub_credentials', return_value=None)
1042-
assert main_process(dr.id, {}, connect_client) == DeploymentRequestStatusChoices.error
1047+
assert main_process(dr.id, {}, connect_client, logger) == DeploymentRequestStatusChoices.error
10431048

10441049
assert task.status == TasksStatusChoices.error
10451050
assert task.error_message == 'Hub Credentials not found for Hub ID HB-0000-0000.'
@@ -1079,6 +1084,7 @@ def test_main_process_w_aborted_tasks(
10791084
connect_client,
10801085
mock_tasks,
10811086
mocker,
1087+
logger,
10821088
):
10831089
"""
10841090
We only process DeploymentRequest that are in Pending status. So in this case we asume that
@@ -1120,7 +1126,7 @@ def change_dr_status(instance, attribute_names=None, with_for_update=None):
11201126
dbsession.refresh = change_dr_status
11211127
mocker.patch('connect_ext_ppr.tasks_manager._get_cbc_service', return_value=CBCService())
11221128

1123-
assert main_process(dr.id, {}, connect_client) == DeploymentRequestStatusChoices.aborted
1129+
assert main_process(dr.id, {}, connect_client, logger) == DeploymentRequestStatusChoices.aborted
11241130

11251131
assert dbsession.query(Deployment).filter_by(
11261132
status=DeploymentStatusChoices.pending,
@@ -1147,6 +1153,7 @@ def test_main_process_w_aborted_deployment_request(
11471153
ppr_version_factory,
11481154
connect_client,
11491155
mock_tasks,
1156+
logger,
11501157
):
11511158
"""
11521159
We only process DeploymentRequest that are in Pending status. So in this case we asume that
@@ -1180,7 +1187,7 @@ def test_main_process_w_aborted_deployment_request(
11801187
status=TasksStatusChoices.aborted,
11811188
)
11821189

1183-
assert main_process(dr.id, {}, connect_client) == DeploymentRequestStatusChoices.aborted
1190+
assert main_process(dr.id, {}, connect_client, logger) == DeploymentRequestStatusChoices.aborted
11841191

11851192
assert dbsession.query(Deployment).filter_by(
11861193
status=DeploymentStatusChoices.pending,
@@ -1216,7 +1223,7 @@ def test_main_process_ends_w_task_exception(
12161223
task_factory,
12171224
ppr_version_factory,
12181225
connect_client,
1219-
mock_tasks,
1226+
logger,
12201227
):
12211228
dep = deployment_factory()
12221229
ppr = ppr_version_factory(id='PPR-123', product_version=1, deployment=dep, version=1)
@@ -1236,7 +1243,7 @@ def mock_get(key):
12361243

12371244
mocker.patch('connect_ext_ppr.tasks_manager.TASK_PER_TYPE', my_mock)
12381245
mocker.patch('connect_ext_ppr.tasks_manager._get_cbc_service', return_value=CBCService())
1239-
assert main_process(dr.id, {}, connect_client) == DeploymentRequestStatusChoices.error
1246+
assert main_process(dr.id, {}, connect_client, logger) == DeploymentRequestStatusChoices.error
12401247

12411248
assert dbsession.query(Deployment).filter_by(
12421249
status=DeploymentStatusChoices.pending,

0 commit comments

Comments
 (0)