@isaac-platform/isaac-node-red
Version:
Set of Node-RED nodes to communicate with an ISAAC system
45 lines (44 loc) • 1.7 kB
JavaScript
const axios = require("axios"), utils = require("../../utils.js");
async function createLogEntry(server, mergedConfig) {
const value = mergedConfig.payload !== "undefined" && mergedConfig.payload !== void 0 ? mergedConfig.payload : mergedConfig.value, response = await axios.post(`${utils.getApiUrl(server)}/logs`, {
key: mergedConfig.key,
value: typeof value == "string" ? value : JSON.stringify(value),
// Needs to be a string
severity: mergedConfig.severity,
createdBy: server.subsystemExternalId,
createdByType: "subsystem",
tags: utils.parseStringArray(mergedConfig.tags)
});
return {
payload: response.data,
statusCode: response.status
};
}
module.exports = (RED) => {
function LogEntryNode(config) {
RED.nodes.createNode(this, config);
const node = this, server = RED.nodes.getNode(config.isaacConnection), didAddUsedConnection = utils.incrementConnectionUsage(node, server);
this.on("input", async (msg) => {
try {
if (!server)
throw new Error("No ISAAC connection configured");
const mergedConfig = utils.mergeConfig({ config, msg }), result = await createLogEntry(server, mergedConfig);
node.send({
...msg,
...result
});
} catch (e) {
const niceMessage = utils.getNiceAxiosErrorMessage(e);
if (niceMessage) {
const error = new Error(niceMessage);
node.error(error, msg);
return;
}
node.error(e, msg);
}
}), this.on("close", () => {
didAddUsedConnection && utils.decrementConnectionUsage(node, server);
});
}
RED.nodes.registerType("isaac log entry", LogEntryNode);
};