You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
3.5 KiB

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