From 1f9b365f3bc357235ba6b4ca6e402a4755ed5304 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 15 Aug 2020 20:05:08 +0000 Subject: [PATCH] Issue 9015: Reducing load of remote systems --- src/Model/Item.php | 10 ++--- src/Protocol/ActivityPub/Transmitter.php | 2 +- src/Protocol/Feed.php | 48 ++++++++++++------------ src/Worker/Cron.php | 2 +- src/Worker/OnePoll.php | 2 +- static/defaults.config.php | 2 +- 6 files changed, 34 insertions(+), 32 deletions(-) diff --git a/src/Model/Item.php b/src/Model/Item.php index 1fc4be2f55..a19357635b 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -1355,7 +1355,7 @@ class Item * @param array $item * @return boolean item is valid */ - private static function isValid(array $item) + public static function isValid(array $item) { // When there is no content then we don't post it if ($item['body'].$item['title'] == '') { @@ -1384,7 +1384,7 @@ class Item } } - if (Contact::isBlocked($item['author-id'])) { + if (!empty($item['author-id']) && Contact::isBlocked($item['author-id'])) { Logger::notice('Author is blocked node-wide', ['author-link' => $item['author-link'], 'item-uri' => $item['uri']]); return false; } @@ -1394,12 +1394,12 @@ class Item return false; } - if (!empty($item['uid']) && Contact\User::isBlocked($item['author-id'], $item['uid'])) { + if (!empty($item['uid']) && !empty($item['author-id']) && Contact\User::isBlocked($item['author-id'], $item['uid'])) { Logger::notice('Author is blocked by user', ['author-link' => $item['author-link'], 'uid' => $item['uid'], 'item-uri' => $item['uri']]); return false; } - if (Contact::isBlocked($item['owner-id'])) { + if (!empty($item['owner-id']) && Contact::isBlocked($item['owner-id'])) { Logger::notice('Owner is blocked node-wide', ['owner-link' => $item['owner-link'], 'item-uri' => $item['uri']]); return false; } @@ -1409,7 +1409,7 @@ class Item return false; } - if (!empty($item['uid']) && Contact\User::isBlocked($item['owner-id'], $item['uid'])) { + if (!empty($item['uid']) && !empty($item['owner-id']) && Contact\User::isBlocked($item['owner-id'], $item['uid'])) { Logger::notice('Owner is blocked by user', ['owner-link' => $item['owner-link'], 'uid' => $item['uid'], 'item-uri' => $item['uri']]); return false; } diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index 1ffe034d16..f1b2d3acc7 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -1547,7 +1547,7 @@ class Transmitter */ public static function isAnnounce($item) { - if ($item['verb'] == Activity::ANNOUNCE) { + if (!empty($item['verb']) && ($item['verb'] == Activity::ANNOUNCE)) { return true; } diff --git a/src/Protocol/Feed.php b/src/Protocol/Feed.php index 1d68ff0e2a..ba0adb8347 100644 --- a/src/Protocol/Feed.php +++ b/src/Protocol/Feed.php @@ -35,7 +35,6 @@ use Friendica\Model\Contact; use Friendica\Model\Item; use Friendica\Model\Tag; use Friendica\Model\User; -use Friendica\Network\HTTPRequest; use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; use Friendica\Util\ParseUrl; @@ -496,6 +495,14 @@ class Feed $item["title"] = ''; } + if ($dryRun) { + $items[] = $item; + break; + } elseif (!Item::isValid($item)) { + Logger::info('Feed is invalid', ['created' => $item['created'], 'uid' => $item['uid'], 'uri' => $item['uri']]); + continue; + } + $preview = ''; if (!empty($contact["fetch_further_information"]) && ($contact["fetch_further_information"] < 3)) { // Handle enclosures and treat them as preview picture @@ -564,34 +571,29 @@ class Feed } } - if ($dryRun) { - $items[] = $item; - break; - } else { - Logger::info('Stored feed', ['item' => $item]); + Logger::info('Stored feed', ['item' => $item]); - $notify = Item::isRemoteSelf($contact, $item); + $notify = Item::isRemoteSelf($contact, $item); - // Distributed items should have a well formatted URI. - // Additionally we have to avoid conflicts with identical URI between imported feeds and these items. - if ($notify) { - $item['guid'] = Item::guidFromUri($orig_plink, DI::baseUrl()->getHostname()); - unset($item['uri']); - unset($item['parent-uri']); + // Distributed items should have a well formatted URI. + // Additionally we have to avoid conflicts with identical URI between imported feeds and these items. + if ($notify) { + $item['guid'] = Item::guidFromUri($orig_plink, DI::baseUrl()->getHostname()); + unset($item['uri']); + unset($item['parent-uri']); - // Set the delivery priority for "remote self" to "medium" - $notify = PRIORITY_MEDIUM; - } + // Set the delivery priority for "remote self" to "medium" + $notify = PRIORITY_MEDIUM; + } - $id = Item::insert($item, $notify); + $id = Item::insert($item, $notify); - Logger::info("Feed for contact " . $contact["url"] . " stored under id " . $id); + Logger::info("Feed for contact " . $contact["url"] . " stored under id " . $id); - if (!empty($id) && !empty($taglist)) { - $feeditem = Item::selectFirst(['uri-id'], ['id' => $id]); - foreach ($taglist as $tag) { - Tag::store($feeditem['uri-id'], Tag::HASHTAG, $tag); - } + if (!empty($id) && !empty($taglist)) { + $feeditem = Item::selectFirst(['uri-id'], ['id' => $id]); + foreach ($taglist as $tag) { + Tag::store($feeditem['uri-id'], Tag::HASHTAG, $tag); } } } diff --git a/src/Worker/Cron.php b/src/Worker/Cron.php index 2c264f0746..9ce00fb936 100644 --- a/src/Worker/Cron.php +++ b/src/Worker/Cron.php @@ -181,7 +181,7 @@ class Cron * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ private static function pollContacts() { - $min_poll_interval = DI::config()->get('system', 'min_poll_interval', 1); + $min_poll_interval = DI::config()->get('system', 'min_poll_interval'); Addon::reload(); diff --git a/src/Worker/OnePoll.php b/src/Worker/OnePoll.php index 00d5694db3..4dfbf7cadb 100644 --- a/src/Worker/OnePoll.php +++ b/src/Worker/OnePoll.php @@ -60,7 +60,7 @@ class OnePoll return; } - if (($contact['network'] != Protocol::MAIL) || $force) { + if (($contact['network'] != Protocol::MAIL) && $force) { Contact::updateFromProbe($contact_id); } diff --git a/static/defaults.config.php b/static/defaults.config.php index 8111a68f1a..5e5b48c683 100644 --- a/static/defaults.config.php +++ b/static/defaults.config.php @@ -331,7 +331,7 @@ return [ // min_poll_interval (Integer) // minimal distance in minutes between two polls for a contact. Reasonable values are between 1 and 59. - 'min_poll_interval' => 1, + 'min_poll_interval' => 15, // no_count (Boolean) // Don't do count calculations (currently only when showing photo albums).