lib.itmens/mastodon/jobs.py

73 lines
2.8 KiB
Python
Raw Normal View History

2023-11-10 15:49:57 -05:00
from datetime import timedelta
2023-11-10 16:31:41 -05:00
from django.db.models import Q
2023-11-10 15:49:57 -05:00
from django.utils import timezone
from loguru import logger
from common.models import BaseJob, JobManager
2024-07-01 17:29:38 -04:00
from mastodon.models import MastodonApplication, detect_server_info, verify_client
2023-11-10 15:49:57 -05:00
@JobManager.register
class MastodonSiteCheck(BaseJob):
2023-12-12 21:01:46 -05:00
interval = timedelta(days=1)
2023-11-10 15:49:57 -05:00
max_unreachable_days = 31
def run(self):
logger.info("Mastodon Site Check start.")
count_checked = 0
count_unreachable = 0
count_disabled = 0
2023-11-10 16:31:41 -05:00
q = Q(last_reachable_date__lte=timezone.now() - timedelta(days=1)) | Q(
last_reachable_date__isnull=True
)
for site in MastodonApplication.objects.exclude(disabled=True).filter(q):
2023-11-10 15:49:57 -05:00
domain = None
count_checked += 1
try:
2023-11-10 16:31:41 -05:00
api_domain = site.api_domain or site.domain_name
domain, api_domain, v = detect_server_info(api_domain)
2024-07-13 00:16:47 -04:00
site.server_version = v
2023-11-10 15:49:57 -05:00
site.last_reachable_date = timezone.now()
site.detect_configurations()
2024-05-25 23:36:11 -04:00
except Exception as e:
2024-07-13 00:16:47 -04:00
logger.warning(
2024-05-25 23:36:11 -04:00
f"Failed to detect server info for {site.domain_name}/{site.api_domain}",
extra={"exception": e},
2023-11-10 16:31:41 -05:00
)
2023-11-10 15:49:57 -05:00
count_unreachable += 1
if site.last_reachable_date is None:
site.last_reachable_date = timezone.now() - timedelta(days=1)
if timezone.now() > site.last_reachable_date + timedelta(
days=self.max_unreachable_days
):
2024-07-13 00:16:47 -04:00
logger.error(
f"Failed to detect server info for {site.domain_name}/{site.api_domain} disabling it."
)
2023-11-10 15:49:57 -05:00
site.disabled = True
count_disabled += 1
finally:
site.save(
update_fields=[
"star_mode",
2024-07-13 00:16:47 -04:00
"server_version",
"max_status_len",
"last_reachable_date",
"disabled",
]
)
2024-05-28 17:03:12 -04:00
# try:
# if not verify_client(site):
# logger.error(
# f"Unable to verify client app for {site.api_domain}, consider deleting it."
# )
# # site.delete()
# except Exception as e:
# logger.error(
# f"Failed to verify client app for {site.api_domain}",
# extra={"exception": e},
# )
2023-11-10 15:49:57 -05:00
logger.info(
f"Mastodon Site Check finished, {count_checked} checked, {count_unreachable} unreachable, {count_disabled} disabled."
)