statistics.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { MongoInternals } from 'meteor/mongo';
  2. if (Meteor.isServer) {
  3. Meteor.methods({
  4. getStatistics() {
  5. if (Meteor.user() && Meteor.user().isAdmin) {
  6. const os = require('os');
  7. const pjson = require('/package.json');
  8. const statistics = {};
  9. let wekanVersion = pjson.version;
  10. wekanVersion = wekanVersion.replace('v', '');
  11. statistics.version = wekanVersion;
  12. statistics.os = {
  13. type: os.type(),
  14. platform: os.platform(),
  15. arch: os.arch(),
  16. release: os.release(),
  17. uptime: os.uptime(),
  18. loadavg: os.loadavg(),
  19. totalmem: os.totalmem(),
  20. freemem: os.freemem(),
  21. cpus: os.cpus(),
  22. };
  23. let nodeVersion = process.version;
  24. nodeVersion = nodeVersion.replace('v', '');
  25. statistics.process = {
  26. nodeVersion,
  27. pid: process.pid,
  28. uptime: process.uptime(),
  29. };
  30. // Remove beginning of Meteor release text METEOR@
  31. let meteorVersion = Meteor.release;
  32. meteorVersion = meteorVersion.replace('METEOR@', '');
  33. statistics.meteor = {
  34. meteorVersion,
  35. };
  36. // Thanks to RocketChat for MongoDB version detection !
  37. // https://github.com/RocketChat/Rocket.Chat/blob/develop/app/utils/server/functions/getMongoInfo.js
  38. let mongoVersion;
  39. let mongoStorageEngine;
  40. let mongoOplogEnabled;
  41. try {
  42. const { mongo } = MongoInternals.defaultRemoteCollectionDriver();
  43. oplogEnabled = Boolean(
  44. mongo._oplogHandle && mongo._oplogHandle.onOplogEntry,
  45. );
  46. const { version, storageEngine } = Promise.await(
  47. mongo.db.command({ serverStatus: 1 }),
  48. );
  49. mongoVersion = version;
  50. mongoStorageEngine = storageEngine.name;
  51. mongoOplogEnabled = oplogEnabled;
  52. } catch (e) {
  53. try {
  54. const { version } = Promise.await(
  55. mongo.db.command({ buildinfo: 1 }),
  56. );
  57. mongoVersion = version;
  58. mongoStorageEngine = 'unknown';
  59. } catch (e) {
  60. mongoVersion = 'unknown';
  61. mongoStorageEngine = 'unknown';
  62. }
  63. }
  64. statistics.mongo = {
  65. mongoVersion,
  66. mongoStorageEngine,
  67. mongoOplogEnabled,
  68. };
  69. return statistics;
  70. } else {
  71. return false;
  72. }
  73. },
  74. });
  75. }