From 7a7b49934d9bc19befac026610df7e56265ac9b0 Mon Sep 17 00:00:00 2001 From: Ann Date: Fri, 25 Aug 2023 15:08:09 -0400 Subject: [PATCH 1/9] added try catch --- .../application/application.controller.ts | 88 +++++++++++-------- .../assessment/assessment.controller.ts | 58 +++++++----- .../cra-integration.controller.ts | 44 ++++++---- .../program-info-request.controller.ts | 44 +++++----- .../supporting-user.controller.ts | 62 +++++++------ 5 files changed, 175 insertions(+), 121 deletions(-) diff --git a/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts b/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts index 0f1870ac6d..15d80d3fa3 100644 --- a/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts @@ -52,18 +52,24 @@ export class ApplicationController { > >, ): Promise { - const updateResult = await this.applicationService.updateStatus( - job.variables.applicationId, - job.customHeaders.fromStatus, - job.customHeaders.toStatus, - ); - if (!updateResult.affected) { - return job.error( - APPLICATION_STATUS_NOT_UPDATED, - "The application status was not updated either because the application id was not found or the application is not in the expected status.", + try { + const updateResult = await this.applicationService.updateStatus( + job.variables.applicationId, + job.customHeaders.fromStatus, + job.customHeaders.toStatus, + ); + if (!updateResult.affected) { + return job.error( + APPLICATION_STATUS_NOT_UPDATED, + "The application status was not updated either because the application id was not found or the application is not in the expected status.", + ); + } + return job.complete(); + } catch (error: unknown) { + return job.fail( + `Unexpected error while updating the application status. ${error}`, ); } - return job.complete(); } /** @@ -85,36 +91,42 @@ export class ApplicationController { > >, ): Promise { - const application = await this.applicationService.getApplicationById( - job.variables.applicationId, - { loadDynamicData: true }, - ); - if (!application) { - return job.error(APPLICATION_NOT_FOUND, "Application id not found."); - } - if (application.applicationException) { - // The exceptions were already processed for this application. - return job.complete({ - applicationExceptionStatus: - application.applicationException.exceptionStatus, - }); - } - // Check for application exceptions present in the application dynamic data. - const exceptions = this.applicationExceptionService.searchExceptions( - application.data, - ); - if (exceptions.length) { - const createdException = - await this.applicationExceptionService.createException( - job.variables.applicationId, - exceptions, - ); + try { + const application = await this.applicationService.getApplicationById( + job.variables.applicationId, + { loadDynamicData: true }, + ); + if (!application) { + return job.error(APPLICATION_NOT_FOUND, "Application id not found."); + } + if (application.applicationException) { + // The exceptions were already processed for this application. + return job.complete({ + applicationExceptionStatus: + application.applicationException.exceptionStatus, + }); + } + // Check for application exceptions present in the application dynamic data. + const exceptions = this.applicationExceptionService.searchExceptions( + application.data, + ); + if (exceptions.length) { + const createdException = + await this.applicationExceptionService.createException( + job.variables.applicationId, + exceptions, + ); + return job.complete({ + applicationExceptionStatus: createdException.exceptionStatus, + }); + } return job.complete({ - applicationExceptionStatus: createdException.exceptionStatus, + applicationExceptionStatus: ApplicationExceptionStatus.Approved, }); + } catch (error: unknown) { + return job.fail( + `Unexpected error while verifying the application exceptions. ${error}`, + ); } - return job.complete({ - applicationExceptionStatus: ApplicationExceptionStatus.Approved, - }); } } diff --git a/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts b/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts index 3beea93505..685d6c0f32 100644 --- a/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts @@ -101,18 +101,24 @@ export class AssessmentController { ZeebeJob >, ): Promise { - const assessment = await this.studentAssessmentService.getById( - job.variables.assessmentId, - ); - if (!assessment) { - return job.error(ASSESSMENT_NOT_FOUND, "Assessment not found."); + try { + const assessment = await this.studentAssessmentService.getById( + job.variables.assessmentId, + ); + if (!assessment) { + return job.error(ASSESSMENT_NOT_FOUND, "Assessment not found."); + } + const assessmentDTO = this.transformToAssessmentDTO(assessment); + const outputVariables = filterObjectProperties( + assessmentDTO, + job.customHeaders, + ); + return job.complete(outputVariables); + } catch (error: unknown) { + return job.fail( + `Unexpected error while loading assessment consolidated data. ${error}`, + ); } - const assessmentDTO = this.transformToAssessmentDTO(assessment); - const outputVariables = filterObjectProperties( - assessmentDTO, - job.customHeaders, - ); - return job.complete(outputVariables); } /** @@ -127,11 +133,15 @@ export class AssessmentController { ZeebeJob >, ): Promise { - await this.studentAssessmentService.updateAssessmentData( - job.variables.assessmentId, - job.variables.assessmentData, - ); - return job.complete(); + try { + await this.studentAssessmentService.updateAssessmentData( + job.variables.assessmentId, + job.variables.assessmentData, + ); + return job.complete(); + } catch (error: unknown) { + return job.fail(`Unexpected error saving the assessment data. ${error}`); + } } /** @@ -150,11 +160,17 @@ export class AssessmentController { > >, ): Promise { - await this.studentAssessmentService.updateNOAApprovalStatus( - job.variables.assessmentId, - job.customHeaders.status, - ); - return job.complete(); + try { + await this.studentAssessmentService.updateNOAApprovalStatus( + job.variables.assessmentId, + job.customHeaders.status, + ); + return job.complete(); + } catch (error: unknown) { + return job.fail( + `Unexpected error while updating the NOA status. ${error}`, + ); + } } /** diff --git a/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts b/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts index d5e4d04e62..98c7c7ecf7 100644 --- a/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts @@ -51,20 +51,26 @@ export class CRAIntegrationController { > >, ): Promise { - const incomeRequest = - await this.incomeVerificationService.createIncomeVerification( - job.variables.applicationId, - job.variables.taxYear, - job.variables.reportedIncome, - job.variables.supportingUserId, - ); - const [identifier] = incomeRequest.identifiers; + try { + const incomeRequest = + await this.incomeVerificationService.createIncomeVerification( + job.variables.applicationId, + job.variables.taxYear, + job.variables.reportedIncome, + job.variables.supportingUserId, + ); + const [identifier] = incomeRequest.identifiers; - await this.incomeVerificationService.checkForCRAIncomeVerificationBypass( - identifier.id, - ); + await this.incomeVerificationService.checkForCRAIncomeVerificationBypass( + identifier.id, + ); - return job.complete({ incomeVerificationId: identifier.id }); + return job.complete({ incomeVerificationId: identifier.id }); + } catch (error: unknown) { + return job.fail( + `Unexpected error while creating the CRA income verification. ${error}`, + ); + } } /** @@ -85,10 +91,16 @@ export class CRAIntegrationController { > >, ): Promise { - const incomeVerificationCompleted = - await this.incomeVerificationService.isIncomeVerificationCompleted( - job.variables.incomeVerificationId, + try { + const incomeVerificationCompleted = + await this.incomeVerificationService.isIncomeVerificationCompleted( + job.variables.incomeVerificationId, + ); + return job.complete({ incomeVerificationCompleted }); + } catch (error: unknown) { + return job.fail( + `Unexpected error while checking the CRA income verification. ${error}`, ); - return job.complete({ incomeVerificationCompleted }); + } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts b/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts index c76676c3c4..413854fb01 100644 --- a/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts @@ -37,29 +37,33 @@ export class ProgramInfoRequestController { > >, ): Promise { - const application = await this.applicationService.getApplicationById( - job.variables.applicationId, - { loadDynamicData: false }, - ); - if (!application) { - return job.error( - APPLICATION_NOT_FOUND, - "Application not found while verifying the PIR.", + try { + const application = await this.applicationService.getApplicationById( + job.variables.applicationId, + { loadDynamicData: false }, + ); + if (!application) { + return job.error( + APPLICATION_NOT_FOUND, + "Application not found while verifying the PIR.", + ); + } + if (application.pirStatus) { + // PIR status was already set, just return it. + return job.complete({ + programInfoStatus: application.pirStatus, + }); + } + await this.applicationService.updateProgramInfoStatus( + job.variables.applicationId, + job.customHeaders.programInfoStatus, + job.variables.studentDataSelectedProgram, ); - } - if (application.pirStatus) { - // PIR status was already set, just return it. return job.complete({ - programInfoStatus: application.pirStatus, + programInfoStatus: job.customHeaders.programInfoStatus, }); + } catch (error: unknown) { + return job.fail(`Unexpected error while seting the PIR status. ${error}`); } - await this.applicationService.updateProgramInfoStatus( - job.variables.applicationId, - job.customHeaders.programInfoStatus, - job.variables.studentDataSelectedProgram, - ); - return job.complete({ - programInfoStatus: job.customHeaders.programInfoStatus, - }); } } diff --git a/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts b/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts index 4cfa598f45..c71befae5d 100644 --- a/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts @@ -39,22 +39,26 @@ export class SupportingUserController { > >, ): Promise { - const hasSupportingUsers = - await this.supportingUserService.hasSupportingUsers( - job.variables.applicationId, + try { + const hasSupportingUsers = + await this.supportingUserService.hasSupportingUsers( + job.variables.applicationId, + ); + if (hasSupportingUsers) { + return job.complete(); + } + const supportingUsers = + await this.supportingUserService.createSupportingUsers( + job.variables.applicationId, + job.variables.supportingUsersTypes, + ); + const createdSupportingUsersIds = supportingUsers.map( + (supportingUser) => supportingUser.id, ); - if (hasSupportingUsers) { - return job.complete(); + return job.complete({ createdSupportingUsersIds }); + } catch (error: unknown) { + return job.fail(`Unexpected error creating supporting users. ${error}`); } - const supportingUsers = - await this.supportingUserService.createSupportingUsers( - job.variables.applicationId, - job.variables.supportingUsersTypes, - ); - const createdSupportingUsersIds = supportingUsers.map( - (supportingUser) => supportingUser.id, - ); - return job.complete({ createdSupportingUsersIds }); } @ZeebeWorker(Workers.LoadSupportingUserData, { @@ -70,20 +74,26 @@ export class SupportingUserController { > >, ): Promise { - const supportingUser = - await this.supportingUserService.getSupportingUserById( - job.variables.supportingUserId, + try { + const supportingUser = + await this.supportingUserService.getSupportingUserById( + job.variables.supportingUserId, + ); + if (!supportingUser) { + job.error( + SUPPORTING_USER_NOT_FOUND, + "Supporting user not found while checking for supporting user response.", + ); + } + const outputVariables = filterObjectProperties( + supportingUser.supportingData, + job.customHeaders, ); - if (!supportingUser) { - job.error( - SUPPORTING_USER_NOT_FOUND, - "Supporting user not found while checking for supporting user response.", + return job.complete(outputVariables); + } catch (error: unknown) { + return job.fail( + `Unexpected error while loading supporting user data. ${error}`, ); } - const outputVariables = filterObjectProperties( - supportingUser.supportingData, - job.customHeaders, - ); - return job.complete(outputVariables); } } From 75d83fbf85d959df6aedb871d83afe944bff7faa Mon Sep 17 00:00:00 2001 From: Ann Date: Wed, 30 Aug 2023 15:20:46 -0400 Subject: [PATCH 2/9] global handler fix and log --- .../application/application.controller.ts | 16 +++++----- .../assessment/assessment.controller.ts | 30 ++++++++++++------- .../cra-integration.controller.ts | 16 +++++----- .../disbursement/disbursement.controller.ts | 20 ++++++++----- .../program-info-request.controller.ts | 7 +++-- .../supporting-user.controller.ts | 14 +++++---- .../src/zeebe/zeebe-transport-strategy.ts | 7 ++++- 7 files changed, 70 insertions(+), 40 deletions(-) diff --git a/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts b/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts index 15d80d3fa3..cb4b422def 100644 --- a/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts @@ -1,4 +1,4 @@ -import { Controller } from "@nestjs/common"; +import { Controller, Logger } from "@nestjs/common"; import { ZeebeWorker } from "../../zeebe"; import { ZeebeJob, @@ -66,9 +66,10 @@ export class ApplicationController { } return job.complete(); } catch (error: unknown) { - return job.fail( - `Unexpected error while updating the application status. ${error}`, - ); + const jobLogger = new Logger(job.type); + const errorMessage = `Unexpected error while updating the application status. ${error}`; + jobLogger.error(errorMessage); + return job.fail(errorMessage); } } @@ -124,9 +125,10 @@ export class ApplicationController { applicationExceptionStatus: ApplicationExceptionStatus.Approved, }); } catch (error: unknown) { - return job.fail( - `Unexpected error while verifying the application exceptions. ${error}`, - ); + const jobLogger = new Logger(job.type); + const errorMessage = `Unexpected error while verifying the application exceptions. ${error}`; + jobLogger.error(errorMessage); + return job.fail(errorMessage); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts b/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts index 685d6c0f32..ea41d670b9 100644 --- a/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts @@ -1,4 +1,4 @@ -import { Controller } from "@nestjs/common"; +import { Controller, Logger } from "@nestjs/common"; import { ZeebeWorker } from "../../zeebe"; import { ZeebeJob, @@ -67,18 +67,21 @@ export class AssessmentController { ); return job.complete(); } catch (error: unknown) { + const jobLogger = new Logger(job.type); if (error instanceof CustomNamedError) { switch (error.name) { case ASSESSMENT_ALREADY_ASSOCIATED_TO_WORKFLOW: + jobLogger.log(`${error.name} ${error.message}`); return job.complete(); case ASSESSMENT_NOT_FOUND: case ASSESSMENT_INVALID_OPERATION_IN_THE_CURRENT_STATE: + jobLogger.error(`${error.name} ${error.message}`); return job.error(error.name, error.message); } } - return job.fail( - `Not able to associate the assessment id ${job.variables.assessmentId} with the workflow instance id ${job.processInstanceKey}. ${error}`, - ); + const errorMessage = `Not able to associate the assessment id ${job.variables.assessmentId} with the workflow instance id ${job.processInstanceKey}. ${error}`; + jobLogger.error(errorMessage); + return job.fail(errorMessage); } } @@ -115,9 +118,10 @@ export class AssessmentController { ); return job.complete(outputVariables); } catch (error: unknown) { - return job.fail( - `Unexpected error while loading assessment consolidated data. ${error}`, - ); + const jobLogger = new Logger(job.type); + const errorMessage = `Unexpected error while loading assessment consolidated data. ${error}`; + jobLogger.error(errorMessage); + return job.fail(errorMessage); } } @@ -140,7 +144,10 @@ export class AssessmentController { ); return job.complete(); } catch (error: unknown) { - return job.fail(`Unexpected error saving the assessment data. ${error}`); + const jobLogger = new Logger(job.type); + const errorMessage = `Unexpected error saving the assessment data. ${error}`; + jobLogger.error(errorMessage); + return job.fail(errorMessage); } } @@ -167,9 +174,10 @@ export class AssessmentController { ); return job.complete(); } catch (error: unknown) { - return job.fail( - `Unexpected error while updating the NOA status. ${error}`, - ); + const jobLogger = new Logger(job.type); + const errorMessage = `Unexpected error while updating the NOA status. ${error}`; + jobLogger.error(errorMessage); + return job.fail(errorMessage); } } diff --git a/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts b/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts index 98c7c7ecf7..b83d83a7b3 100644 --- a/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts @@ -1,4 +1,4 @@ -import { Controller } from "@nestjs/common"; +import { Controller, Logger } from "@nestjs/common"; import { ZeebeWorker } from "../../zeebe"; import { ZeebeJob, @@ -67,9 +67,10 @@ export class CRAIntegrationController { return job.complete({ incomeVerificationId: identifier.id }); } catch (error: unknown) { - return job.fail( - `Unexpected error while creating the CRA income verification. ${error}`, - ); + const jobLogger = new Logger(job.type); + const errorMessage = `Unexpected error while creating the CRA income verification. ${error}`; + jobLogger.error(errorMessage); + return job.fail(errorMessage); } } @@ -98,9 +99,10 @@ export class CRAIntegrationController { ); return job.complete({ incomeVerificationCompleted }); } catch (error: unknown) { - return job.fail( - `Unexpected error while checking the CRA income verification. ${error}`, - ); + const jobLogger = new Logger(job.type); + const errorMessage = `Unexpected error while checking the CRA income verification. ${error}`; + jobLogger.error(errorMessage); + return job.fail(errorMessage); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts b/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts index fc012926f4..e995287022 100644 --- a/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts @@ -1,4 +1,4 @@ -import { Controller } from "@nestjs/common"; +import { Controller, Logger } from "@nestjs/common"; import { ZeebeWorker } from "../../zeebe"; import { ZeebeJob, @@ -63,18 +63,21 @@ export class DisbursementController { ); return job.complete(); } catch (error: unknown) { + const jobLogger = new Logger(job.type); if (error instanceof CustomNamedError) { switch (error.name) { case DISBURSEMENT_SCHEDULES_ALREADY_CREATED: + jobLogger.log(`${error.name} ${error.message}`); return job.complete(); case ASSESSMENT_NOT_FOUND: case ASSESSMENT_INVALID_OPERATION_IN_THE_CURRENT_STATE: + jobLogger.error(`${error.name} ${error.message}`); return job.error(error.name, error.message); } } - return job.fail( - `Unexpected error while creating disbursement schedules. ${error}`, - ); + const errorMessage = `Unexpected error while creating disbursement schedules. ${error}`; + jobLogger.error(errorMessage); + return job.fail(errorMessage); } } @@ -98,19 +101,22 @@ export class DisbursementController { ); return job.complete(); } catch (error: unknown) { + const jobLogger = new Logger(job.type); if (error instanceof CustomNamedError) { switch (error.name) { case DISBURSEMENT_NOT_FOUND: case INVALID_OPERATION_IN_THE_CURRENT_STATUS: case APPLICATION_INVALID_DATA_TO_CREATE_MSFAA_ERROR: + jobLogger.error(`${error.name} ${error.message}`); return job.error(error.name, error.message); case DISBURSEMENT_MSFAA_ALREADY_ASSOCIATED: + jobLogger.log(`${error.name} ${error.message}`); return job.complete(); } } - return job.fail( - `Unexpected error while associating the MSFAA number to the disbursements. ${error}`, - ); + const errorMessage = `Unexpected error while associating the MSFAA number to the disbursements. ${error}`; + jobLogger.error(errorMessage); + return job.fail(errorMessage); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts b/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts index 413854fb01..e51c7a8c6e 100644 --- a/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts @@ -1,4 +1,4 @@ -import { Controller } from "@nestjs/common"; +import { Controller, Logger } from "@nestjs/common"; import { ZeebeWorker } from "../../zeebe"; import { ZeebeJob, MustReturnJobActionAcknowledgement } from "zeebe-node"; import { ApplicationService } from "../../services"; @@ -63,7 +63,10 @@ export class ProgramInfoRequestController { programInfoStatus: job.customHeaders.programInfoStatus, }); } catch (error: unknown) { - return job.fail(`Unexpected error while seting the PIR status. ${error}`); + const jobLogger = new Logger(job.type); + const errorMessage = `Unexpected error while setting the PIR status. ${error}`; + jobLogger.error(errorMessage); + return job.fail(errorMessage); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts b/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts index c71befae5d..9e2ca85719 100644 --- a/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts @@ -1,4 +1,4 @@ -import { Controller } from "@nestjs/common"; +import { Controller, Logger } from "@nestjs/common"; import { ZeebeWorker } from "../../zeebe"; import { ZeebeJob, @@ -57,7 +57,10 @@ export class SupportingUserController { ); return job.complete({ createdSupportingUsersIds }); } catch (error: unknown) { - return job.fail(`Unexpected error creating supporting users. ${error}`); + const jobLogger = new Logger(job.type); + const errorMessage = `Unexpected error while creating supporting users. ${error}`; + jobLogger.error(errorMessage); + return job.fail(errorMessage); } } @@ -91,9 +94,10 @@ export class SupportingUserController { ); return job.complete(outputVariables); } catch (error: unknown) { - return job.fail( - `Unexpected error while loading supporting user data. ${error}`, - ); + const jobLogger = new Logger(job.type); + const errorMessage = `Unexpected error while loading supporting user data. ${error}`; + jobLogger.error(errorMessage); + return job.fail(errorMessage); } } } diff --git a/sources/packages/backend/apps/workers/src/zeebe/zeebe-transport-strategy.ts b/sources/packages/backend/apps/workers/src/zeebe/zeebe-transport-strategy.ts index 69c467a2ca..2a3feb0e70 100644 --- a/sources/packages/backend/apps/workers/src/zeebe/zeebe-transport-strategy.ts +++ b/sources/packages/backend/apps/workers/src/zeebe/zeebe-transport-strategy.ts @@ -4,6 +4,7 @@ import { Server, MessageHandler, } from "@nestjs/microservices"; +import { firstValueFrom, isObservable } from "rxjs"; import { ICustomHeaders, IInputVariables, @@ -63,7 +64,11 @@ export class ZeebeTransportStrategy `Starting job for processInstanceKey ${job.processInstanceKey}. Retries left: ${job.retries}.`, ); try { - return await jobHandler(job); + const jobResult = await jobHandler(job); + if (isObservable(jobResult)) { + await firstValueFrom(jobResult); + } + return jobResult; } catch (error: unknown) { jobLogger.error( `Unhandled exception while processing job ${job.type} from processInstanceKey ${job.processInstanceKey}`, From 279eb78ae74a59b838ec555f7e47b01a03a8c7aa Mon Sep 17 00:00:00 2001 From: Ann Date: Wed, 30 Aug 2023 15:48:54 -0400 Subject: [PATCH 3/9] comments --- .../apps/workers/src/zeebe/zeebe-transport-strategy.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sources/packages/backend/apps/workers/src/zeebe/zeebe-transport-strategy.ts b/sources/packages/backend/apps/workers/src/zeebe/zeebe-transport-strategy.ts index 2a3feb0e70..d501a2485b 100644 --- a/sources/packages/backend/apps/workers/src/zeebe/zeebe-transport-strategy.ts +++ b/sources/packages/backend/apps/workers/src/zeebe/zeebe-transport-strategy.ts @@ -4,7 +4,7 @@ import { Server, MessageHandler, } from "@nestjs/microservices"; -import { firstValueFrom, isObservable } from "rxjs"; +import { isObservable, lastValueFrom } from "rxjs"; import { ICustomHeaders, IInputVariables, @@ -64,9 +64,13 @@ export class ZeebeTransportStrategy `Starting job for processInstanceKey ${job.processInstanceKey}. Retries left: ${job.retries}.`, ); try { + // The return is an `Observable`for a jobHandler, which needs to be awaits. + // The lastValueFrom is almost exactly the same as toPromise() + // meaning that it will resolve with the last value that has arrived + // when the Observable completes. const jobResult = await jobHandler(job); if (isObservable(jobResult)) { - await firstValueFrom(jobResult); + await lastValueFrom(jobResult); } return jobResult; } catch (error: unknown) { From df70c1fac9008ca89cac3836c58b4ee5b9bf0424 Mon Sep 17 00:00:00 2001 From: Ann Date: Wed, 30 Aug 2023 16:38:34 -0400 Subject: [PATCH 4/9] refactot --- .../application/application.controller.ts | 16 +++++++++------- .../assessment/assessment.controller.ts | 6 ++++-- .../program-info-request.controller.ts | 9 ++++----- .../supporting-user.controller.ts | 10 +++++----- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts b/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts index cb4b422def..7942007692 100644 --- a/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts @@ -52,6 +52,7 @@ export class ApplicationController { > >, ): Promise { + const jobLogger = new Logger(job.type); try { const updateResult = await this.applicationService.updateStatus( job.variables.applicationId, @@ -59,14 +60,13 @@ export class ApplicationController { job.customHeaders.toStatus, ); if (!updateResult.affected) { - return job.error( - APPLICATION_STATUS_NOT_UPDATED, - "The application status was not updated either because the application id was not found or the application is not in the expected status.", - ); + const message = + "The application status was not updated either because the application id was not found or the application is not in the expected status."; + jobLogger.error(message); + return job.error(APPLICATION_STATUS_NOT_UPDATED, message); } return job.complete(); } catch (error: unknown) { - const jobLogger = new Logger(job.type); const errorMessage = `Unexpected error while updating the application status. ${error}`; jobLogger.error(errorMessage); return job.fail(errorMessage); @@ -92,13 +92,16 @@ export class ApplicationController { > >, ): Promise { + const jobLogger = new Logger(job.type); try { const application = await this.applicationService.getApplicationById( job.variables.applicationId, { loadDynamicData: true }, ); if (!application) { - return job.error(APPLICATION_NOT_FOUND, "Application id not found."); + const message = "Application id not found."; + jobLogger.error(message); + return job.error(APPLICATION_NOT_FOUND, message); } if (application.applicationException) { // The exceptions were already processed for this application. @@ -125,7 +128,6 @@ export class ApplicationController { applicationExceptionStatus: ApplicationExceptionStatus.Approved, }); } catch (error: unknown) { - const jobLogger = new Logger(job.type); const errorMessage = `Unexpected error while verifying the application exceptions. ${error}`; jobLogger.error(errorMessage); return job.fail(errorMessage); diff --git a/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts b/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts index ea41d670b9..3845afeff6 100644 --- a/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts @@ -104,12 +104,15 @@ export class AssessmentController { ZeebeJob >, ): Promise { + const jobLogger = new Logger(job.type); try { const assessment = await this.studentAssessmentService.getById( job.variables.assessmentId, ); if (!assessment) { - return job.error(ASSESSMENT_NOT_FOUND, "Assessment not found."); + const message = "Assessment not found."; + jobLogger.error(message); + return job.error(ASSESSMENT_NOT_FOUND, message); } const assessmentDTO = this.transformToAssessmentDTO(assessment); const outputVariables = filterObjectProperties( @@ -118,7 +121,6 @@ export class AssessmentController { ); return job.complete(outputVariables); } catch (error: unknown) { - const jobLogger = new Logger(job.type); const errorMessage = `Unexpected error while loading assessment consolidated data. ${error}`; jobLogger.error(errorMessage); return job.fail(errorMessage); diff --git a/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts b/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts index e51c7a8c6e..7447a731ba 100644 --- a/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts @@ -37,16 +37,16 @@ export class ProgramInfoRequestController { > >, ): Promise { + const jobLogger = new Logger(job.type); try { const application = await this.applicationService.getApplicationById( job.variables.applicationId, { loadDynamicData: false }, ); if (!application) { - return job.error( - APPLICATION_NOT_FOUND, - "Application not found while verifying the PIR.", - ); + const message = "Application not found while verifying the PIR."; + jobLogger.error(message); + return job.error(APPLICATION_NOT_FOUND, message); } if (application.pirStatus) { // PIR status was already set, just return it. @@ -63,7 +63,6 @@ export class ProgramInfoRequestController { programInfoStatus: job.customHeaders.programInfoStatus, }); } catch (error: unknown) { - const jobLogger = new Logger(job.type); const errorMessage = `Unexpected error while setting the PIR status. ${error}`; jobLogger.error(errorMessage); return job.fail(errorMessage); diff --git a/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts b/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts index 9e2ca85719..2f5cda6b00 100644 --- a/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts @@ -77,16 +77,17 @@ export class SupportingUserController { > >, ): Promise { + const jobLogger = new Logger(job.type); try { const supportingUser = await this.supportingUserService.getSupportingUserById( job.variables.supportingUserId, ); if (!supportingUser) { - job.error( - SUPPORTING_USER_NOT_FOUND, - "Supporting user not found while checking for supporting user response.", - ); + const message = + "Supporting user not found while checking for supporting user response."; + jobLogger.error(message); + job.error(SUPPORTING_USER_NOT_FOUND, message); } const outputVariables = filterObjectProperties( supportingUser.supportingData, @@ -94,7 +95,6 @@ export class SupportingUserController { ); return job.complete(outputVariables); } catch (error: unknown) { - const jobLogger = new Logger(job.type); const errorMessage = `Unexpected error while loading supporting user data. ${error}`; jobLogger.error(errorMessage); return job.fail(errorMessage); From d9a9c7f0b068ca180bfcee70a6f9b8de6776704e Mon Sep 17 00:00:00 2001 From: Ann Date: Wed, 30 Aug 2023 16:58:00 -0400 Subject: [PATCH 5/9] comment --- .../controllers/application/application.controller.ts | 4 ++++ .../controllers/assessment/assessment.controller.ts | 10 +++++++--- .../cra-integration/cra-integration.controller.ts | 7 ++++--- .../disbursement/disbursement.controller.ts | 6 ++++-- .../program-info-request.controller.ts | 2 ++ .../supporting-user/supporting-user.controller.ts | 5 ++++- 6 files changed, 25 insertions(+), 9 deletions(-) diff --git a/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts b/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts index 7942007692..a50f3e366b 100644 --- a/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts @@ -65,6 +65,7 @@ export class ApplicationController { jobLogger.error(message); return job.error(APPLICATION_STATUS_NOT_UPDATED, message); } + jobLogger.log("Updated the application status."); return job.complete(); } catch (error: unknown) { const errorMessage = `Unexpected error while updating the application status. ${error}`; @@ -105,6 +106,7 @@ export class ApplicationController { } if (application.applicationException) { // The exceptions were already processed for this application. + jobLogger.log("Exceptions were already processed for the application."); return job.complete({ applicationExceptionStatus: application.applicationException.exceptionStatus, @@ -120,10 +122,12 @@ export class ApplicationController { job.variables.applicationId, exceptions, ); + jobLogger.log("Exception created."); return job.complete({ applicationExceptionStatus: createdException.exceptionStatus, }); } + jobLogger.log("Verified application exception."); return job.complete({ applicationExceptionStatus: ApplicationExceptionStatus.Approved, }); diff --git a/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts b/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts index 3845afeff6..0f2a8ebad9 100644 --- a/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts @@ -60,14 +60,15 @@ export class AssessmentController { > >, ): Promise { + const jobLogger = new Logger(job.type); try { await this.studentAssessmentService.associateWorkflowId( job.variables.assessmentId, job.processInstanceKey, ); + jobLogger.log("Associated the assessment id."); return job.complete(); } catch (error: unknown) { - const jobLogger = new Logger(job.type); if (error instanceof CustomNamedError) { switch (error.name) { case ASSESSMENT_ALREADY_ASSOCIATED_TO_WORKFLOW: @@ -119,6 +120,7 @@ export class AssessmentController { assessmentDTO, job.customHeaders, ); + jobLogger.log("Assessment consolidated data loaded."); return job.complete(outputVariables); } catch (error: unknown) { const errorMessage = `Unexpected error while loading assessment consolidated data. ${error}`; @@ -139,14 +141,15 @@ export class AssessmentController { ZeebeJob >, ): Promise { + const jobLogger = new Logger(job.type); try { await this.studentAssessmentService.updateAssessmentData( job.variables.assessmentId, job.variables.assessmentData, ); + jobLogger.log("Assessment data saved."); return job.complete(); } catch (error: unknown) { - const jobLogger = new Logger(job.type); const errorMessage = `Unexpected error saving the assessment data. ${error}`; jobLogger.error(errorMessage); return job.fail(errorMessage); @@ -169,14 +172,15 @@ export class AssessmentController { > >, ): Promise { + const jobLogger = new Logger(job.type); try { await this.studentAssessmentService.updateNOAApprovalStatus( job.variables.assessmentId, job.customHeaders.status, ); + jobLogger.log("NOA status updated."); return job.complete(); } catch (error: unknown) { - const jobLogger = new Logger(job.type); const errorMessage = `Unexpected error while updating the NOA status. ${error}`; jobLogger.error(errorMessage); return job.fail(errorMessage); diff --git a/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts b/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts index b83d83a7b3..4a645454ef 100644 --- a/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts @@ -51,6 +51,7 @@ export class CRAIntegrationController { > >, ): Promise { + const jobLogger = new Logger(job.type); try { const incomeRequest = await this.incomeVerificationService.createIncomeVerification( @@ -64,10 +65,9 @@ export class CRAIntegrationController { await this.incomeVerificationService.checkForCRAIncomeVerificationBypass( identifier.id, ); - + jobLogger.log("CRA income verification created."); return job.complete({ incomeVerificationId: identifier.id }); } catch (error: unknown) { - const jobLogger = new Logger(job.type); const errorMessage = `Unexpected error while creating the CRA income verification. ${error}`; jobLogger.error(errorMessage); return job.fail(errorMessage); @@ -92,14 +92,15 @@ export class CRAIntegrationController { > >, ): Promise { + const jobLogger = new Logger(job.type); try { const incomeVerificationCompleted = await this.incomeVerificationService.isIncomeVerificationCompleted( job.variables.incomeVerificationId, ); + jobLogger.log("CRA income verification completed."); return job.complete({ incomeVerificationCompleted }); } catch (error: unknown) { - const jobLogger = new Logger(job.type); const errorMessage = `Unexpected error while checking the CRA income verification. ${error}`; jobLogger.error(errorMessage); return job.fail(errorMessage); diff --git a/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts b/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts index e995287022..c03a68565c 100644 --- a/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts @@ -56,14 +56,15 @@ export class DisbursementController { > >, ): Promise { + const jobLogger = new Logger(job.type); try { await this.disbursementScheduleSharedService.createDisbursementSchedules( job.variables.assessmentId, job.variables.disbursementSchedules, ); + jobLogger.log("Created disbursement schedule"); return job.complete(); } catch (error: unknown) { - const jobLogger = new Logger(job.type); if (error instanceof CustomNamedError) { switch (error.name) { case DISBURSEMENT_SCHEDULES_ALREADY_CREATED: @@ -95,13 +96,14 @@ export class DisbursementController { ZeebeJob >, ): Promise { + const jobLogger = new Logger(job.type); try { await this.disbursementScheduleService.associateMSFAANumber( job.variables.assessmentId, ); + jobLogger.error("Associated the MSFAA number to the disbursements."); return job.complete(); } catch (error: unknown) { - const jobLogger = new Logger(job.type); if (error instanceof CustomNamedError) { switch (error.name) { case DISBURSEMENT_NOT_FOUND: diff --git a/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts b/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts index 7447a731ba..ef66baf227 100644 --- a/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts @@ -50,6 +50,7 @@ export class ProgramInfoRequestController { } if (application.pirStatus) { // PIR status was already set, just return it. + jobLogger.log("PIR status was already set."); return job.complete({ programInfoStatus: application.pirStatus, }); @@ -59,6 +60,7 @@ export class ProgramInfoRequestController { job.customHeaders.programInfoStatus, job.variables.studentDataSelectedProgram, ); + jobLogger.log("PIR status updated."); return job.complete({ programInfoStatus: job.customHeaders.programInfoStatus, }); diff --git a/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts b/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts index 2f5cda6b00..d83e30add9 100644 --- a/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts @@ -39,12 +39,14 @@ export class SupportingUserController { > >, ): Promise { + const jobLogger = new Logger(job.type); try { const hasSupportingUsers = await this.supportingUserService.hasSupportingUsers( job.variables.applicationId, ); if (hasSupportingUsers) { + jobLogger.log("Supporting users already exists."); return job.complete(); } const supportingUsers = @@ -55,9 +57,9 @@ export class SupportingUserController { const createdSupportingUsersIds = supportingUsers.map( (supportingUser) => supportingUser.id, ); + jobLogger.log("Created supporting users."); return job.complete({ createdSupportingUsersIds }); } catch (error: unknown) { - const jobLogger = new Logger(job.type); const errorMessage = `Unexpected error while creating supporting users. ${error}`; jobLogger.error(errorMessage); return job.fail(errorMessage); @@ -93,6 +95,7 @@ export class SupportingUserController { supportingUser.supportingData, job.customHeaders, ); + jobLogger.log("Supporting user data loaded."); return job.complete(outputVariables); } catch (error: unknown) { const errorMessage = `Unexpected error while loading supporting user data. ${error}`; From 485fb5a3e16abede2e8108a347449b39f80edba1 Mon Sep 17 00:00:00 2001 From: Ann Date: Wed, 30 Aug 2023 18:35:43 -0400 Subject: [PATCH 6/9] created a util function for unexcepted error --- .../application/application.controller.ts | 7 ++--- .../assessment/assessment.controller.ts | 17 +++++------ .../cra-integration.controller.ts | 7 ++--- .../disbursement/disbursement.controller.ts | 7 ++--- .../program-info-request.controller.ts | 4 +-- .../supporting-user.controller.ts | 11 +++---- .../workers/src/utilities/error-handler.ts | 29 +++++++++++++++++++ 7 files changed, 54 insertions(+), 28 deletions(-) create mode 100644 sources/packages/backend/apps/workers/src/utilities/error-handler.ts diff --git a/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts b/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts index a50f3e366b..822fe009f9 100644 --- a/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts @@ -24,6 +24,7 @@ import { import { APPLICATION_ID } from "@sims/services/workflow/variables/assessment-gateway"; import { MaxJobsToActivate } from "../../types"; import { Workers } from "@sims/services/constants"; +import { createUnexpectedJobFail } from "../../utilities"; @Controller() export class ApplicationController { @@ -69,8 +70,7 @@ export class ApplicationController { return job.complete(); } catch (error: unknown) { const errorMessage = `Unexpected error while updating the application status. ${error}`; - jobLogger.error(errorMessage); - return job.fail(errorMessage); + return createUnexpectedJobFail(errorMessage, job, jobLogger); } } @@ -133,8 +133,7 @@ export class ApplicationController { }); } catch (error: unknown) { const errorMessage = `Unexpected error while verifying the application exceptions. ${error}`; - jobLogger.error(errorMessage); - return job.fail(errorMessage); + return createUnexpectedJobFail(errorMessage, job, jobLogger); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts b/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts index 0f2a8ebad9..cf0f188a0a 100644 --- a/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts @@ -24,7 +24,10 @@ import { SupportingUser, SupportingUserType, } from "@sims/sims-db"; -import { filterObjectProperties } from "../../utilities"; +import { + createUnexpectedJobFail, + filterObjectProperties, +} from "../../utilities"; import { ASSESSMENT_ALREADY_ASSOCIATED_TO_WORKFLOW, ASSESSMENT_INVALID_OPERATION_IN_THE_CURRENT_STATE, @@ -81,8 +84,7 @@ export class AssessmentController { } } const errorMessage = `Not able to associate the assessment id ${job.variables.assessmentId} with the workflow instance id ${job.processInstanceKey}. ${error}`; - jobLogger.error(errorMessage); - return job.fail(errorMessage); + return createUnexpectedJobFail(errorMessage, job, jobLogger); } } @@ -124,8 +126,7 @@ export class AssessmentController { return job.complete(outputVariables); } catch (error: unknown) { const errorMessage = `Unexpected error while loading assessment consolidated data. ${error}`; - jobLogger.error(errorMessage); - return job.fail(errorMessage); + return createUnexpectedJobFail(errorMessage, job, jobLogger); } } @@ -151,8 +152,7 @@ export class AssessmentController { return job.complete(); } catch (error: unknown) { const errorMessage = `Unexpected error saving the assessment data. ${error}`; - jobLogger.error(errorMessage); - return job.fail(errorMessage); + return createUnexpectedJobFail(errorMessage, job, jobLogger); } } @@ -182,8 +182,7 @@ export class AssessmentController { return job.complete(); } catch (error: unknown) { const errorMessage = `Unexpected error while updating the NOA status. ${error}`; - jobLogger.error(errorMessage); - return job.fail(errorMessage); + return createUnexpectedJobFail(errorMessage, job, jobLogger); } } diff --git a/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts b/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts index 4a645454ef..a303b4aaff 100644 --- a/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts @@ -22,6 +22,7 @@ import { } from "@sims/services/workflow/variables/cra-integration-income-verification"; import { MaxJobsToActivate } from "../../types"; import { Workers } from "@sims/services/constants"; +import { createUnexpectedJobFail } from "../../utilities"; @Controller() export class CRAIntegrationController { @@ -69,8 +70,7 @@ export class CRAIntegrationController { return job.complete({ incomeVerificationId: identifier.id }); } catch (error: unknown) { const errorMessage = `Unexpected error while creating the CRA income verification. ${error}`; - jobLogger.error(errorMessage); - return job.fail(errorMessage); + return createUnexpectedJobFail(errorMessage, job, jobLogger); } } @@ -102,8 +102,7 @@ export class CRAIntegrationController { return job.complete({ incomeVerificationCompleted }); } catch (error: unknown) { const errorMessage = `Unexpected error while checking the CRA income verification. ${error}`; - jobLogger.error(errorMessage); - return job.fail(errorMessage); + return createUnexpectedJobFail(errorMessage, job, jobLogger); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts b/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts index c03a68565c..cb45b7922c 100644 --- a/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts @@ -32,6 +32,7 @@ import { DISBURSEMENT_MSFAA_ALREADY_ASSOCIATED, DISBURSEMENT_NOT_FOUND, } from "../../constants"; +import { createUnexpectedJobFail } from "../../utilities"; @Controller() export class DisbursementController { @@ -77,8 +78,7 @@ export class DisbursementController { } } const errorMessage = `Unexpected error while creating disbursement schedules. ${error}`; - jobLogger.error(errorMessage); - return job.fail(errorMessage); + return createUnexpectedJobFail(errorMessage, job, jobLogger); } } @@ -117,8 +117,7 @@ export class DisbursementController { } } const errorMessage = `Unexpected error while associating the MSFAA number to the disbursements. ${error}`; - jobLogger.error(errorMessage); - return job.fail(errorMessage); + return createUnexpectedJobFail(errorMessage, job, jobLogger); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts b/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts index ef66baf227..319713577e 100644 --- a/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts @@ -14,6 +14,7 @@ import { } from "@sims/services/workflow/variables/assessment-gateway"; import { MaxJobsToActivate } from "../../types"; import { Workers } from "@sims/services/constants"; +import { createUnexpectedJobFail } from "../../utilities"; @Controller() export class ProgramInfoRequestController { @@ -66,8 +67,7 @@ export class ProgramInfoRequestController { }); } catch (error: unknown) { const errorMessage = `Unexpected error while setting the PIR status. ${error}`; - jobLogger.error(errorMessage); - return job.fail(errorMessage); + return createUnexpectedJobFail(errorMessage, job, jobLogger); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts b/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts index d83e30add9..b50bd0ac7f 100644 --- a/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts @@ -12,7 +12,10 @@ import { CreateSupportingUsersJobInDTO, CreateSupportingUsersJobOutDTO, } from ".."; -import { filterObjectProperties } from "../../utilities"; +import { + createUnexpectedJobFail, + filterObjectProperties, +} from "../../utilities"; import { SUPPORTING_USER_NOT_FOUND } from "../../constants"; import { APPLICATION_ID } from "@sims/services/workflow/variables/assessment-gateway"; import { @@ -61,8 +64,7 @@ export class SupportingUserController { return job.complete({ createdSupportingUsersIds }); } catch (error: unknown) { const errorMessage = `Unexpected error while creating supporting users. ${error}`; - jobLogger.error(errorMessage); - return job.fail(errorMessage); + return createUnexpectedJobFail(errorMessage, job, jobLogger); } } @@ -99,8 +101,7 @@ export class SupportingUserController { return job.complete(outputVariables); } catch (error: unknown) { const errorMessage = `Unexpected error while loading supporting user data. ${error}`; - jobLogger.error(errorMessage); - return job.fail(errorMessage); + return createUnexpectedJobFail(errorMessage, job, jobLogger); } } } diff --git a/sources/packages/backend/apps/workers/src/utilities/error-handler.ts b/sources/packages/backend/apps/workers/src/utilities/error-handler.ts new file mode 100644 index 0000000000..08486d5087 --- /dev/null +++ b/sources/packages/backend/apps/workers/src/utilities/error-handler.ts @@ -0,0 +1,29 @@ +import { Logger } from "@nestjs/common"; +import { ZeebeJob, MustReturnJobActionAcknowledgement } from "zeebe-node"; + +/** + * Takes care of log and will acknowledge worker, + * in case any unexpected job failure. + * @param error error message to be logged. + * @param job zeebe job. + * @param logger logger object if any, + * else a new logger instance will be created. + * @returns a job fail acknowledgement to the worker. + */ +export function createUnexpectedJobFail( + error: unknown, + job: ZeebeJob, + logger?: Logger, +): MustReturnJobActionAcknowledgement { + const jobLogger = logger ?? new Logger(job.type); + const errorMessage = `Unexpected error while processing job. ${parseException( + error, + )}`; + jobLogger.error(job); + jobLogger.error(errorMessage); + return job.fail(errorMessage); +} + +function parseException(error: unknown): string { + return JSON.stringify(error, null, 2); +} From 46f30604960b8f5ce5c7640aea7ac2d3b6d33fb8 Mon Sep 17 00:00:00 2001 From: Ann Date: Wed, 30 Aug 2023 18:40:53 -0400 Subject: [PATCH 7/9] refactor --- .../apps/workers/src/utilities/error-handler.ts | 4 ++++ .../backend/apps/workers/src/utilities/index.ts | 1 + .../workers/src/zeebe/zeebe-transport-strategy.ts | 14 ++++++++++---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/sources/packages/backend/apps/workers/src/utilities/error-handler.ts b/sources/packages/backend/apps/workers/src/utilities/error-handler.ts index 08486d5087..e0b0f5bf28 100644 --- a/sources/packages/backend/apps/workers/src/utilities/error-handler.ts +++ b/sources/packages/backend/apps/workers/src/utilities/error-handler.ts @@ -24,6 +24,10 @@ export function createUnexpectedJobFail( return job.fail(errorMessage); } +/** + * Parse the error in a prettier format for better + * readability. + */ function parseException(error: unknown): string { return JSON.stringify(error, null, 2); } diff --git a/sources/packages/backend/apps/workers/src/utilities/index.ts b/sources/packages/backend/apps/workers/src/utilities/index.ts index 336a4b36ab..5b2b006590 100644 --- a/sources/packages/backend/apps/workers/src/utilities/index.ts +++ b/sources/packages/backend/apps/workers/src/utilities/index.ts @@ -1 +1,2 @@ export * from "./jsonpath/jsonpath-utils"; +export * from "./error-handler" \ No newline at end of file diff --git a/sources/packages/backend/apps/workers/src/zeebe/zeebe-transport-strategy.ts b/sources/packages/backend/apps/workers/src/zeebe/zeebe-transport-strategy.ts index d501a2485b..f916892ddf 100644 --- a/sources/packages/backend/apps/workers/src/zeebe/zeebe-transport-strategy.ts +++ b/sources/packages/backend/apps/workers/src/zeebe/zeebe-transport-strategy.ts @@ -64,12 +64,18 @@ export class ZeebeTransportStrategy `Starting job for processInstanceKey ${job.processInstanceKey}. Retries left: ${job.retries}.`, ); try { - // The return is an `Observable`for a jobHandler, which needs to be awaits. - // The lastValueFrom is almost exactly the same as toPromise() - // meaning that it will resolve with the last value that has arrived - // when the Observable completes. + // The jobHandler can potentially return a Promise or + // an Observable. The Promise will be returned from a + // controller when it finishes as expected returning + // some value. The Observable will be returned as a + // result of an unhandled exception when a RpcExecption + // will be generated and the RpcExpectionHandler will + // wrap this exception as an Observable object. const jobResult = await jobHandler(job); if (isObservable(jobResult)) { + // The lastValueFrom is almost exactly the same as toPromise() + // meaning that it will resolve with the last value that has arrived + // when the Observable completes. await lastValueFrom(jobResult); } return jobResult; From d952c64802278d7da9c742af6092e54d463ac99f Mon Sep 17 00:00:00 2001 From: Ann Date: Wed, 30 Aug 2023 18:54:38 -0400 Subject: [PATCH 8/9] refactor --- .../application/application.controller.ts | 6 ++---- .../controllers/assessment/assessment.controller.ts | 12 ++++-------- .../cra-integration/cra-integration.controller.ts | 6 ++---- .../disbursement/disbursement.controller.ts | 6 ++---- .../program-info-request.controller.ts | 3 +-- .../supporting-user/supporting-user.controller.ts | 6 ++---- .../apps/workers/src/utilities/error-handler.ts | 11 ++--------- .../backend/apps/workers/src/utilities/index.ts | 2 +- sources/packages/backend/libs/utilities/src/index.ts | 1 + .../backend/libs/utilities/src/parse-json.ts | 9 +++++++++ 10 files changed, 26 insertions(+), 36 deletions(-) create mode 100644 sources/packages/backend/libs/utilities/src/parse-json.ts diff --git a/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts b/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts index 822fe009f9..50a981b072 100644 --- a/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts @@ -69,8 +69,7 @@ export class ApplicationController { jobLogger.log("Updated the application status."); return job.complete(); } catch (error: unknown) { - const errorMessage = `Unexpected error while updating the application status. ${error}`; - return createUnexpectedJobFail(errorMessage, job, jobLogger); + return createUnexpectedJobFail(error, job, jobLogger); } } @@ -132,8 +131,7 @@ export class ApplicationController { applicationExceptionStatus: ApplicationExceptionStatus.Approved, }); } catch (error: unknown) { - const errorMessage = `Unexpected error while verifying the application exceptions. ${error}`; - return createUnexpectedJobFail(errorMessage, job, jobLogger); + return createUnexpectedJobFail(error, job, jobLogger); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts b/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts index cf0f188a0a..dd1621183c 100644 --- a/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts @@ -83,8 +83,7 @@ export class AssessmentController { return job.error(error.name, error.message); } } - const errorMessage = `Not able to associate the assessment id ${job.variables.assessmentId} with the workflow instance id ${job.processInstanceKey}. ${error}`; - return createUnexpectedJobFail(errorMessage, job, jobLogger); + return createUnexpectedJobFail(error, job, jobLogger); } } @@ -125,8 +124,7 @@ export class AssessmentController { jobLogger.log("Assessment consolidated data loaded."); return job.complete(outputVariables); } catch (error: unknown) { - const errorMessage = `Unexpected error while loading assessment consolidated data. ${error}`; - return createUnexpectedJobFail(errorMessage, job, jobLogger); + return createUnexpectedJobFail(error, job, jobLogger); } } @@ -151,8 +149,7 @@ export class AssessmentController { jobLogger.log("Assessment data saved."); return job.complete(); } catch (error: unknown) { - const errorMessage = `Unexpected error saving the assessment data. ${error}`; - return createUnexpectedJobFail(errorMessage, job, jobLogger); + return createUnexpectedJobFail(error, job, jobLogger); } } @@ -181,8 +178,7 @@ export class AssessmentController { jobLogger.log("NOA status updated."); return job.complete(); } catch (error: unknown) { - const errorMessage = `Unexpected error while updating the NOA status. ${error}`; - return createUnexpectedJobFail(errorMessage, job, jobLogger); + return createUnexpectedJobFail(error, job, jobLogger); } } diff --git a/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts b/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts index a303b4aaff..b6c17f7735 100644 --- a/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts @@ -69,8 +69,7 @@ export class CRAIntegrationController { jobLogger.log("CRA income verification created."); return job.complete({ incomeVerificationId: identifier.id }); } catch (error: unknown) { - const errorMessage = `Unexpected error while creating the CRA income verification. ${error}`; - return createUnexpectedJobFail(errorMessage, job, jobLogger); + return createUnexpectedJobFail(error, job, jobLogger); } } @@ -101,8 +100,7 @@ export class CRAIntegrationController { jobLogger.log("CRA income verification completed."); return job.complete({ incomeVerificationCompleted }); } catch (error: unknown) { - const errorMessage = `Unexpected error while checking the CRA income verification. ${error}`; - return createUnexpectedJobFail(errorMessage, job, jobLogger); + return createUnexpectedJobFail(error, job, jobLogger); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts b/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts index cb45b7922c..72e75f7b41 100644 --- a/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts @@ -77,8 +77,7 @@ export class DisbursementController { return job.error(error.name, error.message); } } - const errorMessage = `Unexpected error while creating disbursement schedules. ${error}`; - return createUnexpectedJobFail(errorMessage, job, jobLogger); + return createUnexpectedJobFail(error, job, jobLogger); } } @@ -116,8 +115,7 @@ export class DisbursementController { return job.complete(); } } - const errorMessage = `Unexpected error while associating the MSFAA number to the disbursements. ${error}`; - return createUnexpectedJobFail(errorMessage, job, jobLogger); + return createUnexpectedJobFail(error, job, jobLogger); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts b/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts index 319713577e..61d38dccdb 100644 --- a/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts @@ -66,8 +66,7 @@ export class ProgramInfoRequestController { programInfoStatus: job.customHeaders.programInfoStatus, }); } catch (error: unknown) { - const errorMessage = `Unexpected error while setting the PIR status. ${error}`; - return createUnexpectedJobFail(errorMessage, job, jobLogger); + return createUnexpectedJobFail(error, job, jobLogger); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts b/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts index b50bd0ac7f..349a48fcc1 100644 --- a/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts @@ -63,8 +63,7 @@ export class SupportingUserController { jobLogger.log("Created supporting users."); return job.complete({ createdSupportingUsersIds }); } catch (error: unknown) { - const errorMessage = `Unexpected error while creating supporting users. ${error}`; - return createUnexpectedJobFail(errorMessage, job, jobLogger); + return createUnexpectedJobFail(error, job, jobLogger); } } @@ -100,8 +99,7 @@ export class SupportingUserController { jobLogger.log("Supporting user data loaded."); return job.complete(outputVariables); } catch (error: unknown) { - const errorMessage = `Unexpected error while loading supporting user data. ${error}`; - return createUnexpectedJobFail(errorMessage, job, jobLogger); + return createUnexpectedJobFail(error, job, jobLogger); } } } diff --git a/sources/packages/backend/apps/workers/src/utilities/error-handler.ts b/sources/packages/backend/apps/workers/src/utilities/error-handler.ts index e0b0f5bf28..8f5d972ae8 100644 --- a/sources/packages/backend/apps/workers/src/utilities/error-handler.ts +++ b/sources/packages/backend/apps/workers/src/utilities/error-handler.ts @@ -1,4 +1,5 @@ import { Logger } from "@nestjs/common"; +import { parseJSONError } from "@sims/utilities"; import { ZeebeJob, MustReturnJobActionAcknowledgement } from "zeebe-node"; /** @@ -16,18 +17,10 @@ export function createUnexpectedJobFail( logger?: Logger, ): MustReturnJobActionAcknowledgement { const jobLogger = logger ?? new Logger(job.type); - const errorMessage = `Unexpected error while processing job. ${parseException( + const errorMessage = `Unexpected error while processing job. ${parseJSONError( error, )}`; jobLogger.error(job); jobLogger.error(errorMessage); return job.fail(errorMessage); } - -/** - * Parse the error in a prettier format for better - * readability. - */ -function parseException(error: unknown): string { - return JSON.stringify(error, null, 2); -} diff --git a/sources/packages/backend/apps/workers/src/utilities/index.ts b/sources/packages/backend/apps/workers/src/utilities/index.ts index 5b2b006590..878d6ca30b 100644 --- a/sources/packages/backend/apps/workers/src/utilities/index.ts +++ b/sources/packages/backend/apps/workers/src/utilities/index.ts @@ -1,2 +1,2 @@ export * from "./jsonpath/jsonpath-utils"; -export * from "./error-handler" \ No newline at end of file +export * from "./error-handler"; diff --git a/sources/packages/backend/libs/utilities/src/index.ts b/sources/packages/backend/libs/utilities/src/index.ts index cf468ba43f..87d5c144b5 100644 --- a/sources/packages/backend/libs/utilities/src/index.ts +++ b/sources/packages/backend/libs/utilities/src/index.ts @@ -9,3 +9,4 @@ export * from "./sqlLoader"; export * from "./parallel-processing-utils"; export * from "./datatable-config"; export * from "./base64-utils"; +export * from "./parse-json"; diff --git a/sources/packages/backend/libs/utilities/src/parse-json.ts b/sources/packages/backend/libs/utilities/src/parse-json.ts new file mode 100644 index 0000000000..dcc17223c2 --- /dev/null +++ b/sources/packages/backend/libs/utilities/src/parse-json.ts @@ -0,0 +1,9 @@ +/** + * Parse the json error in a prettier format for better + * readability. + * @param value to be parsed. + * @returns stringify JSON object is a prettier format. + */ +export function parseJSONError(value: unknown): string { + return JSON.stringify(value, null, 2); +} From 99da3f7d391db089df5a01eb29e7e011f6db2580 Mon Sep 17 00:00:00 2001 From: Ann Date: Thu, 31 Aug 2023 12:50:21 -0400 Subject: [PATCH 9/9] feedback --- .../application/application.controller.ts | 8 ++++-- .../assessment/assessment.controller.ts | 25 +++++++++++++------ .../cra-integration.controller.ts | 8 ++++-- .../disbursement/disbursement.controller.ts | 8 ++++-- .../program-info-request.controller.ts | 4 ++- .../supporting-user.controller.ts | 8 ++++-- .../workers/src/utilities/error-handler.ts | 9 ++++--- .../backend/libs/utilities/src/parse-json.ts | 2 +- 8 files changed, 51 insertions(+), 21 deletions(-) diff --git a/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts b/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts index 50a981b072..a9a735ec89 100644 --- a/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/application/application.controller.ts @@ -69,7 +69,9 @@ export class ApplicationController { jobLogger.log("Updated the application status."); return job.complete(); } catch (error: unknown) { - return createUnexpectedJobFail(error, job, jobLogger); + return createUnexpectedJobFail(error, job, { + logger: jobLogger, + }); } } @@ -131,7 +133,9 @@ export class ApplicationController { applicationExceptionStatus: ApplicationExceptionStatus.Approved, }); } catch (error: unknown) { - return createUnexpectedJobFail(error, job, jobLogger); + return createUnexpectedJobFail(error, job, { + logger: jobLogger, + }); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts b/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts index 1fb90825a5..252038fe40 100644 --- a/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/assessment/assessment.controller.ts @@ -85,7 +85,9 @@ export class AssessmentController { return job.error(error.name, error.message); } } - return createUnexpectedJobFail(error, job, jobLogger); + return createUnexpectedJobFail(error, job, { + logger: jobLogger, + }); } } @@ -126,7 +128,9 @@ export class AssessmentController { jobLogger.log("Assessment consolidated data loaded."); return job.complete(outputVariables); } catch (error: unknown) { - return createUnexpectedJobFail(error, job, jobLogger); + return createUnexpectedJobFail(error, job, { + logger: jobLogger, + }); } } @@ -151,7 +155,9 @@ export class AssessmentController { jobLogger.log("Assessment data saved."); return job.complete(); } catch (error: unknown) { - return createUnexpectedJobFail(error, job, jobLogger); + return createUnexpectedJobFail(error, job, { + logger: jobLogger, + }); } } @@ -180,7 +186,9 @@ export class AssessmentController { jobLogger.log("NOA status updated."); return job.complete(); } catch (error: unknown) { - return createUnexpectedJobFail(error, job, jobLogger); + return createUnexpectedJobFail(error, job, { + logger: jobLogger, + }); } } @@ -196,17 +204,18 @@ export class AssessmentController { ZeebeJob >, ): Promise { + const jobLogger = new Logger(job.type); try { await this.studentAssessmentService.updateAssessmentStatusAndSaveWorkflowData( job.variables.assessmentId, job.variables.workflowData, ); + jobLogger.log("Updated assessment status and saved the workflow data."); return job.complete(); } catch (error: unknown) { - const jobLogger = new Logger(job.type); - const errorMessage = `Failed while updating assessment status and saving workflow data. ${error}`; - jobLogger.error(errorMessage); - return job.fail(errorMessage); + return createUnexpectedJobFail(error, job, { + logger: jobLogger, + }); } } diff --git a/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts b/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts index b6c17f7735..68300b568d 100644 --- a/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/cra-integration/cra-integration.controller.ts @@ -69,7 +69,9 @@ export class CRAIntegrationController { jobLogger.log("CRA income verification created."); return job.complete({ incomeVerificationId: identifier.id }); } catch (error: unknown) { - return createUnexpectedJobFail(error, job, jobLogger); + return createUnexpectedJobFail(error, job, { + logger: jobLogger, + }); } } @@ -100,7 +102,9 @@ export class CRAIntegrationController { jobLogger.log("CRA income verification completed."); return job.complete({ incomeVerificationCompleted }); } catch (error: unknown) { - return createUnexpectedJobFail(error, job, jobLogger); + return createUnexpectedJobFail(error, job, { + logger: jobLogger, + }); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts b/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts index 72e75f7b41..6ebab7da7a 100644 --- a/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/disbursement/disbursement.controller.ts @@ -77,7 +77,9 @@ export class DisbursementController { return job.error(error.name, error.message); } } - return createUnexpectedJobFail(error, job, jobLogger); + return createUnexpectedJobFail(error, job, { + logger: jobLogger, + }); } } @@ -115,7 +117,9 @@ export class DisbursementController { return job.complete(); } } - return createUnexpectedJobFail(error, job, jobLogger); + return createUnexpectedJobFail(error, job, { + logger: jobLogger, + }); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts b/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts index 61d38dccdb..d38f84e55d 100644 --- a/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/program-info-request/program-info-request.controller.ts @@ -66,7 +66,9 @@ export class ProgramInfoRequestController { programInfoStatus: job.customHeaders.programInfoStatus, }); } catch (error: unknown) { - return createUnexpectedJobFail(error, job, jobLogger); + return createUnexpectedJobFail(error, job, { + logger: jobLogger, + }); } } } diff --git a/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts b/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts index 349a48fcc1..bda54aba64 100644 --- a/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts +++ b/sources/packages/backend/apps/workers/src/controllers/supporting-user/supporting-user.controller.ts @@ -63,7 +63,9 @@ export class SupportingUserController { jobLogger.log("Created supporting users."); return job.complete({ createdSupportingUsersIds }); } catch (error: unknown) { - return createUnexpectedJobFail(error, job, jobLogger); + return createUnexpectedJobFail(error, job, { + logger: jobLogger, + }); } } @@ -99,7 +101,9 @@ export class SupportingUserController { jobLogger.log("Supporting user data loaded."); return job.complete(outputVariables); } catch (error: unknown) { - return createUnexpectedJobFail(error, job, jobLogger); + return createUnexpectedJobFail(error, job, { + logger: jobLogger, + }); } } } diff --git a/sources/packages/backend/apps/workers/src/utilities/error-handler.ts b/sources/packages/backend/apps/workers/src/utilities/error-handler.ts index 8f5d972ae8..df59c6410d 100644 --- a/sources/packages/backend/apps/workers/src/utilities/error-handler.ts +++ b/sources/packages/backend/apps/workers/src/utilities/error-handler.ts @@ -7,16 +7,19 @@ import { ZeebeJob, MustReturnJobActionAcknowledgement } from "zeebe-node"; * in case any unexpected job failure. * @param error error message to be logged. * @param job zeebe job. - * @param logger logger object if any, + * @param options options, + * - "logger" logger object if any, * else a new logger instance will be created. * @returns a job fail acknowledgement to the worker. */ export function createUnexpectedJobFail( error: unknown, job: ZeebeJob, - logger?: Logger, + options?: { + logger?: Logger; + }, ): MustReturnJobActionAcknowledgement { - const jobLogger = logger ?? new Logger(job.type); + const jobLogger = options?.logger ?? new Logger(job.type); const errorMessage = `Unexpected error while processing job. ${parseJSONError( error, )}`; diff --git a/sources/packages/backend/libs/utilities/src/parse-json.ts b/sources/packages/backend/libs/utilities/src/parse-json.ts index dcc17223c2..4ddf481380 100644 --- a/sources/packages/backend/libs/utilities/src/parse-json.ts +++ b/sources/packages/backend/libs/utilities/src/parse-json.ts @@ -2,7 +2,7 @@ * Parse the json error in a prettier format for better * readability. * @param value to be parsed. - * @returns stringify JSON object is a prettier format. + * @returns json string in a prettier format. */ export function parseJSONError(value: unknown): string { return JSON.stringify(value, null, 2);