From ecc25632a4547363fcc6bf7f4f7baa92b17c96f1 Mon Sep 17 00:00:00 2001 From: Alexey Nesterenko Date: Sat, 10 Aug 2019 22:39:07 +0700 Subject: [PATCH 1/2] Fix bug that doesn't allow to work on Node 10. --- lib/daemon.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/daemon.js b/lib/daemon.js index 0704dc5..46f19cf 100644 --- a/lib/daemon.js +++ b/lib/daemon.js @@ -253,7 +253,9 @@ function extend(obj, src) { function processSend(msg) { try { - process.send(msg); + if (process.connected) { + process.send(msg); + } } catch (err) { // ignore } From bb1b057da874947eb38c82a8e3cd1d1fd5c2c2ef Mon Sep 17 00:00:00 2001 From: Alexey Nesterenko Date: Mon, 12 Aug 2019 15:27:00 +0700 Subject: [PATCH 2/2] rotate log feature added --- lib/LogStream.js | 33 +++++++++++++++++++++++++++++++++ lib/daemon.js | 29 ++++++++++++++++++++++------- lib/main.js | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 7 deletions(-) create mode 100644 lib/LogStream.js diff --git a/lib/LogStream.js b/lib/LogStream.js new file mode 100644 index 0000000..5fe6b2c --- /dev/null +++ b/lib/LogStream.js @@ -0,0 +1,33 @@ +module.exports = LogStream; + +var util = require('util'); +var stream = require('stream'); +var fs = require('fs'); + +util.inherits(LogStream, stream.Writable); + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +function LogStream(fileName) { + var self = this; + stream.Writable.call(this); + self.fileName = fileName; + self.logStream = LogStream._createLogStream(fileName); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +LogStream.prototype._write = function () { + var self = this; + return self.logStream.write.apply(self.logStream, arguments); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +LogStream.prototype.recreate = function () { + var self = this; + self.logStream.end(); + self.logStream = LogStream._createLogStream(self.fileName); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +LogStream._createLogStream = function (fileName) { + return fs.createWriteStream(fileName, {flags: 'a'}); +}; \ No newline at end of file diff --git a/lib/daemon.js b/lib/daemon.js index 46f19cf..b8253b7 100644 --- a/lib/daemon.js +++ b/lib/daemon.js @@ -7,6 +7,7 @@ var assert = require('assert'); var Pend = require('pend'); var jsonSocket = require('./json_socket'); var createLog = require('./log').create; +var LogStream = require('./LogStream'); var own = {}.hasOwnProperty; @@ -77,12 +78,10 @@ function startDaemon(argv) { log: null, }); } else { - createLog(logPath, maxLogSize, function(err, logStream) { - if (err) return cb(err); - cb(null, { - behavior: 'pipe', - log: logStream, - }); + var logStream = new LogStream(logPath); + cb(null, { + behavior: 'pipe', + log: logStream }); } } @@ -225,7 +224,23 @@ function startDaemon(argv) { if (msg.action === 'NaughtDeploy') { extend(process.env, msg.environment); } - master.send(msg); + if (msg.action === 'NaughtRotate') { + log('NaughtRotate received\n'); + if (naughtLog) { + naughtLog.recreate(); + } + if (stderrLog) { + stderrLog.recreate(); + } + if (stdoutLog) { + stdoutLog.recreate(); + } + //var naughtLog = null; + //var stderrLog = null; + //var stdoutLog = null; + } else { + master.send(msg); + } return null; } else { processSend({event: 'Error', value: 'StillBooting'}); diff --git a/lib/main.js b/lib/main.js index d686bed..498314d 100755 --- a/lib/main.js +++ b/lib/main.js @@ -207,6 +207,43 @@ var cmds = { } } }, + 'rotate': { + help: "rotate logs", + fn: function (argv) { + var options = { + 'worker-count': 0, + 'override-env': 'true', + 'timeout': 'none', + 'cwd': CWD + }; + var arr = chompArgv(options, argv) + , err = arr[0] + , ipcFile = arr[1] || DEFAULT_IPC_FILE; + if (!err && argv.length === 0) { + options['override-env'] = options['override-env'] === 'true'; + options.timeout = parseFloat(options.timeout); + if (isNaN(options.timeout)) options.timeout = null; + + options['worker-count'] = parseInt(options['worker-count'], 10); + if (isNaN(options['worker-count'])) return false; + + var socket = getDaemonMessages(ipcFile, { + ready: function(){ + json_socket.send(socket, { + action: 'NaughtRotate' + }); + process.exit(0); + }, + event: function(msg){ + printDaemonMsg(msg); + } + }); + return true; + } else { + return false; + } + } + }, 'deploy-abort': { help: "naught deploy-abort [ipc-file]\n\n" +