ihub-framework-js
Version:
Legacy version of iHub Framework written in Javascript
104 lines (85 loc) • 3.36 kB
JavaScript
// Loads all environment variables from .env file to process.env
require('./libs/environment');
// Bootup function
const bootup = () => (new Promise(async (resolve, reject) => {
/* eslint-disable global-require */
try {
const EventEmitter = require('events');
class CustomEmitter extends EventEmitter {}
const events = new CustomEmitter();
// Feature object, it's going to be used later to start other modules and the core of the system
const feature = {
apm: process.env.FT_APM_ENABLED === 'true' || false,
logger: require('./logger'),
request: require('./request')(),
/* eslint-disable no-new-require */
/* eslint-disable new-cap */
events,
};
process.on('uncaughtException', (error) => {
// Logs the uncaught error for futher treatment
/* eslint-disable no-console */
feature.logger.error('uncaughtException', {
errorMessage: error.message,
error: (typeof error === 'object' && !Array.isArray(error)) ? JSON.stringify(error) : String(error),
});
console.error('There was an uncaught error', error);
setTimeout(() => {
process.exit(1);
}, 5000);
});
/* Debug */
feature.logger.debug('IHUB Framework is starting');
// Loads the APM if enabled
if (feature.apm) {
feature.apm = require('elastic-apm-node').start({
serviceName: process.env.NODE_ENV === 'production' ? process.env.PROJECT_NAMESPACE : `${process.env.PROJECT_NAMESPACE}-${process.env.NODE_ENV || 'development'}`,
serverUrl: `${process.env.ELASTICSEARCH_APM_HOST}:${process.env.ELASTICSEARCH_APM_PORT}`,
});
}
/* Database */
feature.database = process.env.FT_DATABASE_ENABLED === 'true'
? await require('./database/connect') : false;
/* Server */
feature.server = process.env.FT_SERVER_ENABLED === 'true'
? await require('./server')() : false;
/* Tasks */
feature.tasks = process.env.FT_TASKS_ENABLED === 'true'
? await require('./tasks')(feature.apm) : false;
/* Kafka */
feature.kafka = process.env.FT_KAFKA_ENABLED === 'true'
? await require('./kafka')() : false;
/* Routines */
feature.routines = process.env.FT_ROUTINES_ENABLED === 'true'
? await require('./routines')(feature.apm) : false;
/* Core */
// Init the core module and passed all the features to it
require('./core').init(feature);
/* Plugins */
feature.plugins = await require('./loader/plugins');
// TODO: Remove this|| Re Init the core module and passed all the features to it
require('./core').init(feature);
/* Global Models */
await require('./database/models');
/* Components */
// Loads the components and its features based on the services enabled
await require('./loader/components')(feature.database, feature.tasks, feature.routines, feature.server, feature.kafka);
/* Debug */
feature.events.emit('ihub-framework:started');
feature.logger.debug('IHUB Framework started');
resolve();
} catch (error) {
/* eslint-disable no-console */
console.log(error);
process.exit(1);
reject(error);
}
}));
// Check it it's being required or called
if (require.main === module) {
// Bootup the system
bootup();
} else {
// Exports the system
module.exports = bootup;
}