kernel.js 2.49 KB
Newer Older
1
const _ = require('lodash')
2
const EventEmitter = require('events')
3

4
/* global WIKI */
NGPixel's avatar
NGPixel committed
5 6

module.exports = {
7 8
  async init() {
    WIKI.logger.info('=======================================')
9
    WIKI.logger.info(`= Wiki.js ${_.padEnd(WIKI.version + ' ', 29, '=')}`)
10
    WIKI.logger.info('=======================================')
11
    WIKI.logger.info('Initializing...')
NGPixel's avatar
NGPixel committed
12

13
    WIKI.models = require('./db').init()
NGPixel's avatar
NGPixel committed
14

Nick's avatar
Nick committed
15 16 17
    try {
      await WIKI.models.onReady
      await WIKI.configSvc.loadFromDb()
Nick's avatar
Nick committed
18
      await WIKI.configSvc.applyFlags()
Nick's avatar
Nick committed
19 20 21 22 23 24 25
    } catch (err) {
      WIKI.logger.error('Database Initialization Error: ' + err.message)
      if (WIKI.IS_DEBUG) {
        console.error(err)
      }
      process.exit(1)
    }
26

27
    this.bootMaster()
NGPixel's avatar
NGPixel committed
28 29 30 31
  },
  /**
   * Pre-Master Boot Sequence
   */
32 33
  async preBootMaster() {
    try {
34 35 36
      await this.initTelemetry()
      WIKI.cache = require('./cache').init()
      WIKI.scheduler = require('./scheduler').init()
NGPixel's avatar
NGPixel committed
37
      WIKI.servers = require('./servers')
38
      WIKI.sideloader = require('./sideloader').init()
39
      WIKI.events = new EventEmitter()
40 41 42 43
    } catch (err) {
      WIKI.logger.error(err)
      process.exit(1)
    }
NGPixel's avatar
NGPixel committed
44 45 46 47
  },
  /**
   * Boot Master Process
   */
48 49 50 51
  async bootMaster() {
    try {
      if (WIKI.config.setup) {
        WIKI.logger.info('Starting setup wizard...')
52
        require('../setup')()
53
      } else {
54
        await this.preBootMaster()
55 56
        await require('../master')()
        this.postBootMaster()
NGPixel's avatar
NGPixel committed
57
      }
58
    } catch (err) {
59
      WIKI.logger.error(err)
NGPixel's avatar
NGPixel committed
60
      process.exit(1)
61
    }
NGPixel's avatar
NGPixel committed
62 63 64 65
  },
  /**
   * Post-Master Boot Sequence
   */
66
  async postBootMaster() {
67
    await WIKI.models.analytics.refreshProvidersFromDisk()
68
    await WIKI.models.authentication.refreshStrategiesFromDisk()
69
    await WIKI.models.editors.refreshEditorsFromDisk()
70
    await WIKI.models.loggers.refreshLoggersFromDisk()
71
    await WIKI.models.renderers.refreshRenderersFromDisk()
72
    await WIKI.models.searchEngines.refreshSearchEnginesFromDisk()
73
    await WIKI.models.storage.refreshTargetsFromDisk()
74 75

    await WIKI.auth.activateStrategies()
76
    await WIKI.models.searchEngines.initEngine()
77
    await WIKI.models.storage.initTargets()
78
    WIKI.scheduler.start()
Nick's avatar
Nick committed
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
  },
  /**
   * Init Telemetry
   */
  async initTelemetry() {
    require('./telemetry').init()

    process.on('unhandledRejection', (err) => {
      WIKI.logger.warn(err)
      WIKI.telemetry.sendError(err)
    })
    process.on('uncaughtException', (err) => {
      WIKI.logger.warn(err)
      WIKI.telemetry.sendError(err)
    })
NGPixel's avatar
NGPixel committed
94 95
  }
}