From 9b961e04cfafce74dcd0c85d9bc47b99d314a69e Mon Sep 17 00:00:00 2001 From: Sebastian Grewe Date: Tue, 14 May 2013 23:57:22 +0200 Subject: [PATCH] cleaned up statistics, added some user specifc stats from user class to statistics class --- public/include/classes/statistics.class.php | 89 ++++++++++++--------- 1 file changed, 53 insertions(+), 36 deletions(-) diff --git a/public/include/classes/statistics.class.php b/public/include/classes/statistics.class.php index 5154e136..d409c131 100644 --- a/public/include/classes/statistics.class.php +++ b/public/include/classes/statistics.class.php @@ -7,14 +7,13 @@ if (!defined('SECURITY')) class Statistics { private $sError = ''; private $table = 'statistics_shares'; - // This defines each statistic - public $valid, $invalid, $block, $user; - public function __construct($debug, $mysqli, $config, $share) { + public function __construct($debug, $mysqli, $config, $share, $user) { $this->debug = $debug; $this->mysqli = $mysqli; $this->share = $share; $this->config = $config; + $this->user = $user; $this->debug->append("Instantiated Share class", 2); } @@ -26,14 +25,20 @@ class Statistics { return $this->sError; } + private function checkStmt($bState) { + if ($bState ===! true) { + $this->debug->append("Failed to prepare statement: " . $this->mysqli->error); + $this->setErrorMessage('Failed to prepare statement'); + return false; + } + return true; + } + public function updateShareStatistics($aStats, $iBlockId) { $stmt = $this->mysqli->prepare("INSERT INTO $this->table (account_id, valid, invalid, block_id) VALUES (?, ?, ?, ?)"); - if ($this->checkStmt($stmt)) { - $stmt->bind_param('iiii', $aStats['id'], $aStats['valid'], $aStats['invalid'], $iBlockId); - if ($stmt->execute()) { - return true; - } - } + if ($this->checkStmt($stmt) && $stmt->bind_param('iiii', $aStats['id'], $aStats['valid'], $aStats['invalid'], $iBlockId) && $stmt->execute()) return true; + // Catchall + $this->debug->append("Failed to update share stats: " . $this->mysqli->error); return false; } @@ -44,11 +49,10 @@ class Statistics { SELECT ROUND(COUNT(id) * POW(2, " . $this->config['difficulty'] . ")/600/1000) AS hashrate FROM " . $this->share->getTableName() . " WHERE time > DATE_SUB(now(), INTERVAL 10 MINUTE) UNION SELECT ROUND(COUNT(id) * POW(2, " . $this->config['difficulty'] . ")/600/1000) AS hashrate FROM " . $this->share->getArchiveTableName() . " WHERE time > DATE_SUB(now(), INTERVAL 10 MINUTE) - ) AS sum - "); - if ($this->checkStmt($stmt) && $stmt->execute() && $result = $stmt->get_result() ) { - return $result->fetch_object()->hashrate; - } + ) AS sum"); + // Catchall + if ($this->checkStmt($stmt) && $stmt->execute() && $result = $stmt->get_result() ) return $result->fetch_object()->hashrate; + $this->debug->append("Failed to get hashrate: " . $this->mysqli->error); return false; } @@ -59,11 +63,10 @@ class Statistics { SELECT COUNT(id) AS sharerate FROM " . $this->share->getTableName() . " WHERE time > DATE_SUB(now(), INTERVAL 10 MINUTE) UNION ALL SELECT COUNT(id) AS sharerate FROM " . $this->share->getArchiveTableName() . " WHERE time > DATE_SUB(now(), INTERVAL 10 MINUTE) - ) AS sum - "); - if ($this->checkStmt($stmt) && $stmt->execute() && $result = $stmt->get_result() ) { - return $result->fetch_object()->sharerate; - } + ) AS sum"); + if ($this->checkStmt($stmt) && $stmt->execute() && $result = $stmt->get_result() ) return $result->fetch_object()->sharerate; + // Catchall + $this->debug->append("Failed to fetch share rate: " . $this->mysqli->error); return false; } @@ -77,26 +80,40 @@ class Statistics { ( SELECT IFNULL(count(id), 0) FROM " . $this->share->getTableName() . " WHERE UNIX_TIMESTAMP(time) >IFNULL((SELECT MAX(time) FROM blocks),0) - AND our_result = 'N' ) as invalid - "); - if ($this->checkStmt($stmt)) { - - $stmt->execute(); - $result = $stmt->get_result(); - $stmt->close(); - return $result->fetch_assoc(); - } + AND our_result = 'N' ) as invalid"); + if ( $this->checkStmt($stmt) && $stmt->execute() && $result = $stmt->get_result() ) return $result->fetch_assoc(); + // Catchall + $this->debug->append("Failed to fetch round shares: " . $this->mysqli->error); return false; } - private function checkStmt($bState) { - if ($bState ===! true) { - $this->debug->append("Failed to prepare statement: " . $this->mysqli->error); - $this->setErrorMessage('Failed to prepare statement'); - return false; - } - return true; + public function getUserHashrate($account_id) { + $stmt = $this->mysqli->prepare(" + SELECT ROUND(COUNT(s.id) * POW(2,21)/600/1000) AS hashrate + FROM " . $this->share->getTableName() . " AS s, + " . $this->user->getTableName() . " AS u + WHERE u.username = SUBSTRING_INDEX( s.username, '.', 1 ) + AND s.time > DATE_SUB(now(), INTERVAL 10 MINUTE) + AND u.id = ?"); + if ($this->checkStmt($stmt) && $stmt->bind_param("i", $account_id) && $stmt->execute() && $result = $stmt->get_result() ) return $result->fetch_object()->hashrate; + // Catchall + $this->debug->append("Failed to fetch hashrate: " . $this->mysqli->error); + return false; + } + + public function getWorkerHashrate($worker_id) { + $stmt = $this->mysqli->prepare(" + SELECT ROUND(COUNT(s.id) * POW(2,21)/600/1000) AS hashrate + FROM " . $this->share->getTableName() . " AS s, + " . $this->user->getTableName() . " AS u + WHERE u.username = SUBSTRING_INDEX( s.username, '.', 1 ) + AND s.time > DATE_SUB(now(), INTERVAL 10 MINUTE) + AND u.id = ?"); + if ($this->checkStmt($stmt) && $stmt->bind_param("i", $account_id) && $stmt->execute() && $result = $stmt->get_result() ) return $result->fetch_object()->hashrate; + // Catchall + $this->debug->append("Failed to fetch hashrate: " . $this->mysqli->error); + return false; } } -$statistics = new Statistics($debug, $mysqli, $config, $share); +$statistics = new Statistics($debug, $mysqli, $config, $share, $user);