Move extension-wrapper to bin

This commit is contained in:
Zaid Abdulla committed 2019-02-04 23:47:54 -08:00
1 parent 498947bc4a
commit 14013627e2
3 files changed
+20 -12

No files matched your search

+2 -1
View File
@@ -1,3 +1,4 @@
#!/usr/bin/env -S node -r esm
/** /**
* Copyright 2013-2018 Zaid Abdulla * Copyright 2013-2018 Zaid Abdulla
* *
@@ -40,7 +41,7 @@ function errorToFault(err) {
fault.detail.stack = err.stack; fault.detail.stack = err.stack;
// Trim the stack trace // Trim the stack trace
const stackTrimIndex = fault.detail.stack.match( const stackTrimIndex = fault.detail.stack.match(
/\s+at\s[^\s]+\s\(.*extension-wrapper\.js:.+\)/ /\s+at\s[^\s]+\s\(.*genieacs-ext:.+\)/
); );
if (stackTrimIndex) if (stackTrimIndex)
fault.detail.stack = fault.detail.stack.slice(0, stackTrimIndex.index); fault.detail.stack = fault.detail.stack.slice(0, stackTrimIndex.index);
+1
View File
@@ -158,6 +158,7 @@ async function generateToolsJs() {
async function generateBackendJs() { async function generateBackendJs() {
for (const bin of [ for (const bin of [
"genieacs-cwmp", "genieacs-cwmp",
"genieacs-ext",
"genieacs-nbi", "genieacs-nbi",
"genieacs-fs", "genieacs-fs",
"genieacs-ui" "genieacs-ui"
+17 -11
View File
@@ -18,19 +18,19 @@
*/ */
"use strict"; "use strict";
import { fork } from "child_process"; import { spawn } from "child_process";
import crypto from "crypto"; import crypto from "crypto";
import * as config from "./config"; import * as config from "./config";
const TIMEOUT = config.get("EXT_TIMEOUT"); const TIMEOUT = config.get("EXT_TIMEOUT");
const processes = {}; const processes = {};
const jobs = {}; const jobs = new Map();
function messageHandler(message) { function messageHandler(message) {
const func = jobs[message[0]]; const func = jobs.get(message[0]);
if (func) { if (func) {
delete jobs[message[0]]; jobs.delete(message[0]);
func(null, message[1], message[2]); func(null, message[1], message[2]);
} }
} }
@@ -38,12 +38,20 @@ function messageHandler(message) {
export function run(args, callback) { export function run(args, callback) {
const scriptName = args[0]; const scriptName = args[0];
const id = crypto.randomBytes(8).toString("hex");
jobs.set(id, callback);
if (!processes[scriptName]) { if (!processes[scriptName]) {
const p = fork("lib/extension-wrapper", [scriptName]); const p = spawn("bin/genieacs-ext", [scriptName], {
stdio: ["inherit", "inherit", "inherit", "ipc"]
});
processes[scriptName] = p; processes[scriptName] = p;
p.on("error", () => { p.on("error", err => {
if (processes[scriptName] === p) { if (processes[scriptName] === p) {
if (jobs.delete(id))
callback(null, { code: err.name, message: err.message });
kill(processes[scriptName]); kill(processes[scriptName]);
delete processes[scriptName]; delete processes[scriptName];
} }
@@ -59,15 +67,13 @@ export function run(args, callback) {
p.on("message", messageHandler); p.on("message", messageHandler);
} }
const id = crypto.randomBytes(8).toString("hex");
jobs[id] = callback;
setTimeout(() => { setTimeout(() => {
if (id in jobs) { if (jobs.delete(id))
delete jobs[id];
callback(null, { code: "timeout", message: "Extension timed out" }); callback(null, { code: "timeout", message: "Extension timed out" });
}
}, TIMEOUT); }, TIMEOUT);
if (!processes[scriptName].connected) return false;
return processes[scriptName].send([id, args.slice(1)]); return processes[scriptName].send([id, args.slice(1)]);
} }