system.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. const _ = require('lodash')
  2. const Promise = require('bluebird')
  3. const getos = Promise.promisify(require('getos'))
  4. const os = require('os')
  5. const filesize = require('filesize')
  6. const path = require('path')
  7. const fs = require('fs-extra')
  8. /* global WIKI */
  9. const dbTypes = {
  10. mysql: 'MySQL',
  11. mariadb: 'MariaDB',
  12. postgres: 'PostgreSQL',
  13. sqlite: 'SQLite',
  14. mssql: 'MS SQL Server'
  15. }
  16. module.exports = {
  17. Query: {
  18. async system() { return {} }
  19. },
  20. SystemQuery: {
  21. async info() { return {} }
  22. },
  23. SystemInfo: {
  24. configFile() {
  25. return path.join(process.cwd(), 'config.yml')
  26. },
  27. currentVersion() {
  28. return WIKI.version
  29. },
  30. dbType() {
  31. return _.get(dbTypes, WIKI.config.db.type, 'Unknown DB')
  32. },
  33. async dbVersion() {
  34. let version = 'Unknown Version'
  35. switch (WIKI.config.db.type) {
  36. case 'mariadb':
  37. case 'mysql':
  38. const resultMYSQL = await WIKI.models.knex.raw('SELECT VERSION() as version;')
  39. version = _.get(resultMYSQL, '[0][0].version', 'Unknown Version')
  40. break
  41. case 'mssql':
  42. const resultMSSQL = await WIKI.models.knex.raw('SELECT @@VERSION as version;')
  43. version = _.get(resultMSSQL, '[0].version', 'Unknown Version')
  44. break
  45. case 'postgres':
  46. version = _.get(WIKI.models, 'knex.client.version', 'Unknown Version')
  47. break
  48. case 'sqlite':
  49. version = _.get(WIKI.models, 'knex.client.driver.VERSION', 'Unknown Version')
  50. break
  51. }
  52. return version
  53. },
  54. dbHost() {
  55. if (WIKI.config.db.type === 'sqlite') {
  56. return WIKI.config.db.storage
  57. } else {
  58. return WIKI.config.db.host
  59. }
  60. },
  61. latestVersion() {
  62. return '2.0.0' // TODO
  63. },
  64. latestVersionReleaseDate() {
  65. return new Date() // TODO
  66. },
  67. async operatingSystem() {
  68. let osLabel = `${os.type()} (${os.platform()}) ${os.release()} ${os.arch()}`
  69. if (os.platform() === 'linux') {
  70. const osInfo = await getos()
  71. osLabel = `${os.type()} - ${osInfo.dist} (${osInfo.codename || os.platform()}) ${osInfo.release || os.release()} ${os.arch()}`
  72. }
  73. return osLabel
  74. },
  75. async platform () {
  76. const isDockerized = await fs.pathExists('/.dockerenv')
  77. if (isDockerized) {
  78. return 'docker'
  79. }
  80. return os.platform()
  81. },
  82. hostname() {
  83. return os.hostname()
  84. },
  85. cpuCores() {
  86. return os.cpus().length
  87. },
  88. ramTotal() {
  89. return filesize(os.totalmem())
  90. },
  91. workingDirectory() {
  92. return process.cwd()
  93. },
  94. nodeVersion() {
  95. return process.version.substr(1)
  96. },
  97. redisVersion() {
  98. return WIKI.redis.serverInfo.redis_version
  99. },
  100. redisUsedRAM() {
  101. return WIKI.redis.serverInfo.used_memory_human
  102. },
  103. redisTotalRAM() {
  104. return _.get(WIKI.redis.serverInfo, 'total_system_memory_human', 'N/A')
  105. },
  106. redisHost() {
  107. return WIKI.redis.options.host
  108. },
  109. async groupsTotal() {
  110. const total = await WIKI.models.groups.query().count('* as total').first().pluck('total')
  111. return _.toSafeInteger(total)
  112. },
  113. async pagesTotal() {
  114. const total = await WIKI.models.pages.query().count('* as total').first().pluck('total')
  115. return _.toSafeInteger(total)
  116. },
  117. async usersTotal() {
  118. const total = await WIKI.models.users.query().count('* as total').first().pluck('total')
  119. return _.toSafeInteger(total)
  120. }
  121. }
  122. }