From d18fde4aa44ae3f395e19ffcf60ff032e7952206 Mon Sep 17 00:00:00 2001 From: Ringo Watanabe Date: Wed, 29 Aug 2018 14:25:14 +0100 Subject: [PATCH] Change backend call --- .gitignore | 1 + TODO | 1 - config.js | 2 ++ daemonctl.js | 25 +++++++++++++++++++++ main.js | 61 ++++++++++++++++++++++++++++++++++++++-------------- 5 files changed, 73 insertions(+), 17 deletions(-) create mode 100644 daemonctl.js diff --git a/.gitignore b/.gitignore index 21df648..83a36f1 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ backend/ +rtbwn.sock diff --git a/TODO b/TODO index bdaf994..abaa772 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,4 @@ Server: -!!Move backend call out of request callback for /info!! Add UNIX socket listener to node server for daemon communication. Add option to save/load state of server. diff --git a/config.js b/config.js index 5edfff8..760c481 100644 --- a/config.js +++ b/config.js @@ -2,6 +2,8 @@ var config = { PORT: 8001, POLL_INTERVAL: 10000, + //CTL_SOCKET: "rtbwn.sock", + URL_BASE: "/rtbw", PYTHON_EXECUTABLE: "python3", diff --git a/daemonctl.js b/daemonctl.js new file mode 100644 index 0000000..04c22ac --- /dev/null +++ b/daemonctl.js @@ -0,0 +1,25 @@ +var http = require('http'); +var process = require('child_process'); +var WebSocketServer = require("ws").Server; +var events = require("events"); +var jsoncompress = require('jsoncompress'); +var net = require('net'); +var fs = require('fs'); + +var config = require('./config'); +var logger = require("./logger"); +var _cycle = require("./cycle"); +var CycleBuffer = require("./graphBuffer"); + +var client = new net.Socket(config.CTL_SOCKET, function() { + logger.log("Connected"); + client.write("Hello world"); +}); + +client.on('data', function(data) { + +}); + +client.on('close', function() { + console.log("Connection closed"); +}); diff --git a/main.js b/main.js index efff020..5f82465 100644 --- a/main.js +++ b/main.js @@ -3,7 +3,8 @@ var process = require('child_process'); var WebSocketServer = require("ws").Server; var events = require("events"); var jsoncompress = require('jsoncompress'); - +var net = require('net'); +var fs = require('fs'); var config = require('./config'); var logger = require("./logger"); @@ -75,6 +76,7 @@ var allTimeAverage = new _cycle.Cycle(); var allTimeAverageN = 0; var buffer = new CycleBuffer(config.BUFFER_PURGE_TIME); var superbuffer = new CycleBuffer(config.SUPERBUFFER_PURGE_TIME); +var beInfo = null; var upSince = new Date(); @@ -95,7 +97,17 @@ superbuffer.onclear = function(bu) { logger.log("Buffer set to clear every "+(config.BUFFER_PURGE_TIME/1000/60)+" minutes"); logger.log("Superbuffer set to clear every "+(config.SUPERBUFFER_PURGE_TIME/1000/60)+" minutes"); - + +process.execFile(config.PYTHON_EXECUTABLE, [config.RTBWCTL_FILENAME, config.BACKEND_SOCKET, "info"], function(error,stdout,stderr) { + + try { + beInfo = JSON.parse(stdout); + } catch(e) { + logger.log("Recieved invalid JSON from info backend call."); + return; + } + logger.log("Backend info received"); +}); var server = http.createServer(function(req, res) { if(req.url == config.URL_BASE+"/cycle") { @@ -106,27 +118,22 @@ var server = http.createServer(function(req, res) { } else if(req.url == config.URL_BASE+"/info") { logger.log("Recieved info request"); - process.execFile(config.PYTHON_EXECUTABLE, [config.RTBWCTL_FILENAME, config.BACKEND_SOCKET, "info"], function(error,stdout,stderr) { - var js = undefined; - try { - js = JSON.parse(stdout); - } catch(e) { - logger.log("Recieved invalid JSON from info backend call"); - res.writeHead(500); - res.end(""); - return; - } + if(!beInfo) { + res.writeHead(500); + res.end(""); + } + else { res.setHeader("Content-Type", "application/json"); res.writeHead(200); res.end(JSON.stringify({ interval: config.POLL_INTERVAL, purgeInterval: config.BUFFER_PURGE_TIME, superPurgeInterval: config.SUPERBUFFER_PURGE_TIME, - backendInterval: js.timeout, - board: js.board, + backendInterval: beInfo.timeout, + board: beInfo.board, upSince: upSince })); - }); + } } else if(req.url == config.URL_BASE+"/template") { @@ -190,6 +197,8 @@ var server = http.createServer(function(req, res) { } }); + + var wss = new WebSocketServer({ server: server, autoAcceptConnections: false @@ -274,6 +283,7 @@ var backend = setInterval(function() { else if(bein(json[i], "trip")) cycle.trips+=1; } + cycle.interval = timeAverage(timeInters); cycle.last = lastNumber; @@ -281,9 +291,28 @@ var backend = setInterval(function() { buffer.add(cycle); allTime = _cycle.Cycle.accumulate([allTime, cycle]); allTimeAverage = _cycle.Cycle.average(allTimeAverage, [cycle], allTimeAverageN); - allTimeAverageN +=1; + allTimeAverageN += 1; cycleEmitter.emit("newCycle", lastCycle); }); }, config.POLL_INTERVAL); +/*var ctlServer = net.createServer(); + +if(!!config.CTL_SOCKET) { + ctlServer.listen(config.CTL_SOCKET, function() { + logger.log("Control server up on socket "+config.CTL_SOCKET); + }); + + ctlServer.on('connection', function(con) { + logger.log("Connection"); + con.on('data', function (data) { + logger.log("CTL: "+data); + }); + }); + + ctlServer.on('error', function(e) { + logger.log("Control server error ["+config.CTL_SOCKET+"]: "+e.code); + ctlServer.close(); + }); +}*/