tinylink/core/runtime/connectors.js

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
};