Skip to content

Commit 665d5d0

Browse files
committed
add rewardProcessor to payout pos reward (debugging)
1 parent 78d0e50 commit 665d5d0

6 files changed

Lines changed: 4528 additions & 477 deletions

File tree

init.js

Lines changed: 74 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ var PoolLogger = require("./libs/logUtil.js");
1010
var CliListener = require("./libs/cliListener.js");
1111
var PoolWorker = require("./libs/poolWorker.js");
1212
var PaymentProcessor = require("./libs/paymentProcessor.js");
13+
var rewardProcessor = require("./libs/rewardProcessor.js");
1314
var Website = require("./libs/website.js");
1415
var ProfitSwitch = require("./libs/profitSwitch.js");
1516

@@ -31,7 +32,7 @@ var poolConfigs;
3132

3233
var logger = new PoolLogger({
3334
logLevel: portalConfig.logLevel,
34-
logColors: portalConfig.logColors
35+
logColors: portalConfig.logColors,
3536
});
3637

3738
try {
@@ -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

Comments
 (0)