Merge pull request #794 from obigal/next
Admin poolworkers average difficulty fixes
This commit is contained in:
commit
61f6c99363
@ -731,6 +731,32 @@ class Statistics {
|
||||
}
|
||||
return $aEstimates;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get pool stats last 24 hours
|
||||
* @param limit int Last number of hours
|
||||
* @return array
|
||||
**/
|
||||
public function getPoolStatsHours($hour=24) {
|
||||
$this->debug->append("STA " . __METHOD__, 4);
|
||||
if ($data = $this->memcache->get(__FUNCTION__ . $hour)) return $data;
|
||||
$stmt = $this->mysqli->prepare("
|
||||
SELECT
|
||||
IFNULL(COUNT(id), 0) as count,
|
||||
IFNULL(AVG(difficulty), 0) as average,
|
||||
IFNULL(ROUND(SUM((difficulty * 65536) / POW(2, (" . $this->config['difficulty'] . " -16))), 0), 0) AS expected,
|
||||
IFNULL(ROUND(SUM(shares)), 0) as shares,
|
||||
IFNULL(SUM(amount), 0) as rewards
|
||||
FROM " . $this->block->getTableName() . "
|
||||
WHERE FROM_UNIXTIME(time) > DATE_SUB(now(), INTERVAL ? HOUR)
|
||||
AND confirmations >= 1");
|
||||
if ($this->checkStmt($stmt) && $stmt->bind_param("i", $hour) && $stmt->execute() && $result = $stmt->get_result())
|
||||
return $this->memcache->setCache(__FUNCTION__ . $hour, $result->fetch_assoc());
|
||||
// Catchall
|
||||
$this->debug->append("Failed to get pool statistics:" . $this->mysqli->error);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -181,28 +181,46 @@ class Worker {
|
||||
* @param limit int
|
||||
* @return mixed array Workers and their settings or false
|
||||
**/
|
||||
public function getAllWorkers($iLimit=0) {
|
||||
public function getAllWorkers($iLimit=0, $interval=600) {
|
||||
$this->debug->append("STA " . __METHOD__, 4);
|
||||
$stmt = $this->mysqli->prepare("
|
||||
SELECT id, username, password, monitor, difficulty,
|
||||
SELECT id, username, password, monitor,
|
||||
IFNULL(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty), 0) AS difficulty,
|
||||
(
|
||||
SELECT
|
||||
IFNULL(IF(our_result='Y', ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * 65536 / 600 / 1000), 0), 0) AS hashrate
|
||||
IFNULL(IF(our_result='Y', ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * 65536 / ? / 1000), 0), 0) AS hashrate
|
||||
FROM " . $this->share->getTableName() . "
|
||||
WHERE
|
||||
username = w.username
|
||||
AND time > DATE_SUB(now(), INTERVAL 10 MINUTE)
|
||||
) + (
|
||||
SELECT
|
||||
IFNULL(IF(our_result='Y', ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * 65536 / 600 / 1000), 0), 0) AS hashrate
|
||||
AND time > DATE_SUB(now(), INTERVAL ? SECOND)
|
||||
) + (
|
||||
SELECT
|
||||
IFNULL(IF(our_result='Y', ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * 65536 / ? / 1000), 0), 0) AS hashrate
|
||||
FROM " . $this->share->getArchiveTableName() . "
|
||||
WHERE
|
||||
username = w.username
|
||||
AND time > DATE_SUB(now(), INTERVAL 10 MINUTE)
|
||||
) AS hashrate
|
||||
AND time > DATE_SUB(now(), INTERVAL ? SECOND)
|
||||
) AS hashrate,
|
||||
((
|
||||
SELECT IFNULL(ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)), 2), 0)
|
||||
FROM " . $this->share->getTableName() . "
|
||||
WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND)
|
||||
) + (
|
||||
SELECT IFNULL(ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)), 2), 0)
|
||||
FROM " . $this->share->getArchiveTableName() . "
|
||||
WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND)
|
||||
)) / ((
|
||||
SELECT COUNT(id)
|
||||
FROM " . $this->share->getTableName() . "
|
||||
WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND)
|
||||
) + (
|
||||
SELECT COUNT(id)
|
||||
FROM " . $this->share->getArchiveTableName() . "
|
||||
WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND)
|
||||
)) AS avg_difficulty
|
||||
FROM $this->table AS w
|
||||
ORDER BY hashrate DESC LIMIT ?");
|
||||
if ($this->checkStmt($stmt) && $stmt->bind_param('i', $iLimit) && $stmt->execute() && $result = $stmt->get_result())
|
||||
if ($this->checkStmt($stmt) && $stmt->bind_param('iiiiiiiii', $interval, $interval, $interval, $interval, $interval, $interval, $interval, $interval, $iLimit) && $stmt->execute() && $result = $stmt->get_result())
|
||||
return $result->fetch_all(MYSQLI_ASSOC);
|
||||
// Catchall
|
||||
$this->setErrorMessage('Failed to fetch workers');
|
||||
|
||||
@ -68,11 +68,15 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) {
|
||||
}
|
||||
}
|
||||
}
|
||||
//var_dump($aBlocksFoundData);
|
||||
|
||||
$iHours = 24;
|
||||
$aPoolStatistics = $statistics->getPoolStatsHours($iHours);
|
||||
|
||||
// Propagate content our template
|
||||
$smarty->assign("BLOCKSFOUND", $aBlocksFoundData);
|
||||
$smarty->assign("BLOCKLIMIT", $iLimit);
|
||||
$smarty->assign("USEBLOCKAVERAGE", $use_average);
|
||||
$smarty->assign("POOLSTATS", $aPoolStatistics);
|
||||
} else {
|
||||
$debug->append('Using cached page', 3);
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
{if $GLOBAL.config.disable_notifications != 1}<th class="center">Monitor</th>{/if}
|
||||
<th class="right">Khash/s</th>
|
||||
<th class="right">Difficulty</th>
|
||||
<th class="right">Avg Difficulty</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{nocache}
|
||||
@ -25,6 +26,7 @@
|
||||
{/if}
|
||||
<td class="right">{$WORKERS[worker].hashrate|number_format|default:"0"}</td>
|
||||
<td class="right">{if $WORKERS[worker].hashrate > 0}{$WORKERS[worker].difficulty|number_format:"2"|default:"0"}{else}0{/if}</td>
|
||||
<td class="right">{if $WORKERS[worker].hashrate > 0}{$WORKERS[worker].avg_difficulty|number_format:"2"|default:"0"}{else}0{/if}</td>
|
||||
</tr>
|
||||
{/section}
|
||||
{/nocache}
|
||||
|
||||
@ -40,6 +40,35 @@
|
||||
The graph above illustrates N shares to find a block vs. E Shares expected to find a block based on
|
||||
target and network difficulty and assuming a zero variance scenario.
|
||||
</p>
|
||||
|
||||
<table width="100%" style="font-size:13px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="center" colspan="6">Last 24 hour totals</th>
|
||||
</tr>
|
||||
<tr style="background-color:#B6DAFF;">
|
||||
<th class="center">Blocks Found</th>
|
||||
<th class="center">Rewards</th>
|
||||
<th class="center">Avg Difficulty</th>
|
||||
<th class="center">Expected Shares</th>
|
||||
<th class="center">Actual Shares</th>
|
||||
<th class="center">Percentage</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{assign var=percentage1 value=0}
|
||||
<tr>
|
||||
<td class="center">{$POOLSTATS.count|number_format:"0"}</td>
|
||||
<td class="center">{$POOLSTATS.rewards|number_format:"4"}</td>
|
||||
<td class="center">{$POOLSTATS.average|number_format:"4"}</td>
|
||||
<td class="center">{$POOLSTATS.expected|number_format:"0"}</td>
|
||||
<td class="center">{$POOLSTATS.shares|number_format:"0"}</td>
|
||||
<td class="center">{if $POOLSTATS.shares > 0}{math assign="percentage1" equation="shares1 / estshares1 * 100" shares1=$POOLSTATS.shares estshares1=$POOLSTATS.expected}{/if}
|
||||
<font color="{if ($percentage1 <= 100)}green{else}red{/if}">{$percentage1|number_format:"2"}</font></b></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table align="left" width="100%" border="0" style="font-size:13px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
|
||||
@ -8,7 +8,8 @@
|
||||
<th align="center">Active</th>
|
||||
{if $GLOBAL.config.disable_notifications != 1}<th align="center">Monitor</th>{/if}
|
||||
<th align="right">Khash/s</th>
|
||||
<th align="right" style="padding-right: 25px;">Difficulty</th>
|
||||
<th align="right">Difficulty</th>
|
||||
<th align="right" style="padding-right: 25px;">Avg Difficulty</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{nocache}
|
||||
@ -22,7 +23,8 @@
|
||||
<td align="center"><i class="icon-{if $WORKERS[worker].monitor}ok{else}cancel{/if}"></i></td>
|
||||
{/if}
|
||||
<td align="right">{$WORKERS[worker].hashrate|number_format|default:"0"}</td>
|
||||
<td align="right" style="padding-right: 25px;">{if $WORKERS[worker].hashrate > 0}{$WORKERS[worker].difficulty|number_format:"2"|default:"0"}{else}0{/if}</td>
|
||||
<td align="right">{if $WORKERS[worker].hashrate > 0}{$WORKERS[worker].difficulty|number_format:"2"|default:"0"}{else}0{/if}</td>
|
||||
<td align="right" style="padding-right: 25px;">{if $WORKERS[worker].hashrate > 0}{$WORKERS[worker].avg_difficulty|number_format:"2"|default:"0"}{else}0{/if}</td>
|
||||
</tr>
|
||||
{/section}
|
||||
{/nocache}
|
||||
|
||||
@ -36,6 +36,36 @@
|
||||
</tr>{/if}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
<table class="tablesorter">
|
||||
<thead>
|
||||
<tr>
|
||||
<th align="center" colspan="6">Last 24 hour totals</th>
|
||||
</tr>
|
||||
<tr style="background-color:#B6DAFF;">
|
||||
<th align="center">Blocks Found</th>
|
||||
<th align="center">Rewards</th>
|
||||
<th align="center">Avg Difficulty</th>
|
||||
<th align="center">Expected Shares</th>
|
||||
<th align="center">Actual Shares</th>
|
||||
<th align="center" style="padding-right: 25px;">Percentage</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{assign var=percentage1 value=0}
|
||||
<tr>
|
||||
<td align="center">{$POOLSTATS.count|number_format:"0"}</td>
|
||||
<td align="center">{$POOLSTATS.rewards|number_format:"4"}</td>
|
||||
<td align="center">{$POOLSTATS.average|number_format:"4"}</td>
|
||||
<td align="center">{$POOLSTATS.expected|number_format:"0"}</td>
|
||||
<td align="center">{$POOLSTATS.shares|number_format:"0"}</td>
|
||||
<td align="center" style="padding-right: 25px;">{if $POOLSTATS.shares > 0}{math assign="percentage1" equation="shares1 / estshares1 * 100" shares1=$POOLSTATS.shares estshares1=$POOLSTATS.expected}{/if}
|
||||
<font color="{if ($percentage1 <= 100)}green{else}red{/if}">{$percentage1|number_format:"2"}</font></b></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table class="tablesorter">
|
||||
<tbody>
|
||||
<tr>
|
||||
@ -77,7 +107,6 @@
|
||||
{assign var=count value=0}
|
||||
{assign var=totalexpectedshares value=0}
|
||||
{assign var=totalshares value=0}
|
||||
{assign var=totalpercentage value=0}
|
||||
{assign var=pplnsshares value=0}
|
||||
{section block $BLOCKSFOUND}
|
||||
{assign var="totalshares" value=$totalshares+$BLOCKSFOUND[block].shares}
|
||||
@ -110,7 +139,6 @@
|
||||
<td align="right">{$BLOCKSFOUND[block].shares|number_format}</td>
|
||||
<td align="right" style="padding-right: 25px;">
|
||||
{math assign="percentage" equation="shares / estshares * 100" shares=$BLOCKSFOUND[block].shares estshares=$BLOCKSFOUND[block].estshares}
|
||||
{assign var="totalpercentage" value=$totalpercentage+$percentage}
|
||||
<font color="{if ($percentage <= 100)}green{else}red{/if}">{$percentage|number_format:"2"}</font>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user