Browse Source

Merge pull request #98 from pbca26/master

cache, forks
all-modes
pbca26 8 years ago
committed by GitHub
parent
commit
77888c6418
  1. BIN
      assets/bin/osx/iguana
  2. BIN
      assets/bin/osx/komodo-cli
  3. BIN
      assets/bin/osx/komodod
  4. 0
      assets/bin/osx/libgcc_s.1.dylib
  5. 0
      assets/bin/osx/libgomp.1.dylib
  6. 0
      assets/bin/osx/libstdc++.6.dylib
  7. 6
      gui/init.js
  8. 34
      gui/loading.js
  9. 37
      main.js
  10. 30
      private/kmdcli.js
  11. 22
      routes/cache.js
  12. 96
      routes/shepherd.js

BIN
assets/bin/osx/iguana

Binary file not shown.

BIN
assets/bin/osx/komodo-cli

Binary file not shown.

BIN
assets/bin/osx/komodod

Binary file not shown.

0
assets/bin/osx/libgcc_s.1.dylib

0
assets/bin/osx/libgomp.1.dylib

0
assets/bin/osx/libstdc++.6.dylib

6
gui/init.js

@ -15,6 +15,11 @@ $(document).ready(function() {
if (appConf && !appConf.manualIguanaStart) { if (appConf && !appConf.manualIguanaStart) {
StartIguana(); StartIguana();
} }
/*if (appConf && appConf.forks && appConf.forks.basilisk) {
setTimeout(function() {
StartBasiliskInstance();
}, 4000);
}*/
var portcheck; var portcheck;
@ -25,7 +30,6 @@ $(document).ready(function() {
if (result !== 'error') { if (result !== 'error') {
stopcheck(); stopcheck();
StartIguana_Cache();
$('#loading_status_text').text('Connecting to Basilisk Network...'); $('#loading_status_text').text('Connecting to Basilisk Network...');
EDEX_DEXgetinfoAll(appConf.skipBasiliskNetworkCheck, appConf.minNotaries); EDEX_DEXgetinfoAll(appConf.skipBasiliskNetworkCheck, appConf.minNotaries);
} }

34
gui/loading.js

@ -65,18 +65,28 @@ function StartIguana() {
}); });
} }
function StartIguana_Cache() { function StartBasiliskInstance() {
ajax_data = { 'name': 'IGUANA_CACHE' }; var ajax_data = { 'name': 'basilisk'};
var start_iguana_cache= $.ajax({
type: 'POST', console.log(ajax_data);
data: JSON.stringify(ajax_data), $.ajax({
url: 'http://127.0.0.1:17777/shepherd/forks', type: 'POST',
contentType: 'application/json', // send as JSON data: JSON.stringify(ajax_data),
}) url: 'http://127.0.0.1:17777/shepherd/forks',
start_iguana_cache.done(function(data) { dataType: 'xml/html/script/json', // expected format for response
_data = JSON.parse(data); contentType: 'application/json', // send as JSON
console.log(_data.result); success: function(data, textStatus, jqXHR) {
sessionStorage.setItem('IguanaCachePort', _data.result); var AjaxOutputData = JSON.parse(data);
console.log('== Shepherd Forks Data OutPut ==');
console.log(AjaxOutputData);
},
error: function(xhr, textStatus, error) {
console.log(xhr.statusText);
if ( xhr.readyState == 0 ) {
}
console.log(textStatus);
console.log(error);
}
}); });
} }

37
main.js

