55 lines
1.7 KiB
JavaScript
55 lines
1.7 KiB
JavaScript
const logger = require('../util/logger');
|
|
const instrumentConfig = require('../config/instrumentConfig');
|
|
const { createHttpJsonConnector } = require('../instrument/connectors/httpJson');
|
|
const { createHl7TcpConnector } = require('../instrument/connectors/tcp');
|
|
const { createAstmSerialConnector } = require('../instrument/connectors/serial');
|
|
const { createIngestMessageHandler } = require('../instrument/ingest');
|
|
|
|
const connectorFactories = {
|
|
'http-json': createHttpJsonConnector,
|
|
'hl7-tcp': createHl7TcpConnector,
|
|
'astm-serial': createAstmSerialConnector
|
|
};
|
|
|
|
function buildConnectors() {
|
|
return instrumentConfig.list()
|
|
.filter((entry) => entry.enabled)
|
|
.map((entry) => {
|
|
const createConnector = connectorFactories[entry.connector];
|
|
if (!createConnector) {
|
|
logger.warn({ connector: entry.connector, instrument_id: entry.instrument_id }, 'unknown connector in instrument config, skipping startup');
|
|
return null;
|
|
}
|
|
|
|
return createConnector({
|
|
...(entry.connectorConfig || {}),
|
|
instrument_id: entry.instrument_id
|
|
});
|
|
})
|
|
.filter(Boolean);
|
|
}
|
|
|
|
function attachConnectorHandlers(connectors) {
|
|
connectors.forEach((connector) => {
|
|
connector.onMessage(createIngestMessageHandler(connector));
|
|
connector.onError((err) => {
|
|
logger.error({ err: err.message }, `${connector.name()} emitted error`);
|
|
});
|
|
});
|
|
}
|
|
|
|
async function startConnectors(connectors) {
|
|
await Promise.all(connectors.map((connector) => connector.start()));
|
|
}
|
|
|
|
async function stopConnectors(connectors) {
|
|
await Promise.all(connectors.map((connector) => connector.stop()));
|
|
}
|
|
|
|
module.exports = {
|
|
buildConnectors,
|
|
attachConnectorHandlers,
|
|
startConnectors,
|
|
stopConnectors
|
|
};
|