Fixing worker hashrates and activity status
* Fix hashrate calculations and include archived shares * Fix worker activity to only check for our_result = Y shares * Mark as active if worker has a hashrate > 0, removes a query Addresses #561, crons need to be updated to remove the active flag from as the worker activity and check the hashrate instead.
This commit is contained in:
parent
3bc1f780f2
commit
073a42cfc8
@ -95,15 +95,27 @@ class Worker {
|
|||||||
$this->debug->append("STA " . __METHOD__, 4);
|
$this->debug->append("STA " . __METHOD__, 4);
|
||||||
$stmt = $this->mysqli->prepare("
|
$stmt = $this->mysqli->prepare("
|
||||||
SELECT id, username, password, monitor,
|
SELECT id, username, password, monitor,
|
||||||
( SELECT SIGN(COUNT(id)) FROM " . $this->share->getTableName() . " WHERE username = $this->table.username AND time > DATE_SUB(now(), INTERVAL 10 MINUTE)) AS active,
|
(
|
||||||
( SELECT ROUND(COUNT(id) * POW(2, " . $this->config['difficulty'] . ")/600/1000) FROM " . $this->share->getTableName() . " WHERE username = $this->table.username AND time > DATE_SUB(now(), INTERVAL 10 MINUTE)) AS hashrate
|
SELECT
|
||||||
FROM $this->table
|
IFNULL(IF(our_result='Y', ROUND(COUNT(id) * POW(2, " . $this->config['difficulty'] . ") / 600 / 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(COUNT(id) * POW(2, " . $this->config['difficulty'] . ") / 600 / 1000), 0), 0) AS hashrate
|
||||||
|
FROM " . $this->share->getArchiveTableName() . "
|
||||||
|
WHERE
|
||||||
|
username = w.username
|
||||||
|
AND time > DATE_SUB(now(), INTERVAL 10 MINUTE)
|
||||||
|
) AS hashrate
|
||||||
|
FROM $this->table AS w
|
||||||
WHERE id = ?
|
WHERE id = ?
|
||||||
");
|
");
|
||||||
if ($this->checkStmt($stmt) && $stmt->bind_param('i', $id) && $stmt->execute() && $result = $stmt->get_result())
|
if ($this->checkStmt($stmt) && $stmt->bind_param('i', $id) && $stmt->execute() && $result = $stmt->get_result())
|
||||||
return $result->fetch_assoc();
|
return $result->fetch_assoc();
|
||||||
// Catchall
|
// Catchall
|
||||||
echo $this->mysqli->error;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,9 +128,22 @@ class Worker {
|
|||||||
$this->debug->append("STA " . __METHOD__, 4);
|
$this->debug->append("STA " . __METHOD__, 4);
|
||||||
$stmt = $this->mysqli->prepare("
|
$stmt = $this->mysqli->prepare("
|
||||||
SELECT id, username, password, monitor,
|
SELECT id, username, password, monitor,
|
||||||
( SELECT SIGN(COUNT(id)) FROM " . $this->share->getTableName() . " WHERE our_result = 'Y' AND username = $this->table.username AND time > DATE_SUB(now(), INTERVAL 10 MINUTE)) AS active,
|
(
|
||||||
( SELECT ROUND(COUNT(id) * POW(2, " . $this->config['difficulty'] . ")/600/1000) FROM " . $this->share->getTableName() . " WHERE our_result = 'Y' AND username = $this->table.username AND time > DATE_SUB(now(), INTERVAL 10 MINUTE)) AS hashrate
|
SELECT
|
||||||
FROM $this->table
|
IFNULL(IF(our_result='Y', ROUND(COUNT(id) * POW(2, " . $this->config['difficulty'] . ") / 600 / 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(COUNT(id) * POW(2, " . $this->config['difficulty'] . ") / 600 / 1000), 0), 0) AS hashrate
|
||||||
|
FROM " . $this->share->getArchiveTableName() . "
|
||||||
|
WHERE
|
||||||
|
username = w.username
|
||||||
|
AND time > DATE_SUB(now(), INTERVAL 10 MINUTE)
|
||||||
|
) AS hashrate
|
||||||
|
FROM $this->table AS w
|
||||||
WHERE account_id = ?");
|
WHERE account_id = ?");
|
||||||
if ($this->checkStmt($stmt) && $stmt->bind_param('i', $account_id) && $stmt->execute() && $result = $stmt->get_result())
|
if ($this->checkStmt($stmt) && $stmt->bind_param('i', $account_id) && $stmt->execute() && $result = $stmt->get_result())
|
||||||
return $result->fetch_all(MYSQLI_ASSOC);
|
return $result->fetch_all(MYSQLI_ASSOC);
|
||||||
@ -135,7 +160,7 @@ class Worker {
|
|||||||
**/
|
**/
|
||||||
public function getCountAllActiveWorkers() {
|
public function getCountAllActiveWorkers() {
|
||||||
$this->debug->append("STA " . __METHOD__, 4);
|
$this->debug->append("STA " . __METHOD__, 4);
|
||||||
$stmt = $this->mysqli->prepare("SELECT IFNULL(COUNT(DISTINCT username), 0) AS total FROM " . $this->share->getTableName() . " WHERE time > DATE_SUB(now(), INTERVAL 10 MINUTE)");
|
$stmt = $this->mysqli->prepare("SELECT IFNULL(IF(our_result='Y', COUNT(DISTINCT username), 0), 0) AS total FROM " . $this->share->getTableName() . " WHERE time > DATE_SUB(now(), INTERVAL 10 MINUTE)");
|
||||||
if ($this->checkStmt($stmt) && $stmt->execute() && $result = $stmt->get_result())
|
if ($this->checkStmt($stmt) && $stmt->execute() && $result = $stmt->get_result())
|
||||||
return $result->fetch_object()->total;
|
return $result->fetch_object()->total;
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -19,9 +19,9 @@
|
|||||||
{section worker $WORKERS}
|
{section worker $WORKERS}
|
||||||
{assign var="username" value="."|escape|explode:$WORKERS[worker].username:2}
|
{assign var="username" value="."|escape|explode:$WORKERS[worker].username:2}
|
||||||
<tr>
|
<tr>
|
||||||
<td{if $WORKERS[worker].active} style="color: orange"{/if}>{$username.0|escape}.<input name="data[{$WORKERS[worker].id}][username]" value="{$username.1|escape}" size="10" required/></td>
|
<td{if $WORKERS[worker].hashrate > 0} style="color: orange"{/if}>{$username.0|escape}.<input name="data[{$WORKERS[worker].id}][username]" value="{$username.1|escape}" size="10" required/></td>
|
||||||
<td><input type="text" name="data[{$WORKERS[worker].id}][password]" value="{$WORKERS[worker].password|escape}" size="10" required></td>
|
<td><input type="text" name="data[{$WORKERS[worker].id}][password]" value="{$WORKERS[worker].password|escape}" size="10" required></td>
|
||||||
<td class="center"><img src="{$PATH}/images/{if $WORKERS[worker].active}success{else}error{/if}.gif" /></td>
|
<td class="center"><img src="{$PATH}/images/{if $WORKERS[worker].hashrate > 0}success{else}error{/if}.gif" /></td>
|
||||||
{if $GLOBAL.config.disable_notifications != 1}
|
{if $GLOBAL.config.disable_notifications != 1}
|
||||||
<td class="center">
|
<td class="center">
|
||||||
<input type="checkbox" name="data[{$WORKERS[worker].id}][monitor]" value="1" id="data[{$WORKERS[worker].id}][monitor]" {if $WORKERS[worker].monitor}checked{/if} />
|
<input type="checkbox" name="data[{$WORKERS[worker].id}][monitor]" value="1" id="data[{$WORKERS[worker].id}][monitor]" {if $WORKERS[worker].monitor}checked{/if} />
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user