Child Node Framework Update

montage-api
Moe 2021-11-25 09:20:50 -08:00
parent d908ff22d2
commit d7409db6f0
2 changed files with 67 additions and 43 deletions

View File

@ -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()
})
}
}

View File

@ -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,
}
}