diff --git a/src/wiki.py b/src/wiki.py index 12c35bf..b923458 100644 --- a/src/wiki.py +++ b/src/wiki.py @@ -487,20 +487,19 @@ class Wiki: self.client.last_request = request except (aiohttp.ServerTimeoutError, asyncio.TimeoutError, WikiServerError, ServerError) as e: self.statistics.update(Log(type=LogType.CONNECTION_ERROR, title=str(e.exception))) - match len(self.statistics.last_connection_failures()[0]): - case 0, 1: - await asyncio.sleep(5.0) - continue - case 2: # Put the wiki on timeout 5 minutes per each - self.put_wiki_on_timeout(timedelta(minutes=5)) - raise WikiOnTimeout(self.dont_fetch_before) - case _: - x = len(self.statistics.last_connection_failures()[0]) - self.put_wiki_on_timeout(timedelta(seconds=min(21600, int(math.sqrt(2*x)*(x/0.4))*60))) # Max backoff is 6 hours - if x > 30 and self.domain.last_failure_report < (time.time() - 21600): # Report only if domain didn't report something within last 6 hours - await send_unique_generic_to_monitoring(self.script_url + "?CONNERROR", - f"{self.script_url} errors", repr(e)) - raise WikiOnTimeout(self.dont_fetch_before) + amount_of_failures = len(self.statistics.last_connection_failures()[0]) + if amount_of_failures < 2: + await asyncio.sleep(5.0) + continue + elif amount_of_failures == 2: # Put the wiki on timeout 5 minutes per each + self.put_wiki_on_timeout(timedelta(minutes=5)) + raise WikiOnTimeout(self.dont_fetch_before) + else: + self.put_wiki_on_timeout(timedelta(seconds=min(21600, int(math.sqrt(2*amount_of_failures)*(amount_of_failures/0.4))*60))) # Max backoff is 6 hours + if amount_of_failures > 30 and self.domain.last_failure_report < (time.time() - 21600): # Report only if domain didn't report something within last 6 hours + await send_unique_generic_to_monitoring(self.script_url + "?CONNERROR", + f"{self.script_url} errors", repr(e)) + raise WikiOnTimeout(self.dont_fetch_before) except ServerRedirects as e: self.statistics.update(Log(type=LogType.REDIRECT, title=""))