Advertisement
Guest User

Untitled

a guest
Nov 12th, 2017
606
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.76 KB | None | 0 0
  1. 'use strict';
  2. const http = require("http");
  3. const https = require("https");
  4. const zlib = require("zlib");
  5. const net = require('net');
  6.  
  7. const WALLET = "";
  8. const UPTIME_SERVER = "";
  9.  
  10. function get_hashrate(api, body) {
  11. var re1 = /pool\/stats/;
  12. var re2 = /pool\/hashrate/;
  13. var re3 = /suprnova\.cc/;
  14. var re4 = /\/stats/;
  15. var re5 = /\/live_stats/;
  16.  
  17. if (re1.exec(api)) {
  18. return body["pool_statistics"]["hashRate"];
  19. } else if (re2.exec(api)) {
  20. return body["data"];
  21. } else if (re3.exec(api)) {
  22. return body["hashrate"];
  23. } else if (re4.exec(api) || re5.exec(api)) {
  24. return body["pool"]["hashrate"];
  25. }
  26. };
  27.  
  28. function complete_result(result_api, result_stratum) {
  29. if (result_api.hasOwnProperty("<completed>")) return;
  30. for (var name in result_api) if (result_api[name] == "[UNDEF]") return;
  31. for (var name in result_stratum) if (result_stratum[name] == "[UNDEF]") return;
  32. result_api["<completed>"] = 1;
  33.  
  34. console.log("Collected all results");
  35. var uptime_server = net.Socket();
  36. uptime_server.connect(1234, UPTIME_SERVER, function() {
  37. console.log("Connected to uptime server");
  38. var str = process.env.AWS_REGION + "\n";
  39. for (var name in result_stratum) {
  40. let name2 = get_name2(name);
  41. str = str + name + ":\t" + result_api[name2] + "\t" + result_stratum[name] + "\n";
  42. }
  43. uptime_server.end(str);
  44. console.log("Wrote data to uptime server");
  45. });
  46. uptime_server.on('close', function() {
  47. console.log("Closed connection to uptime server");
  48. });
  49. };
  50.  
  51. function form_stratum_status(status, socket, addr_orig) {
  52. let addr = (typeof addr_orig !== 'undefined' && addr_orig !== null) ? addr_orig : socket.remoteAddress;
  53. return (typeof addr !== 'undefined' && addr !== null) ? "[" + status + "]: " + addr : "[" + status + "]";
  54. };
  55.  
  56. function test_stratum(name, host, port, result_api, result_stratum) {
  57. result_stratum[name] = "[UNDEF]";
  58. var s = net.Socket();
  59. var addr_orig;
  60. var timer = setTimeout(function() {
  61. s.end();
  62. s.destroy();
  63. result_stratum[name] = form_stratum_status("TIMEOUT", s, addr_orig);
  64. //console.log("S TIMEOUT");
  65. complete_result(result_api, result_stratum);
  66. }, 10000);
  67.  
  68. s.connect(port, host, function() {
  69. addr_orig = s.remoteAddress;
  70. s.write('{"method":"login","params":{"login":"' + WALLET + '","pass":"x","agent":"xmr-stak-cpu/1.3.0-1.5.0"},"id":1}\n');
  71. });
  72.  
  73. s.on('error', function(e) {
  74. result_stratum[name] = form_stratum_status("DOWN", s, addr_orig);
  75. //console.log("S DOWN");
  76. complete_result(result_api, result_stratum);
  77. });
  78.  
  79. //let chunks = [];
  80. //s.on("data", chunk => {
  81. //chunks.push(chunk);
  82. //});
  83.  
  84. s.on('data', function(d) {
  85. //let d = Buffer.concat(chunks);
  86. clearTimeout(timer);
  87. var re1 = /"job"/;
  88. var re2 = /"blob"/;
  89. var re3 = /"target"/;
  90. if (re1.exec(d) && re2.exec(d) && re3.exec(d)) {
  91. //console.log("[OK]: " + s.remoteAddress);
  92. result_stratum[name] = form_stratum_status("OK", s, addr_orig);
  93. //console.log(form_stratum_status("OK", s, addr_orig));
  94. } else {
  95. result_stratum[name] = form_stratum_status("BAD", s, addr_orig);
  96. //console.log("S BAD");
  97. console.log("Bad JSON reply from " + name + " stratum:");
  98. console.log(d.toString());
  99. }
  100. s.end();
  101. s.destroy();
  102. complete_result(result_api, result_stratum);
  103. });
  104. };
  105.  
  106. function get_name2(name) {
  107. var re1 = /^([^\s]+) /;
  108. var m;
  109. if (m = re1.exec(name)) {
  110. return m[1];
  111. } else {
  112. return name;
  113. }
  114. };
  115.  
  116. exports.handler = function(event, context, callback) {
  117.  
  118. var result_api = {};
  119. var result_stratum = {};
  120.  
  121. var pool_api = {}, pool_stratum = {};
  122.  
  123. pool_api["moneroocean.stream"] = "https://api.moneroocean.stream/pool/stats";
  124. pool_stratum["moneroocean.stream"] = "gulf.moneroocean.stream:10001";
  125.  
  126. pool_api["minexmr.com"] = "http://api.minexmr.com:8080/stats";
  127. pool_stratum["minexmr.com (France)"] = "pool.minexmr.com:4444";
  128. pool_stratum["minexmr.com (Canada)"] = "ca.minexmr.com:4444";
  129.  
  130. pool_api["supportxmr.com"] = "https://supportxmr.com/api/pool/stats";
  131. pool_stratum["supportxmr.com"] = "pool.supportxmr.com:3333";
  132.  
  133. pool_api["xmrpool.net"] = "https://api.xmrpool.net/pool/stats";
  134. pool_stratum["xmrpool.net"] = "mine.xmrpool.net:3333";
  135.  
  136. pool_api["nanopool.org"] = "https://api.nanopool.org/v1/xmr/pool/hashrate";
  137. pool_stratum["nanopool.org (Europe 1)"] = "xmr-eu1.nanopool.org:14444";
  138. pool_stratum["nanopool.org (Europe 2)"] = "xmr-eu2.nanopool.org:14444";
  139. pool_stratum["nanopool.org (US East)"] = "xmr-us-east1.nanopool.org:14444";
  140. pool_stratum["nanopool.org (US West)"] = "xmr-us-west1.nanopool.org:14444";
  141. pool_stratum["nanopool.org (Asia)"] = "xmr-asia1.nanopool.org:14444";
  142.  
  143. pool_api["mixpools.org"] = "https://mixpools.org:8117/stats";
  144. pool_stratum["mixpools.org (EU)"] = "xmr.mixpools.org:8080";
  145. pool_stratum["mixpools.org (US)"] = "xmr-us.mixpools.org:8080";
  146.  
  147. pool_api["viaxmr.com"] = "https://api.viaxmr.com/pool/stats";
  148. pool_stratum["viaxmr.com"] = "stratum.viaxmr.com:8080";
  149.  
  150. pool_api["monero.hashvault.pro"] = "https://monero.hashvault.pro/api/pool/stats";
  151. pool_stratum["monero.hashvault.pro"] = "pool.monero.hashvault.pro:3333";
  152.  
  153. pool_api["xmr.suprnova.cc"] = "https://xmr.suprnova.cc/index.php?page=api&action=public";
  154. pool_stratum["xmr.suprnova.cc"] = "xmr.suprnova.cc:5222";
  155.  
  156. pool_api["xmrpool.eu"] = "https://web.xmrpool.eu:8119/stats";
  157. pool_stratum["xmrpool.eu"] = "xmrpool.eu:3333";
  158.  
  159. //pool_api["xmrpool.de"] = "http://xmrpool.de/pool/stats";
  160. //pool_stratum["xmrpool.de"] = "xmrpool.de:3333";
  161.  
  162. pool_api["poolto.be"] = "http://mro.poolto.be:8117/stats";
  163. pool_stratum["poolto.be"] = "xmr.poolto.be:8080";
  164.  
  165. pool_api["xmr.prohash.net"] = "http://xmr.prohash.net:8117/stats";
  166. pool_stratum["xmr.prohash.net"] = "xmr.prohash.net:7777";
  167.  
  168. pool_api["xmr.mypool.online"] = "https://api.xmr.mypool.online/pool/stats";
  169. pool_stratum["xmr.mypool.online"] = "mine.xmr.mypool.online:3335";
  170.  
  171. pool_api["bohemianpool.com"] = "https://bohemianpool.com/api/pool/stats";
  172. pool_stratum["bohemianpool.com"] = "bohemianpool.com:4444";
  173.  
  174. pool_api["moneropool.com"] = "http://api.moneropool.com/live_stats";
  175. pool_stratum["moneropool.com"] = "mine.moneropool.com:3333";
  176.  
  177. pool_api["moneropool.nl"] = "https://moneropool.nl/api/pool/stats";
  178. pool_stratum["moneropool.nl"] = "moneropool.nl:3333";
  179.  
  180. pool_api["iwanttoearn.money"] = "http://iwanttoearn.money:8117/stats";
  181. pool_stratum["iwanttoearn.money"] = "iwanttoearn.money:3333";
  182.  
  183. pool_api["pool.xmr.pt"] = "https://pool.xmr.pt/api/pool/stats";
  184. pool_stratum["pool.xmr.pt"] = "pool.xmr.pt:3333";
  185.  
  186. pool_api["moriaxmr.com"] = "https://api.moriaxmr.com/pool/stats";
  187. pool_stratum["moriaxmr.com"] = "pool.moriaxmr.com:3333";
  188.  
  189. pool_api["monero.crypto-pool.fr"] = "https://monero.crypto-pool.fr:8091/stats";
  190. pool_stratum["monero.crypto-pool.fr"] = "xmr.crypto-pool.fr:3333";
  191.  
  192. pool_api["monero.miners.pro"] = "http://pool.miners.pro:8117/stats";
  193. pool_stratum["monero.miners.pro"] = "pool.miners.pro:3333";
  194.  
  195. pool_api["minercircle.com"] = "https://xmr.minercircle.com:8079/stats";
  196. pool_stratum["minercircle.com"] = "xmr.minercircle.com:3333";
  197.  
  198. pool_api["monero.lindon-pool.win"] = "https://monero.lindon-pool.win/api/pool/stats";
  199. pool_stratum["monero.lindon-pool.win"] = "monero.lindon-pool.win:3333";
  200.  
  201. pool_api["teracycle.net"] = "http://teracycle.net:8117/stats";
  202. pool_stratum["teracycle.net"] = "teracycle.net:3333";
  203.  
  204. pool_api["ratchetmining.com"] = "https://ratchetmining.com/api/pool/stats";
  205. pool_stratum["ratchetmining.com"] = "ratchetmining.com:3333";
  206.  
  207. pool_api["monerohash.com"] = "https://monerohash.com/api/stats";
  208. pool_stratum["monerohash.com"] = "monerohash.com:3333";
  209.  
  210. pool_api["monero.us.to"] = "http://monero.us.to:8117/stats";
  211. pool_stratum["monero.us.to"] = "monero.us.to:3333";
  212.  
  213. pool_api["usxmrpool.com"] = "https://usxmrpool.com:8119/stats";
  214. pool_stratum["usxmrpool.com"] = "pool.usxmrpool.com:3333";
  215.  
  216. pool_api["xmrpool.xyz"] = "https://api.xmrpool.xyz/pool/stats";
  217. pool_stratum["xmrpool.xyz"] = "mine.xmrpool.xyz:3333";
  218.  
  219. pool_api["minemonero.gq"] = "http://minemonero.gq:8117/stats";
  220. pool_stratum["minemonero.gq"] = "minemonero.gq:3333";
  221.  
  222. pool_api["xmr.alimabi.cn"] = "http://121.42.243.177/stats";
  223. pool_stratum["xmr.alimabi.cn"] = "mine1.alimabi.cn:7777";
  224.  
  225. pool_api["pooldd.com"] = "http://minexmr.pooldd.com:8080/stats";
  226. pool_stratum["pooldd.com"] = "minexmr.pooldd.com:3333";
  227.  
  228. pool_api["monero.riefly.id"] = "https://xmr.riefly.id:8119/stats";
  229. pool_stratum["monero.riefly.id"] = "xmr.riefly.id:3333";
  230.  
  231. pool_api["fasthash.net"] = "https://ap43ffg.fasthash.net/pool/stats";
  232. pool_stratum["fasthash.net"] = "pool.fasthash.net:3333";
  233.  
  234. pool_api["dwarfpool.com"] = "http://dwarfpool.com/xmr";
  235. pool_stratum["dwarfpool.com (EU)"] = "xmr-eu.dwarfpool.com:8005";
  236. pool_stratum["dwarfpool.com (US)"] = "xmr-usa.dwarfpool.com:8005";
  237.  
  238. var re2 = /^https/;
  239. var re3 = /dwarfpool/;
  240. var re4 = /<b>Pool<\/b>\s+(\d+)\s+khs<br>/;
  241. var re5 = /^([^:]+):([^:]+)$/;
  242.  
  243. process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
  244.  
  245. console.log("Starting processing");
  246. for (var name in pool_stratum) {
  247. let name2 = get_name2(name);
  248. let api = pool_api[name2];
  249. let stratum = pool_stratum[name];
  250. let stratum_host;
  251. let stratum_port;
  252. let m;
  253. if (m = re5.exec(stratum)) {
  254. stratum_host = m[1];
  255. stratum_port = m[2];
  256. } else {
  257. console.log("Bad stratum: " + stratum);
  258. process.exit();
  259. }
  260.  
  261. if (result_api.hasOwnProperty(name2)) {
  262. test_stratum(name, stratum_host, stratum_port, result_api, result_stratum);
  263. continue;
  264. }
  265. result_api[name2] = "[UNDEF]";
  266. let x = re2.exec(api) ? https : http;
  267.  
  268. let timer;
  269. let req = x.get(api, res => {
  270. res.on("error", chunk => {
  271. result_api[name2] = "[DOWN]";
  272. //console.log("A DOWN");
  273. complete_result(result_api, result_stratum);
  274. });
  275. let chunks = [];
  276. res.on("data", chunk => {
  277. chunks.push(chunk);
  278. });
  279. res.on("end", () => {
  280. if (timer) clearTimeout(timer);
  281. try {
  282. let body = Buffer.concat(chunks);
  283. if (res.headers['content-encoding'] == 'deflate') {
  284. body = zlib.inflateRawSync(body);
  285. } else {
  286. body = body.toString();
  287. }
  288. var hr;
  289. if (re3.exec(api)) {
  290. var m;
  291. if (m = re4.exec(body)) {
  292. hr = m[1] * 1000;
  293. }
  294. } else {
  295. body = JSON.parse(body);
  296. hr = get_hashrate(api, body);
  297. }
  298. result_api[name2] = (typeof hr !== 'undefined' && hr !== null) ? hr : "[BAD]";
  299. //console.log("A OK");
  300. } catch (e) {
  301. result_api[name2] = "[BAD]";
  302. //console.log("A BAD");
  303. }
  304. complete_result(result_api, result_stratum);
  305. });
  306. });
  307.  
  308. req.on("error", function(e) {
  309. result_api[name2] = "[DOWN]";
  310. //console.log("A DOWN");
  311. complete_result(result_api, result_stratum);
  312. });
  313. timer = setTimeout(function() {
  314. result_api[name2] = "[TIMEOUT]";
  315. req.abort();
  316. //console.log("A TIMEOUT");
  317. complete_result(result_api, result_stratum);
  318. }, 10000);
  319.  
  320. test_stratum(name, stratum_host, stratum_port, result_api, result_stratum);
  321. }
  322. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement