pool/web/yaamp/modules/site/common_results.php
Tanguy Pruvot c2374d1420 cron: rework tasks to update blocks status more often
should make immature blocks confirmations more accurate and help
to see which exchange slow down the cron task.

also, orphan outdated blocks (one week)) from the db if the wallet is disabled
2016-06-07 21:41:32 +02:00

594 lines
20 KiB
PHP

<?php
$mining = getdbosql('db_mining');
$showrental = (bool) YAAMP_RENTAL;
echo <<<END
<style type="text/css">
</style>
<br/><table width="100%"><tr><td valign="top">
END;
///////////////////////////////////////////////////////////////////////////////////////////////////////
showTableSorter('maintable', '{
tableClass: "dataGrid",
widgets: ["Storage","saveSort"],
textExtraction: {
5: function(node, table, cellIndex) { return $(node).attr("data"); }
},
widgetOptions: {
saveSort: true
}}');
echo <<<end
<thead>
<tr>
<th data-sorter="text" align="left">Algo</th>
<th data-sorter="" align="right"></th>
<th data-sorter="numeric" align="right">C</th>
<th data-sorter="numeric" align="right">M</th>
<th data-sorter="currency" align="right">Fee</th>
<th data-sorter="numeric" align="right">Rate</th>
<th data-sorter="currency" align="right" class="rental">Rent</th>
<th data-sorter="currency" align="right">Bad</th>
<th data-sorter="currency" align="right">Now</th>
<th data-sorter="currency" align="right" class="rental">Rent</th>
<th data-sorter="currency" align="right">Norm</th>
<th data-sorter="currency" align="right">24E</th>
<th data-sorter="currency" align="right">24A</th>
</tr>
</thead>
<tbody>
end;
$total_coins = 0;
$total_workers = 0;
$total_hashrate = 0;
$total_hashrate_bad = 0;
$algos = array();
foreach(yaamp_get_algos() as $algo)
{
$algo_norm = yaamp_get_algo_norm($algo);
$t = time() - 48*60*60;
$price = controller()->memcache->get_database_scalar("current_price-$algo",
"SELECT price FROM hashrate WHERE algo=:algo AND time>$t ORDER BY time DESC LIMIT 1", array(':algo'=>$algo));
$norm = $price*$algo_norm;
$norm = take_yaamp_fee($norm, $algo);
$algos[] = array($norm, $algo);
}
function cmp($a, $b)
{
return $a[0] < $b[0];
}
usort($algos, 'cmp');
foreach($algos as $item)
{
$norm = $item[0];
$algo = $item[1];
$algo_color = getAlgoColors($algo);
$algo_norm = yaamp_get_algo_norm($algo);
$coins = getdbocount('db_coins', "enable AND auto_ready AND algo=:algo", array(':algo'=>$algo));
$count = getdbocount('db_workers', "algo=:algo", array(':algo'=>$algo));
$total_coins += $coins;
$total_workers += $count;
$t1 = time() - 24*60*60;
$total1 = dboscalar("SELECT sum(amount*price) FROM blocks WHERE category!='orphan' AND time>$t1 AND algo=:algo", array(':algo'=>$algo));
if (!$coins && !$total1) continue;
$hashrate1 = dboscalar("SELECT avg(hashrate) FROM hashrate WHERE time>$t1 AND algo=:algo", array(':algo'=>$algo));
$hashrate = dboscalar("SELECT hashrate FROM hashrate WHERE algo=:algo ORDER BY time DESC LIMIT 1", array(':algo'=>$algo));
$hashrate_bad = dboscalar("SELECT hashrate_bad FROM hashrate WHERE algo=:algo ORDER BY time DESC LIMIT 1", array(':algo'=>$algo));
$bad = ($hashrate+$hashrate_bad)? round($hashrate_bad * 100 / ($hashrate+$hashrate_bad), 1): '';
$total_hashrate += $hashrate;
$total_hashrate_bad += $hashrate_bad;
$hashrate_sfx = $hashrate? Itoa2($hashrate).'h/s': '-';
$hashrate_bad = $hashrate_bad? Itoa2($hashrate_bad).'h/s': '-';
$hashrate_jobs = yaamp_rented_rate($algo);
$hashrate_jobs = $hashrate_jobs>0? Itoa2($hashrate_jobs).'h/s': '';
$price = dboscalar("SELECT price FROM hashrate WHERE algo=:algo ORDER BY time DESC LIMIT 1", array(':algo'=>$algo));
$price = $price? mbitcoinvaluetoa($price): '-';
$rent = dboscalar("SELECT rent FROM hashrate WHERE algo=:algo ORDER BY time DESC LIMIT 1", array(':algo'=>$algo));
$rent = $rent? mbitcoinvaluetoa($rent): '-';
$norm = mbitcoinvaluetoa($norm);
$t = time() - 24*60*60;
$avgprice = dboscalar("SELECT avg(price) FROM hashrate WHERE algo=:algo AND time>$t", array(':algo'=>$algo));
$avgprice = $avgprice? mbitcoinvaluetoa(take_yaamp_fee($avgprice, $algo)): '-';
$algo_unit_factor = yaamp_algo_mBTC_factor($algo);
$btcmhday1 = $hashrate1 != 0? mbitcoinvaluetoa($total1 / $hashrate1 * 1000000 * 1000 * $algo_unit_factor): '';
$fees = yaamp_fee($algo);
$stratum = getdbosql('db_stratums', "algo=:algo", array(':algo'=>$algo));
$isup = Booltoa($stratum);
echo '<tr class="ssrow">';
echo '<td style="background-color: '.$algo_color.'"><b>';
echo CHtml::link($algo, '/site/gomining?algo='.$algo);
echo '</b></td>';
echo '<td align="right" style="width: 16px;">'.$isup.'</td>';
echo '<td align="right" style="font-size: .8em;">'.(empty($coins) ? '-' : $coins).'</td>';
echo '<td align="right" style="font-size: .8em;">'.(empty($count) ? '-' : $count).'</td>';
echo '<td align="right" style="font-size: .8em;">'.(empty($fees) ? '-' : "$fees %").'</td>';
echo '<td align="right" style="font-size: .8em;" data="'.$hashrate.'">'.$hashrate_sfx.'</td>';
echo '<td align="right" style="font-size: .8em;" class="rental">'.$hashrate_jobs.'</td>';
if ($bad > 10)
echo '<td align="right" style="font-size: .8em; color: white; background-color: #d9534f">'.$bad.'%</td>';
else if($bad > 5)
echo '<td align="right" style="font-size: .8em; color: white; background-color: #f0ad4e">'.$bad.'%</td>';
else
echo '<td align="right" style="font-size: .8em;">'.(empty($bad) ? '-' : "$bad %").'</td>';
if ($norm>0)
echo '<td align=right style="font-size: .8em;" title="normalized '.$norm.'">'.($price == 0.0 ? '-' : $price).'</td>';
else
echo '<td align=right style="font-size: .8em;">'.($price == 0.0 ? '-' : $price).'</td>';
echo '<td align="right" style="font-size: .8em;" class="rental">'.$rent.'</td>';
// Norm
echo '<td align="right" style="font-size: .8em;">'.($norm == 0.0 ? '-' : $norm).'</td>';
// 24E
echo '<td align="right" style="font-size: .8em;">'.($avgprice == 0.0 ? '-' : $avgprice).'</td>';
// 24A
if($btcmhday1 != '-' && $btcmhday1 > $avgprice*1.1)
echo '<td align="right" style="font-size: .8em; color: white; background-color: #5cb85c">'.$btcmhday1.'</td>';
else if($btcmhday1 != '-' && $btcmhday1*1.3 < $avgprice)
echo '<td align="right" style="font-size: .8em; color: white; background-color: #d9534f">'.$btcmhday1.'</td>';
else if($btcmhday1 != '-' && $btcmhday1*1.2 < $avgprice)
echo '<td align="right" style="font-size: .8em; color: white; background-color: #e4804e">'.$btcmhday1.'</td>';
else if($btcmhday1 != '-' && $btcmhday1*1.1 < $avgprice)
echo '<td align="right" style="font-size: .8em; color: white; background-color: #f0ad4e">'.$btcmhday1.'</td>';
else
echo '<td align="right" style="font-size: .8em;">'.($btcmhday1 == 0.0 ? '-' : $btcmhday1).'</td>';
echo '</tr>';
}
echo '</tbody>';
$bad = ($total_hashrate+$total_hashrate_bad)? round($total_hashrate_bad * 100 / ($total_hashrate+$total_hashrate_bad), 1): '';
$total_hashrate = Itoa2($total_hashrate).'h/s';
echo '<tr class="ssfooter">';
echo '<td colspan="2"></td>';
echo '<td align="right" style="font-size: .8em;">'.$total_coins.'</td>';
echo '<td align="right" style="font-size: .8em;">'.$total_workers.'</td>';
echo '<td align="right" style="font-size: .8em;"></td>';
echo '<td align="right" style="font-size: .8em;">'.$total_hashrate.'</td>';
echo '<td align="right" style="font-size: .8em;" class="rental"></td>';
echo '<td align="right" style="font-size: .8em;">'.$bad.'%</td>';
echo '<td align="right" style="font-size: .8em;"></td>';
echo '<td align="right" style="font-size: .8em;" class="rental"></td>';
echo '<td align="right" style="font-size: .8em;"></td>';
echo '<td align="right" style="font-size: .8em;"></td>';
echo '</tr>';
echo '</table><br>';
///////////////////////////////////////////////////////////////////////////////////////////////////////
$markets = getdbolist('db_balances', "1 order by name");
$total_balance = 0;
$total_onsell = 0;
$total_total = 0;
echo '<table class="dataGrid">';
echo '<thead>';
echo '<tr>';
echo '<th></th>';
foreach($markets as $market)
echo '<th align="right"><a href="/site/runExchange?id='.$market->id.'">'.$market->name.'</a></th>';
echo '<th align="right">Total</th>';
echo '</tr>';
echo '</thead>';
echo '<tr class="ssrow"><td>to sell</td>';
foreach($markets as $market)
{
$onsell = bitcoinvaluetoa(dboscalar("select sum(amount*bid) from orders where market='$market->name'"));
if($onsell > 0.2)
echo '<td align="right" style="color: white; background-color: #d9534f">'.$onsell.'</td>';
else if($onsell > 0.1)
echo '<td align="right" style="color: white; background-color: #f0ad4e">'.$onsell.'</td>';
else if($onsell == 0.0)
echo '<td align="right">-</td>';
else
echo '<td align="right">'.$onsell.'</td>';
$total_onsell += $onsell;
}
$total_onsell = bitcoinvaluetoa($total_onsell);
echo '<td align="right" style="color: white; background-color: #c5b47f">'.$total_onsell.'</td>';
echo '</tr>';
echo '<tr class="ssrow"><td>balance</td>';
foreach($markets as $market)
{
$balance = bitcoinvaluetoa($market->balance);
if($balance > 0.250)
echo '<td align="right" style="color: white; background-color: #5cb85c">'.$balance.'</td>';
else if($balance > 0.200)
echo '<td align="right" style="color: white; background-color: #f0ad4e">'.$balance.'</td>';
else if($market->balance == 0.0)
echo '<td align="right">-</td>';
else
echo '<td align="right">'.$balance.'</td>';
$total_balance += $balance;
}
$total_balance = bitcoinvaluetoa($total_balance);
echo '<td align="right" style="color: white; background-color: #eaa228">'.$total_balance.'</td>';
echo '</tr>';
echo '<tr class="ssrow"><td>total</td>';
foreach($markets as $market)
{
$total = $market->balance + dboscalar("select sum(amount*bid) from orders where market='$market->name'");
echo '<td align="right">'.($total > 0.0 ? bitcoinvaluetoa($total) : '-').'</td>';
$total_total += $total;
}
$total_total = bitcoinvaluetoa($total_total);
echo '<td align="right">'.$total_total.'</td>';
echo '</tr>';
echo '</table><br/>';
//////////////////////////////////////////////////////////////////////////////////////////////////
$minsent = time()-2*60*60;
$list = getdbolist('db_markets', "lastsent<$minsent and lastsent>lasttraded order by lastsent");
echo '<table class="dataGrid">';
echo '<thead class="">';
echo '<tr>';
echo '<th width="20px"></th>';
echo '<th>Name</th>';
echo '<th>Exchange</th>';
echo '<th>Sent</th>';
echo '<th>Traded</th>';
echo '<th></th>';
echo '</tr>';
echo '</thead><tbody>';
foreach($list as $market)
{
$price = bitcoinvaluetoa($market->price);
$coin = getdbo('db_coins', $market->coinid);
$marketurl = getMarketUrl($coin, $market->name);
// echo '<tr class="ssrow">';
$algo_color = getAlgoColors($coin->algo);
echo '<tr style="background-color: '.$algo_color.';">';
echo '<td><img width="16px" src="'.$coin->image.'"></td>';
echo '<td><b><a href="/site/coin?id='.$coin->id.'">'.$coin->name.' ('.$coin->symbol.')</a></b></td>';
echo '<td><b><a href="'.$marketurl.'" target="_blank">'.$market->name.'</a></b></td>';
$sent = datetoa2($market->lastsent);
$traded = datetoa2($market->lasttraded);
echo '<td>'.$sent.' ago</td>';
echo '<td>'.$traded.' ago</td>';
echo '<td><a href="/site/clearmarket?id='.$market->id.'">clear</a></td>';
echo '</tr>';
}
echo '</tbody></table><br>';
//////////////////////////////////////////////////////////////////////////////////////////////////
$orders = getdbolist('db_orders', "1 order by (amount*bid) desc");
echo '<table class="dataGrid">';
//showTableSorter('maintable');
echo '<thead>';
echo '<tr>';
echo '<th width="20px"></th>';
echo '<th>Name</th>';
echo '<th>Exchange</th>';
echo '<th>Created</th>';
echo '<th>Quantity</th>';
echo '<th>Ask</th>';
echo '<th>Bid</th>';
echo '<th>Value</th>';
echo '<th></th>';
echo '</tr>';
echo '</thead><tbody>';
$totalvalue = 0;
$totalbid = 0;
foreach($orders as $order)
{
$coin = getdbo('db_coins', $order->coinid);
if(!$coin) continue;
$marketurl = getMarketUrl($coin, $order->market);
$algo_color = getAlgoColors($coin->algo);
echo '<tr class="ssrow" style="background-color: '.$algo_color.';">';
$created = datetoa2($order->created). ' ago';
$price = $order->price? bitcoinvaluetoa($order->price): '';
$price = bitcoinvaluetoa($order->price);
$bid = bitcoinvaluetoa($order->bid);
$value = bitcoinvaluetoa($order->amount*$order->price);
$bidvalue = bitcoinvaluetoa($order->amount*$order->bid);
$totalvalue += $value;
$totalbid += $bidvalue;
$bidpercent = $value>0? round(($value-$bidvalue)/$value*100, 1): 0;
$amount = round($order->amount, 3);
echo '<td><img width="16px" src="'.$coin->image.'"></td>';
echo '<td><b><a href="/site/coin?id='.$coin->id.'">'.$coin->name.'</a></b></td>';
echo '<td><b><a href="'.$marketurl.'" target="_blank">'.$order->market.'</a></b></td>';
echo '<td style="font-size: .8em">'.$created.'</td>';
echo '<td style="font-size: .8em">'.$amount.'</td>';
echo '<td style="font-size: .8em">'.$price.'</td>';
echo '<td style="font-size: .8em">'."$bid ({$bidpercent}%)".'</td>';
echo $bidvalue>0.01? '<td style="font-size: .8em;"><b>'.$bidvalue.'</b></td>': '<td style="font-size: .8em;">'.$bidvalue.'</td>';
echo '<td>';
echo '<a href="/site/cancelorder?id='.$order->id.'" title="Cancel the order on the exchange!">cancel</a> ';
echo '<a href="/site/clearorder?id='.$order->id.'" title="Clear the order from the DB, NOT FROM THE EXCHANGE!">clear</a> ';
// echo '<a href="/site/sellorder?id='.$order->id.'">sell</a>';
echo '</td>';
echo '</tr>';
}
$bidpercent = $totalvalue>0? round(($totalvalue-$totalbid)/$totalvalue*100, 1): '';
if ($totalvalue) {
echo '<tr>';
echo '<td></td>';
echo '<td>Total</td>';
echo '<td colspan="3"></td>';
echo '<td style="font-size: .8em;"><b>'.$totalvalue.'</b></td>';
echo '<td style="font-size: .8em;"><b>'."$totalbid ({$bidpercent}%)</b></td>";
echo '<td></td>';
echo '</tr>';
}
echo '</tbody></table><br>';
///////////////////////////////////////////////////////////////////////////////////////
echo '</td><td>&nbsp;&nbsp;</td><td valign="top">';
//////////////////////////////////////////////////////////////////////////////////
function cronstate2text($state)
{
switch($state - 1)
{
case 0:
return 'new coins';
case 1:
return 'trade';
case 2:
return 'trade2';
case 3:
return 'prices';
case 4:
return 'blocks';
case 5:
return 'sell';
case 6:
return 'find2';
default:
return '';
}
}
//$state_block = memcache_get($this->memcache->memcache, 'cronjob_block_state');
$state_main = memcache_get($this->memcache->memcache, 'cronjob_main_state');
$btc = getdbosql('db_coins', "symbol='BTC'");
if (!$btc) $btc = json_decode('{"id": 6, "balance": 0}');
echo '<span style="font-weight: bold; color: red;">';
for($i=0; $i<10; $i++)
{
// if($i != $state_block-1 && $state_block>0)
// {
// $state = memcache_get($this->memcache->memcache, "cronjob_block_state_$i");
// if($state) echo "block $i ";
// }
if($i != $state_main-1 && $state_main>0)
{
$state = memcache_get($this->memcache->memcache, "cronjob_main_state_$i");
if($state) echo "main $i ";
}
}
echo '</span>';
$block_time = sectoa(time()-memcache_get($this->memcache->memcache, "cronjob_block_time_start"));
$loop2_time = sectoa(time()-memcache_get($this->memcache->memcache, "cronjob_loop2_time_start"));
$main_time2 = sectoa(time()-memcache_get($this->memcache->memcache, "cronjob_main_time_start"));
$main_time = sectoa(memcache_get($this->memcache->memcache, "cronjob_main_time"));
$main_text = cronstate2text($state_main);
echo "*** main ($main_time) $state_main $main_text ($main_time2), loop2 ($loop2_time), block ($block_time)<br>";
$topay = dboscalar("select sum(balance) from accounts where coinid=$btc->id"); //here: take other currencies too
$topay2 = bitcoinvaluetoa(dboscalar("select sum(balance) from accounts where coinid=$btc->id and balance>0.001"));
$renter = dboscalar("select sum(balance) from renters");
$stats = getdbosql('db_stats', "1 order by time desc");
$margin2 = bitcoinvaluetoa($btc->balance - $topay - $renter + $stats->balances + $stats->onsell + $stats->wallets);
$margin = bitcoinvaluetoa($btc->balance - $topay - $renter);
$topay = bitcoinvaluetoa($topay);
$renter = bitcoinvaluetoa($renter);
$immature = dboscalar("select sum(amount*price) from earnings where status=0");
$mints = dboscalar("select sum(mint*price) from coins where enable");
$off = $mints-$immature;
$immature = bitcoinvaluetoa($immature);
$mints = bitcoinvaluetoa($mints);
$off = bitcoinvaluetoa($off);
$btcaddr = YAAMP_BTCADDRESS; //'14LS7Uda6EZGXLtRrFEZ2kWmarrxobkyu9';
echo '<a href="https://www.okcoin.com/market.do" target="_blank">Bitstamp '.$mining->usdbtc.'</a>, ';
echo '<a href="https://blockchain.info/address/'.$btcaddr.'" target="_blank">wallet '.$btc->balance.'</a>, next payout '.$topay2.'<br/>';
echo "pay $topay, renter $renter, marg $margin, $margin2<br/>";
echo "mint $mints immature $immature off $off<br/>";
echo '<br/>';
//////////////////////////////////////////////////////////////////////////////////////////////////
echo '<div style="height: 160px;" id="graph_results_negative"></div>';
//echo '<div style="height: 160px;' id="graph_results_profit"></div>';
echo '<div style="height: 200px;" id="graph_results_assets"></div>';
///////////////////////////////////////////////////////////////////////////
$db_blocks = getdbolist('db_blocks', "1 order by time desc limit 50");
echo '<br><table class="dataGrid">';
echo '<thead>';
echo '<tr>';
echo '<th></th>';
echo '<th>Name</th>';
echo '<th align=right>Amount</th>';
echo '<th align=right>Diff</th>';
echo '<th align=right>Block</th>';
echo '<th align=right>Time</th>';
echo '<th align=right>Status</th>';
echo '</tr>';
echo '</thead>';
foreach($db_blocks as $db_block)
{
$d = datetoa2($db_block->time);
if(!$db_block->coin_id)
{
if (!$showrental)
continue;
$reward = bitcoinvaluetoa($db_block->amount);
$algo_color = getAlgoColors($db_block->algo);
echo '<tr style="background-color: '.$algo_color.';">';
echo '<td width="18px"><img width="16px" src="/images/btc.png"></td>';
echo '<td><b>Rental</b> ('.$db_block->algo.')</td>';
echo '<td align="right" style="font-size: .8em"><b>$reward BTC</b></td>';
echo '<td align="right" style="font-size: .8em"></td>';
echo '<td align="right" style="font-size: .8em"></td>';
echo '<td align="right" style="font-size: .8em">'.$d.' ago</td>';
echo '<td align="right" style="font-size: .8em">';
echo '<span style="padding: 2px; color: white; background-color: #5cb85c;">Confirmed</span>';
echo '</td>';
echo '</tr>';
continue;
}
$coin = getdbo('db_coins', $db_block->coin_id);
if(!$coin)
{
debuglog("coin not found {$db_block->coin_id}");
continue;
}
$height = number_format($db_block->height, 0, '.', ' ');
$diff = Itoa2($db_block->difficulty, 3);
$algo_color = getAlgoColors($coin->algo);
echo '<tr style="background-color: '.$algo_color.';">';
echo '<td width="18px"><img width="16px" src="'.$coin->image.'"></td>';
echo '<td><b><a href="/site/coin?id='.$coin->id.'">'.$coin->name.'</a></b></td>';
echo '<td align="right" style="font-size: .8em">'.$db_block->amount.' '.$coin->symbol.'</td>';
echo '<td align="right" style="font-size: .8em" title="found '.$db_block->difficulty_user.'">'.$diff.'</td>';
echo '<td align="right" style="font-size: .8em">'.$height.'</td>';
echo '<td align="right" style="font-size: .8em">'.$d.' ago</td>';
echo '<td align="right" style="font-size: .8em">';
if($db_block->category == 'orphan')
echo '<span class="block orphan" style="padding: 2px; color: white; background-color: #d9534f;">Orphan</span>';
else if($db_block->category == 'immature')
echo '<span class="block immature" style="padding: 2px; color: white; background-color: #f0ad4e">Immature ('.$db_block->confirmations.')</span>';
else if($db_block->category == 'stake')
echo '<span class="block stake" style="padding: 2px; color: white; background-color: #a0a0a0">Stake ('.$db_block->confirmations.')</span>';
else if($db_block->category == 'generated')
echo '<span class="block staked" style="padding: 2px; color: white; background-color: #a0a0a0">Confirmed</span>';
else if($db_block->category == 'generate')
echo '<span class="block generate" style="padding: 2px; color: white; background-color: #5cb85c">Confirmed</span>';
else if($db_block->category == 'new')
echo '<span class="block new" style="padding: 2px; color: white; background-color: #ad4ef0">New</span>';
echo '</td>';
echo '</tr>';
}
echo '</table><br/>';
echo '</td></tr></table>';
?>
<?php if (!$showrental) : ?>
<style type="text/css">
.dataGrid .rental { display: none; }
</style>
<?php endif; ?>