Files
cloudron-box/src/digest.js
Girish Ramakrishnan 4d9ecef6fd Fix empty digest mails
2019-03-12 16:24:00 -07:00

66 lines
2.8 KiB
JavaScript

'use strict';
var assert = require('assert'),
async = require('async'),
debug = require('debug')('box:digest'),
eventlog = require('./eventlog.js'),
mailer = require('./mailer.js'),
settings = require('./settings.js'),
updatechecker = require('./updatechecker.js'),
users = require('./users.js');
exports = module.exports = {
send: send
};
function send(callback) {
assert.strictEqual(typeof callback, 'function');
settings.getEmailDigest(function (error, enabled) {
if (error) return callback(error);
if (!enabled) {
debug('send: email digest is disabled');
return callback();
}
var updateInfo = updatechecker.getUpdateInfo();
var pendingAppUpdates = updateInfo.apps || {};
pendingAppUpdates = Object.keys(pendingAppUpdates).map(function (key) { return pendingAppUpdates[key]; });
eventlog.getByCreationTime(new Date(new Date() - 7*86400000), function (error, events) {
if (error) return callback(error);
var appUpdates = events.filter(function (e) { return e.action === eventlog.ACTION_APP_UPDATE; }).map(function (e) { return e.data; });
var boxUpdates = events.filter(function (e) { return e.action === eventlog.ACTION_UPDATE && e.data.boxUpdateInfo; }).map(function (e) { return e.data.boxUpdateInfo; });
var certRenewals = events.filter(function (e) { return e.action === eventlog.ACTION_CERTIFICATE_RENEWAL; }).map(function (e) { return e.data; });
var usersAdded = events.filter(function (e) { return e.action === eventlog.ACTION_USER_ADD; }).map(function (e) { return e.data; });
var usersRemoved = events.filter(function (e) { return e.action === eventlog.ACTION_USER_REMOVE; }).map(function (e) { return e.data; });
var finishedBackups = events.filter(function (e) { return e.action === eventlog.ACTION_BACKUP_FINISH && !e.errorMessage; }).map(function (e) { return e.data; });
if (error) return callback(error);
var info = {
pendingAppUpdates: pendingAppUpdates,
pendingBoxUpdate: updateInfo.box || null,
finishedAppUpdates: appUpdates,
finishedBoxUpdates: boxUpdates,
certRenewals: certRenewals,
finishedBackups: finishedBackups, // only the successful backups
usersAdded: usersAdded,
usersRemoved: usersRemoved // unused because we don't have username to work with
};
debug('send: sending digest email', info);
users.getAllAdmins(function (error, admins) {
if (error) return callback(error);
async.eachSeries(admins, (admin, done) => mailer.sendDigest(admin.email, info, done), callback);
});
});
});
}