system.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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. const moment = require('moment')
  9. const graphHelper = require('../../helpers/graph')
  10. /* global WIKI */
  11. const dbTypes = {
  12. mysql: 'MySQL',
  13. mariadb: 'MariaDB',
  14. postgres: 'PostgreSQL',
  15. sqlite: 'SQLite',
  16. mssql: 'MS SQL Server'
  17. }
  18. module.exports = {
  19. Query: {
  20. async system() { return {} }
  21. },
  22. Mutation: {
  23. async system() { return {} }
  24. },
  25. SystemQuery: {
  26. flags() {
  27. return _.transform(WIKI.config.flags, (result, value, key) => {
  28. result.push({ key, value })
  29. }, [])
  30. },
  31. async info() { return {} }
  32. },
  33. SystemMutation: {
  34. async updateFlags(obj, args, context) {
  35. WIKI.config.flags = _.transform(args.flags, (result, row) => {
  36. _.set(result, row.key, row.value)
  37. }, {})
  38. await WIKI.configSvc.applyFlags()
  39. await WIKI.configSvc.saveToDb(['flags'])
  40. return {
  41. responseResult: graphHelper.generateSuccess('System Flags applied successfully')
  42. }
  43. },
  44. async resetTelemetryClientId(obj, args, context) {
  45. try {
  46. WIKI.telemetry.generateClientId()
  47. await WIKI.configSvc.saveToDb(['telemetry'])
  48. return {
  49. responseResult: graphHelper.generateSuccess('Telemetry state updated successfully')
  50. }
  51. } catch (err) {
  52. return graphHelper.generateError(err)
  53. }
  54. },
  55. async setTelemetry(obj, args, context) {
  56. try {
  57. _.set(WIKI.config, 'telemetry.isEnabled', args.enabled)
  58. WIKI.telemetry.enabled = args.enabled
  59. await WIKI.configSvc.saveToDb(['telemetry'])
  60. return {
  61. responseResult: graphHelper.generateSuccess('Telemetry Client ID has been reset successfully')
  62. }
  63. } catch (err) {
  64. return graphHelper.generateError(err)
  65. }
  66. }
  67. },
  68. SystemInfo: {
  69. configFile() {
  70. return path.join(process.cwd(), 'config.yml')
  71. },
  72. cpuCores() {
  73. return os.cpus().length
  74. },
  75. currentVersion() {
  76. return WIKI.version
  77. },
  78. dbType() {
  79. return _.get(dbTypes, WIKI.config.db.type, 'Unknown DB')
  80. },
  81. async dbVersion() {
  82. let version = 'Unknown Version'
  83. switch (WIKI.config.db.type) {
  84. case 'mariadb':
  85. case 'mysql':
  86. const resultMYSQL = await WIKI.models.knex.raw('SELECT VERSION() as version;')
  87. version = _.get(resultMYSQL, '[0][0].version', 'Unknown Version')
  88. break
  89. case 'mssql':
  90. const resultMSSQL = await WIKI.models.knex.raw('SELECT @@VERSION as version;')
  91. version = _.get(resultMSSQL, '[0].version', 'Unknown Version')
  92. break
  93. case 'postgres':
  94. version = _.get(WIKI.models, 'knex.client.version', 'Unknown Version')
  95. break
  96. case 'sqlite':
  97. version = _.get(WIKI.models, 'knex.client.driver.VERSION', 'Unknown Version')
  98. break
  99. }
  100. return version
  101. },
  102. dbHost() {
  103. if (WIKI.config.db.type === 'sqlite') {
  104. return WIKI.config.db.storage
  105. } else {
  106. return WIKI.config.db.host
  107. }
  108. },
  109. hostname() {
  110. return os.hostname()
  111. },
  112. latestVersion() {
  113. return WIKI.system.updates.version
  114. },
  115. latestVersionReleaseDate() {
  116. return moment.utc(WIKI.system.updates.releaseDate)
  117. },
  118. nodeVersion() {
  119. return process.version.substr(1)
  120. },
  121. async operatingSystem() {
  122. let osLabel = `${os.type()} (${os.platform()}) ${os.release()} ${os.arch()}`
  123. if (os.platform() === 'linux') {
  124. const osInfo = await getos()
  125. osLabel = `${os.type()} - ${osInfo.dist} (${osInfo.codename || os.platform()}) ${osInfo.release || os.release()} ${os.arch()}`
  126. }
  127. return osLabel
  128. },
  129. async platform () {
  130. const isDockerized = await fs.pathExists('/.dockerenv')
  131. if (isDockerized) {
  132. return 'docker'
  133. }
  134. return os.platform()
  135. },
  136. ramTotal() {
  137. return filesize(os.totalmem())
  138. },
  139. telemetry() {
  140. return WIKI.telemetry.enabled
  141. },
  142. telemetryClientId() {
  143. return WIKI.config.telemetry.clientId
  144. },
  145. workingDirectory() {
  146. return process.cwd()
  147. },
  148. async groupsTotal() {
  149. const total = await WIKI.models.groups.query().count('* as total').first().pluck('total')
  150. return _.toSafeInteger(total)
  151. },
  152. async pagesTotal() {
  153. const total = await WIKI.models.pages.query().count('* as total').first().pluck('total')
  154. return _.toSafeInteger(total)
  155. },
  156. async usersTotal() {
  157. const total = await WIKI.models.users.query().count('* as total').first().pluck('total')
  158. return _.toSafeInteger(total)
  159. }
  160. }
  161. }