From: Christian Weiske Date: Fri, 21 Apr 2017 15:48:14 +0000 (+0200) Subject: Renew subscriptions that got no response. X-Git-Url: https://git.cweiske.de/phinde.git/commitdiff_plain/c38abf3b8de60ec1012f0fdf6e65658b97b3a13b Renew subscriptions that got no response. May happen if there were network issues or the server phinde is running on was shut down directly after the subscription request was sent. Resolves: https://github.com/cweiske/phinde/issues/28 --- diff --git a/bin/subscribe.php b/bin/subscribe.php index 411fa86..7d05f79 100755 --- a/bin/subscribe.php +++ b/bin/subscribe.php @@ -22,17 +22,18 @@ try { $cc->displayError($e->getMessage()); } +$subDb = new Subscriptions(); + $url = $res->args['url']; $url = Helper::addSchema($url); $urlObj = new \Net_URL2($url); $url = $urlObj->getNormalizedURL(); if (!Helper::isUrlAllowed($url)) { - Log::error("Domain is not allowed; not crawling"); + Log::error("Domain is not allowed; not subscribing"); + $subDb->remove($url); exit(2); } -$subDb = new Subscriptions(); - list($topic, $hub) = $subDb->detectHub($url); if ($hub === null) { Log::error('No hub URL found for topic'); diff --git a/src/phinde/Subscriptions.php b/src/phinde/Subscriptions.php index 87119c8..e49e817 100644 --- a/src/phinde/Subscriptions.php +++ b/src/phinde/Subscriptions.php @@ -37,6 +37,22 @@ class Subscriptions return $stmt->fetchObject(); } + /** + * Remove a topic + * + * @param string $topic Topic URL + * + * @return void + */ + public function remove($topic) + { + $stmt = $this->db->prepare( + 'DELETE FROM subscriptions' + . ' WHERE sub_topic = :topic' + ); + $stmt->execute([':topic' => $topic]); + } + /** * Count number of subscriptions * @@ -68,8 +84,16 @@ class Subscriptions { $stmt = $this->db->prepare( 'SELECT * FROM subscriptions' - . ' WHERE sub_status IN ("active", "expired")' - . ' AND DATEDIFF(sub_expires, NOW()) <= 2' + . ' WHERE' + . '(' + //expire soon + . ' sub_status IN ("active", "expired")' + . ' AND DATEDIFF(sub_expires, NOW()) <= 2' + . ') OR (' + //no reaction to subscription within 10 minutes + . ' sub_status = "subscribing"' + . ' AND TIMEDIFF(NOW(), sub_created) > "00:10:00"' + . ')' ); $stmt->execute();