From 4c5e6eed75edf9f7ae0f5638d4cc251144be0b27 Mon Sep 17 00:00:00 2001 From: ghost Date: Sun, 29 Oct 2023 06:09:57 +0200 Subject: [PATCH] add yggdrasil v 0.5.1 support, remove deprecated constructions #5 --- composer.json | 2 +- database/yggstate.mwb | Bin 19780 -> 17806 bytes example/environment /sphinx.conf | 17 ++---- src/config/app.php.example | 5 +- src/crontab/crawler.php | 83 ++++++---------------------- src/library/mysql.php | 90 +++++++------------------------ src/library/sphinxql.php | 4 +- src/public/index.php | 2 +- src/public/peer.php | 14 +---- src/public/search.php | 30 ++--------- 10 files changed, 49 insertions(+), 198 deletions(-) diff --git a/composer.json b/composer.json index 876c015..d2212d8 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "type": "project", "require": { "php": ">=8.1", - "yggverse/yggdrasilctl": ">=0.1.0", + "yggverse/yggdrasilctl": ">=1.0.0", "yggverse/parser": ">=0.1.0", "yggverse/graph": ">=0.1.0", "yggverse/cache": ">=0.3.0", diff --git a/database/yggstate.mwb b/database/yggstate.mwb index b0e06fb1ed07bf5e84cfe8bc8b925d4594960fd4..04bb055ad7652d994cd3c2c1ccf24c748f8605c0 100644 GIT binary patch delta 15428 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 Ko&Y5$_&)%$<=EZ; delta 17403 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 E0LRVvHvj+t diff --git a/example/environment /sphinx.conf b/example/environment /sphinx.conf index 0b965cc..c2c2c7d 100644 --- a/example/environment /sphinx.conf +++ b/example/environment /sphinx.conf @@ -15,13 +15,6 @@ source peer : yggstate SELECT `peer`.`peerId`, \ `peer`.`address` AS `peerAddress`, \ `peer`.`key` AS `peerKey`, \ - (SELECT GROUP_CONCAT(DISTINCT `peerCoordinate`.`port`) \ - FROM `peerCoordinate` \ - WHERE `peerCoordinate`.`peerId` = `peer`.`peerId`) AS `peerCoordinatePort`, \ - (SELECT GROUP_CONCAT(DISTINCT `peerCoordinateRoute`.`port`) \ - FROM `peerCoordinateRoute` \ - JOIN `peerCoordinate` ON (`peerCoordinate`.`peerCoordinateId` = `peerCoordinateRoute`.`peerCoordinateId`) \ - WHERE `peerCoordinate`.`peerId` = `peer`.`peerId`) AS `peerCoordinateRoute`, \ (SELECT GROUP_CONCAT(DISTINCT `peerRemoteScheme`.`name`) \ FROM `peerRemote` \ JOIN `peerRemoteScheme` ON (`peerRemoteScheme`.`peerRemoteSchemeId` = `peerRemote`.`peerRemoteSchemeId`) \ @@ -56,8 +49,6 @@ source peer : yggstate sql_field_string = peerAddress sql_field_string = peerKey - sql_field_string = peerCoordinatePort - sql_field_string = peerCoordinateRoute sql_field_string = peerRemoteScheme sql_field_string = peerRemoteHost sql_field_string = peerRemotePort @@ -68,12 +59,12 @@ source peer : yggstate index peer { - source = peer - path = /var/lib/sphinxsearch/data/peer + source = peer + path = /var/lib/sphinxsearch/data/peer } indexer { - mem_limit = 256M - lemmatizer_cache = 256M + mem_limit = 256M + lemmatizer_cache = 256M } \ No newline at end of file diff --git a/src/config/app.php.example b/src/config/app.php.example index ac8acb0..e29f92a 100644 --- a/src/config/app.php.example +++ b/src/config/app.php.example @@ -75,11 +75,10 @@ define('WEBSITE_PEER_PORT_CHECK_TIMEOUT', 60 * 5); // API define('API_PEER_FIELDS', (array) [ + 'key', + 'address', 'bytes_recvd', 'bytes_sent', - 'coords', - 'key', - 'port', 'uptime', // ... ] diff --git a/src/crontab/crawler.php b/src/crontab/crawler.php index 2f108ea..54699d6 100644 --- a/src/crontab/crawler.php +++ b/src/crontab/crawler.php @@ -65,16 +65,6 @@ $debug = [ ] ] ], - 'coordinate' => [ - 'total' => [ - 'insert' => 0, - ], - 'route' => [ - 'total' => [ - 'insert' => 0, - ] - ] - ], 'connection' => [ 'total' => [ 'insert' => 0, @@ -134,8 +124,14 @@ try { @unlink(__DIR__ . '/../public/api/trackers.json'); // Update peers -if (!$connectedPeers = Yggverse\Yggdrasilctl\Yggdrasil::getPeers()) +$connectedPeersDebug = []; + +if (false === $connectedPeers = Yggverse\Yggdrasilctl\Yggdrasil::getPeers($connectedPeersDebug)) { + var_dump( + $connectedPeersDebug + ); + exit; } @@ -143,13 +139,13 @@ if (!$connectedPeers = Yggverse\Yggdrasilctl\Yggdrasil::getPeers()) /// Remove remote addresses $jsonPeers = []; -foreach ($connectedPeers as $connectedPeerAddress => $connectedPeerInfo) +foreach ($connectedPeers as $connectedPeerInfo) { - foreach ($connectedPeerInfo as $connectedPeerInfoKey => $connectedPeerInfoValue) + foreach ($connectedPeerInfo as $key => $value) { - if (in_array($connectedPeerInfoKey, (array) API_PEER_FIELDS)) + if (in_array($key, (array) API_PEER_FIELDS)) { - $jsonPeers[$connectedPeerAddress][$connectedPeerInfoKey] = $connectedPeerInfoValue; + $jsonPeers[$connectedPeerInfo->address][$key] = $value; } } } @@ -171,20 +167,20 @@ if ($handle = fopen(__DIR__ . '/../public/api/trackers.json', 'w+')) // @TODO merge peers data from remote trackers // Collect connected peers -foreach ($connectedPeers as $connectedPeerAddress => $connectedPeerInfo) { +foreach ($connectedPeers as $connectedPeerInfo) { try { $db->beginTransaction(); // Init peer - if ($dbPeer = $db->findPeer($connectedPeerAddress)) { + if ($dbPeer = $db->findPeer($connectedPeerInfo->address)) { $dbPeerId = $dbPeer->peerId; } else { - if ($dbPeerId = $db->addPeer($connectedPeerAddress, $connectedPeerInfo->key, time())) { + if ($dbPeerId = $db->addPeer($connectedPeerInfo->address, $connectedPeerInfo->key, time())) { $debug['yggdrasil']['peer']['total']['insert']++; } @@ -229,51 +225,6 @@ foreach ($connectedPeers as $connectedPeerAddress => $connectedPeerInfo) { } } - // Init peer coordinate - if ($dbPeerCoordinate = $db->findLastPeerCoordinateByPeerId($dbPeerId)) { - - $dbPeerCoordinateId = $dbPeerCoordinate->peerCoordinateId; - - // Peer have changed it port, init new coordinate - if ($dbPeerCoordinate->port != $connectedPeerInfo->port) { - - if ($dbPeerCoordinateId = $db->addPeerCoordinate($dbPeerId, $connectedPeerInfo->port, time())) { - - $debug['yggdrasil']['peer']['coordinate']['total']['insert']++; - } - } - - } else { - - if ($dbPeerCoordinateId = $db->addPeerCoordinate($dbPeerId, $connectedPeerInfo->port, time())) { - - $debug['yggdrasil']['peer']['coordinate']['total']['insert']++; - } - } - - // Init peer coordinate route - $dbCoords = []; - foreach ($db->findPeerCoordinateRouteByCoordinateId($dbPeerCoordinateId) as $dbPeerCoordinateRoute) { - $dbCoords[$dbPeerCoordinateRoute->level] = $dbPeerCoordinateRoute->port; - } - - // Compare remote / local route, create new on changed - if ($dbCoords !== $connectedPeerInfo->coords) { - - if ($dbPeerCoordinateId = $db->addPeerCoordinate($dbPeerId, $connectedPeerInfo->port, time())) { - - $debug['yggdrasil']['peer']['coordinate']['total']['insert']++; - } - - foreach ($connectedPeerInfo->coords as $level => $port) { - - if ($db->addPeerCoordinateRoute($dbPeerCoordinateId, $level, $port)) { - - $debug['yggdrasil']['peer']['coordinate']['route']['total']['insert']++; - } - } - } - // Init peer remote if ($connectedPeerRemoteUrl = Yggverse\Parser\Url::parse($connectedPeerInfo->remote)) { @@ -375,7 +326,7 @@ foreach ($connectedPeers as $connectedPeerAddress => $connectedPeerInfo) { } else { if ($dbGeoCoordinateId = $db->addGeoCoordinate($geoIp2City->city($connectedPeerRemoteUrl->host->name)->location->latitude, - $geoIp2City->city($connectedPeerRemoteUrl->host->name)->location->longitude)) { + $geoIp2City->city($connectedPeerRemoteUrl->host->name)->location->longitude)) { $debug['yggdrasil']['geo']['coordinate']['total']['insert']++; } @@ -428,9 +379,9 @@ foreach ($connectedPeers as $connectedPeerAddress => $connectedPeerInfo) { } // Init peer connection - if (!$db->findPeerConnection($dbPeerSessionId, $dbPeerRemoteId, $dbPeerCoordinateId)) { + if (!$db->findPeerConnection($dbPeerSessionId, $dbPeerRemoteId)) { - if ($db->addPeerConnection($dbPeerSessionId, $dbPeerRemoteId, $dbPeerCoordinateId, time())) { + if ($db->addPeerConnection($dbPeerSessionId, $dbPeerRemoteId, time())) { $debug['yggdrasil']['peer']['connection']['total']['insert']++; } diff --git a/src/library/mysql.php b/src/library/mysql.php index 5e6c0dd..5356d83 100644 --- a/src/library/mysql.php +++ b/src/library/mysql.php @@ -457,84 +457,32 @@ class MySQL { } // Peer connection - public function addPeerConnection(int $peerSessionId, int $peerRemoteId, int $peerCoordinateId, int $timeAdded) { + public function addPeerConnection(int $peerSessionId, int $peerRemoteId, int $timeAdded) { $this->_debug->query->insert->total++; $query = $this->_db->prepare('INSERT INTO `peerConnection` SET `peerSessionId` = ?, `peerRemoteId` = ?, - `peerCoordinateId` = ?, `timeAdded` = ?'); - $query->execute([$peerSessionId, $peerRemoteId, $peerCoordinateId, $timeAdded]); + $query->execute([$peerSessionId, $peerRemoteId, $timeAdded]); return $this->_db->lastInsertId(); } - public function findPeerConnection(int $peerSessionId, int $peerRemoteId, int $peerCoordinateId) { + public function findPeerConnection(int $peerSessionId, int $peerRemoteId) { $this->_debug->query->select->total++; $query = $this->_db->prepare('SELECT * FROM `peerConnection` - WHERE `peerSessionId` = ? AND `peerRemoteId` = ? AND `peerCoordinateId` = ? + WHERE `peerSessionId` = ? AND `peerRemoteId` = ? LIMIT 1'); - $query->execute([$peerSessionId, $peerRemoteId, $peerCoordinateId]); + $query->execute([$peerSessionId, $peerRemoteId]); return $query->fetch(); } - // Peer coordinate - // https://github.com/matrix-org/pinecone/wiki/2.-Spanning-Tree#coordinates - - public function addPeerCoordinate(int $peerId, int $port, int $timeAdded) { - - $this->_debug->query->insert->total++; - - $query = $this->_db->prepare('INSERT INTO `peerCoordinate` SET `peerId` = ?, - `port` = ?, - `timeAdded` = ?'); - - $query->execute([$peerId, $port, $timeAdded]); - - return $this->_db->lastInsertId(); - } - - public function addPeerCoordinateRoute(int $peerCoordinateId, int $level, int $port) { - - $this->_debug->query->insert->total++; - - $query = $this->_db->prepare('INSERT INTO `peerCoordinateRoute` SET `peerCoordinateId` = ?, - `level` = ?, - `port` = ?'); - - $query->execute([$peerCoordinateId, $level, $port]); - - return $this->_db->lastInsertId(); - } - - public function findLastPeerCoordinateByPeerId(int $peerId) { - - $this->_debug->query->select->total++; - - $query = $this->_db->prepare('SELECT * FROM `peerCoordinate` WHERE `peerId` = ? ORDER BY `peerCoordinateId` DESC LIMIT 1'); - - $query->execute([$peerId]); - - return $query->fetch(); - } - - public function findPeerCoordinateRouteByCoordinateId(int $peerCoordinateId) { - - $this->_debug->query->select->total++; - - $query = $this->_db->prepare('SELECT * FROM `peerCoordinateRoute` WHERE `peerCoordinateId` = ? ORDER BY `level` ASC'); - - $query->execute([$peerCoordinateId]); - - return $query->fetchAll(); - } - // Analytics public function getPeerFirstByTimeAdded() { @@ -703,15 +651,6 @@ class MySQL { `peerRemoteHost`.`name` AS `remoteHost`, `peerRemotePort`.`name` AS `remotePort`, - `peerCoordinate`.`port` AS `connectionPort`, - - ( - SELECT GROUP_CONCAT(`port` SEPARATOR ' → ') - FROM `peerCoordinateRoute` - WHERE `peerCoordinateRoute`.`peerCoordinateId` = `peerConnection`.`peerCoordinateId` - ORDER BY `peerCoordinateRoute`.`level` ASC - ) AS `route`, - CONCAT ( IF (`peerRemotePort`.`name` IS NOT NULL, @@ -728,7 +667,6 @@ class MySQL { JOIN `peerSession` ON (`peerSession`.`peerSessionId` = `peerConnection`.`peerSessionId`) JOIN `peerRemote` ON (`peerRemote`.`peerRemoteId` = `peerConnection`.`peerRemoteId`) - JOIN `peerCoordinate` ON (`peerCoordinate`.`peerCoordinateId` = `peerConnection`.`peerCoordinateId`) JOIN `peerRemoteScheme` ON (`peerRemoteScheme`.`peerRemoteSchemeId` = `peerRemote`.`peerRemoteSchemeId`) JOIN `peerRemoteHost` ON (`peerRemoteHost`.`peerRemoteHostId` = `peerRemote`.`peerRemoteHostId`) @@ -774,8 +712,7 @@ class MySQL { ROUND(AVG(`peerSession`.`uptime`)) AS `uptimeAvg`, (SELECT COUNT(*) FROM `peerSession` WHERE `peerSession`.`peerId` = `peer`.`peerId`) AS `sessionTotal`, - (SELECT COUNT(*) FROM `peerRemote` WHERE `peerRemote`.`peerId` = `peer`.`peerId`) AS `remoteTotal`, - (SELECT COUNT(*) FROM `peerCoordinate` WHERE `peerCoordinate`.`peerId` = `peer`.`peerId`) AS `coordinateTotal` + (SELECT COUNT(*) FROM `peerRemote` WHERE `peerRemote`.`peerId` = `peer`.`peerId`) AS `remoteTotal` FROM `peer` JOIN `peerSession` ON (`peerSession`.`peerId` = `peer`.`peerId`) @@ -795,8 +732,19 @@ class MySQL { public function optimize() { $this->_db->query('OPTIMIZE TABLE `peer`'); + + $this->_db->query('OPTIMIZE TABLE `peerSession`'); + + $this->_db->query('OPTIMIZE TABLE `peerConnection`'); + $this->_db->query('OPTIMIZE TABLE `peerRemote`'); - $this->_db->query('OPTIMIZE TABLE `peerCoordinate`'); - $this->_db->query('OPTIMIZE TABLE `peerCoordinateRoute`'); + $this->_db->query('OPTIMIZE TABLE `peerRemoteScheme`'); + $this->_db->query('OPTIMIZE TABLE `peerRemoteHost`'); + $this->_db->query('OPTIMIZE TABLE `peerRemotePort`'); + + $this->_db->query('OPTIMIZE TABLE `geo`'); + $this->_db->query('OPTIMIZE TABLE `geoCountry`'); + $this->_db->query('OPTIMIZE TABLE `geoCity`'); + $this->_db->query('OPTIMIZE TABLE `geoCoordinate`'); } } diff --git a/src/library/sphinxql.php b/src/library/sphinxql.php index 154880e..b1d16a7 100644 --- a/src/library/sphinxql.php +++ b/src/library/sphinxql.php @@ -66,11 +66,9 @@ class SphinxQL { } return sprintf( - '@peerAddress "%s" | @peerKey "%s" | @peerCoordinatePort "%s" | @peerCoordinateRoute "%s" | @peerRemoteScheme "%s" | @peerRemoteHost "%s" | @peerRemotePort "%s" | @geoCountryIsoCode "%s" | @geoCountryName "%s" | @geoCityName "%s"', + '@peerAddress "%s" | @peerKey "%s" | @peerRemoteScheme "%s" | @peerRemoteHost "%s" | @peerRemotePort "%s" | @geoCountryIsoCode "%s" | @geoCountryName "%s" | @geoCityName "%s"', preg_replace('/[^A-z0-9\:\[\]]/', '', $peerAddress), preg_replace('/[^A-z0-9]/', '', $keyword), - preg_replace('/[^\d]/', '', $keyword), - preg_replace('/[^\d]/', '', $keyword), preg_replace('/[^A-z]/', '', $peerRemoteScheme), preg_replace('/[^A-z0-9\.\:\[\]]/', '', $peerRemoteHost), preg_replace('/[^\d]/', '', $peerRemotePort), diff --git a/src/public/index.php b/src/public/index.php index aaad723..cc5cfe7 100644 --- a/src/public/index.php +++ b/src/public/index.php @@ -186,7 +186,7 @@ $peers = $memory->getByMethodCallback(
- +
diff --git a/src/public/peer.php b/src/public/peer.php index 790c107..7db3c3e 100644 --- a/src/public/peer.php +++ b/src/public/peer.php @@ -217,7 +217,7 @@ $peerPortStatuses = $db->findLastPeerPortStatusesByPeerId($requestPeerId);
- +
@@ -263,12 +263,6 @@ $peerPortStatuses = $db->findLastPeerPortStatusesByPeerId($requestPeerId); - - - - - - @@ -286,8 +280,6 @@ $peerPortStatuses = $db->findLastPeerPortStatusesByPeerId($requestPeerId); remote ?> - connectionPort ?> - route ?> geoCountryIsoCode ?> @@ -377,10 +369,6 @@ $peerPortStatuses = $db->findLastPeerPortStatusesByPeerId($requestPeerId); sessionTotal) ?> - - - coordinateTotal) ?> - diff --git a/src/public/search.php b/src/public/search.php index da942c6..9e74601 100644 --- a/src/public/search.php +++ b/src/public/search.php @@ -89,7 +89,7 @@ $results = $sphinx->searchPeers($requestQuery,
- +
@@ -112,8 +112,6 @@ $results = $sphinx->searchPeers($requestQuery, - - @@ -140,28 +138,6 @@ $results = $sphinx->searchPeers($requestQuery,
- - peercoordinateport, $requestQuery)) { ?> - - • - - - - • - - - - - peercoordinateroute, $requestQuery)) { ?> - - • - - - - • - - - peerremotescheme, @@ -229,7 +205,7 @@ $results = $sphinx->searchPeers($requestQuery, - + = WEBSITE_PEER_REMOTE_PAGINATION_LIMIT) { ?> 1) { ?>
@@ -238,7 +214,7 @@ $results = $sphinx->searchPeers($requestQuery, - +
$website) { ?>