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;