mirror of
https://github.com/wekan/wekan.git
synced 2025-04-19 11:44:42 -04:00
117 lines
4.5 KiB
JavaScript
117 lines
4.5 KiB
JavaScript
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;
|
|
}
|
|
},
|
|
});
|
|
}
|