Merge pull request #1 from vekexasia/master

Added Sophisticated logging interface.
This commit is contained in:
Matthew Little 2014-01-14 13:18:15 -08:00
commit 3e82e2849a
4 changed files with 146 additions and 17 deletions

View File

@ -6,7 +6,7 @@
"address": "n3s8iDk1onxyY2nuC1k4HoRQFGJ7BhjFcq",
"stratumPort": 3334,
"difficulty": 8,
"blockRefreshInterval": 5,
"blockRefreshInterval": 1,
"daemon": {
"host": "localhost",
"port": 19334,

44
init.js
View File

@ -1,21 +1,27 @@
var fs = require('fs');
var fs = require('fs');
var dateFormat = require('dateformat');
var Stratum = require('stratum-pool');
var PoolLogger = require('./libs/logutils.js');
var Stratum = require('stratum-pool');
var loggerInstance = new PoolLogger({
'default': true,
'keys': {
'client' : 'warning',
'system' : true,
'submitblock' : true,
}
});
var timeLog = function(text, poolName){
var desc = poolName ? '[' + poolName + '] ' : '';
var time = new Date().toISOString();
console.log(time + ': ' + desc + text);
};
var logDebug = loggerInstance.logDebug;
var logWarning = loggerInstance.logWarning;
var logError = loggerInstance.logError;
var config = JSON.parse(fs.readFileSync("config.json"));
var stratum = new Stratum(config);
stratum.on('log', function(logText){
timeLog(logText);
logDebug(logText);
});
@ -25,7 +31,7 @@ fs.readdirSync('coins').forEach(function(file){
var authorizeFN = function (ip, workerName, password, callback) {
// Default implementation just returns true
timeLog(coinOptions.name, "Authorize ["+ip+"] "+workerName+":"+password);
logDebug(coinOptions.name, 'client', "Authorize ["+ip+"] "+workerName+":"+password);
callback({
error: null,
authorized: true,
@ -37,12 +43,18 @@ fs.readdirSync('coins').forEach(function(file){
var pool = stratum.createPool(coinOptions, authorizeFN);
pool.on('share', function(isValid, data){
if (isValid)
timeLog(coinOptions.name, "A new Valid share from " + data.client.workerName + " has arrived! - " + data.headerHex);
logDebug(coinOptions.name, 'client', "A new Valid share from " + data.client.workerName + " has arrived! - " + data.blockHeaderHex);
else
timeLog(coinOptions.name, "Invalid share form " + data.client.workerName + " ErrorCode: " + data.errorCode + " ErrorDescription: " + data.errorDescription);
}).on('log', function(logText){
timeLog(coinOptions.name, logText);
});
logDebug(coinOptions.name, 'client', "Invalid share form " + data.client.workerName + " ErrorCode: " + data.errorCode + " ErrorDescription: " + data.errorDescription);
}).on('log', function(severity, logKey, logText) {
if (severity == 'debug') {
logDebug(coinOptions.name, logKey, logText);
} else if (severity == 'warning') {
logWarning(coinOptions.name, logKey, logText);
} else if (severity == 'error') {
logError(coinOptions.name, logKey, logText);
}
});
});

87
libs/logutils.js Normal file
View File

@ -0,0 +1,87 @@
var dateFormat = require('dateformat');
/*
var defaultConfiguration = {
'default': true,
'keys': {
'client' : 'warning',
'system' : true,
'submitblock' : true,
}
};
*/
var severityToInt = function(severity) {
switch(severity) {
case 'debug':
return 10;
case 'warning':
return 20;
case 'error':
return 30;
default:
console.log("Unknown severity "+severity);
return 1000;
}
}
var getSeverityColor = function(severity) {
switch(severity) {
case 'debug':
return 32;
case 'warning':
return 33;
case 'error':
return 31;
default:
console.log("Unknown severity "+severity);
return 31;
}
}
var PoolLogger = function (configuration) {
// privates
var shouldLog = function(key, severity) {
var keyValue = configuration.keys[key];
if (typeof(keyValue) === 'undefined') {
keyValue = configuration.default;
}
if (typeof(keyValue) === 'boolean') {
return keyValue;
} else if (typeof(keyValue) === 'string') {
return severityToInt(severity) >= severityToInt(keyValue);
}
}
var log = function(severity, key, poolName, text) {
if ( ! shouldLog(key, severity) ) {
// if this tag is set to not be logged or the default value is false then drop it!
//console.log(key+"DROPPED "+text);
return;
}
var desc = poolName ? '[' + poolName + '] ' : '';
console.log(
'\u001b['+getSeverityColor(severity)+'m' +
dateFormat(new Date(), 'yyyy-mm-dd HH:mm:ss') +
" ["+key+"]" + '\u001b[39m: ' + "\t" +
desc +
text);
}
// public
this.logDebug = function(poolName, logKey, text){
log('debug', logKey, poolName, text);
}
this.logWarning = function(poolName, logKey, text) {
log('warning', logKey, poolName, text);
}
this.logError = function(poolName, logKey, text) {
log('error', logKey, poolName, text);
}
}
module.exports = PoolLogger;

30
package.json Normal file
View File

@ -0,0 +1,30 @@
{
"name": "node-stratum-portal",
"version": "0.0.1",
"description": "Node quick start example portal",
"main": "init.js",
"dependencies": {
"stratum-pool": "~0.0.2",
"dateformat": "~1.0.7-1.2.3"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://github.com/zone117x/node-stratum-portal.git"
},
"keywords": [
"node",
"stratum",
"pool",
"mining"
],
"author": "zone117x",
"license": "GPL",
"bugs": {
"url": "https://github.com/zone117x/node-stratum-portal/issues"
},
"homepage": "https://github.com/zone117x/node-stratum-portal"
}