Log message restore info to Gelf

This commit is contained in:
Andris Reinman 2022-08-23 10:04:26 +03:00
parent 9c61d147df
commit 4dfee77bf3
No known key found for this signature in database
GPG key ID: DC6C83F4D584D364
2 changed files with 77 additions and 4 deletions

View file

@ -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) => {

View file

@ -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);
} }