diff --git a/src/eventlog.js b/src/eventlog.js index bec0462e3..ce939f641 100644 --- a/src/eventlog.js +++ b/src/eventlog.js @@ -105,10 +105,17 @@ function getAllPaged(action, search, page, perPage, callback) { function cleanup(callback) { callback = callback || NOOP_CALLBACK; - var d = new Date(); - d.setDate(d.getDate() - 7); // 7 days ago + var d = new Date(); + d.setDate(d.getDate() - 7); // 7 days ago - eventlogdb.delByCreationTime(d, function (error) { + // only cleanup high frequency events + var actions = [ + exports.ACTION_USER_LOGIN, + exports.ACTION_BACKUP_START, + exports.ACTION_BACKUP_FINISH + ]; + + eventlogdb.delByCreationTime(d, actions, function (error) { if (error) return callback(new EventLogError(EventLogError.INTERNAL_ERROR, error)); callback(null); diff --git a/src/eventlogdb.js b/src/eventlogdb.js index c368c9c5d..132cbc623 100644 --- a/src/eventlogdb.js +++ b/src/eventlogdb.js @@ -104,11 +104,15 @@ function clear(callback) { }); } -function delByCreationTime(creationTime, callback) { +function delByCreationTime(creationTime, actions, callback) { assert(util.isDate(creationTime)); + assert(Array.isArray(actions)); assert.strictEqual(typeof callback, 'function'); - database.query('DELETE FROM eventlog WHERE creationTime < ?', [ creationTime ], function (error) { + var query = 'DELETE FROM eventlog WHERE creationTime < ? '; + if (actions.length) query += ' AND ( ' + actions.map(function () { return 'action != ?'; }).join(' AND ') + ' ) '; + + database.query(query, [ creationTime ].concat(actions), function (error) { if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); callback(error); diff --git a/src/test/database-test.js b/src/test/database-test.js index 1584e1fe8..0495a71da 100644 --- a/src/test/database-test.js +++ b/src/test/database-test.js @@ -1166,14 +1166,24 @@ describe('database', function () { }); it('delByCreationTime succeeds', function (done) { - eventlogdb.delByCreationTime(new Date(), function (error) { + async.each([ 'persistent.event', 'transient.event', 'anothertransient.event', 'anotherpersistent.event' ], function (e, callback) { + eventlogdb.add('someid' + Math.random(), e, { ip: '1.2.3.4' }, { appId: 'thatapp' }, callback); + }, function (error) { expect(error).to.be(null); - eventlogdb.getAllPaged(null, null, 1, 1, function (error, results) { - expect(error).to.be(null); - expect(results.length).to.be(0); + var actions = [ 'anotherpersistent.event', 'persistent.event' ]; - done(); + eventlogdb.delByCreationTime(new Date(), actions, function (error) { + expect(error).to.be(null); + + eventlogdb.getAllPaged(null, null, 1, 100, function (error, results) { + expect(error).to.be(null); + expect(results.length).to.be(2); + expect(results[1].action).to.be.eql('persistent.event'); + expect(results[0].action).to.be.eql('anotherpersistent.event'); + + done(); + }); }); }); });