Pre code styling

This commit is contained in:
Steve Walsh 2023-11-09 15:09:03 +00:00
parent 893eb2007f
commit 1aa0e89de9

View File

@ -15,7 +15,7 @@
**/
const clone = require("clone");
const PayloadValidator = require("../../PayloadValidator");
const PayloadValidator = require('../../PayloadValidator')
module.exports = function(RED) {
"use strict";
@ -37,25 +37,15 @@ module.exports = function (RED) {
for (var n=0; n < msgs[m].length; n++) {
var msg = msgs[m][n];
if (msg !== null && msg !== undefined) {
if (
typeof msg === "object" &&
!Buffer.isBuffer(msg) &&
!util.isArray(msg)
) {
if (typeof msg === 'object' && !Buffer.isBuffer(msg) && !util.isArray(msg)) {
msg._msgid = _msgid;
msgCount++;
} else {
var type = typeof msg;
if (type === "object") {
type = Buffer.isBuffer(msg)
? "Buffer"
: util.isArray(msg)
? "Array"
: "Date";
if (type === 'object') {
type = Buffer.isBuffer(msg)?'Buffer':(util.isArray(msg)?'Array':'Date');
}
node.error(
RED._("function.error.non-message-returned", { type: type })
);
node.error(RED._("function.error.non-message-returned",{ type: type }))
}
}
}
@ -71,8 +61,7 @@ module.exports = function (RED) {
var node = this;
this.name = n.name;
this.func = n.func;
var functionText =
"var results = null;" +
var functionText = "var results = null;"+
"results = (function(msg){ "+
"var __msgid__ = msg._msgid;"+
"var node = {"+
@ -85,8 +74,7 @@ module.exports = function (RED) {
"status:__node__.status,"+
"send:function(msgs){ __node__.send(__msgid__,msgs);}"+
"};\n"+
this.func +
"\n" +
this.func+"\n"+
"})(msg);";
this.topic = n.topic;
this.outstandingTimers = [];
@ -97,7 +85,7 @@ module.exports = function (RED) {
//Buffer:Buffer,
//Date: Date,
RED: {
util: RED.util,
util: RED.util
},
__node__: {
log: function() {
@ -126,7 +114,7 @@ module.exports = function (RED) {
},
status: function() {
node.status.apply(node, arguments);
},
}
},
context: {
set: function() {
@ -143,7 +131,7 @@ module.exports = function (RED) {
},
get flow() {
return node.context().flow;
},
}
},
flow: {
set: function() {
@ -154,7 +142,7 @@ module.exports = function (RED) {
},
keys: function() {
return node.context().flow.keys.apply(node,arguments);
},
}
},
// global: {
// set: function() {
@ -209,116 +197,92 @@ module.exports = function (RED) {
if (index > -1) {
node.outstandingIntervals.splice(index,1);
}
},
}
};
if (util.hasOwnProperty("promisify")) {
if (util.hasOwnProperty('promisify')) {
sandbox.setTimeout[util.promisify.custom] = function(after, value) {
return new Promise(function(resolve, reject) {
sandbox.setTimeout(function () {
resolve(value);
}, after);
sandbox.setTimeout(function(){ resolve(value) }, after);
});
};
}
}
try {
this.on("input", async function(msg) {
try {
const originalMessage = clone(msg);
const payloadValidator = new PayloadValidator(msg, this.id);
const orginalMessage= clone(msg)
const payloadValidator = new PayloadValidator(msg, this.id)
var start = process.hrtime();
sandbox.msg = msg;
const vm2Instance = new vm2.VM({ sandbox, timeout: 5000 });
const beforeVm2 = process.hrtime();
const result = vm2Instance.run(functionText);
const afterVm2 = process.hrtime(beforeVm2);
payloadValidator.verify(result);
payloadValidator.verify(result)
sendResults(this,msg._msgid, result);
const logger = clone(msg.logger);
const logger = clone(msg.logger)
let lambdaRequestId;
let {
payload: {
system: { organization },
system: {
organization,
}
},
event: {
workers: [{ id: workerId }],
},
} = originalMessage;
const {
settings: {
api: { codefile = false },
},
} = RED;
if (codefile) {
workers: [{ id: workerId }]
}
} = orginalMessage
try{
const messageToSend = clone(msg);
delete messageToSend.logger;
const messageToSend = clone(msg)
delete messageToSend.logger
const { settings: {api:{codefile}}} = RED
// record how long this takes to run
const beforeCodefile = process.hrtime();
const {
result: {
Result: { msg: responseMessage },
},
} = await codefile.run({ srcCode: this.func, context: { msg } });
const {result:{Result:{msg: responseMessage}}} = await codefile.run({srcCode: this.func, context: {msg}})
const afterCodefile = process.hrtime(beforeCodefile);
responseMessage.logger = logger;
payloadValidator.verify(responseMessage);
responseMessage.logger = logger
payloadValidator.verify(responseMessage)
// to make function node return result from code file uncomment this line, and comment out the sendResults above
// sendResults(this,msg._msgid, responseMessage);
workerId = workerId.split(":::")[0];
workerId = workerId.split(':::')[0];
const nodeId = this.id.split(`${organization}-${workerId}-`)[1];
lambdaRequestId = responseMessage.lambdaRequestId;
lambdaRequestId = responseMessage.lambdaRequestId
const metrics = {
lambdaRequestId: requestId,
organization,
workerId: workerId,
nodeId: nodeId,
rawCode: this.func,
vm2Runtime: `${
Math.floor((afterVm2[0] * 1e9 + afterVm2[1]) / 10000) / 100
}ms`,
codefileRuntime: `${
Math.floor(
(afterCodefile[0] * 1e9 + afterCodefile[1]) / 10000
) / 100
}ms`,
};
logger.info(JSON.stringify(metrics, null, 2));
vm2Runtime: `${Math.floor((afterVm2[0] * 1e9 + afterVm2[1])/10000)/100}ms`,
codefileRuntime: `${Math.floor((afterCodefile[0] * 1e9 + afterCodefile[1])/10000)/100}ms`
}
logger.info(JSON.stringify(metrics, null, 2))
}catch(e){
logger.error({
message: "Error running codefile",
message:'Error running codefile',
error: e,
lambdaRequestId,
organization,
workerId: workerId,
nodeId: nodeId,
rawCode: this.func,
});
}
})
}
// sendResults(this,msg._msgid, responseMessage);
var duration = process.hrtime(start);
var converted =
Math.floor((duration[0] * 1e9 + duration[1]) / 10000) / 100;
var converted = Math.floor((duration[0] * 1e9 + duration[1])/10000)/100;
this.metric("duration", msg, converted);
if (process.env.NODE_RED_FUNCTION_TIME) {
this.status({fill:"yellow",shape:"dot",text:""+converted});
}
} catch(err) {
//remove unwanted part
var index = err.stack.search(
/\n\s*at ContextifyScript.Script.runInContext/
);
err.stack = err.stack
.slice(0, index)
.split("\n")
.slice(0, -1)
.join("\n");
var index = err.stack.search(/\n\s*at ContextifyScript.Script.runInContext/);
err.stack = err.stack.slice(0, index).split('\n').slice(0,-1).join('\n');
var stack = err.stack.split(/\r?\n/);
//store the error in msg to be used in flows
@ -328,10 +292,7 @@ module.exports = function (RED) {
var errorMessage;
var stack = err.stack.split(/\r?\n/);
if (stack.length > 0) {
while (
line < stack.length &&
stack[line].indexOf("ReferenceError") !== 0
) {
while (line < stack.length && stack[line].indexOf("ReferenceError") !== 0) {
line++;
}
@ -360,13 +321,13 @@ module.exports = function (RED) {
});
this.on("close", function() {
while (node.outstandingTimers.length > 0) {
clearTimeout(node.outstandingTimers.pop());
clearTimeout(node.outstandingTimers.pop())
}
while (node.outstandingIntervals.length > 0) {
clearInterval(node.outstandingIntervals.pop());
clearInterval(node.outstandingIntervals.pop())
}
this.status({});
});
})
} catch(err) {
// eg SyntaxError - which v8 doesn't include line number information
// so we can't do better than this
@ -375,4 +336,4 @@ module.exports = function (RED) {
}
RED.nodes.registerType("function",FunctionNode);
RED.library.register("functions");
};
}