@ -21,7 +21,7 @@ var express = require('express'),
pm2 = require('pm2'), pm2 = require('pm2'),
cluster = require('cluster'), cluster = require('cluster'),
numCPUs = require('os').cpus().length, numCPUs = require('os').cpus().length,
coincli = require('./private/coincli.js'), kmdcli = require('./private/kmdcli.js'),
ipc = require('electron').ipcMain; ipc = require('electron').ipcMain;
Promise = require('bluebird'); Promise = require('bluebird');
@ -240,35 +240,14 @@ function createLoadingWindow() {
} }
}); });
/* ipc.on('invokeAction', function(event, data){
* var ipc = require('electron').ipcRenderer; //console.log(data);
* ipc.once('coincliReply', function(event, response){ kmdcli.command(data, function(err, command) {
* console.log(response); //console.log(command);
* }); var result = command;
* ipc.send('InvokeCoinCliAction', '{"cli":"kmd","command":"getinfo"}'); event.sender.send('kmdcliReply', result);
*/
ipc.on('InvokeCoinCliAction', function(event, data){
console.log(JSON.stringify(data));
console.log(data.cli)
console.log(data.command)
if (data.cli == 'kmd') {
coincli.kmdcommand(data.command, function(err, command) {
//console.log(command);
var result = command;
event.sender.send('coincliReply', result);
});
}
if (data.cli == 'zec') {
coincli.zeccommand(data.command, function(err, command) {
//console.log(command);
var result = command;
event.sender.send('coincliReply', result);
});
}
}); });
});
//ca333 todo - add os detector to use correct binary - so we can use the same bundle on ALL OS platforms //ca333 todo - add os detector to use correct binary - so we can use the same bundle on ALL OS platforms
/*if (os.platform() === 'win32') { /*if (os.platform() === 'win32') {
process.chdir(iguanaDir); process.chdir(iguanaDir);

30
private/coincli.js → private/kmdcli.js

@ -50,13 +50,12 @@ console.log(komodocliBin)
* The **komodo-cli** command is used to get komodo api calls answer. * The **komodo-cli** command is used to get komodo api calls answer.
* *
* @private * @private
* @category coincli * @category kmdcli
* *
*/ */
var coincli = module.exports = { var kmdcli = module.exports = {
exec: child_process.exec, exec: child_process.exec,
kmdcommand: kmdcommand, command: command
zeccommand: zeccommand
}; };
/** /**
@ -64,11 +63,11 @@ var coincli = module.exports = {
* *
* @private * @private
* @static * @static
* @category coincli * @category kmdcli
* @param {function} callback The callback function. * @param {function} callback The callback function.
* *
*/ */
function parse_coincli_commands(callback) { function parse_kmdcli_commands(callback) {
return function(error, stdout, stderr) { return function(error, stdout, stderr) {
if (error) callback(error, stderr); if (error) callback(error, stderr);
else callback(error, stdout); else callback(error, stdout);
@ -81,13 +80,13 @@ function parse_coincli_commands(callback) {
* *
* @private * @private
* @static * @static
* @category coincli * @category kmdcli
* @param {function} callback The callback function. * @param {function} callback The callback function.
* @example * @example
* *
* var coincli = require('./coincli'); * var kmdcli = require('./kmdcli');
* *
* coincli.kmdcommand('getinfo', function(err, command) { * kmdcli.command('getinfo', function(err, command) {
* console.log(command); * console.log(command);
* }); * });
* *
@ -119,18 +118,9 @@ function parse_coincli_commands(callback) {
* } * }
* *
*/ */
function command(kmd_command, callback) {
function kmdcommand(kmd_command, callback) {
if (callback) { if (callback) {
return this.exec(komodocliBin + " " + kmd_command, return this.exec(komodocliBin + " " + kmd_command,
parse_coincli_commands(callback)); parse_kmdcli_commands(callback));
}
}
function zeccommand(zec_command, callback) {
if (callback) {
return this.exec(zcashcliBin + " " + zec_command,
parse_coincli_commands(callback));
} }
} }

22
routes/cache.js

@ -22,15 +22,12 @@ cache.get = function(req, res, next) {
res.end(JSON.stringify(errorObj)); res.end(JSON.stringify(errorObj));
} else { } else {
//var parsedJSON = 'JPARSE';//'JSON parse error';
try { try {
var parsedJSON = JSON.parse(data); var parsedJSON = JSON.parse(data),
successObj = {
var successObj = { 'msg': 'success',
'msg': 'success', 'result': parsedJSON
'result': parsedJSON };
};
res.end(JSON.stringify(successObj)); res.end(JSON.stringify(successObj));
} catch (e) { } catch (e) {
@ -340,7 +337,7 @@ cache.one = function(req, res, next) {
} }
}); });
function execDEXRequests(address, coin) { function execDEXRequests(coin, address) {
let dexUrls = { let dexUrls = {
'listunspent': 'http://' + cache.appConfig.host + ':' + iguanaCorePort + '/api/dex/listunspent?userpass=' + sessionKey + '&symbol=' + coin + '&address=' + address, 'listunspent': 'http://' + cache.appConfig.host + ':' + iguanaCorePort + '/api/dex/listunspent?userpass=' + sessionKey + '&symbol=' + coin + '&address=' + address,
'listtransactions': 'http://' + cache.appConfig.host + ':' + iguanaCorePort + '/api/dex/listtransactions?userpass=' + sessionKey + '&count=100&skip=0&symbol=' + coin + '&address=' + address, 'listtransactions': 'http://' + cache.appConfig.host + ':' + iguanaCorePort + '/api/dex/listtransactions?userpass=' + sessionKey + '&count=100&skip=0&symbol=' + coin + '&address=' + address,
@ -359,6 +356,7 @@ cache.one = function(req, res, next) {
} }
console.log(coin + ' address ' + address); console.log(coin + ' address ' + address);
if (!outObj.basilisk[coin][address]) { if (!outObj.basilisk[coin][address]) {
outObj.basilisk[coin][address] = {}; outObj.basilisk[coin][address] = {};
writeCache(); writeCache();
@ -540,7 +538,7 @@ cache.one = function(req, res, next) {
} }
}); });
async.each(outObj.basilisk[coin].addresses, function(address) { async.each(outObj.basilisk[coin].addresses, function(address) {
execDEXRequests(address, coin); execDEXRequests(coin, address);
}); });
} }
@ -548,7 +546,7 @@ cache.one = function(req, res, next) {
if (addresses) { if (addresses) {
parseAddresses(coin, addresses); parseAddresses(coin, addresses);
} else { } else {
var tempUrl = 'http://' + cache.appConfig.host + ':' + iguanaCorePort + '/api/bitcoinrpc/getaddressesbyaccount?userpass=' + sessionKey + '&coin=' + coin + '&account=*'; var tempUrl = 'http://' + cache.appConfig.host + ':' + cache.appConfig.iguanaCorePort /*iguanaCorePort*/ + '/api/bitcoinrpc/getaddressesbyaccount?userpass=' + sessionKey + '&coin=' + coin + '&account=*';
request({ request({
url: mock ? 'http://localhost:17777/shepherd/mock?url=' + tempUrl : tempUrl, url: mock ? 'http://localhost:17777/shepherd/mock?url=' + tempUrl : tempUrl,
method: 'GET' method: 'GET'
@ -579,7 +577,7 @@ cache.one = function(req, res, next) {
}); });
if (coin === 'all') { if (coin === 'all') {
var tempUrl = 'http://' + cache.appConfig.host + ':' + iguanaCorePort + '/api/InstantDEX/allcoins?userpass=' + sessionKey; var tempUrl = 'http://' + cache.appConfig.host + ':' + /*iguanaCorePort*/ cache.appConfig.iguanaCorePort + '/api/InstantDEX/allcoins?userpass=' + sessionKey;
request({ request({
url: mock ? 'http://localhost:17777/shepherd/mock?url=' + tempUrl : tempUrl, url: mock ? 'http://localhost:17777/shepherd/mock?url=' + tempUrl : tempUrl,
method: 'GET' method: 'GET'

96
routes/shepherd.js

@ -23,7 +23,7 @@ Promise = require('bluebird');
const fixPath = require('fix-path'); const fixPath = require('fix-path');
var ps = require('ps-node'), var ps = require('ps-node'),
setconf = require('../private/setconf.js'), setconf = require('../private/setconf.js'),
coincli = require('../private/coincli.js'), kmdcli = require('../private/kmdcli.js'),
assetChainPorts = require('./ports.js') assetChainPorts = require('./ports.js')
shepherd = express.Router(), shepherd = express.Router(),
iguanaInstanceRegistry = {}; iguanaInstanceRegistry = {};
@ -91,13 +91,17 @@ shepherd.appConfig = {
}, },
"killIguanaOnStart": true, "killIguanaOnStart": true,
"dev": false, "dev": false,
"v2": false "v2": false,
"forks": {
"basilisk": false,
"all": false
}
}; };
shepherd.quitKomodod = function() { shepherd.quitKomodod = function(chain) {
// exit komodod gracefully // exit komodod gracefully
console.log('exec ' + komodocliBin + ' stop'); console.log('exec ' + komodocliBin + (chain ? ' ac_name=' + chain : '') + ' stop');
exec(komodocliBin + ' stop', function(error, stdout, stderr) { exec(komodocliBin + (chain ? ' ac_name=' + chain : '') + ' stop', function(error, stdout, stderr) {
console.log('stdout: ' + stdout) console.log('stdout: ' + stdout)
console.log('stderr: ' + stderr) console.log('stderr: ' + stderr)
if (error !== null) { if (error !== null) {
@ -228,6 +232,62 @@ shepherd.setIO = function(io) {
cache.setVar('iguanaDir', iguanaDir); cache.setVar('iguanaDir', iguanaDir);
cache.setVar('appConfig', shepherd.appConfig); cache.setVar('appConfig', shepherd.appConfig);
/*
* type: GET
*
*/
shepherd.get('/forks/restart', function(req, res, next) {
var _pmid = req.query.pmid;
pm2.connect(function(err) {
if (err) {
console.error(err);
}
pm2.restart(_pmid, function(err, ret) {
if (err) {
console.error(err);
}
pm2.disconnect();
var successObj = {
'msg': 'success',
'result': 'restarted'
};
res.end(JSON.stringify(successObj));
});
});
});
/*
* type: GET
*
*/
shepherd.get('/forks/stop', function(req, res, next) {
var _pmid = req.query.pmid;
pm2.connect(function(err) {
if (err) {
console.error(err);
}
pm2.stop(_pmid, function(err, ret) {
if (err) {
console.error(err);
}
pm2.disconnect();
var successObj = {
'msg': 'success',
'result': 'stopped'
};
res.end(JSON.stringify(successObj));
});
});
});
/* /*
* type: GET * type: GET
* *
@ -246,7 +306,8 @@ shepherd.get('/forks', function(req, res, next) {
* params: name * params: name
*/ */
shepherd.post('/forks', function(req, res, next) { shepherd.post('/forks', function(req, res, next) {
const name = req.body.name; const mode = req.body.mode,
coin = req.body.coin,
port = shepherd.appConfig.iguanaCorePort; port = shepherd.appConfig.iguanaCorePort;
portscanner.findAPortNotInUse(port, port + 100, '127.0.0.1', function(error, _port) { portscanner.findAPortNotInUse(port, port + 100, '127.0.0.1', function(error, _port) {
@ -259,12 +320,18 @@ shepherd.post('/forks', function(req, res, next) {
console.log('iguana core fork port ' + _port); console.log('iguana core fork port ' + _port);
pm2.start({ pm2.start({
script: iguanaBin, // path to binary script: iguanaBin, // path to binary
name: 'IGUANA ' + _port + ' ' + name, name: 'IGUANA ' + _port + ' ' + mode + ' / ' + coin,
exec_mode : 'fork', exec_mode : 'fork',
args: ['-port=' + _port], args: ['-port=' + _port],
cwd: iguanaDir //set correct iguana directory cwd: iguanaDir //set correct iguana directory
}, function(err, apps) { }, function(err, apps) {
iguanaInstanceRegistry[_port] = name; iguanaInstanceRegistry[_port] = {
'mode': mode,
'coin': coin,
'pid': apps[0].process.pid,
'pmid': apps[0].pm2_env.pm_id
};
cache.setVar('iguanaInstances', iguanaInstanceRegistry);
var successObj = { var successObj = {
'msg': 'success', 'msg': 'success',
@ -311,7 +378,7 @@ shepherd.delete('/groom', function(req, res, next) {
* type: POST * type: POST
* params: filename, payload * params: filename, payload
*/ */
shepherd.post('/groom', function(req, res) { shepherd.post('/groom', function(req, res, next) {
cache.groomPost(req, res, next); cache.groomPost(req, res, next);
}); });
@ -713,7 +780,12 @@ function herder(flock, data) {
args: ['-port=' + shepherd.appConfig.iguanaCorePort], args: ['-port=' + shepherd.appConfig.iguanaCorePort],
cwd: iguanaDir //set correct iguana directory cwd: iguanaDir //set correct iguana directory
}, function(err, apps) { }, function(err, apps) {
iguanaInstanceRegistry[shepherd.appConfig.iguanaCorePort] = 'main'; iguanaInstanceRegistry[shepherd.appConfig.iguanaCorePort] = {
'mode': 'main',
'coin': 'none',
'pid': apps[0].process.pid,
'pmid': apps[0].pm2_env.pm_id
};
pm2.disconnect(); // Disconnect from PM2 pm2.disconnect(); // Disconnect from PM2
if (err) { if (err) {
throw err; throw err;
@ -1071,8 +1143,8 @@ function setConf(flock) {
function getConf(flock) { function getConf(flock) {
var komodoDir = '', var komodoDir = '',
ZcashDir = '', ZcashDir = '',
DaemonConfPath = ''; DaemonConfPath = '';
console.log(flock); console.log(flock);

Loading…
Cancel
Save