kernel.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. const _ = require('lodash')
  2. const EventEmitter = require('events')
  3. /* global WIKI */
  4. module.exports = {
  5. async init() {
  6. WIKI.logger.info('=======================================')
  7. WIKI.logger.info(`= Wiki.js ${_.padEnd(WIKI.version + ' ', 29, '=')}`)
  8. WIKI.logger.info('=======================================')
  9. WIKI.models = require('./db').init()
  10. await WIKI.models.onReady
  11. await WIKI.configSvc.loadFromDb()
  12. this.bootMaster()
  13. },
  14. /**
  15. * Pre-Master Boot Sequence
  16. */
  17. async preBootMaster() {
  18. try {
  19. await this.initTelemetry()
  20. WIKI.cache = require('./cache').init()
  21. WIKI.scheduler = require('./scheduler').init()
  22. WIKI.events = new EventEmitter()
  23. } catch (err) {
  24. WIKI.logger.error(err)
  25. process.exit(1)
  26. }
  27. },
  28. /**
  29. * Boot Master Process
  30. */
  31. async bootMaster() {
  32. try {
  33. if (WIKI.config.setup) {
  34. WIKI.logger.info('Starting setup wizard...')
  35. require('../setup')()
  36. } else {
  37. await this.preBootMaster()
  38. await require('../master')()
  39. this.postBootMaster()
  40. }
  41. } catch (err) {
  42. WIKI.logger.error(err)
  43. process.exit(1)
  44. }
  45. },
  46. /**
  47. * Post-Master Boot Sequence
  48. */
  49. async postBootMaster() {
  50. await WIKI.models.authentication.refreshStrategiesFromDisk()
  51. await WIKI.models.editors.refreshEditorsFromDisk()
  52. await WIKI.models.loggers.refreshLoggersFromDisk()
  53. await WIKI.models.renderers.refreshRenderersFromDisk()
  54. await WIKI.models.searchEngines.refreshSearchEnginesFromDisk()
  55. await WIKI.models.storage.refreshTargetsFromDisk()
  56. await WIKI.auth.activateStrategies()
  57. await WIKI.models.storage.initTargets()
  58. WIKI.scheduler.start()
  59. },
  60. /**
  61. * Init Telemetry
  62. */
  63. async initTelemetry() {
  64. require('./telemetry').init()
  65. process.on('unhandledRejection', (err) => {
  66. WIKI.logger.warn(err)
  67. WIKI.telemetry.sendError(err)
  68. })
  69. process.on('uncaughtException', (err) => {
  70. WIKI.logger.warn(err)
  71. WIKI.telemetry.sendError(err)
  72. })
  73. }
  74. }