knomp
Version:
An extremely efficient, highly scalable, KawPoW algorithm mining pool
333 lines (331 loc) • 12.5 kB
HTML
<style>
.chartLabel {
text-align: center;
font-size: 20px;
font-weight: 300;
}
.chartHolder {
min-height: 300px;
}
.header-blue .hero p {
color: rgba(255,255,255,0.8);
font-size: 20px;
font-weight: 400;
line-height: 1.4;
}
.header-blue .hero h1 {
color: #fff;
margin-top: 0;
margin-bottom: 15px;
line-height: 1.4;
}
.header-blue {
background-color: #738bdc;
background-image: linear-gradient(315deg, #738bdc 0%, #48c3eb 74%);
padding-bottom: 40px;
}
.card-blue {
background-color: #738bdc;
background-image: linear-gradient(315deg, #738bdc 0%, #48c3eb 74%);
color: #fff;
}
.header-blue .action-button, .header-blue .action-button:not(.disabled):active {
border: 1px solid rgba(255,255,255,0.7);
border-radius: 40px;
color: #ebeff1;
box-shadow: none;
text-shadow: none;
padding: .3rem .8rem;
background: transparent;
transition: background-color 0.25s;
outline: none;
}
.widget-blue {
background-color: #36a3f7;
color: #fff;
}
</style>
<div style="margin-top: 10px; min-height: 768px;">
<section class="title">
<div>
<div class="header-blue">
<div class="container hero">
<div class="row text-center"><br>
<div class="col-12 col-lg-12 col-xl-12">
<h1 class="display-4"><br><b>{{=(String(it.stats.coin).charAt(0).toUpperCase() + String(it.stats.coin).slice(1))}} Pool Stats Page</b></h1>
</div>
</div>
</div>
</div>
</div>
</section>
<div> <br></div>
{{ for(var pool in it.stats.pools) { }}
{{ if(pool !== it.stats.coin) continue; }}
<div class="container-fluid p-4">
<div class="row">
<div class="col-md-3">
<div class="card card-widget widget-user-2 shadow">
<div class="widget-user-header widget-blue">
<div class="widget-user-image">
<img class="img-circle elevation-2" src="/static/icons/{{=String(it.stats.coin)}}.png" alt="Coin Logo">
</div>
<h3 class="widget-user-username"><b>{{=(String(it.stats.coin).charAt(0).toUpperCase() + String(it.stats.coin).slice(1))}}</b></h3>
<h6 class="widget-user-desc">Ticker: {{=it.stats.pools[pool].symbol}}</h6>
</div>
<div class="card-footer p-0">
<ul class="nav flex-column">
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Network Hashrate</h6>
<span id="netHash" class="float-right badge bg-info" style="font-size: 16px;">{{=it.stats.pools[pool].poolStats.networkSolsString}}</span>
<br />
</div>
</li>
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Network Difficulty</h6>
<span id="netDiff" class="float-right badge bg-info" style="font-size: 16px;">{{=Number(Math.round(it.stats.pools[pool].poolStats.networkDiff + 'e' + 4) + 'e-' + 4)}}</span>
<br />
</div>
</li>
<li class="nav-item">
{{ var total = 0.0; }}
{{ var rewardRecipients = it.stats.pools[pool].rewardRecipients || {}; }}
{{ for (var r in rewardRecipients) { }}
{{ total += rewardRecipients[r]; }}
{{ } }}
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Pool Fee</h6>
<span class="float-right badge bg-info" style="font-size: 16px;">{{=total}} %</span>
<br />
</div>
</li>
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Ports</h6>
{{ for(var pool in it.poolsConfigs) { }}
{{ if(pool !== it.stats.coin) continue; }}
<span class="float-right badge bg-info" style="font-size: 16px;">{{=Object.keys(it.poolsConfigs[pool].ports)}}</span>
{{ break; }}
{{ } }}
<br />
</div>
</li>
</ul>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card card-widget widget-user-2 shadow">
<div class="widget-user-header widget-blue">
<div class="widget-user-image">
<img class="img-circle elevation-2" src="/static/icons/{{=String(it.stats.coin)}}.png" alt="Coin Logo">
</div>
<h3 class="widget-user-username"><b>Pool Information</b></h3>
<h6 class="widget-user-desc text-light">{{=(String(it.stats.coin).charAt(0).toUpperCase() + String(it.stats.coin).slice(1))}}</h6>
</div>
<div class="card-footer p-0">
<ul class="nav flex-column">
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Miners</h6>
<span id="poolMiners" class="float-right badge bg-success" style="font-size: 16px;">{{=it.stats.pools[pool].minerCount}}</span>
<br />
</div>
</li>
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Workers</h6>
<span id="poolWorkers" class="float-right badge bg-success" style="font-size: 16px;">{{=it.stats.pools[pool].workerCount}}</span>
<br />
</div>
</li>
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Pool Hashrate</h6>
<span id="poolHashRate" class="float-right badge bg-success" style="font-size: 16px;">{{=it.stats.pools[pool].hashrateString}}</span>
<br />
</div>
</li>
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Total Paid</h6>
<span id="totalPaid" class="float-right badge bg-success" style="font-size: 16px;">{{=Number(it.stats.pools[pool].poolStats.totalPaid).toFixed(3) + " " + it.stats.pools[pool].symbol}}</span>
<br />
</div>
</li>
</ul>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card card-widget widget-user-2 shadow">
<div class="widget-user-header widget-blue">
<div class="widget-user-image">
<img class="img-circle elevation-2" src="/static/icons/{{=String(it.stats.coin)}}.png" alt="Coin Logo">
</div>
<h3 class="widget-user-username"><b>General Information</b></h3>
<h6 class="widget-user-desc">{{=(String(it.stats.coin).charAt(0).toUpperCase() + String(it.stats.coin).slice(1))}}</h6>
</div>
<div class="card-footer p-0">
<ul class="nav flex-column">
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Pool TTF</h6>
<span id="timeToFind" class="float-right badge bg-warning" style="font-size: 16px;">{{=it.stats.pools[pool].timeToFind}}</span>
<br />
</div>
</li>
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Current Effort</h6>
<span id="currentEffort" class="float-right badge bg-warning" style="font-size: 16px;">{{=Number(it.stats.pools[pool].currEffort * 100).toFixed(2)}} %</span>
<br />
</div>
</li>
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Blocks Found Every</h6>
<span id="luckHour" class="float-right badge bg-warning" style="font-size: 16px;">{{=it.stats.pools[pool].luckHours}} Hours</span>
<br />
</div>
</li>
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Valid Shares</h6>
<span id="luckHour" class="float-right badge bg-warning" style="font-size: 16px;">{{=it.stats.pools[pool].poolStats.validShares}}</span>
<br />
</div>
</li>
</ul>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card card-widget widget-user-2 shadow">
<div class="widget-user-header widget-blue">
<div class="widget-user-image">
<img class="img-circle elevation-2" src="/static/icons/{{=String(it.stats.coin)}}.png" alt="Coin Logo">
</div>
<h3 class="widget-user-username"><b>Blocks Information</b></h3>
<h6 class="widget-user-desc">{{=(String(it.stats.coin).charAt(0).toUpperCase() + String(it.stats.coin).slice(1))}}</h6>
</div>
<div class="card-footer p-0">
<ul class="nav flex-column">
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Pending Blocks</h6>
<span id="pendingBlocks" class="float-right badge bg-primary" style="font-size: 16px;">{{=it.stats.pools[pool].blocks.pending}}</span>
<br />
</div>
</li>
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Confirmed Blocks</h6>
<span id="confirmedBlocks" class="float-right badge bg-primary" style="font-size: 16px;">{{=it.stats.pools[pool].blocks.confirmed}}</span>
<br />
</div>
</li>
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Block Time</h6>
<span class="float-right badge bg-primary" style="font-size: 16px;">{{=it.stats.pools[pool].blockTime}} sec</span>
<br />
</div>
</li>
<li class="nav-item">
<div class="nav-link">
<h6 class="float-left style="font-size: 16px;">Last Block Found</h6>
<span id="lastBlockTime" class="float-right badge bg-primary" style="font-size: 16px;">{{=it.stats.pools[pool].lastBlockDate}}</span>
<br />
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="container-fluid p-4">
<div class="row">
<div class="col-md-12 pl-0 pr-0">
<table class="table table-bordered table-responsive-lg">
<tbody>
<tr>
<td colspan="12" style="text-align:center;vertical-align: middle;">{{=it.stats.pools[pool].name.charAt(0).toUpperCase() + it.stats.pools[pool].name.slice(1)}} Donations: {{=(it.poolsConfigs[pool].donateaddress||'none')}}</td>
</tr>
</tbody>
</table>
</div>
</div>
{{ break; }}
{{ } }}
<div class="row"> <br></div>
<div class="row justify-content-center">
<div class="col-md-12 chartWrapper">
<div class="card">
<div class="card-header widget-blue">
<h3 class="card-title"><b>Hashrate History</b></h3>
<div class="card-tools">
<button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fas fa-minus"></i>
</button>
</div>
</div>
<div class="card-body">
<div class="chart">
<canvas id="poolHashChart" style="min-height: 300px; height: 300px; max-height: 300px; max-width: 100%;"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="row"> <br /></div>
<div class="row justify-content-center">
<div class="col-md-12 chartWrapper">
<div class="card">
<div class="card-header widget-blue">
<h3 class="card-title"><b>Pending Block History</b></h3>
<div class="card-tools">
<button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fas fa-minus"></i>
</button>
</div>
</div>
<div class="card-body">
<div class="chart">
<canvas id="blockChart" style="min-height: 300px; height: 300px; max-height: 300px; max-width: 100%;"></canvas>
</div>
</div>
</div>
</div>
</div>
<div class="row"> <br /></div>
<div class="row justify-content-center">
<div class="col-md-12 chartWrapper">
<div class="card">
<div class="card-header widget-blue">
<h3 class="card-title"><i class="fa fa-users"></i> <b>Worker History</b></h3>
<div class="card-tools">
<button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fas fa-minus"></i>
</button>
</div>
</div>
<div class="card-body">
<div class="chart">
<canvas id="poolWorkerChart" style="min-height: 300px; height: 300px; max-height: 300px; max-width: 100%;"></canvas>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
var poolName = "{{=it.stats.coin}}";
document.querySelector('main').appendChild(document.createElement('script')).src = '/static/stat_tracker.js';
document.querySelector('main').appendChild(document.createElement('script')).src = '/static/methods.js';
document.querySelector('main').appendChild(document.createElement('script')).src = '/static/pool_stats.js';
</script>