Files
cloudron-box/src/eventlog.js

141 lines
4.3 KiB
JavaScript
Raw Normal View History

2016-04-29 23:49:56 -07:00
'use strict';
exports = module.exports = {
add: add,
get: get,
2016-04-30 11:49:51 -07:00
getAllPaged: getAllPaged,
getByCreationTime: getByCreationTime,
2016-07-25 12:36:43 -07:00
cleanup: cleanup,
2016-04-30 11:49:51 -07:00
2017-03-07 12:44:17 -08:00
// keep in sync with webadmin index.js filter and CLI tool
2016-04-30 13:56:03 -07:00
ACTION_ACTIVATE: 'cloudron.activate',
2016-06-17 17:12:55 -05:00
ACTION_APP_CLONE: 'app.clone',
2016-04-30 13:34:06 -07:00
ACTION_APP_CONFIGURE: 'app.configure',
ACTION_APP_REPAIR: 'app.repair',
2016-04-30 13:34:06 -07:00
ACTION_APP_INSTALL: 'app.install',
ACTION_APP_RESTORE: 'app.restore',
ACTION_APP_UNINSTALL: 'app.uninstall',
ACTION_APP_UPDATE: 'app.update',
ACTION_APP_UPDATE_FINISH: 'app.update.finish',
ACTION_APP_LOGIN: 'app.login',
ACTION_APP_OOM: 'app.oom',
2019-02-11 12:32:02 -08:00
ACTION_APP_UP: 'app.up',
ACTION_APP_DOWN: 'app.down',
2018-11-09 18:45:44 -08:00
2016-05-01 11:42:12 -07:00
ACTION_BACKUP_FINISH: 'backup.finish',
ACTION_BACKUP_START: 'backup.start',
2019-09-27 09:43:40 -07:00
ACTION_BACKUP_CLEANUP_START: 'backup.cleanup.start', // obsolete
ACTION_BACKUP_CLEANUP_FINISH: 'backup.cleanup.finish',
2018-11-09 18:45:44 -08:00
2018-11-14 20:38:49 -08:00
ACTION_CERTIFICATE_NEW: 'certificate.new',
2016-04-30 22:27:33 -07:00
ACTION_CERTIFICATE_RENEWAL: 'certificate.renew',
2018-11-09 18:45:44 -08:00
2019-02-04 20:24:28 -08:00
ACTION_DASHBOARD_DOMAIN_UPDATE: 'dashboard.domain.update',
2018-11-10 00:43:46 -08:00
ACTION_DOMAIN_ADD: 'domain.add',
ACTION_DOMAIN_UPDATE: 'domain.update',
ACTION_DOMAIN_REMOVE: 'domain.remove',
ACTION_MAIL_ENABLED: 'mail.enabled',
2018-11-10 00:32:27 -08:00
ACTION_MAIL_DISABLED: 'mail.disabled',
2018-11-09 18:49:55 -08:00
ACTION_MAIL_MAILBOX_ADD: 'mail.box.add',
ACTION_MAIL_MAILBOX_REMOVE: 'mail.box.remove',
ACTION_MAIL_LIST_ADD: 'mail.list.add',
ACTION_MAIL_LIST_REMOVE: 'mail.list.remove',
2018-11-09 18:45:44 -08:00
2018-11-10 00:43:46 -08:00
ACTION_PROVISION: 'cloudron.provision',
ACTION_RESTORE: 'cloudron.restore', // unused
ACTION_START: 'cloudron.start',
2016-04-30 13:56:03 -07:00
ACTION_UPDATE: 'cloudron.update',
ACTION_UPDATE_FINISH: 'cloudron.update.finish',
2018-11-09 18:45:44 -08:00
2016-04-30 13:56:03 -07:00
ACTION_USER_ADD: 'user.add',
2016-04-30 23:16:37 -07:00
ACTION_USER_LOGIN: 'user.login',
2016-04-30 13:56:03 -07:00
ACTION_USER_REMOVE: 'user.remove',
2018-07-05 13:51:22 -07:00
ACTION_USER_UPDATE: 'user.update',
ACTION_USER_TRANSFER: 'user.transfer',
2019-01-12 09:58:11 -08:00
2019-01-19 13:22:29 +01:00
ACTION_DYNDNS_UPDATE: 'dyndns.update',
ACTION_PROCESS_CRASH: 'system.crash'
2016-04-29 23:49:56 -07:00
};
var assert = require('assert'),
2016-04-30 11:49:51 -07:00
debug = require('debug')('box:eventlog'),
2016-04-29 23:49:56 -07:00
eventlogdb = require('./eventlogdb.js'),
notifications = require('./notifications.js'),
2016-04-29 23:49:56 -07:00
util = require('util'),
uuid = require('uuid');
2016-04-29 23:49:56 -07:00
2016-04-30 11:49:51 -07:00
var NOOP_CALLBACK = function (error) { if (error) debug(error); };
2016-05-01 20:01:34 -07:00
function add(action, source, data, callback) {
2016-04-29 23:49:56 -07:00
assert.strictEqual(typeof action, 'string');
2016-05-01 20:01:34 -07:00
assert.strictEqual(typeof source, 'object');
2016-04-29 23:49:56 -07:00
assert.strictEqual(typeof data, 'object');
2016-04-30 11:49:51 -07:00
assert(!callback || typeof callback === 'function');
callback = callback || NOOP_CALLBACK;
2016-04-29 23:49:56 -07:00
2019-02-05 15:27:43 +01:00
// we do only daily upserts for login actions, so they don't spam the db
var api = action === exports.ACTION_USER_LOGIN ? eventlogdb.upsert : eventlogdb.add;
api(uuid.v4(), action, source, data, function (error, id) {
2019-10-24 20:31:45 -07:00
if (error) return callback(error);
2016-04-29 23:49:56 -07:00
notifications.onEvent(id, action, source, data, function (error) {
2019-10-22 13:59:01 -07:00
if (error) return callback(error);
callback(null, { id: id });
});
2016-04-29 23:49:56 -07:00
});
}
function get(id, callback) {
assert.strictEqual(typeof id, 'string');
assert.strictEqual(typeof callback, 'function');
eventlogdb.get(id, function (error, result) {
if (error) return callback(error);
2016-04-29 23:49:56 -07:00
callback(null, result);
});
}
function getAllPaged(actions, search, page, perPage, callback) {
assert(Array.isArray(actions));
assert(typeof search === 'string' || search === null);
assert.strictEqual(typeof page, 'number');
assert.strictEqual(typeof perPage, 'number');
assert.strictEqual(typeof callback, 'function');
eventlogdb.getAllPaged(actions, search, page, perPage, function (error, events) {
if (error) return callback(error);
callback(null, events);
});
}
2016-07-25 12:36:43 -07:00
function getByCreationTime(creationTime, callback) {
assert(util.isDate(creationTime));
2017-07-21 16:13:44 +02:00
assert.strictEqual(typeof callback, 'function');
eventlogdb.getByCreationTime(creationTime, function (error, events) {
if (error) return callback(error);
2017-07-21 16:13:44 +02:00
callback(null, events);
2017-07-21 16:13:44 +02:00
});
}
2016-07-25 12:36:43 -07:00
function cleanup(callback) {
callback = callback || NOOP_CALLBACK;
var d = new Date();
d.setDate(d.getDate() - 10); // 10 days ago
2016-07-25 12:36:43 -07:00
eventlogdb.delByCreationTime(d, function (error) {
if (error) return callback(error);
2016-07-25 12:36:43 -07:00
callback(null);
});
}