farmcontrol-ws/src/index.js

63 lines
1.5 KiB
JavaScript

import { loadConfig } from './config.js';
import { SocketManager } from './socket/socketmanager.js';
import { natsServer } from './database/nats.js';
import { redisServer } from './database/redis.js';
import express from 'express';
import log4js from 'log4js';
import http from 'http';
import { mongoServer } from './database/mongo.js';
(async () => {
// Load configuration
const config = loadConfig();
// Setup logger
const logger = log4js.getLogger('FarmControl API WS');
logger.level = config.server.logLevel;
// Create Express app and HTTP server
const app = express();
const server = http.createServer(app);
new SocketManager(server);
// Connect to NATS (await)
try {
await natsServer.connect();
} catch (err) {
logger.error('Failed to connect to NATS:', err);
throw err;
}
// Connect to Mongo DB (await)
try {
await mongoServer.connect();
} catch (err) {
logger.error('Failed to connect to Mongo DB:', err);
throw err;
}
// Connect to Redis (await)
try {
await redisServer.connect();
} catch (err) {
logger.error('Failed to connect to Redis:', err);
throw err;
}
// Start HTTP server
server.listen(config.server.port, () => {
logger.info(`Server listening on port ${config.server.port}`);
});
process.on('SIGINT', async () => {
logger.info('Shutting down...');
await redisServer.disconnect();
await mongoServer.disconnect();
await natsServer.disconnect();
await server.close();
logger.info('Shutdown complete');
process.exit(0);
});
})();