OptimalBits / bull

Premium Queue package for handling distributed jobs and messages in NodeJS.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Job is being marked as Completed even though there are errors in the logs

vinayak2112 opened this issue · comments

engtest

`jobs.process('englishTestSFUpdates', async (job, callback) => {
let {email, action} = job.data
//section = Started / Aborted / Regenerated / Completed
//console.log('englishTestSFUpdates Job Started: ', job.data, job.id)
job.log('Job Started', action)

try {
	job.log('Finding User In Mongo: ' + email)
	let user = await UserModel.getFullUserByEmail(email)
	if (!user) {
		job.progress(100)
		job.log('User Not Found In Mongo')
		return callback('User Not Found In Mongo')
	}

	job.log('User Record Found in Mongo: ' + user.email)
	job.progress(15)

	let data = {}

	data.testStatus = user.onlinetest.testStatus

	//if (data.testStatus === 'Completed') data.testStatus = 'Complete'
	//console.log('englishTestSFUpdates: Updating SF as per test Status: ' +data.testStatus)
	job.log('Updating SF as per test Status: ' + data.testStatus)
	const salesforceId = user.salesforceIds.SF_Id
	const frId = user.salesforceIds.FR_Id

	/**Mapping of onlinetes.testStatus to value of AMCAT_Status__c on SF**/
	const AMCAT_Status__c = {
		Started: 'In Progress',
		Paused: 'In Progress',
		Resumed: 'In Progress',
		Aborted: 'Aborted',
		Regenerated: 'Not Started',
		Completed: 'Completed',
	}
	/**Mapping of onlinetes.rescheduled to value of AMCAT_Test_Creation_Status__c SF**/
	const AMCAT_Test_Creation_Status__c = user.onlinetest.rescheduled
		? 'Regenerated'
		: 'Created'

	switch (data.testStatus) {
		//case 'Not Started':

		//Test is started - Set SF fields for start-test
		case 'Regenerated':
		case 'Started': {
			//console.log('englishTestSFUpdates: updating SF for Started/Regenerated')
			//if (['In Progress',"Not Started"].includes(user.formSections.onlinetest)) {
			//	console.log('englishTestSFUpdates: formsection os in progress/not started ')
			job.log('Updating Contact Record: ' + salesforceId)
			await SalesforceService.upsertContactRecord({
				Id: user.salesforceIds.SF_Id,
				AMCAT_Status__c: AMCAT_Status__c[data.testStatus],
				AMCAT_Test_Creation_Status__c: user.onlinetest.rescheduled
					? 'Regenerated'
					: 'Created',
			})
			job.log('Updated Contact Record: ' + salesforceId)
			job.log('Updating FR Record: ' + frId)
			SalesforceService.updateFirstReview(
				user,
				{
					Start_Time__c: user.onlinetest.startTime,
				},
				(err, firstReviewId) => {
					if (err) {
						job.log(
							'Error Updating First Review Record: ' +
								JSON.stringify(err)
						)
						job.progress(100)
					} else {
						job.log(
							'First Review Record Updated: ' + firstReviewId
						)
						job.progress(90)
					}
				}
			)
			job.log(
				'Updated SF to Start test as per testStatus  ' +
					data.testStatus
			)
			job.progress(100)
			callback()
			break
		}
		case 'Aborted':
		case 'Completed': {
			//console.log('englishTestSFUpdates: test Status case Aborted/Completed')
			const onlinetest = user.onlinetest
			const testResults = onlinetest.testResults
			const proctoringData = onlinetest.proctoringData
			const separator = ','
			let SF_DATA = {
				Grammar_Q_IDs__c: _.join(
					testResults.grammarQIds,
					separator
				),
				RC_Q_IDs__c:
					testResults.rcQIds.length > 0
						? _.join(testResults.rcQIds, separator)
						: '',

				Correct_Grammar_Qs__c:
					testResults.correctGrammarQueIds.length > 0
						? _.join(
								testResults.correctGrammarQueIds,
								separator
						  )
						: '',

				Correct_RC_Qs__c:
					testResults.correctRCQueIds.length > 0
						? _.join(testResults.correctRCQueIds, separator)
						: '',

				Grammar_Correct_Ans_Count__c:
					testResults.grammarCorrectAnsCount,
				RC_Correct_Ans_Count__c: testResults.rcCorrectAnsCount,
				Proctoring_Concerns__c: proctoringData.proctoringConcerns,
				Proctoring_Warning_Count__c: proctoringData.tabCount,
			}

			await SalesforceService.upsertContactRecord({
				Id: user.salesforceIds.SF_Id,
				AMCAT_Status__c: AMCAT_Status__c[data.testStatus],
				AMCAT_Test_Creation_Status__c:
					AMCAT_Test_Creation_Status__c,
			}).then(
				SalesforceService.updateFirstReview(
					user,
					{
						Start_Time__c: onlinetest.startTime,
						End_Time__c: onlinetest.endTime,
						...SF_DATA,
					},
					(err, firstReviewId) => {
						if (err) {
							job.log(
								'Error Updating First Review Record: ' +
									JSON.stringify(err)
							)
							job.progress(100)
						} else {
							job.log(
								'First Review Record Updated: ' +
									firstReviewId
							)
							job.progress(90)
						}
					}
				)
			)
			break
		}
	}
	job.progress(100)
	callback()
} catch (err) {
	job.log('Error Processing Job')
	job.progress(100)
	handleError('queue', err, email)
	return callback(err)
}

})`
here is the code snippet which is responsible for sending jobs in failed section / completed section

You catching the error yourself, you should let the error propagate up so that Bull can catch it and mark the job as failed.
Btw, a friendly hint, refactor your code in small functions, it is way too much code in a single function and thus easier to make mistakes and much harder to understand.