From ee22c5d1451395439766a5086689a498f6cf3493 Mon Sep 17 00:00:00 2001 From: db0 Date: Tue, 26 Sep 2023 14:13:49 +0200 Subject: [PATCH] ref: avoid double nodinfo retrieve --- fediseer/fediverse.py | 10 ++++++++-- fediseer/messaging.py | 4 +++- fediseer/register.py | 4 ++-- updater.py | 3 ++- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/fediseer/fediverse.py b/fediseer/fediverse.py index f0ca1b3..18aa53f 100644 --- a/fediseer/fediverse.py +++ b/fediseer/fediverse.py @@ -35,6 +35,8 @@ class InstanceInfo(): return self.node_info = InstanceInfo.get_nodeinfo(domain,req_timeout=self._req_timeout) + + def get_instance_info(self): try: self.parse_instance_info() except Exception as err: @@ -190,9 +192,10 @@ class InstanceInfo(): self.open_registrations = self.node_info.get("openRegistrations", False) def discover_info(self): + # Mastodon API site = requests.get(f"https://{self.domain}/api/v1/instance",timeout=self._req_timeout,allow_redirects=False) if site.status_code != 200: - raise Exception(f"Unexpected status code retrieved when discovering nodeinfo: {site.status_code}") + raise Exception(f"Unexpected status code retrieved when discovering instance info: {site.status_code}") self.instance_info = site.json() self.approval_required = self.instance_info.get("approval_required") if self.node_info is None: @@ -225,6 +228,8 @@ class InstanceInfo(): "mitra": self.get_firefish_info, "unknown": self.get_unknown_info, "wildcard": self.get_unknown_info, + # Instance info not supported for misskey yet + "misskey": self.get_unknown_info, } if self.software not in software_map: self.discover_info() @@ -260,7 +265,8 @@ class InstanceInfo(): raise Exception(f"Status code unexpected for instance frontpage: {req.status_code}") # Debug -# ii = InstanceInfo("lemmy.dbzer0.com") +# ii = InstanceInfo("makai.chaotic.ninja") +# ii.get_instance_info() # logger.debug([ # ii.software, # ii.open_registrations, diff --git a/fediseer/messaging.py b/fediseer/messaging.py index 2342df8..b3ddef3 100644 --- a/fediseer/messaging.py +++ b/fediseer/messaging.py @@ -187,7 +187,9 @@ class ActivityPubPM: admins = database.find_admins_by_instance(instance) if not admins: try: - admins = InstanceInfo(domain).admin_usernames + ii = InstanceInfo(domain) + ii.get_instance_info() + admins = ii.admin_usernames except Exception as err: if software not in SUPPORTED_SOFTWARE: logger.warning(f"Failed to figure out admins from {software}: {domain}") diff --git a/fediseer/register.py b/fediseer/register.py index b7e74c9..5a61d3d 100644 --- a/fediseer/register.py +++ b/fediseer/register.py @@ -10,12 +10,12 @@ def ensure_instance_registered(domain, allow_unreachable=False, record_unreachab instance = database.find_instance_by_domain(domain) try: instance_info = InstanceInfo(domain,allow_unreachable=allow_unreachable, req_timeout=allowed_timeout) + instance_info.get_instance_info() except Exception as err: if record_unreachable and instance and instance.software != "wildcard": # We only consider an instance unreachable if we can't reach its nodeinfo # This means that a misconfigured instance will also be considered as 'down' - nodeinfo = InstanceInfo.get_nodeinfo(domain,req_timeout=allowed_timeout) - if nodeinfo is None: + if instance_info.node_info is None: logger.warning(f"Recorded {domain} as unreachable.") instance.updated = datetime.utcnow() instance.poll_failures += 1 diff --git a/updater.py b/updater.py index 43e8db0..9338847 100644 --- a/updater.py +++ b/updater.py @@ -47,7 +47,8 @@ if __name__ == "__main__": for instance in database.get_all_instances(0,0): if instance.software == 'wildcard': continue - if instance.poll_failures > int(os.getenv('FEDISEER_IGNORE_POLL_FAILS', 0)): + # -1 doesn't skip anything + if os.getenv('FEDISEER_IGNORE_POLL_FAILS', -1) >= 0 and instance.poll_failures > int(os.getenv('FEDISEER_IGNORE_POLL_FAILS', 0)): logger.debug(f"Skipped {instance.domain} due to too many poll fails.") continue futures.append(executor.submit(refresh_info, instance.domain))