diff --git a/libs/apis.js b/libs/apis.js new file mode 100644 index 0000000..966fc12 --- /dev/null +++ b/libs/apis.js @@ -0,0 +1,18 @@ +var express = require('express'); +var os = require('os'); +var app = express(); + +app.get('/getstatus', function (req, res) { + res.send({ + 'loadavg': os.loadavg(), + 'freemem': os.freemem(), + }); +}); + + +module.exports = { + start: function () { + app.listen(9000); + } +} + diff --git a/libs/mposCompatibility.js b/libs/mposCompatibility.js index ae240d8..51d9834 100644 --- a/libs/mposCompatibility.js +++ b/libs/mposCompatibility.js @@ -1,5 +1,5 @@ var mysql = require('mysql'); - +var cluster = require('cluster'); module.exports = function(logger, poolConfigs){ var dbConnections = (function(){ @@ -63,9 +63,9 @@ module.exports = function(logger, poolConfigs){ var sendResult = function(authorized){ cluster.workers[data.workerId].send({ - type: 'mposAuth', - callbackId: data.callbackId, - authorized: authorized + type : 'mposAuth', + callbackId : data.callbackId, + authorized : authorized }); }; @@ -92,14 +92,24 @@ module.exports = function(logger, poolConfigs){ }; - this.handleShare = function(isValidShare, isValidBlock, data){ - + this.handleShare = function(data){ + var isValidShare = data.isValidShare; + var isValidBlock = data.isValidBlock; if ((!data.coin in dbConnections)) return; var connection = dbConnections[data.coin]; + var dbData = [ + data.share.ip, + data.share.worker, + isValidShare ? 'Y' : 'N', + isValidBlock ? 'Y' : 'N', + data.share.difficulty, + typeof(data.share.error)==='undefined'?null:data.share.error, + typeof(data.solution)==='undefined'?'':data.solution // solution? + ]; connection.query( 'INSERT INTO `shares` SET time = NOW(), rem_host = ?, username = ?, our_result = ?, upstream_result = ?, difficulty = ?, reason = ?, solution = ?', - [data.ip, data.worker, isValidShare ? 'Y' : 'N', isValidBlock ? 'Y' : 'N', data.difficulty, data.error, data.solution], + dbData, function(err, result) { if (err) logger.logError('shareProcessor', 'mysql', 'MySQL insert error when adding share: ' + diff --git a/libs/poolWorker.js b/libs/poolWorker.js index beb429a..1469ed4 100644 --- a/libs/poolWorker.js +++ b/libs/poolWorker.js @@ -28,8 +28,9 @@ module.exports = function(logger){ break; case 'mposAuth': var callbackId = message.callbackId; - if (callbackId in mposAuthCallbacks) + if (callbackId in mposAuthCallbacks) { mposAuthCallbacks[callbackId](message.authorized); + } break; } }); @@ -73,16 +74,17 @@ module.exports = function(logger){ clearTimeout(authTimeout); }; process.send({ - type: 'mposAuth', - coin: poolOptions.coin.name, - callbackId: callbackId, - workerId: cluster.worker.id, - workerName: workerName, - password: password, - authLevel: mposAuthLevel + type : 'mposAuth', + coin : poolOptions.coin.name, + callbackId : callbackId, + workerId : cluster.worker.id, + workerName : workerName, + password : password, + authLevel : mposAuthLevel }); } else{ + // if we're here than it means we're on stratumAuth: "none" or something unrecognized by the system! callback({ error: null, authorized: true, @@ -93,7 +95,7 @@ module.exports = function(logger){ var pool = Stratum.createPool(poolOptions, authorizeFN); - pool.on('share', function(isValidShare, isValidBlock, data){ + pool.on('share', function(isValidShare, isValidBlock, data, blockHex){ var shareData = JSON.stringify(data); @@ -106,29 +108,30 @@ module.exports = function(logger){ logDebug(logIdentify, 'client', 'Valid share submitted, share data: ' + shareData); process.send({ - type: 'share', - share: shareData, - coin: poolOptions.coin.name, - isValidShare: isValidShare, - isValidBlock: isValidBlock + type : 'share', + share : data, + coin : poolOptions.coin.name, + isValidShare : isValidShare, + isValidBlock : isValidBlock, + solution : blockHex // blockHex is undefined is this was not a valid block. }); if (isValidBlock){ logDebug(logIdentify, 'client', 'Block found, solution: ' + shareData.solution); process.send({ - type: 'block', - share: shareData, - coin: poolOptions.coin.name + type : 'block', + share : data, + coin : poolOptions.coin.name }); } }).on('difficultyUpdate', function(workerName, diff){ if (poolOptions.shareProcessing.mpos.enabled){ process.send({ - type: 'difficultyUpdate', - workerName: workerName, - diff: diff, - coin: poolOptions.coin.name + type : 'difficultyUpdate', + workerName : workerName, + diff : diff, + coin : poolOptions.coin.name }); } }).on('log', function(severity, logKey, logText) { diff --git a/libs/workerapi.js b/libs/workerapi.js new file mode 100644 index 0000000..9e1f732 --- /dev/null +++ b/libs/workerapi.js @@ -0,0 +1,56 @@ +var express = require('express'); +var os = require('os'); + + +function workerapi(listen) { + var _this = this; + var app = express(); + var counters = { + validShares : 0, + validBlocks : 0, + invalidShares : 0 + }; + + var lastEvents = { + lastValidShare : 0 , + lastValidBlock : 0, + lastInvalidShare : 0 + }; + + app.get('/stats', function (req, res) { + res.send({ + "clients" : Object.keys(_this.poolObj.stratumServer.getStratumClients()).length, + "counters" : counters, + "lastEvents" : lastEvents + }); + }); + + + this.start = function (poolObj) { + this.poolObj = poolObj; + this.poolObj.once('started', function () { + app.listen(listen, function (lol) { + console.log("LISTENING "); + }); + }) + .on('share', function(isValidShare, isValidBlock, shareData) { + var now = Date.now(); + if (isValidShare) { + counters.validShares ++; + lastEvents.lastValidShare = now; + if (isValidBlock) { + counters.validBlocks ++; + lastEvents.lastValidBlock = now; + } + } else { + counters.invalidShares ++; + lastEvents.lastInvalidShare = now; + } + }); + } +} + + + +module.exports = workerapi; +