diff --git a/config_example.json b/config_example.json index 6fbcabe..4ca07d9 100644 --- a/config_example.json +++ b/config_example.json @@ -48,6 +48,9 @@ "bindAddress": "0.0.0.0", "developerShare": 1, "daemonAddress": "127.0.0.1:18081", + "httpEnable": false, + "httpAddress": "127.0.0.1", + "httpPort": "8080", "coinSettings": { "xmr":{ "minDiff": 100, diff --git a/index.html b/index.html new file mode 100644 index 0000000..e610759 --- /dev/null +++ b/index.html @@ -0,0 +1,82 @@ + + + + XNP Hashrate Monitor + + + +
+ + + + + diff --git a/proxy.js b/proxy.js index beceb35..7229ac3 100644 --- a/proxy.js +++ b/proxy.js @@ -2,6 +2,7 @@ const cluster = require('cluster'); const net = require('net'); const tls = require('tls'); +const http = require('http'); const fs = require('fs'); const async = require('async'); const uuidV4 = require('uuid/v4'); @@ -578,7 +579,13 @@ function balanceWorkers(){ } } -function enumerateWorkerStats(){ +function enumerateWorkerStats() { + // here we do a bit of a hack and "cache" the activeWorkers + // this file is parsed for the http://host/json endpoint + fs.writeFile("workers.json", JSON.stringify(activeWorkers), function(err) { + if(err) + return console.log(err); + }); let stats, global_stats = {miners: 0, hashes: 0, hashRate: 0, diff: 0}; for (let poolID in activeWorkers){ if (activeWorkers.hasOwnProperty(poolID)){ @@ -803,7 +810,8 @@ function Miner(id, params, ip, pushMessage, portData, minerSocket) { lastShare: this.lastShareTime, coin: this.coin, pool: this.pool, - id: this.id + id: this.id, + password: this.password }; }; @@ -952,6 +960,33 @@ function handleMinerData(method, params, ip, portData, sendReply, pushMessage, m } } +function activateHTTP() { + var jsonServer = http.createServer((req, res) => { + if(req.url == "/") { + res.writeHead(200, {'Content-type':'text/html'}); + fs.readFile('index.html', 'utf8', function(err, contents) { + res.write(contents); + res.end(); + }) + } else if(req.url.substring(0, 5) == "/json") { + fs.readFile('workers.json', 'utf8', (err, data) => { + if(err) { + res.writeHead(503); + } else { + res.writeHead(200, {'Content-type':'application/json'}); + res.write(data + "\r\n"); + } + res.end(); + }); + } else { + res.writeHead(404); + res.end(); + } + }); + + jsonServer.listen(global.config.httpPort || "8080", global.config.httpAddress || "localhost") +} + function activatePorts() { /* Reads the current open ports, and then activates any that aren't active yet @@ -990,7 +1025,7 @@ function activatePorts() { socket.write(sendData); }; handleMinerData(jsonData.method, jsonData.params, socket.remoteAddress, portData, sendReply, pushMessage, minerSocket); - }; + }; function socketConn(socket) { socket.setKeepAlive(true); @@ -1183,4 +1218,6 @@ if (cluster.isMaster) { }, 10000); setInterval(checkActivePools, 90000); activatePorts(); + if(global.config.httpEnable) + activateHTTP(); } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy