mirror of
https://github.com/nodemailer/wildduck.git
synced 2025-10-09 13:29:47 +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) {
|
async function restore(task, data, options) {
|
||||||
const messageHandler = options.messageHandler;
|
const { messageHandler, mailboxHandler, loggelf } = options;
|
||||||
const mailboxHandler = options.mailboxHandler;
|
|
||||||
const putMessage = util.promisify(messageHandler.put.bind(messageHandler));
|
const putMessage = util.promisify(messageHandler.put.bind(messageHandler));
|
||||||
|
|
||||||
const createMailbox = util.promisify((...args) => {
|
const createMailbox = util.promisify((...args) => {
|
||||||
|
@ -89,6 +89,14 @@ async function restore(task, data, options) {
|
||||||
if (!userData) {
|
if (!userData) {
|
||||||
// no such user anymore
|
// no such user anymore
|
||||||
log.error('Tasks', 'task=restore id=%s user=%s error=%s', task._id, data.user, 'No such user');
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,16 +108,26 @@ async function restore(task, data, options) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let restoredMessages = 0;
|
||||||
|
|
||||||
let messageData;
|
let messageData;
|
||||||
while ((messageData = await cursor.next())) {
|
while ((messageData = await cursor.next())) {
|
||||||
// use special recovery mailbox
|
// use special recovery mailbox
|
||||||
|
|
||||||
const archived = messageData._id;
|
const archived = messageData._id;
|
||||||
|
|
||||||
messageData.mailbox = await ensuretargetMailbox(userData._id, userData.language);
|
messageData.mailbox = await ensuretargetMailbox(userData._id, userData.language);
|
||||||
if (!messageData.mailbox) {
|
if (!messageData.mailbox) {
|
||||||
// failed to ensure 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);
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,12 +146,32 @@ async function restore(task, data, options) {
|
||||||
messageResponse = await putMessage(messageData);
|
messageResponse = await putMessage(messageData);
|
||||||
} catch (err) {
|
} 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);
|
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);
|
await timeout(5000);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!messageResponse) {
|
if (!messageResponse) {
|
||||||
log.error('Tasks', 'task=restore id=%s user=%s message=%s error=%s', task._id, data.user, archived, 'Failed to restore message');
|
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);
|
await timeout(1000);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -164,6 +202,20 @@ async function restore(task, data, options) {
|
||||||
messageResponse.uid
|
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 {
|
try {
|
||||||
let r = await db.database.collection('archived').deleteOne({ _id: archived });
|
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);
|
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();
|
await cursor.close();
|
||||||
|
|
||||||
|
return { restoredMessages };
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = (task, data, options, callback) => {
|
module.exports = (task, data, options, callback) => {
|
||||||
|
|
21
tasks.js
21
tasks.js
|
@ -542,10 +542,29 @@ function processTask(task, data, callback) {
|
||||||
mailboxHandler,
|
mailboxHandler,
|
||||||
loggelf
|
loggelf
|
||||||
},
|
},
|
||||||
err => {
|
(err, result) => {
|
||||||
if (err) {
|
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);
|
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
|
// release
|
||||||
callback(null, true);
|
callback(null, true);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue