Job is being marked as Completed even though there are errors in the logs
vinayak2112 opened this issue · comments
`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.