pandora
Version:
A powerful and lightweight application manager for Node.js applications powered by TypeScript.
68 lines (57 loc) • 1.84 kB
text/typescript
;
import {Daemon} from './Daemon';
import {DefaultEnvironment, EnvironmentUtil} from 'pandora-env';
import {DAEMON_READY, PANDORA_GLOBAL_CONFIG} from '../const';
import {MetricsConstants} from 'pandora-metrics';
import {GlobalConfigProcessor} from '../universal/GlobalConfigProcessor';
import {getDaemonLogger, getPandoraLogsDir} from '../universal/LoggerBroker';
import {MetricsInjectionBridge as MetricsDaemonUtil} from 'pandora-metrics';
/**
* Class DaemonBootstrap
*/
export class DaemonBootstrap {
private daemonLogger = getDaemonLogger();
private globalConfigProcessor = GlobalConfigProcessor.getInstance();
private globalConfig = this.globalConfigProcessor.getAllProperties();
private daemon: Daemon;
/**
* Start the daemon
* @return {Promise<void>}
*/
start(): Promise<void> {
// Register a default env for daemon process
const daemonEnvironment = new DefaultEnvironment({
processName: 'daemon',
appName: MetricsConstants.METRICS_DEFAULT_APP,
pandoraLogsDir: getPandoraLogsDir()
});
daemonEnvironment.set(PANDORA_GLOBAL_CONFIG, this.globalConfig);
EnvironmentUtil.getInstance().setCurrentEnvironment(daemonEnvironment);
this.daemon = new Daemon();
// Start daemon
return this.daemon.start().then(() => {
// Set daemon to metrics
MetricsDaemonUtil.setDaemon(<any> this.daemon);
if (process.send) {
process.send(DAEMON_READY);
}
}).catch(err => {
this.daemonLogger.error(err);
throw err;
});
}
/**
* Stop the Daemon
* @return {Promise<void>}
*/
stop(): Promise<void> {
return this.daemon.stop();
}
}
export function cmd(): Promise<void> {
const daemonBootstrap = new DaemonBootstrap;
return daemonBootstrap.start();
}
if (require.main === module) {
cmd();
}