| 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;
 
-       }
 
-     },
 
-   });
 
- }
 
 
  |