import { MongoInternals } from 'meteor/mongo'; if (Meteor.isServer) { Meteor.methods({ getStatistics() { if (Meteor.user() && Meteor.user().isAdmin) { const os = require('os'); const pjson = require('/package.json'); const statistics = {}; let wekanVersion = pjson.version; wekanVersion = wekanVersion.replace('v', ''); statistics.version = wekanVersion; statistics.os = { type: os.type(), platform: os.platform(), arch: os.arch(), release: os.release(), uptime: os.uptime(), loadavg: os.loadavg(), totalmem: os.totalmem(), freemem: os.freemem(), cpus: os.cpus(), }; let nodeVersion = process.version; nodeVersion = nodeVersion.replace('v', ''); statistics.process = { nodeVersion, pid: process.pid, uptime: process.uptime(), }; // Remove beginning of Meteor release text METEOR@ let meteorVersion = Meteor.release; meteorVersion = meteorVersion.replace('METEOR@', ''); statistics.meteor = { meteorVersion, }; // Thanks to RocketChat for MongoDB version detection ! // https://github.com/RocketChat/Rocket.Chat/blob/develop/app/utils/server/functions/getMongoInfo.js let mongoVersion; let mongoStorageEngine; let mongoOplogEnabled; try { const { mongo } = MongoInternals.defaultRemoteCollectionDriver(); oplogEnabled = Boolean( mongo._oplogHandle && mongo._oplogHandle.onOplogEntry, ); const { version, storageEngine } = Promise.await( mongo.db.command({ serverStatus: 1 }), ); mongoVersion = version; mongoStorageEngine = storageEngine.name; mongoOplogEnabled = oplogEnabled; } catch (e) { try { const { version } = Promise.await( mongo.db.command({ buildinfo: 1 }), ); mongoVersion = version; mongoStorageEngine = 'unknown'; } catch (e) { mongoVersion = 'unknown'; mongoStorageEngine = 'unknown'; } } statistics.mongo = { mongoVersion, mongoStorageEngine, mongoOplogEnabled, }; return statistics; } else { return false; } }, }); }