Проброс ошибки об отсутствии аутентификации головному процессу для постановки в очередь задания на аутентификацию

This commit is contained in:
Mikhail Chechnev 2019-01-06 20:31:36 +03:00
parent 1088078181
commit af5f93380f

View File

@ -89,6 +89,8 @@ const appProcess = async prms => {
); );
//Если структура объекта в норме //Если структура объекта в норме
if (!sCheckResult) { if (!sCheckResult) {
//Запоминаем текущий статус сообщения
let nOldExecState = prms.queue.nExecState;
//Обрабатываем //Обрабатываем
try { try {
//Считываем статус аутентификации сервиса //Считываем статус аутентификации сервиса
@ -175,7 +177,7 @@ const appProcess = async prms => {
//Применим ответ "До" - флаг отсуствия аутентификации //Применим ответ "До" - флаг отсуствия аутентификации
if (!_.isUndefined(resBefore.bUnAuth)) if (!_.isUndefined(resBefore.bUnAuth))
if (resBefore.bUnAuth === true) { if (resBefore.bUnAuth === true) {
throw new ServerError(SERR_UNAUTH, "Не аутентифицирован"); throw new ServerError(SERR_UNAUTH, "Нет аутентификации");
} }
//Применим ответ "До" - контекст работы сервиса //Применим ответ "До" - контекст работы сервиса
if (!_.isUndefined(resBefore.sCtx)) if (!_.isUndefined(resBefore.sCtx))
@ -234,8 +236,7 @@ const appProcess = async prms => {
} }
//Применим ответ "После" - флаг утентификации сервиса //Применим ответ "После" - флаг утентификации сервиса
if (!_.isUndefined(resAfter.bUnAuth)) if (!_.isUndefined(resAfter.bUnAuth))
if (resAfter.bUnAuth === true) if (resAfter.bUnAuth === true) throw new ServerError(SERR_UNAUTH, "Нет аутентификации");
throw new ServerError(SERR_UNAUTH, "Не аутентифицирован");
//Применим ответ "После" - контекст работы сервиса //Применим ответ "После" - контекст работы сервиса
if (!_.isUndefined(resAfter.sCtx)) if (!_.isUndefined(resAfter.sCtx))
if (prms.function.nFnType == objServiceFnSchema.NFN_TYPE_LOGIN) { if (prms.function.nFnType == objServiceFnSchema.NFN_TYPE_LOGIN) {
@ -274,20 +275,35 @@ const appProcess = async prms => {
nQueueId: prms.queue.nId nQueueId: prms.queue.nId
}); });
} else { } else {
//Нет атуентификации (мы ещё не меняли статус сообщения и это не считается за попытку исполнения, это будет просто сигнал, что надо аутентифицироваться а потом задача снова попадёт в очередь) //Нет атуентификации
res = new ServerError(SERR_UNAUTH, "Не аутентифицирован"); throw new ServerError(SERR_UNAUTH, "Нет аутентификации");
} }
} catch (e) { } catch (e) {
//Фиксируем ошибку обработки сервером приложений - в статусе сообщения //Если была ошибка аутентификации - возвращаем старый статус не меняя количества попыток
res = await dbConn.setQueueState({ if (e instanceof ServerError && e.sCode == SERR_UNAUTH) {
nQueueId: prms.queue.nId, await dbConn.setQueueState({
sExecMsg: makeErrorText(e), nQueueId: prms.queue.nId,
nIncExecCnt: NINC_EXEC_CNT_YES, sExecMsg: makeErrorText(e),
nExecState: nExecState: nOldExecState,
prms.queue.nExecCnt + 1 < prms.queue.nRetryAttempts nResetData: objQueueSchema.NQUEUE_RESET_DATA_YES
? objQueueSchema.NQUEUE_EXEC_STATE_APP_ERR });
: objQueueSchema.NQUEUE_EXEC_STATE_ERR res = e;
}); } else {
//Фиксируем ошибку обработки сервером приложений - в статусе сообщения
res = await dbConn.setQueueState({
nQueueId: prms.queue.nId,
sExecMsg: makeErrorText(e),
nResetData:
prms.queue.nExecCnt + 1 < prms.queue.nRetryAttempts
? objQueueSchema.NQUEUE_RESET_DATA_YES
: objQueueSchema.NQUEUE_RESET_DATA_NO,
nIncExecCnt: NINC_EXEC_CNT_YES,
nExecState:
prms.queue.nExecCnt + 1 < prms.queue.nRetryAttempts
? objQueueSchema.NQUEUE_EXEC_STATE_APP_ERR
: objQueueSchema.NQUEUE_EXEC_STATE_ERR
});
}
//Фиксируем ошибку обработки сервером приложений - в протоколе работы сервиса //Фиксируем ошибку обработки сервером приложений - в протоколе работы сервиса
await logger.error( await logger.error(
`Ошибка обработки исходящего сообщения ${prms.queue.nId} сервером приложений: ${makeErrorText(e)}`, `Ошибка обработки исходящего сообщения ${prms.queue.nId} сервером приложений: ${makeErrorText(e)}`,
@ -337,7 +353,7 @@ const dbProcess = async prms => {
throw new ServerError(SERR_DB_SERVER, prcRes.sMsg); throw new ServerError(SERR_DB_SERVER, prcRes.sMsg);
//Если результат - ошибка аутентификации, то и её пробрасываем, но с правильным кодом //Если результат - ошибка аутентификации, то и её пробрасываем, но с правильным кодом
if (prcRes.sResult == objQueueSchema.SPRC_RESP_RESULT_UNAUTH) if (prcRes.sResult == objQueueSchema.SPRC_RESP_RESULT_UNAUTH)
throw new ServerError(SERR_UNAUTH, prcRes.sMsg || "Не аутентифицирован"); throw new ServerError(SERR_UNAUTH, prcRes.sMsg || "Нет аутентификации");
} }
//Фиксируем успешное исполнение (полное - дальше обработки нет) - в статусе сообщения //Фиксируем успешное исполнение (полное - дальше обработки нет) - в статусе сообщения
res = await dbConn.setQueueState({ res = await dbConn.setQueueState({
@ -350,16 +366,27 @@ const dbProcess = async prms => {
nQueueId: prms.queue.nId nQueueId: prms.queue.nId
}); });
} catch (e) { } catch (e) {
//Фиксируем ошибку обработки сервером БД - в статусе сообщения //Если была ошибка аутентификации - возвращаем на повторную обработку сервером приложений
await dbConn.setQueueState({ if (e instanceof ServerError && e.sCode == SERR_UNAUTH) {
nQueueId: prms.queue.nId, await dbConn.setQueueState({
sExecMsg: makeErrorText(e), nQueueId: prms.queue.nId,
nIncExecCnt: NINC_EXEC_CNT_YES, sExecMsg: makeErrorText(e),
nExecState: nExecState: objQueueSchema.NQUEUE_EXEC_STATE_INQUEUE,
prms.queue.nExecCnt + 1 < prms.queue.nRetryAttempts nResetData: objQueueSchema.NQUEUE_RESET_DATA_YES
? objQueueSchema.NQUEUE_EXEC_STATE_DB_ERR });
: objQueueSchema.NQUEUE_EXEC_STATE_ERR res = e;
}); } else {
//Фиксируем ошибку обработки сервером БД - в статусе сообщения
res = await dbConn.setQueueState({
nQueueId: prms.queue.nId,
sExecMsg: makeErrorText(e),
nIncExecCnt: NINC_EXEC_CNT_YES,
nExecState:
prms.queue.nExecCnt + 1 < prms.queue.nRetryAttempts
? objQueueSchema.NQUEUE_EXEC_STATE_DB_ERR
: objQueueSchema.NQUEUE_EXEC_STATE_ERR
});
}
//Фиксируем ошибку обработки сервером БД - в протоколе работы сервиса //Фиксируем ошибку обработки сервером БД - в протоколе работы сервиса
await logger.error( await logger.error(
`Ошибка обработки исходящего сообщения ${prms.queue.nId} сервером БД: ${makeErrorText(e)}`, `Ошибка обработки исходящего сообщения ${prms.queue.nId} сервером БД: ${makeErrorText(e)}`,