diff --git a/libs/childNode.js b/libs/childNode.js index b5b1be9f..91c110ed 100644 --- a/libs/childNode.js +++ b/libs/childNode.js @@ -13,9 +13,6 @@ module.exports = function(s,config,lang,app,io){ onWebSocketData, onDataConnectionDisconnect, } = require('./childNode/utils.js')(s,config,lang,app,io) - const { - onDataFromMasterNode, - } = require('./childNode/childUtils.js')(s,config,lang,app,io) s.childNodes = {}; const childNodesConnectionIndex = {}; const childNodeHTTP = express(); @@ -38,15 +35,14 @@ module.exports = function(s,config,lang,app,io){ console.log(lang.Shinobi+' - CHILD NODE SERVER : '+childNodeBindIP + ':' + config.childNodes.port); }); s.debugLog('childNodeWebsocket.attach(childNodeServer)') - //send data to child node function (experimental) - s.cx = function(data,connectionId,x){ - if(!z.mid && !z.d){ - console.error('Missing ID') - }else if(x){ + //send data to child node function + s.cx = function(data,connectionId,senderObject){ + // if(senderObject){ + // data.sentFrom = senderObject.id; + // childNodesConnectionIndex[y].sendJson(data) + // }else{ childNodesConnectionIndex[y].sendJson(data) - }else{ - childNodeWebsocket.to(y).emit('c',z) - } + // } } //child Node Websocket childNodeWebsocket.on('connection', function (client, req) { @@ -76,16 +72,26 @@ module.exports = function(s,config,lang,app,io){ }else //setup Child for childNodes if(config.childNodes.enabled === true && config.childNodes.mode === 'child' && config.childNodes.host){ + const { + initiateConnectionToMasterNode, + onDisconnectFromMasterNode, + onDataFromMasterNode, + } = require('./childNode/childUtils.js')(s,config,lang,app,io) s.connectedToMasterNode = false; const childIO = createWebSocketClient('ws://'+config.childNodes.host,{ onMessage: onDataFromMasterNode }) - s.cx = function(data){ + function sendDataToMasterNode(data){ x.socketKey = config.childNodes.key; childIO.send(JSON.stringify(data)); } - s.tx = function(x,y){s.cx({f:'s.tx',data:x,to:y})} - s.userLog = function(x,y){s.cx({f:'s.userLog',mon:x,data:y})} + s.cx = sendDataToMasterNode; + s.tx = function(x,y){ + sendDataToMasterNode({f:'s.tx',data:x,to:y}) + } + s.userLog = function(x,y){ + sendDataToMasterNode({f:'s.userLog',mon:x,data:y}) + } s.queuedSqlCallbacks = {} s.sqlQuery = function(query,values,onMoveOn){ var callbackId = s.gid() @@ -95,40 +101,18 @@ module.exports = function(s,config,lang,app,io){ var values = []; } if(typeof onMoveOn === 'function')s.queuedSqlCallbacks[callbackId] = onMoveOn; - s.cx({f:'sql',query:query,values:values,callbackId:callbackId}); + sendDataToMasterNode({f:'sql',query:query,values:values,callbackId:callbackId}); } s.knexQuery = function(options,onMoveOn){ var callbackId = s.gid() if(typeof onMoveOn === 'function')s.queuedSqlCallbacks[callbackId] = onMoveOn; - s.cx({f:'knex',options:options,callbackId:callbackId}); + sendDataToMasterNode({f:'knex',options:options,callbackId:callbackId}); } - setInterval(async () => { - const cpu = await s.cpuUsage() - s.cx({ - f: 'cpu', - cpu: parseFloat(cpu) - }) - },5000) - childIO.on('connect', function(d){ - console.log('CHILD CONNECTION SUCCESS') - s.cx({ - f : 'init', - port : config.port, - coreCount : s.coreCount, - availableHWAccels : config.availableHWAccels - }) + childIO.on('connect', function(){ + initiateConnectionToMasterNode() }) - childIO.on('disconnect',function(d){ - s.connectedToMasterNode = false; - var groupKeys = Object.keys(s.group) - groupKeys.forEach(function(groupKey){ - var activeMonitorKeys = Object.keys(s.group[groupKey].activeMonitors) - activeMonitorKeys.forEach(function(monitorKey){ - var activeMonitor = s.group[groupKey].activeMonitors[monitorKey] - if(activeMonitor && activeMonitor.spawn && activeMonitor.spawn.close)activeMonitor.spawn.close() - if(activeMonitor && activeMonitor.spawn && activeMonitor.spawn.kill)activeMonitor.spawn.kill() - }) - }) + childIO.on('disconnect',function(){ + onDisconnectFromMasterNode() }) } } diff --git a/libs/childNode/childUtils.js b/libs/childNode/childUtils.js index 7bdeba0e..25a84a75 100644 --- a/libs/childNode/childUtils.js +++ b/libs/childNode/childUtils.js @@ -1,5 +1,6 @@ module.exports = function(s,config,lang,app,io){ const queuedSqlCallbacks = s.queuedSqlCallbacks; + var checkCpuInterval = null; function onDataFromMasterNode(d) { switch(d.f){ case'sqlCallback': @@ -10,7 +11,7 @@ module.exports = function(s,config,lang,app,io){ } break; case'init_success': - s.connected=true; + s.connectedToMasterNode = true; s.other_helpers=d.child_helpers; break; case'kill': @@ -42,7 +43,46 @@ module.exports = function(s,config,lang,app,io){ break; } } + function initiateConnectionToMasterNode(){ + console.log('CHILD CONNECTION SUCCESS') + s.cx({ + f : 'init', + port : config.port, + coreCount : s.coreCount, + availableHWAccels : config.availableHWAccels + }) + clearInterval(checkCpuInterval) + checkCpuInterval = setInterval(async () => { + sendCurrentCpuUsage() + },5000) + } + function onDisconnectFromMasterNode(){ + s.connectedToMasterNode = false; + destroyAllMonitorProcesses() + } + function destroyAllMonitorProcesses(){ + var groupKeys = Object.keys(s.group) + groupKeys.forEach(function(groupKey){ + var activeMonitorKeys = Object.keys(s.group[groupKey].activeMonitors) + activeMonitorKeys.forEach(function(monitorKey){ + var activeMonitor = s.group[groupKey].activeMonitors[monitorKey] + if(activeMonitor && activeMonitor.spawn && activeMonitor.spawn.close)activeMonitor.spawn.close() + if(activeMonitor && activeMonitor.spawn && activeMonitor.spawn.kill)activeMonitor.spawn.kill() + }) + }) + } + function sendCurrentCpuUsage(){ + const cpu = await s.cpuUsage() + s.cx({ + f: 'cpu', + cpu: parseFloat(cpu) + }) + } return { onDataFromMasterNode, + initiateConnectionToMasterNode, + onDisconnectFromMasterNode, + destroyAllMonitorProcesses, + sendCurrentCpuUsage, } }