robojones/z1

View on GitHub
daemon/main.js

Summary

Maintainability
A
0 mins
Test Coverage
B
88%
#! /usr/bin/env node

const path = require('path')
const fs = require('fs')
const getConfig = require('./lib/getConfig')

const pack = require('../package.json')
const z1Dir = path.join(process.env.HOME, '.z1')

try {
    fs.mkdirSync(z1Dir)
} catch (err) {
    if (err.code !== 'EEXIST') {
        throw err
    }
}

process.chdir(z1Dir)

// setup global log functions
require('./lib/log')

process.on('uncaughtException', handle)

const Worker = require('./lib/class/Worker')
Worker.errorHandler = handle
const remoteServer = require('./lib/remoteServer')

const config = getConfig(pack.version)

let operation = {
    'exit': require('./operation/exit'),
    'info': require('./operation/info'),
    'list': require('./operation/list'),
    'logs': require('./operation/logs'),
    'ping': require('./operation/ping'),
    'restart-all': require('./operation/restart-all'),
    'restart': require('./operation/restart'),
    'resurrect': require('./operation/resurrect'),
    'start': require('./operation/start'),
    'stop': require('./operation/stop'),
}

remoteServer('sick.sock', async (command, connection) => {
    if (process.env.NODE_ENV === 'development') {
        log('daemon: run command', command.name)
    }

    if (!operation.hasOwnProperty(command.name)) {
        throw new Error(`Unknown operation "${command.name}".`)
    }

    if (command.immediate) {
        operation[command.name](config, command, connection).catch(handle)
        return {}
    }

    return operation[command.name](config, command, connection)
})

console.log('daemon: daemon started')