From b74e0be04ba143a0acba7742e5a6f8295a1a2ab4 Mon Sep 17 00:00:00 2001 From: pbca26 Date: Thu, 11 May 2017 08:56:29 +0300 Subject: [PATCH 1/4] app config --- main.js | 10 +++++++-- routes/shepherd.js | 56 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index 7729cf0..f595085 100644 --- a/main.js +++ b/main.js @@ -26,8 +26,13 @@ var express = require('express'), Promise = require('bluebird'); -app.setName('Agama'); -app.setVersion('0.1.6.2e-beta'); +const appBasicInfo = { + name: 'Agama', + version: '0.1.6.2e-beta' +}; + +app.setName(appBasicInfo.name); +app.setVersion(appBasicInfo.version); if (os.platform() === 'linux') { process.env.ELECTRON_RUN_AS_NODE = true; @@ -140,6 +145,7 @@ io.on('connection', function(client) { }); shepherd.setIO(io); // pass sockets object to shepherd router +shepherd.setVar('appBasicInfo', appBasicInfo); module.exports = guiapp; // END GUI App Settings diff --git a/routes/shepherd.js b/routes/shepherd.js index 4cd360f..30a2210 100644 --- a/routes/shepherd.js +++ b/routes/shepherd.js @@ -292,20 +292,38 @@ console.log('iguana dir: ' + komododBin); console.log('iguana bin: ' + komodoDir); // END IGUANA FILES AND CONFIG SETTINGS +// default route shepherd.get('/', function(req, res, next) { res.send('Iguana app server'); }); +/* + * type: GET + * + */ shepherd.get('/appconf', function(req, res, next) { var obj = shepherd.loadLocalConfig(); res.send(obj); }); +/* + * type: GET + * + */ shepherd.get('/sysinfo', function(req, res, next) { var obj = shepherd.SystemInfo(); res.send(obj); }); +/* + * type: GET + * + */ +shepherd.get('/appinfo', function(req, res, next) { + var obj = shepherd.appInfo(); + res.send(obj); +}); + shepherd.dumpCacheBeforeExit = function() { cache.dumpCacheBeforeExit(); } @@ -319,6 +337,10 @@ shepherd.setIO = function(io) { cache.setVar('io', io); }; +shepherd.setVar = function(_name, _body) { + shepherd[_name] = _body; +}; + cache.setVar('iguanaDir', iguanaDir); cache.setVar('appConfig', shepherd.appConfig); @@ -1388,4 +1410,38 @@ shepherd.SystemInfo = function() { return os_data; } +shepherd.SystemInfo = function() { + const os_data = { + 'totalmem_bytes': os.totalmem(), + 'totalmem_readable': formatBytes(os.totalmem()), + 'arch': os.arch(), + 'cpu': os.cpus()[0].model, + 'cpu_cores': os.cpus().length, + 'platform': os.platform(), + 'os_release': os.release(), + 'os_type': os.type() + }; + + return os_data; +} + +shepherd.appInfo = function() { + const sysInfo = shepherd.SystemInfo(); + const releaseInfo = shepherd.appBasicInfo; + const dirs = { + iguanaDir, + iguanaBin, + komodoDir, + komododBin + configLocation: iguanaDir + '/config.json', + cacheLocation: iguanaDir + '/shepherd', + }; + + return { + sysInfo, + releaseInfo, + dirs, + }; +} + module.exports = shepherd; \ No newline at end of file From a14c41f77eefdfdb6fb2909cae0b244e9d300a2b Mon Sep 17 00:00:00 2001 From: Petr Balashov Date: Thu, 11 May 2017 14:31:14 +0200 Subject: [PATCH 2/4] update --- main.js | 2 +- routes/shepherd.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index f595085..6170030 100644 --- a/main.js +++ b/main.js @@ -59,7 +59,7 @@ if (appConfig.killIguanaOnStart) { exec(iguanaGrep, function(error, stdout, stderr) { if (stdout.indexOf('iguana') > -1) { console.log('found another iguana process(es)'); - const pkillCmd = os.platform() === 'win32' ? 'taskkill /f /im iguana.exe' : 'pkill -9 iguana'; + const pkillCmd = os.platform() === 'win32' ? 'taskkill /f /im iguana.exe' : 'pkill -15 iguana'; exec(pkillCmd, function(error, stdout, stderr) { console.log(pkillCmd + ' is issued'); diff --git a/routes/shepherd.js b/routes/shepherd.js index 30a2210..4e2cbfe 100644 --- a/routes/shepherd.js +++ b/routes/shepherd.js @@ -1432,7 +1432,7 @@ shepherd.appInfo = function() { iguanaDir, iguanaBin, komodoDir, - komododBin + komododBin, configLocation: iguanaDir + '/config.json', cacheLocation: iguanaDir + '/shepherd', }; From 5c1f7d24a12354f9f6f1c83cf7df573ab974a988 Mon Sep 17 00:00:00 2001 From: pbca26 Date: Fri, 12 May 2017 09:47:15 +0300 Subject: [PATCH 3/4] app log (wip) --- main.js | 25 +++++++++++++++++++++++-- routes/shepherd.js | 34 +++++++++++++++++++--------------- 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/main.js b/main.js index 6170030..99323ad 100644 --- a/main.js +++ b/main.js @@ -41,8 +41,13 @@ if (os.platform() === 'linux') { // GUI APP settings and starting gui on address http://120.0.0.1:17777 var shepherd = require('./routes/shepherd'), - guiapp = express(), - appConfig = shepherd.loadLocalConfig(); // load app config + guiapp = express(); + +shepherd.writeLog('app info: ' + appBasicInfo.name + ' ' + appBasicInfo.version); + +var appConfig = shepherd.loadLocalConfig(); // load app config + +shepherd.writeLog('app started in ' + (appConfig.dev ? 'dev mode' : ' user mode')); if (appConfig.killIguanaOnStart) { var iguanaGrep; @@ -59,18 +64,22 @@ if (appConfig.killIguanaOnStart) { exec(iguanaGrep, function(error, stdout, stderr) { if (stdout.indexOf('iguana') > -1) { console.log('found another iguana process(es)'); + shepherd.writeLog('found another iguana process(es)'); const pkillCmd = os.platform() === 'win32' ? 'taskkill /f /im iguana.exe' : 'pkill -15 iguana'; exec(pkillCmd, function(error, stdout, stderr) { console.log(pkillCmd + ' is issued'); + shepherd.writeLog(pkillCmd + ' is issued'); if (error !== null) { console.log(pkillCmd + ' exec error: ' + error); + shepherd.writeLog(pkillCmd + ' exec error: ' + error); }; }); } if (error !== null) { console.log(iguanaGrep + ' exec error: ' + error); + shepherd.writeLog(iguanaGrep + ' exec error: ' + error); }; }); } @@ -125,12 +134,14 @@ var server = require('http').createServer(guiapp), server.listen(appConfig.iguanaAppPort, function() { console.log('guiapp and sockets.io are listening on port ' + appConfig.iguanaAppPort + '!'); + shepherd.writeLog('guiapp and sockets.io are listening on port ' + appConfig.iguanaAppPort + '!'); }); io.set('origins', appConfig.dev ? 'http://127.0.0.1:3000' : 'http://127.0.0.1:' + appConfig.iguanaAppPort); // set origin io.on('connection', function(client) { console.log('EDEX GUI is connected...'); + shepherd.writeLog('EDEX GUI is connected...'); client.on('event', function(data) { // listen for client requests console.log(data); @@ -225,6 +236,7 @@ function createLoadingWindow() { // load our index.html (i.e. easyDEX GUI) loadingWindow.loadURL('http://' + appConfig.host + ':' + appConfig.iguanaAppPort + '/gui/'); + shepherd.writeLog('show loading window'); // DEVTOOLS - only for dev purposes - ca333 //loadingWindow.webContents.openDevTools() @@ -335,8 +347,10 @@ function createWindow (status) { // load our index.html (i.e. easyDEX GUI) if (appConfig.edexGuiOnly) { if (appConfig.v2) { + shepherd.writeLog('show edex gui'); mainWindow.loadURL('http://' + appConfig.host + ':' + appConfig.iguanaAppPort + '/gui/EasyDEX-GUI/react/build'); } else { + shepherd.writeLog('show edex gui'); mainWindow.loadURL('http://' + appConfig.host + ':' + appConfig.iguanaAppPort + '/gui/EasyDEX-GUI/'); } } else { @@ -360,6 +374,7 @@ function createWindow (status) { var ConnectToPm2 = function() { return new Promise(function(resolve, reject) { console.log('Closing Main Window...'); + shepherd.writeLog('exiting app...'); shepherd.dumpCacheBeforeExit(); shepherd.quitKomodod(); @@ -370,6 +385,7 @@ function createWindow (status) { pm2.connect(true, function(err) { console.log('connecting to pm2...'); + shepherd.writeLog('connecting to pm2...'); if (err) { console.log(err); @@ -379,6 +395,7 @@ function createWindow (status) { var result = 'Connecting To Pm2: done'; console.log(result); + shepherd.writeLog(result); resolve(result); }) } @@ -386,10 +403,12 @@ function createWindow (status) { var KillPm2 = function() { return new Promise(function(resolve, reject) { console.log('killing to pm2...'); + shepherd.writeLog('killing to pm2...'); pm2.killDaemon(function(err) { pm2.disconnect(); console.log('killed to pm2...'); + shepherd.writeLog('killed to pm2...'); if (err) throw err; @@ -399,6 +418,7 @@ function createWindow (status) { setTimeout(function() { console.log(result); + shepherd.writeLog(result); resolve(result); }, 2000) @@ -457,6 +477,7 @@ app.on('before-quit', function (event) { if (mainWindow === null && loadingWindow != null) { // mainWindow not intitialised and loadingWindow not dereferenced // loading window is still open console.log('before-quit prevented'); + shepherd.writeLog('quit app after loading is done'); closeAppAfterLoading = true; let code = `$('#loading_status_text').html('Preparing to shutdown the wallet.
Please wait while all daemons are closed...')`; loadingWindow.webContents.executeJavaScript(code); diff --git a/routes/shepherd.js b/routes/shepherd.js index 4e2cbfe..fe6f863 100644 --- a/routes/shepherd.js +++ b/routes/shepherd.js @@ -1395,21 +1395,6 @@ function formatBytes(bytes, decimals) { return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; } -shepherd.SystemInfo = function() { - const os_data = { - 'totalmem_bytes': os.totalmem(), - 'totalmem_readble': formatBytes(os.totalmem()), - 'arch': os.arch(), - 'cpu': os.cpus()[0].model, - 'cpu_cores': os.cpus().length, - 'platform': os.platform(), - 'os_release': os.release(), - 'os_type': os.type() - }; - - return os_data; -} - shepherd.SystemInfo = function() { const os_data = { 'totalmem_bytes': os.totalmem(), @@ -1444,4 +1429,23 @@ shepherd.appInfo = function() { }; } +shepherd.writeLog = function(data) { + const logLocation = iguanaDir + '/shepherd'; + const timeFormatted = new Date(Date.now()).toLocaleString().replace('AM', '').replace('PM', ''); + + if (fs.existsSync(logLocation + '/agamalog.txt')) { + fs.appendFile(logLocation + '/agamalog.txt', new Date(Date.now()).toLocaleString() + ' ' + data + '\r\n', function (err) { + if (err) { + console.log('error writing log file'); + } + }); + } else { + fs.writeFile(logLocation + '/agamalog.txt', new Date(Date.now()).toLocaleString() + ' ' + data + '\r\n', function (err) { + if (err) { + console.log('error writing log file'); + } + }); + } +} + module.exports = shepherd; \ No newline at end of file From 26400cf35c90773c0dc0025fc25a2e23df40f2cb Mon Sep 17 00:00:00 2001 From: pbca26 Date: Fri, 12 May 2017 20:12:24 +0300 Subject: [PATCH 4/4] app log #2 --- main.js | 33 ++++++++++- routes/shepherd.js | 137 ++++++++++++++++++++++++++++++++++++--------- 2 files changed, 142 insertions(+), 28 deletions(-) diff --git a/main.js b/main.js index 99323ad..84db492 100644 --- a/main.js +++ b/main.js @@ -43,7 +43,16 @@ if (os.platform() === 'linux') { var shepherd = require('./routes/shepherd'), guiapp = express(); +shepherd.writeLog('app init'); shepherd.writeLog('app info: ' + appBasicInfo.name + ' ' + appBasicInfo.version); +shepherd.writeLog('sys info:'); +shepherd.writeLog('totalmem_readable: ' + formatBytes(os.totalmem())); +shepherd.writeLog('arch: ' + os.arch()); +shepherd.writeLog('cpu: ' + os.cpus()[0].model); +shepherd.writeLog('cpu_cores: ' + os.cpus().length); +shepherd.writeLog('platform: ' + os.platform()); +shepherd.writeLog('os_release: ' + os.release()); +shepherd.writeLog('os_type: ' + os.type()); var appConfig = shepherd.loadLocalConfig(); // load app config @@ -508,4 +517,26 @@ app.on('activate', function () { if (mainWindow === null) { // createWindow('open'); } -}); \ No newline at end of file +}); + +function formatBytes(bytes, decimals) { + if (bytes === 0) + return '0 Bytes'; + + var k = 1000, + dm = decimals + 1 || 3, + sizes = [ + 'Bytes', + 'KB', + 'MB', + 'GB', + 'TB', + 'PB', + 'EB', + 'ZB', + 'YB' + ], + i = Math.floor(Math.log(bytes) / Math.log(k)); + + return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; +} \ No newline at end of file diff --git a/routes/shepherd.js b/routes/shepherd.js index fe6f863..5d77f25 100644 --- a/routes/shepherd.js +++ b/routes/shepherd.js @@ -67,8 +67,7 @@ if (os.platform() === 'win32') { iguanaConfsDir = process.env.APPDATA + '/iguana/confs'; iguanaConfsDir = path.normalize(iguanaConfsDir); iguanaIcon = path.join(__dirname, '/assets/icons/agama_icons/agama_app_icon.ico'), - iguanaConfsDirSrc = path.normalize(iguanaConfsDirSrc); - + iguanaConfsDirSrc = path.normalize(iguanaConfsDirSrc), komododBin = path.join(__dirname, '../assets/bin/win64/komodod.exe'), komododBin = path.normalize(komododBin), komodocliBin = path.join(__dirname, '../assets/bin/win64/komodo-cli.exe'), @@ -99,6 +98,25 @@ shepherd.appConfig = { } }; +shepherd.writeLog = function(data) { + const logLocation = iguanaDir + '/shepherd'; + const timeFormatted = new Date(Date.now()).toLocaleString().replace('AM', '').replace('PM', ''); + + if (fs.existsSync(logLocation + '/agamalog.txt')) { + fs.appendFile(logLocation + '/agamalog.txt', new Date(Date.now()).toLocaleString() + ' ' + data + '\r\n', function (err) { + if (err) { + console.log('error writing log file'); + } + }); + } else { + fs.writeFile(logLocation + '/agamalog.txt', new Date(Date.now()).toLocaleString() + ' ' + data + '\r\n', function (err) { + if (err) { + console.log('error writing log file'); + } + }); + } +} + shepherd.get('/coinslist', function(req, res, next) { if (fs.existsSync(iguanaDir + '/shepherd/coinslist.json')) { fs.readFile(iguanaDir + '/shepherd/coinslist.json', 'utf8', function (err, data) { @@ -207,6 +225,7 @@ shepherd.saveLocalAppConf = function(appSettings) { setTimeout(function() { console.log(result); + shepherd.writeLog(result); resolve(result); }, 1000); }); @@ -230,6 +249,7 @@ shepherd.saveLocalAppConf = function(appSettings) { setTimeout(function() { console.log(result); console.log('app conf.json file is created successfully at: ' + iguanaConfsDir); + shepherd.writeLog('app conf.json file is created successfully at: ' + iguanaConfsDir); resolve(result); }, 2000); }); @@ -243,6 +263,7 @@ shepherd.loadLocalConfig = function() { if (fs.existsSync(iguanaDir + '/config.json')) { var localAppConfig = fs.readFileSync(iguanaDir + '/config.json', 'utf8'); console.log('app config set from local file'); + shepherd.writeLog('app config set from local file'); // find diff between local and hardcoded configs // append diff to local config @@ -266,6 +287,9 @@ shepherd.loadLocalConfig = function() { console.log('config diff is found, updating local config'); console.log('config diff:'); console.log(compareConfigs); + shepherd.writeLog('aconfig diff is found, updating local config'); + shepherd.writeLog('config diff:'); + shepherd.writeLog(compareConfigs); shepherd.saveLocalAppConf(newConfig); return newConfig; @@ -277,6 +301,7 @@ shepherd.loadLocalConfig = function() { } } else { console.log('local config file is not found!'); + shepherd.writeLog('local config file is not found!'); shepherd.saveLocalAppConf(shepherd.appConfig); return shepherd.appConfig; @@ -290,6 +315,10 @@ console.log('iguana bin: ' + iguanaBin); console.log('--------------------------') console.log('iguana dir: ' + komododBin); console.log('iguana bin: ' + komodoDir); +shepherd.writeLog('iguana dir: ' + iguanaDir); +shepherd.writeLog('iguana bin: ' + iguanaBin); +shepherd.writeLog('iguana dir: ' + komododBin); +shepherd.writeLog('iguana bin: ' + komodoDir); // END IGUANA FILES AND CONFIG SETTINGS // default route @@ -429,6 +458,7 @@ shepherd.get('/forks/restart', function(req, res, next) { 'msg': 'success', 'result': 'restarted' }; + shepherd.writeLog('iguana fork pmid ' + _pmid + ' restarted'); res.end(JSON.stringify(successObj)); }); @@ -458,6 +488,8 @@ shepherd.get('/forks/stop', function(req, res, next) { 'result': 'stopped' }; + shepherd.writeLog('iguana fork pmid ' + _pmid + ' stopped'); + res.end(JSON.stringify(successObj)); }); }); @@ -493,6 +525,8 @@ shepherd.post('/forks', function(req, res, next) { } console.log('iguana core fork port ' + _port); + shepherd.writeLog('iguana core fork port ' + _port); + pm2.start({ script: iguanaBin, // path to binary name: 'IGUANA ' + _port + ' ' + mode + ' / ' + coin, @@ -528,6 +562,7 @@ shepherd.post('/forks', function(req, res, next) { pm2.disconnect(); // Disconnect from PM2 if (err) { throw err; + shepherd.writeLog('iguana fork error: ' + err); console.log('iguana fork error: ' + err); } }); @@ -647,6 +682,7 @@ shepherd.post('/herd', function(req, res) { portscanner.checkPortStatus(_port, '127.0.0.1', function(error, status) { // Status is 'open' if currently in use or 'closed' if available if (status === 'closed') { + shepherd.writeLog('komodod service start error at port ' + _port + ', reason: port is closed'); cache.io.emit('service', { 'komodod': { 'error': 'start error' @@ -675,6 +711,8 @@ shepherd.post('/herdlist', function(req, res) { console.log(list[0].pm2_env.status) // print status of IGUANA proc console.log(list[0].pid) // print pid of IGUANA proc + shepherd.writeLog(list[0].pm2_env.status); + shepherd.writeLog(list[0].pid); var obj = { 'herdname': req.body.herdname, @@ -734,6 +772,9 @@ shepherd.post('/getconf', function(req, res) { var confpath = getConf(req.body.chain); console.log('got conf path is:'); console.log(confpath); + shepherd.writeLog('got conf path is:'); + shepherd.writeLog(confpath); + var obj = { 'msg': 'success', 'result': confpath @@ -824,7 +865,7 @@ shepherd.get('/kick', function(req, res, next) { 'type': 'folder' } ], - 'brutal': [ // delete coin related data + 'brutal': [ // delete all coin related data { 'name': 'DB/[coin]', 'type': 'folder' @@ -890,6 +931,7 @@ shepherd.readDebugLog = function(fileLocation, lastNLines) { _fs.access(fileLocation, fs.constants.R_OK, function(err) { if (err) { console.log('error reading ' + fileLocation); + shepherd.writeLog('error reading ' + fileLocation); reject('readDebugLog error: ' + err); } else { console.log('reading ' + fileLocation); @@ -918,6 +960,8 @@ function herder(flock, data) { if (flock === 'iguana') { console.log('iguana flock selected...'); console.log('selected data: ' + data); + shepherd.writeLog('iguana flock selected...'); + shepherd.writeLog('selected data: ' + data); // MAKE SURE IGUANA DIR IS THERE FOR USER mkdirp(iguanaDir, function(err) { @@ -949,6 +993,7 @@ function herder(flock, data) { return console.error(err); console.log('confs files copied successfully at: ' + iguanaConfsDir); + shepherd.writeLog('confs files copied successfully at: ' + iguanaConfsDir); }); pm2.connect(true,function(err) { //start up pm2 god @@ -958,6 +1003,8 @@ function herder(flock, data) { } console.log('iguana core port ' + shepherd.appConfig.iguanaCorePort); + shepherd.writeLog('iguana core port ' + shepherd.appConfig.iguanaCorePort); + pm2.start({ script: iguanaBin, // path to binary name: 'IGUANA', @@ -971,9 +1018,12 @@ function herder(flock, data) { 'pid': apps[0].process.pid, 'pmid': apps[0].pm2_env.pm_id }; + shepherd.writeLog('iguana core started at port ' + shepherd.appConfig.iguanaCorePort + ' pid ' + apps[0].process.pid); + pm2.disconnect(); // Disconnect from PM2 if (err) { throw err; + shepherd.writeLog('iguana core port ' + shepherd.appConfig.iguanaCorePort); console.log('iguana fork error: ' + err); } }); @@ -984,19 +1034,24 @@ function herder(flock, data) { var kmdDebugLogLocation = ( data.ac_name ? komodoDir + '/' + data.ac_name : komodoDir ) + '/debug.log'; console.log('komodod flock selected...'); console.log('selected data: ' + data); + shepherd.writeLog('komodod flock selected...'); + shepherd.writeLog('selected data: ' + data); // truncate debug.log try { _fs.access(kmdDebugLogLocation, fs.constants.R_OK, function(err) { if (err) { console.log('error accessing ' + kmdDebugLogLocation); + shepherd.writeLog('error accessing ' + kmdDebugLogLocation); } else { console.log('truncate ' + kmdDebugLogLocation); + shepherd.writeLog('truncate ' + kmdDebugLogLocation); fs.unlink(kmdDebugLogLocation); } }); } catch(e) { console.log('komodod debug.log access err: ' + e); + shepherd.writeLog('komodod debug.log access err: ' + e); } // get komodod instance port @@ -1010,11 +1065,17 @@ function herder(flock, data) { // start komodod via exec if (data.ac_name === 'komodod') { console.log('exec' + komododBin + ' ' + data.ac_options.join(' ')); + shepherd.writeLog('exec' + komododBin + ' ' + data.ac_options.join(' ')); + exec(komododBin + ' ' + data.ac_options.join(' '), function(error, stdout, stderr) { - console.log('stdout: ' + stdout) - console.log('stderr: ' + stderr) + console.log('stdout: ' + stdout); + console.log('stderr: ' + stderr); + shepherd.writeLog('stdout: ' + stdout); + shepherd.writeLog('stderr: ' + stderr); + if (error !== null) { console.log('exec error: ' + error) + shepherd.writeLog('exec error: ' + error); } }); } else { @@ -1031,6 +1092,8 @@ function herder(flock, data) { cwd: komodoDir, args: data.ac_options }, function(err, apps) { + shepherd.writeLog('komodod fork started ' + data.ac_name + ' ' + JSON.stringify(data.ac_options)); + pm2.disconnect(); // Disconnect from PM2 if (err) throw err; @@ -1039,10 +1102,12 @@ function herder(flock, data) { } } else { console.log('port ' + _port + ' (' + data.ac_name + ') is already in use'); + shepherd.writeLog('port ' + _port + ' (' + data.ac_name + ') is already in use'); } }); } catch(e) { console.log('failed to start komodod err: ' + e); + shepherd.writeLog('failed to start komodod err: ' + e); } } @@ -1050,6 +1115,8 @@ function herder(flock, data) { var kmdDebugLogLocation = zcashDir + '/debug.log'; console.log('zcashd flock selected...'); console.log('selected data: ' + data); + shepherd.writeLog('zcashd flock selected...'); + shepherd.writeLog('selected data: ' + data); pm2.connect(true, function(err) { // start up pm2 god if (err) { @@ -1064,6 +1131,8 @@ function herder(flock, data) { cwd: zcashDir, args: data.ac_options }, function(err, apps) { + shepherd.writeLog('zcashd fork started ' + data.ac_name + ' ' + JSON.stringify(data.ac_options)); + pm2.disconnect(); // Disconnect from PM2 if (err) throw err; @@ -1071,6 +1140,7 @@ function herder(flock, data) { }); } + // deprecated, to be removed if (flock === 'corsproxy') { console.log('corsproxy flock selected...'); console.log('selected data: ' + data); @@ -1100,12 +1170,16 @@ function slayer(flock) { pm2.delete(flock, function(err, ret) { pm2.disconnect(); + shepherd.writeLog('deleting flock ' + flock); + shepherd.writeLog(ret); + console.log(ret); }); } function setConf(flock) { console.log(flock); + shepherd.writeLog('setconf ' + flock); if (os.platform() === 'darwin') { var komodoDir = process.env.HOME + '/Library/Application Support/Komodo', @@ -1143,6 +1217,7 @@ function setConf(flock) { } console.log(DaemonConfPath); + shepherd.writeLog('setconf ' + DaemonConfPath); var CheckFileExists = function() { return new Promise(function(resolve, reject) { @@ -1154,6 +1229,8 @@ function setConf(flock) { setTimeout(function() { console.log(result); + shepherd.writeLog('setconf ' + result); + resolve(result); }, 2000); }); @@ -1167,6 +1244,8 @@ function setConf(flock) { setTimeout(function() { console.log(result); + shepherd.writeLog('setconf ' + result); + resolve(result); }, 1000); }); @@ -1178,6 +1257,7 @@ function setConf(flock) { fs.readFile(DaemonConfPath, 'utf8', function(err, data) { if (err) { + shepherd.writeLog('setconf error ' + err); return console.log(err); } @@ -1191,7 +1271,9 @@ function setConf(flock) { fsnode.chmodSync(DaemonConfPath, '0666'); setTimeout(function() { + shepherd.writeLog('setconf ' + result); console.log(result); + resolve(result); }, 2000); }); @@ -1208,14 +1290,18 @@ function setConf(flock) { if (status[0].hasOwnProperty('rpcuser')) { console.log('rpcuser: OK'); + shepherd.writeLog('rpcuser: OK'); } else { - console.log('rpcuser: NOT FOUND'); var randomstring = md5(Math.random() * Math.random() * 999); + console.log('rpcuser: NOT FOUND'); + shepherd.writeLog('rpcuser: NOT FOUND'); + fs.appendFile(DaemonConfPath, '\nrpcuser=user' + randomstring.substring(0, 16), (err) => { if (err) throw err; console.log('rpcuser: ADDED'); + shepherd.writeLog('rpcuser: ADDED'); }); } @@ -1229,14 +1315,18 @@ function setConf(flock) { if (status[0].hasOwnProperty('rpcpassword')) { console.log('rpcpassword: OK'); + shepherd.writeLog('rpcpassword: OK'); } else { - console.log('rpcpassword: NOT FOUND'); var randomstring = md5(Math.random() * Math.random() * 999); + console.log('rpcpassword: NOT FOUND'); + shepherd.writeLog('rpcpassword: NOT FOUND'); + fs.appendFile(DaemonConfPath, '\nrpcpassword=' + randomstring, (err) => { if (err) throw err; console.log('rpcpassword: ADDED'); + shepherd.writeLog('rpcpassword: ADDED'); }); } @@ -1250,12 +1340,16 @@ function setConf(flock) { if (status[0].hasOwnProperty('server')) { console.log('server: OK'); + shepherd.writeLog('server: OK'); } else { console.log('server: NOT FOUND'); + shepherd.writeLog('server: NOT FOUND'); + fs.appendFile(DaemonConfPath, '\nserver=1', (err) => { if (err) throw err; console.log('server: ADDED'); + shepherd.writeLog('server: ADDED'); }); } @@ -1269,6 +1363,7 @@ function setConf(flock) { if (status[0].hasOwnProperty('addnode')) { console.log('addnode: OK'); + shepherd.writeLog('addnode: OK'); } else { console.log('addnode: NOT FOUND') fs.appendFile(DaemonConfPath, @@ -1282,6 +1377,7 @@ function setConf(flock) { if (err) throw err; console.log('addnode: ADDED'); + shepherd.writeLog('addnode: ADDED'); }); } @@ -1299,6 +1395,8 @@ function setConf(flock) { setTimeout(function() { console.log(result); + shepherd.writeLog('checkconf addnode ' + result); + resolve(result); }, 2000); }); @@ -1312,6 +1410,8 @@ function setConf(flock) { setTimeout(function() { console.log(result); + shepherd.writeLog('MakeConfReadOnly ' + result); + resolve(result); }, 1000); }); @@ -1332,6 +1432,7 @@ function getConf(flock) { DaemonConfPath = ''; console.log(flock); + shepherd.writeLog('getconf flock: ' + flock); if (os.platform() === 'darwin') { komodoDir = process.env.HOME + '/Library/Application Support/Komodo'; @@ -1369,12 +1470,13 @@ function getConf(flock) { } } + shepherd.writeLog('getconf path: ' + DaemonConfPath); console.log(DaemonConfPath); return DaemonConfPath; } function formatBytes(bytes, decimals) { - if (bytes == 0) + if (bytes === 0) return '0 Bytes'; var k = 1000, @@ -1429,23 +1531,4 @@ shepherd.appInfo = function() { }; } -shepherd.writeLog = function(data) { - const logLocation = iguanaDir + '/shepherd'; - const timeFormatted = new Date(Date.now()).toLocaleString().replace('AM', '').replace('PM', ''); - - if (fs.existsSync(logLocation + '/agamalog.txt')) { - fs.appendFile(logLocation + '/agamalog.txt', new Date(Date.now()).toLocaleString() + ' ' + data + '\r\n', function (err) { - if (err) { - console.log('error writing log file'); - } - }); - } else { - fs.writeFile(logLocation + '/agamalog.txt', new Date(Date.now()).toLocaleString() + ' ' + data + '\r\n', function (err) { - if (err) { - console.log('error writing log file'); - } - }); - } -} - module.exports = shepherd; \ No newline at end of file