mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2025-02-12 11:01:52 +00:00
Added AceBase maintenance. AceBase record removal seems to be terribly slow.
This commit is contained in:
parent
c4b8f179a0
commit
0fd8b17f5e
2 changed files with 23 additions and 25 deletions
34
db.js
34
db.js
|
@ -114,8 +114,18 @@ module.exports.CreateDB = function (parent, func) {
|
|||
sqlDbQuery('DELETE FROM power WHERE time < ?', [new Date(Date.now() - (expirePowerEventsSeconds * 1000))], function (doc, err) { }); // Delete events older than expirePowerSeconds
|
||||
sqlDbQuery('DELETE FROM serverstats WHERE expire < ?', [new Date()], function (doc, err) { }); // Delete events where expiration date is in the past
|
||||
sqlDbQuery('DELETE FROM smbios WHERE expire < ?', [new Date()], function (doc, err) { }); // Delete events where expiration date is in the past
|
||||
} else if (obj.databaseType == 7) { // AceBase
|
||||
//console.log('Performing AceBase maintenance');
|
||||
// Delete older events. AceBase seems to be VERY slow as removing records. Here, we remove 100 records at a time only since so far, it's terribly slow.
|
||||
// TODO: Fugure out what record removal in AceBase is so slow
|
||||
obj.file.query('events').take(100).filter('time', '<', new Date(Date.now() - (expireEventsSeconds * 1000))).remove().then(function () {
|
||||
obj.file.query('stats').take(100).filter('time', '<', new Date(Date.now() - (expireServerStatsSeconds * 1000))).remove().then(function () {
|
||||
obj.file.query('power').take(100).filter('time', '<', new Date(Date.now() - (expirePowerEventsSeconds * 1000))).remove().then(function () {
|
||||
//console.log('AceBase maintenance done');
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
obj.removeInactiveDevices();
|
||||
}
|
||||
|
||||
|
@ -237,7 +247,10 @@ module.exports.CreateDB = function (parent, func) {
|
|||
// Remove all events, power events and SMBIOS data from the main collection. They are all in seperate collections now.
|
||||
if (obj.databaseType == 7) {
|
||||
// AceBase
|
||||
|
||||
pendingCalls = 3;
|
||||
obj.file.query('meshcentral').filter('domain', '==', domainName).remove().then(function () { if (--pendingCalls == 0) { func(); } });
|
||||
obj.file.query('events').filter('domain', '==', domainName).remove().then(function () { if (--pendingCalls == 0) { func(); } });
|
||||
obj.file.query('power').filter('domain', '==', domainName).remove().then(function () { if (--pendingCalls == 0) { func(); } });
|
||||
} else if ((obj.databaseType == 4) || (obj.databaseType == 5) || (obj.databaseType == 6)) {
|
||||
// MariaDB, MySQL or PostgreSQL
|
||||
pendingCalls = 2;
|
||||
|
@ -263,10 +276,7 @@ module.exports.CreateDB = function (parent, func) {
|
|||
// TODO: Remove all meshes that dont have any links
|
||||
|
||||
// Remove all events, power events and SMBIOS data from the main collection. They are all in seperate collections now.
|
||||
if (obj.databaseType == 7) {
|
||||
// AceBase
|
||||
|
||||
} else if ((obj.databaseType == 4) || (obj.databaseType == 5) || (obj.databaseType == 6)) {
|
||||
if ((obj.databaseType == 4) || (obj.databaseType == 5) || (obj.databaseType == 6)) {
|
||||
// MariaDB, MySQL or PostgreSQL
|
||||
obj.RemoveAllOfType('event', function () { });
|
||||
obj.RemoveAllOfType('power', function () { });
|
||||
|
@ -276,7 +286,7 @@ module.exports.CreateDB = function (parent, func) {
|
|||
obj.file.deleteMany({ type: 'event' }, { multi: true });
|
||||
obj.file.deleteMany({ type: 'power' }, { multi: true });
|
||||
obj.file.deleteMany({ type: 'smbios' }, { multi: true });
|
||||
} else {
|
||||
} else if ((obj.databaseType == 1) || (obj.databaseType == 2)) {
|
||||
// NeDB or MongoJS
|
||||
obj.file.remove({ type: 'event' }, { multi: true });
|
||||
obj.file.remove({ type: 'power' }, { multi: true });
|
||||
|
@ -661,25 +671,27 @@ module.exports.CreateDB = function (parent, func) {
|
|||
obj.file = new AceBase('meshcentral', { sponsor: ((typeof parent.args.acebase == 'object') && (parent.args.acebase.sponsor)), logLevel: 'error', storage: { path: parent.datapath } });
|
||||
// Get all the databases ready
|
||||
obj.file.ready(function () {
|
||||
// Create AceBase indexes
|
||||
obj.file.indexes.create('meshcenral', 'type', { include: ['domain', 'meshid'] });
|
||||
obj.file.indexes.create('meshcenral', 'email');
|
||||
obj.file.indexes.create('meshcenral', 'meshid');
|
||||
obj.file.indexes.create('meshcenral', 'intelamt.uuid');
|
||||
obj.file.indexes.create('events', 'userid', { include: ['action'] });
|
||||
obj.file.indexes.create('events', 'domain', { include: ['nodeid','time'] });
|
||||
obj.file.indexes.create('events', 'ids', { include: ['time'] });
|
||||
obj.file.indexes.create('events', 'domain', { include: ['nodeid', 'time'] });
|
||||
obj.file.indexes.create('events', 'ids', { include: ['time'] });
|
||||
obj.file.indexes.create('events', 'time');
|
||||
obj.file.indexes.create('power', 'nodeid', { include: ['time'] });
|
||||
obj.file.indexes.create('power', 'time');
|
||||
obj.file.indexes.create('stats', 'time');
|
||||
obj.file.indexes.create('stats', 'expire');
|
||||
// Completed setup of AceBase
|
||||
setupFunctions(func);
|
||||
}); // Completed setup of AceBase
|
||||
});
|
||||
} else if (parent.args.mariadb || parent.args.mysql) {
|
||||
var connectinArgs = (parent.args.mariadb) ? parent.args.mariadb : parent.args.mysql;
|
||||
var dbname = (connectinArgs.database != null) ? connectinArgs.database : 'meshcentral';
|
||||
|
||||
// Including the db name in the connection obj will cause a connection failure if it does not exist
|
||||
// Including the db name in the connection obj will cause a connection faliure if it does not exist
|
||||
var connectionObject = Clone(connectinArgs);
|
||||
delete connectionObject.database;
|
||||
|
||||
|
|
|
@ -802,20 +802,6 @@ function CreateMeshCentralServer(config, args) {
|
|||
|
||||
require('./db.js').CreateDB(obj,
|
||||
function (db) {
|
||||
|
||||
|
||||
//db.Get('user//admin', function (err, docs) { console.log('GetResult', err, docs); });
|
||||
//db.Set({ _id: 'user//admin', type: 'user', domain: 'a', test: 'this is a user' }, function () { console.log('SetResult'); });
|
||||
//db.Get('user//admin', function (err, docs) { console.log('GetResult', err, docs); });
|
||||
//db.GetAll(function (err, docs) { console.log('GetAll', err, docs); });
|
||||
//db.GetAllTypeNoTypeField('user', 'a', function (err, docs) { console.log('GetAllTypeNoTypeField', err, docs); });
|
||||
//db.isMaxType(10, 'user', 'a', function (max, count) { console.log('yy', max, count); })
|
||||
|
||||
//db.StoreEvent({ test: "this is an event" }, function () { console.log('event stored'); });
|
||||
//db.GetAllEvents(function (err, docs) { console.log('events', docs); });
|
||||
|
||||
//return;
|
||||
|
||||
obj.db = db;
|
||||
obj.db.SetupDatabase(function (dbversion) {
|
||||
// See if any database operations needs to be completed
|
||||
|
|
Loading…
Reference in a new issue