new 'dbcompact' server console cmd to manually compact nedb databases
Signed-off-by: si458 <simonsmith5521@gmail.com>
si458 committed
Feb 17, 2026 at 16:03 UTC
14bc4594dc632e8669aabd6a173a0f4ad20a9bd7
1 file changed
+45
meshuser.js
+45
@@ -5653,6 +5653,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
5653
'cores': [serverUserCommandCores, ""],
5654
'dbcounters': [serverUserCommandDbCounters, ""],
5655
'dbstats': [serverUserCommandDbStats, ""],
5656
+ 'dbcompact': [serverUserCommandDbCompact, ""],
5657
'dispatchtable': [serverUserCommandDispatchTable, ""],
5658
'dropallcira': [serverUserCommandDropAllCira, ""],
5659
'dupagents': [serverUserCommandDupAgents, ""],
@@ -7524,6 +7525,50 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
7525
try { ws.send(JSON.stringify({ action: 'serverconsole', value: JSON.stringify(parent.parent.db.dbCounters, null, 2), tag: cmdData.command.tag })); } catch (ex) { }
7526
}
7527
7528
+ function serverUserCommandDbCompact(cmdData) {
7529
+ if (user.siteadmin === SITERIGHT_ADMIN) {
7530
+ if (parent.parent.db.databaseType == 1) { // Only compact if using NeDB, other databases should handle compaction on their own
7531
+ parent.parent.db.file.compactDatafile(function (err) {
7532
+ if (err) {
7533
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: 'Error compacting database: ' + err, tag: cmdData.command.tag })); } catch (ex) { }
7534
+ } else {
7535
+ parent.parent.db.eventsfile.compactDatafile(function (err) {
7536
+ if (err) {
7537
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: 'Error compacting events database: ' + err, tag: cmdData.command.tag })); } catch (ex) { }
7538
+ } else {
7539
+ parent.parent.db.powerfile.compactDatafile(function (err) {
7540
+ if (err) {
7541
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: 'Error compacting power database: ' + err, tag: cmdData.command.tag })); } catch (ex) { }
7542
+ } else {
7543
+ parent.parent.db.serverstatsfile.compactDatafile(function (err) {
7544
+ if (err) {
7545
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: 'Error compacting server stats database: ' + err, tag: cmdData.command.tag })); } catch (ex) { }
7546
+ } else {
7547
+ if (parent.parent.db.pluginsActive) {
7548
+ parent.parent.db.pluginsfile.compactDatafile(function (err) {
7549
+ if (err) {
7550
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: 'Error compacting plugins database: ' + err, tag: cmdData.command.tag })); } catch (ex) { }
7551
+ } else {
7552
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: 'Database compacted successfully.', tag: cmdData.command.tag })); } catch (ex) { }
7553
+ }
7554
+ });
7555
+ } else {
7556
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: 'Database compacted successfully.', tag: cmdData.command.tag })); } catch (ex) { }
7557
+ }
7558
+ }
7559
+ });
7560
+ }
7561
+ });
7562
+ }
7563
+ });
7564
+ }
7565
+ });
7566
+ } else {
7567
+ cmdData.result = 'Database compaction not supported for this database type.';
7568
+ }
7569
+ }
7570
+ }
7571
+
7572
function serverUserCommandServerUpdate(cmdData) {
7573
cmdData.result = 'Performing server update...';
7574
var version = null;