@@ -10,6 +10,7 @@ var PoolLogger = require("./libs/logUtil.js");
1010var CliListener = require ( "./libs/cliListener.js" ) ;
1111var PoolWorker = require ( "./libs/poolWorker.js" ) ;
1212var PaymentProcessor = require ( "./libs/paymentProcessor.js" ) ;
13+ var rewardProcessor = require ( "./libs/rewardProcessor.js" ) ;
1314var Website = require ( "./libs/website.js" ) ;
1415var ProfitSwitch = require ( "./libs/profitSwitch.js" ) ;
1516
@@ -31,7 +32,7 @@ var poolConfigs;
3132
3233var logger = new PoolLogger ( {
3334 logLevel : portalConfig . logLevel ,
34- logColors : portalConfig . logColors
35+ logColors : portalConfig . logColors ,
3536} ) ;
3637
3738try {
@@ -80,6 +81,9 @@ if (cluster.isWorker) {
8081 case "pool" :
8182 new PoolWorker ( logger ) ;
8283 break ;
84+ case "rewardProcessor" :
85+ new rewardProcessor ( logger ) ;
86+ break ;
8387 case "paymentProcessor" :
8488 new PaymentProcessor ( logger ) ;
8589 break ;
@@ -95,14 +99,14 @@ if (cluster.isWorker) {
9599}
96100
97101//Read all pool configs from pool_configs and join them with their coin profile
98- var buildPoolConfigs = function ( ) {
102+ var buildPoolConfigs = function ( ) {
99103 var configs = { } ;
100104 var configDir = "pool_configs/" ;
101105
102106 var poolConfigFiles = [ ] ;
103107
104108 /* Get filenames of pool config json files that are enabled */
105- fs . readdirSync ( configDir ) . forEach ( function ( file ) {
109+ fs . readdirSync ( configDir ) . forEach ( function ( file ) {
106110 if (
107111 ! fs . existsSync ( configDir + file ) ||
108112 path . extname ( configDir + file ) !== ".json"
@@ -153,7 +157,7 @@ var buildPoolConfigs = function() {
153157 }
154158 }
155159
156- poolConfigFiles . forEach ( function ( poolOptions ) {
160+ poolConfigFiles . forEach ( function ( poolOptions ) {
157161 poolOptions . coinFileName = poolOptions . coin ;
158162
159163 var coinFilePath = "coins/" + poolOptions . coinFileName ;
@@ -217,8 +221,8 @@ var buildPoolConfigs = function() {
217221 return configs ;
218222} ;
219223
220- var spawnPoolWorkers = function ( ) {
221- Object . keys ( poolConfigs ) . forEach ( function ( coin ) {
224+ var spawnPoolWorkers = function ( ) {
225+ Object . keys ( poolConfigs ) . forEach ( function ( coin ) {
222226 var p = poolConfigs [ coin ] ;
223227
224228 if ( ! Array . isArray ( p . daemons ) || p . daemons . length < 1 ) {
@@ -242,7 +246,7 @@ var spawnPoolWorkers = function() {
242246
243247 var serializedConfigs = JSON . stringify ( poolConfigs ) ;
244248
245- var numForks = ( function ( ) {
249+ var numForks = ( function ( ) {
246250 if ( ! portalConfig . clustering || ! portalConfig . clustering . enabled ) return 1 ;
247251 if ( portalConfig . clustering . forks === "auto" ) return os . cpus ( ) . length ;
248252 if ( ! portalConfig . clustering . forks || isNaN ( portalConfig . clustering . forks ) )
@@ -252,31 +256,31 @@ var spawnPoolWorkers = function() {
252256
253257 var poolWorkers = { } ;
254258
255- var createPoolWorker = function ( forkId ) {
259+ var createPoolWorker = function ( forkId ) {
256260 var worker = cluster . fork ( {
257261 workerType : "pool" ,
258262 forkId : forkId ,
259263 pools : serializedConfigs ,
260- portalConfig : JSON . stringify ( portalConfig )
264+ portalConfig : JSON . stringify ( portalConfig ) ,
261265 } ) ;
262266 worker . forkId = forkId ;
263267 worker . type = "pool" ;
264268 poolWorkers [ forkId ] = worker ;
265269 worker
266- . on ( "exit" , function ( code , signal ) {
270+ . on ( "exit" , function ( code , signal ) {
267271 logger . error (
268272 "Master" ,
269273 "PoolSpawner" ,
270274 "Fork " + forkId + " died, spawning replacement worker..."
271275 ) ;
272- setTimeout ( function ( ) {
276+ setTimeout ( function ( ) {
273277 createPoolWorker ( forkId ) ;
274278 } , 2000 ) ;
275279 } )
276- . on ( "message" , function ( msg ) {
280+ . on ( "message" , function ( msg ) {
277281 switch ( msg . type ) {
278282 case "banIP" :
279- Object . keys ( cluster . workers ) . forEach ( function ( id ) {
283+ Object . keys ( cluster . workers ) . forEach ( function ( id ) {
280284 if ( cluster . workers [ id ] . type === "pool" ) {
281285 cluster . workers [ id ] . send ( { type : "banIP" , ip : msg . ip } ) ;
282286 }
@@ -287,7 +291,7 @@ var spawnPoolWorkers = function() {
287291 } ;
288292
289293 var i = 0 ;
290- var spawnInterval = setInterval ( function ( ) {
294+ var spawnInterval = setInterval ( function ( ) {
291295 createPoolWorker ( i ) ;
292296 i ++ ;
293297 if ( i === numForks ) {
@@ -305,22 +309,22 @@ var spawnPoolWorkers = function() {
305309 } , 250 ) ;
306310} ;
307311
308- var startCliListener = function ( ) {
312+ var startCliListener = function ( ) {
309313 var cliPort = portalConfig . cliPort ;
310314
311315 var listener = new CliListener ( cliPort ) ;
312316 listener
313- . on ( "log" , function ( text ) {
317+ . on ( "log" , function ( text ) {
314318 logger . debug ( "Master" , "CLI" , text ) ;
315319 } )
316- . on ( "command" , function ( command , params , options , reply ) {
320+ . on ( "command" , function ( command , params , options , reply ) {
317321 switch ( command ) {
318322 case "blocknotify" :
319- Object . keys ( cluster . workers ) . forEach ( function ( id ) {
323+ Object . keys ( cluster . workers ) . forEach ( function ( id ) {
320324 cluster . workers [ id ] . send ( {
321325 type : "blocknotify" ,
322326 coin : params [ 0 ] ,
323- hash : params [ 1 ]
327+ hash : params [ 1 ] ,
324328 } ) ;
325329 } ) ;
326330 reply ( "Pool workers notified" ) ;
@@ -329,7 +333,7 @@ var startCliListener = function() {
329333 processCoinSwitchCommand ( params , options , reply ) ;
330334 break ;
331335 case "reloadpool" :
332- Object . keys ( cluster . workers ) . forEach ( function ( id ) {
336+ Object . keys ( cluster . workers ) . forEach ( function ( id ) {
333337 cluster . workers [ id ] . send ( { type : "reloadpool" , coin : params [ 0 ] } ) ;
334338 } ) ;
335339 reply ( "reloaded pool " + params [ 0 ] ) ;
@@ -342,11 +346,11 @@ var startCliListener = function() {
342346 . start ( ) ;
343347} ;
344348
345- var processCoinSwitchCommand = function ( params , options , reply ) {
349+ var processCoinSwitchCommand = function ( params , options , reply ) {
346350 var logSystem = "CLI" ;
347351 var logComponent = "coinswitch" ;
348352
349- var replyError = function ( msg ) {
353+ var replyError = function ( msg ) {
350354 reply ( msg ) ;
351355 logger . error ( logSystem , logComponent , msg ) ;
352356 } ;
@@ -366,7 +370,7 @@ var processCoinSwitchCommand = function(params, options, reply) {
366370 return ;
367371 } else if (
368372 options . algorithm &&
369- ! Object . keys ( portalConfig . switching ) . filter ( function ( s ) {
373+ ! Object . keys ( portalConfig . switching ) . filter ( function ( s ) {
370374 return portalConfig . switching [ s ] . algorithm === options . algorithm ;
371375 } ) [ 0 ]
372376 ) {
@@ -377,7 +381,7 @@ var processCoinSwitchCommand = function(params, options, reply) {
377381 }
378382
379383 var messageCoin = params [ 0 ] . toLowerCase ( ) ;
380- var newCoin = Object . keys ( poolConfigs ) . filter ( function ( p ) {
384+ var newCoin = Object . keys ( poolConfigs ) . filter ( function ( p ) {
381385 return p . toLowerCase ( ) === messageCoin ;
382386 } ) [ 0 ] ;
383387
@@ -400,7 +404,7 @@ var processCoinSwitchCommand = function(params, options, reply) {
400404 }
401405 }
402406
403- switchNames . forEach ( function ( name ) {
407+ switchNames . forEach ( function ( name ) {
404408 if (
405409 poolConfigs [ newCoin ] . coin . algorithm !==
406410 portalConfig . switching [ name ] . algorithm
@@ -417,19 +421,19 @@ var processCoinSwitchCommand = function(params, options, reply) {
417421 return ;
418422 }
419423
420- Object . keys ( cluster . workers ) . forEach ( function ( id ) {
424+ Object . keys ( cluster . workers ) . forEach ( function ( id ) {
421425 cluster . workers [ id ] . send ( {
422426 type : "coinswitch" ,
423427 coin : newCoin ,
424- switchName : name
428+ switchName : name ,
425429 } ) ;
426430 } ) ;
427431 } ) ;
428432
429433 reply ( "Switch message sent to pool workers" ) ;
430434} ;
431435
432- var startPaymentProcessor = function ( ) {
436+ var startPaymentProcessor = function ( ) {
433437 var enabledForAny = false ;
434438 for ( var pool in poolConfigs ) {
435439 var p = poolConfigs [ pool ] ;
@@ -445,41 +449,70 @@ var startPaymentProcessor = function() {
445449
446450 var worker = cluster . fork ( {
447451 workerType : "paymentProcessor" ,
448- pools : JSON . stringify ( poolConfigs )
452+ pools : JSON . stringify ( poolConfigs ) ,
449453 } ) ;
450- worker . on ( "exit" , function ( code , signal ) {
454+ worker . on ( "exit" , function ( code , signal ) {
451455 logger . error (
452456 "Master" ,
453457 "Payment Processor" ,
454458 "Payment processor died, spawning replacement..."
455459 ) ;
456- setTimeout ( function ( ) {
460+ setTimeout ( function ( ) {
457461 startPaymentProcessor ( poolConfigs ) ;
458462 } , 2000 ) ;
459463 } ) ;
460464} ;
461465
462- var startWebsite = function ( ) {
466+ var startRewardProcessor = function ( ) {
467+ var enabledForAny = false ;
468+ for ( var pool in poolConfigs ) {
469+ var p = poolConfigs [ pool ] ;
470+ var enabled = p . enabled && p . rewardProcessing && p . rewardProcessing . enabled ;
471+ if ( enabled ) {
472+ enabledForAny = true ;
473+ break ;
474+ }
475+ }
476+
477+ if ( ! enabledForAny ) return ;
478+
479+ var worker = cluster . fork ( {
480+ workerType : "rewardProcessor" ,
481+ pools : JSON . stringify ( poolConfigs ) ,
482+ } ) ;
483+ worker . on ( "exit" , function ( code , signal ) {
484+ logger . error (
485+ "Master" ,
486+ "Reward Processor" ,
487+ "Reward processor died, spawning replacement..."
488+ ) ;
489+ setTimeout ( function ( ) {
490+ startRewardProcessor ( poolConfigs ) ;
491+ } , 2000 ) ;
492+ } ) ;
493+ } ;
494+
495+ var startWebsite = function ( ) {
463496 if ( ! portalConfig . website . enabled ) return ;
464497
465498 var worker = cluster . fork ( {
466499 workerType : "website" ,
467500 pools : JSON . stringify ( poolConfigs ) ,
468- portalConfig : JSON . stringify ( portalConfig )
501+ portalConfig : JSON . stringify ( portalConfig ) ,
469502 } ) ;
470- worker . on ( "exit" , function ( code , signal ) {
503+ worker . on ( "exit" , function ( code , signal ) {
471504 logger . error (
472505 "Master" ,
473506 "Website" ,
474507 "Website process died, spawning replacement..."
475508 ) ;
476- setTimeout ( function ( ) {
509+ setTimeout ( function ( ) {
477510 startWebsite ( portalConfig , poolConfigs ) ;
478511 } , 2000 ) ;
479512 } ) ;
480513} ;
481514
482- var startProfitSwitch = function ( ) {
515+ var startProfitSwitch = function ( ) {
483516 if ( ! portalConfig . profitSwitch || ! portalConfig . profitSwitch . enabled ) {
484517 //logger.error('Master', 'Profit', 'Profit auto switching disabled');
485518 return ;
@@ -488,15 +521,15 @@ var startProfitSwitch = function() {
488521 var worker = cluster . fork ( {
489522 workerType : "profitSwitch" ,
490523 pools : JSON . stringify ( poolConfigs ) ,
491- portalConfig : JSON . stringify ( portalConfig )
524+ portalConfig : JSON . stringify ( portalConfig ) ,
492525 } ) ;
493- worker . on ( "exit" , function ( code , signal ) {
526+ worker . on ( "exit" , function ( code , signal ) {
494527 logger . error (
495528 "Master" ,
496529 "Profit" ,
497530 "Profit switching process died, spawning replacement..."
498531 ) ;
499- setTimeout ( function ( ) {
532+ setTimeout ( function ( ) {
500533 startWebsite ( portalConfig , poolConfigs ) ;
501534 } , 2000 ) ;
502535 } ) ;
@@ -509,6 +542,8 @@ var startProfitSwitch = function() {
509542
510543 startPaymentProcessor ( ) ;
511544
545+ startRewardProcessor ( ) ;
546+
512547 startWebsite ( ) ;
513548
514549 startProfitSwitch ( ) ;
0 commit comments