RackHD/on-http

View on GitHub
index.js

Summary

Maintainability
A
1 hr
Test Coverage
// Copyright 2015, EMC, Inc.

"use strict";

var _ = require('lodash'),  /* jshint ignore: line */
    _di = require('di'),
    onCore = require('on-core'),
    onTasks = require('on-tasks');

var self = module.exports = {
    injector: null,
    onHttpContextFactory: onHttpContextFactory
};

function onHttpContextFactory(di, directory) {
    di = di || _di;

    var core = onCore(di, directory),
        helper = core.helper;
    return {
        helper: helper,

        initialize: function () {
            var injector = new di.Injector(_.flattenDeep([
                core.injectables,
                this.prerequisiteInjectables,
                this.injectables
            ]));

            this.app = injector.get('app'),
            this.logger = injector.get('Logger').initialize('Http.Server');
            self.injector = injector;

            return this;
        },

        injectables: _.flattenDeep([
            helper.requireGlob(__dirname + '/lib/api/login/*.js'),
            helper.requireGlob(__dirname + '/lib/api/view/*.js'),
            helper.requireGlob(__dirname + '/lib/services/**/*.js'),
            helper.requireGlob(__dirname + '/lib/serializables/**/*.js'),
            require('./app'),
            helper.requireWrapper('rimraf', 'rimraf', undefined, __dirname),
            helper.requireWrapper('os-tmpdir', 'osTmpdir', undefined, __dirname),
            helper.requireWrapper('fs-extra', 'fs', undefined, __dirname),
            helper.requireWrapper('os', 'os', undefined, __dirname),
            helper.requireWrapper('node-cache', 'node-cache', undefined, __dirname)
        ]),

        prerequisiteInjectables: _.flattenDeep([
            core.workflowInjectables,
            onTasks.injectables,
            helper.requireWrapper('swagger-express-mw', 'swagger', undefined, __dirname)
        ])
    };
}

if (require.main === module) { run(); }

function run() {
    var onHttpContext = onHttpContextFactory().initialize(),
        app = onHttpContext.app,
        logger = onHttpContext.logger;

    app.start()
        .then(function () {
            logger.info('Server Started.');
        })
        .catch(function(error) {
            logger.critical('Server Startup Error.', { error: error });

            process.nextTick(function() {
                process.exit(1);
            });
        });

    process.on('SIGINT', function() {
        app.stop()
            .catch(function(error) {
                logger.critical('Server Shutdown Error.', { error: error });
            })
            .finally(function() {
                process.nextTick(function() {
                    process.exit(1);
                });
            });
    });
}