X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FWorker%2FUpdateGServers.php;h=38ab6e5d3079f0e55cc3dc4d7cfe9671eaa7c85c;hb=2647514603852fe5fb9f47f0bf153dd20c124ce6;hp=a245c34fca260b1b866d2a54897b5b6b1d3660fa;hpb=537da657cca1460462f91d788857276e1c21a16d;p=friendica.git diff --git a/src/Worker/UpdateGServers.php b/src/Worker/UpdateGServers.php index a245c34fca..38ab6e5d30 100644 --- a/src/Worker/UpdateGServers.php +++ b/src/Worker/UpdateGServers.php @@ -1,40 +1,78 @@ . + * */ + namespace Friendica\Worker; use Friendica\Core\Logger; use Friendica\Core\Worker; use Friendica\Database\DBA; -use Friendica\Model\GServer; +use Friendica\DI; +use Friendica\Util\Strings; class UpdateGServers { /** - * @brief Updates the first 250 servers - * + * Updates a defined number of servers */ public static function execute() { - $gservers = DBA::p("SELECT `url`, `created`, `last_failure`, `last_contact` FROM `gserver` ORDER BY rand()"); - if (!DBA::isResult($gservers)) { + $update_limit = DI::config()->get('system', 'gserver_update_limit'); + if (empty($update_limit)) { return; } - $updated = 0; + $updating = Worker::countWorkersByCommand('UpdateGServer'); + $limit = $update_limit - $updating; + if ($limit <= 0) { + Logger::info('The number of currently running jobs exceed the limit'); + return; + } - while ($gserver = DBA::fetch($gservers)) { - if (!GServer::updateNeeded($gserver['created'], '', $gserver['last_failure'], $gserver['last_contact'])) { - continue; - } - Logger::info('Update server status', ['server' => $gserver['url']]); + $total = DBA::count('gserver'); + $condition = ["`next_contact` < UTC_TIMESTAMP() AND (`nurl` != ? OR `url` != ?)", '', '']; + $outdated = DBA::count('gserver', $condition); + Logger::info('Server status', ['total' => $total, 'outdated' => $outdated, 'updating' => $limit]); - Worker::add(PRIORITY_LOW, 'UpdateGServer', $gserver['url']); + $gservers = DBA::select('gserver', ['url', 'nurl'], $condition, ['limit' => $limit]); + if (!DBA::isResult($gservers)) { + return; + } - if (++$updated > 250) { - return; + $count = 0; + while ($gserver = DBA::fetch($gservers)) { + // Sometimes the "nurl" and "url" doesn't seem to fit, see https://forum.friendi.ca/display/ec054ce7-155f-c94d-6159-f50372664245 + // There are duplicated "url" but not "nurl". So we check both addresses instead of just overwriting them, + // since that would mean loosing data. + if (!empty($gserver['url'])) { + if (Worker::add(PRIORITY_LOW, 'UpdateGServer', $gserver['url'])) { + $count++; + } + } + if (!empty($gserver['nurl']) && ($gserver['nurl'] != Strings::normaliseLink($gserver['url']))) { + if (Worker::add(PRIORITY_LOW, 'UpdateGServer', $gserver['nurl'])) { + $count++; + } } } + DBA::close($gservers); + Logger::info('Updated servers', ['count' => $count]); } }