tinylink/core/runtime/startup.js

45 lines
1.2 KiB
JavaScript
Raw Normal View History

const config = require('../config/config');
const logger = require('../util/logger');
const migrate = require('../maintenance/migrate');
const instrumentConfig = require('../config/instrumentConfig');
const { createHttpServer } = require('../http/index');
const {
buildConnectors,
attachConnectorHandlers,
startConnectors,
stopConnectors
} = require('./connectors');
const { startWorkers, stopWorkers } = require('./workers');
async function start() {
instrumentConfig.validateAndLoadInstrumentConfigs();
await migrate();
await instrumentConfig.init();
const connectors = buildConnectors();
if (!connectors.length) {
logger.warn('no enabled connectors configured, ingestion listeners are disabled');
}
attachConnectorHandlers(connectors);
await startConnectors(connectors);
await startWorkers();
const app = createHttpServer(connectors);
const server = app.listen(config.healthPort, () => {
logger.info({ port: config.healthPort }, 'health server ready');
});
async function shutdown() {
await stopWorkers();
await stopConnectors(connectors);
if (server) {
await new Promise((resolve) => server.close(resolve));
}
}
return { connectors, server, shutdown };
}
module.exports = { start };