wownero-puddle/src/webui-embed.html

157 lines
5.8 KiB
HTML

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
font-family: "Courier New", Courier, monospace;
}
header {
font-size: larger;
font-weight: bold;
padding-bottom: 1em;
}
table {
padding-bottom: 1em;
}
td {
vertical-align: top;
white-space: nowrap;
}
td:last-child {
white-space: unset;
}
.wallet {
display: none;
}
</style>
</head>
<body>
<header>Monero Mining Pool</header>
<table>
<tr><td>Pool HR: </td><td id="pool_hashrate"></td></tr>
<tr><td>Network HR: </td><td id="network_hashrate"></td></tr>
<tr><td>Network height: </td><td id="network_height"></td></tr>
<tr><td>Blocks found: </td><td id="pool_blocks_found"></td></tr>
<tr><td>Last block found: </td><td id="last_block_found"></td></tr>
<tr><td>Last template: </td><td id="last_template_fetched"></td></tr>
<tr><td>Payment threshold: </td><td id="payment_threshold"></td></tr>
<tr><td>Pool fee: </td><td id="pool_fee"></td></tr>
<tr><td>Pool port: </td><td id="pool_port"></td></tr>
<tr><td>Allow self-select: </td><td id="allow_self_select"></td></tr>
<tr><td>Miners connected: </td><td id="connected_miners"></td></tr>
<tr class="wallet"><td>Your HR: </td><td id="miner_hashrate"></td></tr>
<tr class="wallet"><td>Balance due: </td><td id="miner_balance"></td></tr>
<tr>
<td>Miner address: </td>
<td>
<form>
<input type="text" id="wa" name="wa" />
<input type="submit" value="Submit" />
</form>
</td>
</tr>
</table>
<small><a href="https://github.com/jtgrassie/monero-pool">https://github.com/jtgrassie/monero-pool</a></small>
<script>
function format_last_time(last)
{
var now = new Date().getTime() / 1000;
var diff = now - last;
var v;
if (last == 0)
return "None yet";
else if (diff < 60)
{
v = parseInt(diff);
return v + " second" + (v != 1 ? "s" : "") + " ago";
}
else if (diff < 3600)
{
v = parseInt(diff/60);
return v + " minute" + (v != 1 ? "s" : "") + " ago";
}
else if (diff < 86400)
{
v = parseInt(diff/3600);
return v + " hour" + (v != 1 ? "s" : "") + " ago";
}
else
{
v = parseInt(diff/86400);
return v + " day" + (v != 1 ? "s" : "") + " ago";
}
}
function format_hashrate(hr)
{
if (hr < 1000)
return parseInt(hr) + " H/s";
else if (hr < 1000000)
return parseFloat(hr/1000).toFixed(2) + " KH/s";
else if (hr < 1000000000000)
return parseFloat(hr/1000000).toFixed(2) + " MH/s";
else
return parseFloat(hr/1000000000000).toFixed(2) + " GH/s";
}
var f = document.querySelector("form");
var wa = document.querySelector("#wa");
var xhr = new XMLHttpRequest();
xhr.onload = function()
{
var stats = JSON.parse(xhr.responseText);
for (var e in stats)
{
var el = document.querySelector("#"+e);
if (!el)
continue;
if (e == "last_block_found" || e == "last_template_fetched")
el.innerHTML = format_last_time(stats[e]);
else if (/hashrate/.test(e))
el.innerHTML = format_hashrate(stats[e]);
else if (e == "pool_fee")
el.innerHTML = (stats[e]*100) + "%";
else if (e == "allow_self_select")
el.innerHTML = stats[e] == 1 ? "Yes" : "No";
else
el.innerHTML = stats[e];
}
};
f.onsubmit = function(e)
{
e.preventDefault();
var d = new Date();
d.setTime(d.getTime() + (86400 * 365 * 1000));
document.cookie = "wa=" + wa.value + ";expires=" + d.toGMTString();
window.location.reload();
return false;
};
window.onload = function()
{
if (/wa=[0-9a-fA-F]+/.test(document.cookie))
{
var wh = document.querySelectorAll(".wallet");
wh.forEach(function(e)
{
e.style = "display: table-row;";
});
var c = document.cookie.split("=");
wa.value = c[1];
}
var get_stats = function()
{
xhr.open("GET", "/stats");
xhr.send(null);
};
setInterval(get_stats, 30000);
get_stats();
};
</script>
</body>
</html>