Added some functionality for handling wiki 404/410 errors

This commit is contained in:
Frisk 2024-11-07 10:49:08 +01:00
parent cae1bfbc7e
commit dd54fa3207
3 changed files with 13 additions and 3 deletions

View file

@ -11,6 +11,7 @@ import sys
import aiohttp import aiohttp
from src.exceptions import WikiNotFoundError
from src.misc import LimitedList from src.misc import LimitedList
from src.discord.message import DiscordMessage from src.discord.message import DiscordMessage
from src.config import settings from src.config import settings
@ -124,7 +125,13 @@ class Domain:
logger.debug(f"Added new wiki {wiki.script_url} to domain {self.name}") logger.debug(f"Added new wiki {wiki.script_url} to domain {self.name}")
async def run_wiki_scan(self, wiki: src.wiki.Wiki, reason: Optional[str] = None): async def run_wiki_scan(self, wiki: src.wiki.Wiki, reason: Optional[str] = None):
await wiki.scan() try:
await wiki.scan()
except WikiNotFoundError as e:
self.wikis.move_to_end(wiki.script_url)
logs_for_wiki = wiki.statistics.filter_by_time(60*60)
if all([x.type == LogType.HTTP_ERROR for x in logs_for_wiki]) and len(logs_for_wiki) > 10:
await wiki.remove_wiki_from_db("This recent changes webhook has been removed for `wiki returning code {}`!".format(e.code), send_reason=True)
wiki.statistics.update(Log(type=LogType.SCAN_REASON, title=str(reason))) wiki.statistics.update(Log(type=LogType.SCAN_REASON, title=str(reason)))
self.wikis.move_to_end(wiki.script_url) self.wikis.move_to_end(wiki.script_url)

View file

@ -10,7 +10,8 @@ class WikiServerError(Exception):
class WikiNotFoundError(Exception): class WikiNotFoundError(Exception):
pass def __init__(self, code: int):
self.code = code
class WikiRemovedError(Exception): class WikiRemovedError(Exception):
pass pass

View file

@ -242,7 +242,7 @@ class Wiki:
try: try:
stacked_message: StackedDiscordMessage = pickle.loads(db_record["message_object"]) stacked_message: StackedDiscordMessage = pickle.loads(db_record["message_object"])
except ValueError: except ValueError:
logger.error("Couldn't loads JSON for message data. What happened? Data: {}".format(row[0])) logger.error("Couldn't loads JSON for message data. What happened? Data: {}".format(db_record))
return return
except TypeError: except TypeError:
logger.error( logger.error(
@ -373,6 +373,8 @@ class Wiki:
logger.critical( logger.critical(
"Redirect detected! Either the wiki given in the script settings (wiki field) is incorrect/the wiki got removed or is giving us the false value. Please provide the real URL to the wiki, current URL redirects to {}".format( "Redirect detected! Either the wiki given in the script settings (wiki field) is incorrect/the wiki got removed or is giving us the false value. Please provide the real URL to the wiki, current URL redirects to {}".format(
request.url)) request.url))
elif request.status in (410, 404):
raise WikiNotFoundError(request.status)
elif 399 < request.status < 500: elif 399 < request.status < 500:
logger.error("Request returned ClientError status code on {url}".format(url=request.url)) logger.error("Request returned ClientError status code on {url}".format(url=request.url))
self.statistics.update(Log(type=LogType.HTTP_ERROR, title="{} error".format(request.status), details=str(request.headers) + "\n" + str(request.url))) self.statistics.update(Log(type=LogType.HTTP_ERROR, title="{} error".format(request.status), details=str(request.headers) + "\n" + str(request.url)))