mirror of
https://github.com/nodemailer/wildduck.git
synced 2025-10-04 02:46:57 +08:00
Log message restore info to Gelf
This commit is contained in:
parent
9c61d147df
commit
4dfee77bf3
2 changed files with 77 additions and 4 deletions
|
@ -10,8 +10,8 @@ function timeout(ms) {
|
|||
}
|
||||
|
||||
async function restore(task, data, options) {
|
||||
const messageHandler = options.messageHandler;
|
||||
const mailboxHandler = options.mailboxHandler;
|
||||
const { messageHandler, mailboxHandler, loggelf } = options;
|
||||
|
||||
const putMessage = util.promisify(messageHandler.put.bind(messageHandler));
|
||||
|
||||
const createMailbox = util.promisify((...args) => {
|
||||
|
@ -89,6 +89,14 @@ async function restore(task, data, options) {
|
|||
if (!userData) {
|
||||
// no such user anymore
|
||||
log.error('Tasks', 'task=restore id=%s user=%s error=%s', task._id, data.user, 'No such user');
|
||||
loggelf({
|
||||
short_message: '[TASKFAIL] restore',
|
||||
_task_action: 'restore',
|
||||
_task_id: task._id.toString(),
|
||||
_user: data.user.toString(),
|
||||
_error: 'No such user',
|
||||
_task_result: 'fail'
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -100,16 +108,26 @@ async function restore(task, data, options) {
|
|||
}
|
||||
});
|
||||
|
||||
let restoredMessages = 0;
|
||||
|
||||
let messageData;
|
||||
while ((messageData = await cursor.next())) {
|
||||
// use special recovery mailbox
|
||||
|
||||
const archived = messageData._id;
|
||||
|
||||
messageData.mailbox = await ensuretargetMailbox(userData._id, userData.language);
|
||||
if (!messageData.mailbox) {
|
||||
// failed to ensure mailbox
|
||||
log.info('Tasks', 'task=restore id=%s user=%s message=%s action=failed target=%s', task._id, data.user, archived, messageData.mailbox);
|
||||
loggelf({
|
||||
short_message: '[TASKFAIL] restore',
|
||||
_task_action: 'restore',
|
||||
_task_id: task._id.toString(),
|
||||
_user: data.user.toString(),
|
||||
_message: archived.toString(),
|
||||
_error: 'Failed to create folder',
|
||||
_task_result: 'fail'
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -128,12 +146,32 @@ async function restore(task, data, options) {
|
|||
messageResponse = await putMessage(messageData);
|
||||
} catch (err) {
|
||||
log.error('Tasks', 'task=restore id=%s user=%s message=%s error=%s', task._id, data.user, archived, 'Failed to restore message. ' + err.message);
|
||||
loggelf({
|
||||
short_message: '[TASKFAIL] restore',
|
||||
_task_action: 'restore',
|
||||
_task_id: task._id.toString(),
|
||||
_user: data.user.toString(),
|
||||
_message: archived.toString(),
|
||||
_error: 'Failed to restore message. ' + err.message,
|
||||
_task_result: 'fail'
|
||||
});
|
||||
|
||||
await timeout(5000);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!messageResponse) {
|
||||
log.error('Tasks', 'task=restore id=%s user=%s message=%s error=%s', task._id, data.user, archived, 'Failed to restore message');
|
||||
loggelf({
|
||||
short_message: '[TASKFAIL] restore',
|
||||
_task_action: 'restore',
|
||||
_task_id: task._id.toString(),
|
||||
_user: data.user.toString(),
|
||||
_message: archived.toString(),
|
||||
_error: 'Failed to restore message',
|
||||
_task_result: 'fail'
|
||||
});
|
||||
|
||||
await timeout(1000);
|
||||
continue;
|
||||
}
|
||||
|
@ -164,6 +202,20 @@ async function restore(task, data, options) {
|
|||
messageResponse.uid
|
||||
);
|
||||
|
||||
loggelf({
|
||||
short_message: '[TASKOK] restore',
|
||||
_task_action: 'restore',
|
||||
_task_id: task._id.toString(),
|
||||
_user: data.user.toString(),
|
||||
_message: archived.toString(),
|
||||
_task_result: 'success',
|
||||
|
||||
_restored_mailbox: messageResponse.mailbox,
|
||||
_restored_uid: messageResponse.uid
|
||||
});
|
||||
|
||||
restoredMessages++;
|
||||
|
||||
try {
|
||||
let r = await db.database.collection('archived').deleteOne({ _id: archived });
|
||||
log.info('Tasks', 'task=restore id=%s user=%s message=%s action=deleted count=%s', task._id, data.user, archived, r.deletedCount);
|
||||
|
@ -179,6 +231,8 @@ async function restore(task, data, options) {
|
|||
}
|
||||
}
|
||||
await cursor.close();
|
||||
|
||||
return { restoredMessages };
|
||||
}
|
||||
|
||||
module.exports = (task, data, options, callback) => {
|
||||
|
|
21
tasks.js
21
tasks.js
|
@ -542,10 +542,29 @@ function processTask(task, data, callback) {
|
|||
mailboxHandler,
|
||||
loggelf
|
||||
},
|
||||
err => {
|
||||
(err, result) => {
|
||||
if (err) {
|
||||
loggelf({
|
||||
short_message: '[TASKFAIL] restore',
|
||||
_task_action: 'restore',
|
||||
_task_id: task._id.toString(),
|
||||
_user: data.user.toString(),
|
||||
_task_result: 'error',
|
||||
_error: err.message
|
||||
});
|
||||
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
loggelf({
|
||||
short_message: '[TASKOK] restore',
|
||||
_task_action: 'restore',
|
||||
_task_id: task._id.toString(),
|
||||
_user: data.user.toString(),
|
||||
_task_result: 'finished',
|
||||
_restored_messages: result.restoredMessages
|
||||
});
|
||||
|
||||
// release
|
||||
callback(null, true);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue