|
|
@ -3,13 +3,18 @@ |
|
|
|
class MySQL { |
|
|
|
class MySQL { |
|
|
|
|
|
|
|
|
|
|
|
private PDO $_db; |
|
|
|
private PDO $_db; |
|
|
|
|
|
|
|
private Memcached $_memcached; |
|
|
|
|
|
|
|
|
|
|
|
public function __construct(string $host, int $port, string $database, string $username, string $password) { |
|
|
|
public function __construct(string $host, int $port, string $database, string $username, string $password, Memcached $memcached = null) { |
|
|
|
|
|
|
|
|
|
|
|
$this->_db = new PDO('mysql:dbname=' . $database . ';host=' . $host . ';port=' . $port . ';charset=utf8', $username, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8']); |
|
|
|
$this->_db = new PDO('mysql:dbname=' . $database . ';host=' . $host . ';port=' . $port . ';charset=utf8', $username, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8']); |
|
|
|
$this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); |
|
|
|
$this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); |
|
|
|
$this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); |
|
|
|
$this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); |
|
|
|
$this->_db->setAttribute(PDO::ATTR_TIMEOUT, 600); |
|
|
|
$this->_db->setAttribute(PDO::ATTR_TIMEOUT, 600); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($memcached) { |
|
|
|
|
|
|
|
$this->_memcached = $memcached; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// System |
|
|
|
// System |
|
|
@ -86,57 +91,60 @@ class MySQL { |
|
|
|
|
|
|
|
|
|
|
|
public function getTopHostPages() { |
|
|
|
public function getTopHostPages() { |
|
|
|
|
|
|
|
|
|
|
|
$query = $this->_db->query(" SELECT |
|
|
|
if ($this->_memcached) { |
|
|
|
|
|
|
|
|
|
|
|
`hostPageTarget`.`hostId`, |
|
|
|
if ($result = $this->_memcached->get('MySQL.getTopHostPages')) { |
|
|
|
`hostPageTarget`.`hostPageId`, |
|
|
|
|
|
|
|
`hostPageTarget`.`uri`, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
`hostTarget`.`scheme`, |
|
|
|
return $result; |
|
|
|
`hostTarget`.`name`, |
|
|
|
} |
|
|
|
`hostTarget`.`port`, |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
( |
|
|
|
$query = $this->_db->query(" SELECT |
|
|
|
|
|
|
|
|
|
|
|
SELECT COUNT(*) FROM `hostPage` AS `hostPageTotal` |
|
|
|
`hostPageTarget`.`hostId`, |
|
|
|
|
|
|
|
`hostPageTarget`.`hostPageId`, |
|
|
|
|
|
|
|
`hostPageTarget`.`uri`, |
|
|
|
|
|
|
|
|
|
|
|
WHERE `hostPageTotal`.`hostId` = `hostPageTarget`.`hostId` |
|
|
|
`hostTarget`.`scheme`, |
|
|
|
|
|
|
|
`hostTarget`.`name`, |
|
|
|
|
|
|
|
`hostTarget`.`port`, |
|
|
|
|
|
|
|
|
|
|
|
AND `hostPageTotal`.`httpCode` = 200 |
|
|
|
( |
|
|
|
AND `hostPageTotal`.`timeBanned` IS NULL |
|
|
|
|
|
|
|
AND `hostPageTotal`.`mime` IS NOT NULL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
) AS `total`, |
|
|
|
SELECT COUNT(*) |
|
|
|
|
|
|
|
|
|
|
|
( |
|
|
|
FROM `hostPageToHostPage` |
|
|
|
|
|
|
|
JOIN `hostPage` AS `hostPageSource` ON (`hostPageSource`.`hostPageId` = `hostPageToHostPage`.`hostPageIdSource`) |
|
|
|
|
|
|
|
|
|
|
|
SELECT COUNT(*) |
|
|
|
WHERE `hostPageToHostPage`.`hostPageIdTarget` = `hostPageTarget`.`hostPageId` |
|
|
|
|
|
|
|
AND `hostPageSource`.`hostId` <> `hostPageTarget`.`hostId` |
|
|
|
|
|
|
|
|
|
|
|
FROM `hostPageToHostPage` |
|
|
|
) AS `rank` |
|
|
|
JOIN `hostPage` AS `hostPageSource` ON (`hostPageSource`.`hostPageId` = `hostPageToHostPage`.`hostPageIdSource`) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WHERE `hostPageToHostPage`.`hostPageIdTarget` = `hostPageTarget`.`hostPageId` |
|
|
|
FROM `hostPage` AS `hostPageTarget` |
|
|
|
AND `hostPageSource`.`hostId` <> `hostPageTarget`.`hostId` |
|
|
|
JOIN `host` AS `hostTarget` ON (`hostTarget`.`hostId` = `hostPageTarget`.`hostId`) |
|
|
|
|
|
|
|
|
|
|
|
) AS `rank` |
|
|
|
WHERE `hostTarget`.`status` = '1' |
|
|
|
|
|
|
|
AND `hostPageTarget`.`httpCode` = 200 |
|
|
|
|
|
|
|
AND `hostPageTarget`.`timeBanned` IS NULL |
|
|
|
|
|
|
|
AND `hostPageTarget`.`mime` IS NOT NULL |
|
|
|
|
|
|
|
|
|
|
|
FROM `hostPage` AS `hostPageTarget` |
|
|
|
GROUP BY `hostPageTarget`.`hostPageId` |
|
|
|
JOIN `host` AS `hostTarget` ON (`hostTarget`.`hostId` = `hostPageTarget`.`hostId`) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WHERE `hostTarget`.`status` = '1' |
|
|
|
HAVING `rank` > 0 |
|
|
|
AND `hostPageTarget`.`httpCode` = 200 |
|
|
|
|
|
|
|
AND `hostPageTarget`.`timeBanned` IS NULL |
|
|
|
|
|
|
|
AND `hostPageTarget`.`mime` IS NOT NULL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GROUP BY `hostPageTarget`.`hostPageId` |
|
|
|
ORDER BY `rank` DESC |
|
|
|
|
|
|
|
|
|
|
|
HAVING `rank` > 0 |
|
|
|
"); |
|
|
|
|
|
|
|
|
|
|
|
ORDER BY `rank` DESC |
|
|
|
$result = $query->fetchAll(); |
|
|
|
|
|
|
|
|
|
|
|
"); |
|
|
|
if ($this->_memcached) { |
|
|
|
|
|
|
|
|
|
|
|
return $query->fetchAll(); |
|
|
|
$this->_memcached->set('MySQL.getTopHostPages', $result, time() + 3600); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return $result; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public function getHosts() { |
|
|
|
public function getHosts() { |
|
|
@ -225,6 +233,36 @@ class MySQL { |
|
|
|
return $query->fetch()->total; |
|
|
|
return $query->fetch()->total; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getTotalHostPagesIndexed(int $hostId) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($this->_memcached) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($result = $this->_memcached->get(sprintf('MySQL.getTotalHostPagesIndexed.%s', $hostId))) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return $result; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$query = $this->_db->prepare('SELECT COUNT(*) AS `total` FROM `hostPage` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WHERE `hostId` = ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AND `httpCode` = 200 |
|
|
|
|
|
|
|
AND `timeBanned` IS NULL |
|
|
|
|
|
|
|
AND `mime` IS NOT NULL'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$query->execute([$hostId]); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$result = $query->fetch()->total; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($this->_memcached) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$this->_memcached->set(sprintf('MySQL.getTotalHostPagesIndexed.%s', $hostId), $result, time() + 3600); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return $result; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* not in use |
|
|
|
/* not in use |
|
|
|
public function getTotalPagesByHttpCode(mixed $httpCode) { |
|
|
|
public function getTotalPagesByHttpCode(mixed $httpCode) { |
|
|
|
|
|
|
|
|
|
|
|