123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import { ReactiveCache } from '/imports/reactiveCache';
- import { MongoInternals } from 'meteor/mongo';
- // Sandstorm context is detected using the METEOR_SETTINGS environment variable
- // in the package definition.
- const isSandstorm =
- Meteor.settings && Meteor.settings.public && Meteor.settings.public.sandstorm;
- if (Meteor.isServer) {
- Meteor.methods({
- getStatistics() {
- if (ReactiveCache.getCurrentUser()?.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(),
- };
- // Start: Show Nodejs heap stats at Standalone WeKan.
- //
- // Not shown at Sandstorm WeKan, because there's a bunch of machine performance data
- // Sandstorm doesn't expose to apps to prevent side channel attacks.
- if (!isSandstorm) {
- const v8 = require('v8'); // Import the v8 module
- statistics.nodeHeapStats = {
- totalHeapSize: v8.getHeapStatistics().total_heap_size,
- totalHeapSizeExecutable: v8.getHeapStatistics().total_heap_size_executable,
- totalPhysicalSize: v8.getHeapStatistics().total_physical_size,
- totalAvailableSize: v8.getHeapStatistics().total_available_size,
- usedHeapSize: v8.getHeapStatistics().used_heap_size,
- heapSizeLimit: v8.getHeapStatistics().heap_size_limit,
- mallocedMemory: v8.getHeapStatistics().malloced_memory,
- peakMallocedMemory: v8.getHeapStatistics().peak_malloced_memory,
- doesZapGarbage: v8.getHeapStatistics().does_zap_garbage,
- numberOfNativeContexts: v8.getHeapStatistics().number_of_native_contexts,
- numberOfDetachedContexts: v8.getHeapStatistics().number_of_detached_contexts,
- };
- let memoryUsage = process.memoryUsage();
- statistics.nodeMemoryUsage = {
- rss: memoryUsage.rss,
- heapTotal: memoryUsage.heapTotal,
- heapUsed: memoryUsage.heapUsed,
- external: memoryUsage.external,
- };
- }
- // End: Show Nodejs heap stats at Standalone WeKan.
- //
- // 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 { mongo } = MongoInternals.defaultRemoteCollectionDriver();
- const { version } = Promise.await(
- mongo.db.command({ buildinfo: 1 }),
- );
- mongoVersion = version;
- mongoStorageEngine = 'unknown';
- } catch (e) {
- mongoVersion = 'unknown';
- mongoStorageEngine = 'unknown';
- }
- }
- statistics.mongo = {
- mongoVersion,
- mongoStorageEngine,
- mongoOplogEnabled,
- };
- const client = MongoInternals.defaultRemoteCollectionDriver()?.mongo?.client;
- const sessionsCount = client?.s?.activeSessions?.size;
- statistics.session = {
- sessionsCount: sessionsCount,
- };
- return statistics;
- } else {
- return false;
- }
- },
- });
- }
|