X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=fetch_instances.py;h=a453fd957f49afd0d8eb9870f165cfc0cad96425;hb=476f1e56794a02d5f0953a6aecfdae7539f3b647;hp=6b8a8d81f27af6b13f3554950e4a2693cd6eea09;hpb=40fa5bf62f9214a44fb2646132cdf5858d3efc85;p=fba.git diff --git a/fetch_instances.py b/fetch_instances.py index 6b8a8d8..a453fd9 100644 --- a/fetch_instances.py +++ b/fetch_instances.py @@ -1,3 +1,19 @@ +# Fedi API Block - An aggregator for fetching blocking data from fediverse nodes +# Copyright (C) 2023 Free Software Foundation +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + import sqlite3 import sys import json @@ -5,15 +21,11 @@ import time import validators import fba -def fetch_instances(domain: str, origin: str, software: str): - # NOISY-DEBUG: print("DEBUG: domain,origin,software:", domain, origin, software) - fba.cursor.execute( - "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [domain] - ) - - if fba.cursor.fetchone() == None: +def fetch_instances(domain: str, origin: str, software: str, path: str = None): + # NOISY-DEBUG: print("DEBUG: domain,origin,software,path:", domain, origin, software, path) + if not fba.is_instance_registered(domain): # NOISY-DEBUG: print("DEBUG: Adding new domain:", domain, origin) - fba.add_instance(domain, origin, sys.argv[0]) + fba.add_instance(domain, origin, sys.argv[0], path) # NOISY-DEBUG: print("DEBUG: Fetching instances for domain:", domain, software) peerlist = fba.get_peers(domain, software) @@ -21,7 +33,7 @@ def fetch_instances(domain: str, origin: str, software: str): if (peerlist is None): print("ERROR: Cannot fetch peers:", domain) return - elif domain in fba.nodeinfos["get_peers_url"]: + elif fba.has_pending_nodeinfos(domain): # NOISY-DEBUG: print(f"DEBUG: domain='{domain}' has pending nodeinfo data, flushing ...") fba.update_nodeinfos(domain) @@ -34,8 +46,8 @@ def fetch_instances(domain: str, origin: str, software: str): if instance == "": print("WARNING: Empty instance after tidyup(), domain:", domain) continue - elif not validators.domain(instance): - print("WARNING: Bad instance name,domain:", instance, domain) + elif not validators.domain(instance.split("/")[0]): + print(f"WARNING: Bad instance='{instance}' from domain='{domain}',origin='{origin}',software='{software}'") continue elif fba.is_blacklisted(instance): # NOISY-DEBUG: print("DEBUG: instance is blacklisted:", instance) @@ -43,18 +55,11 @@ def fetch_instances(domain: str, origin: str, software: str): # NOISY-DEBUG: print("DEBUG: Handling instance:", instance) try: - fba.cursor.execute( - "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [instance] - ) - - if fba.cursor.fetchone() == None: + if not fba.is_instance_registered(instance): # NOISY-DEBUG: print("DEBUG: Adding new instance:", instance, domain) fba.add_instance(instance, domain, sys.argv[0]) - - fba.connection.commit() - - except Exception as e: - print("ERROR:", e, instance) + except BaseException as e: + print(f"ERROR: instance='{instance}',exception:'{str(e)}'") continue instance = sys.argv[1] @@ -64,16 +69,18 @@ fetch_instances(instance, None, None) # Loop through some instances fba.cursor.execute( - "SELECT domain,software FROM instances WHERE software IN ('pleroma', 'mastodon', 'friendica', 'misskey', 'gotosocial', 'bookwyrm', 'takahe', 'lemmy') AND (last_nodeinfo IS NULL OR last_nodeinfo < ?) ORDER BY rowid DESC", [time.time() - fba.config["recheck_instance"]] + "SELECT domain, origin, software, nodeinfo_url FROM instances WHERE software IN ('pleroma', 'mastodon', 'friendica', 'misskey', 'gotosocial', 'bookwyrm', 'takahe', 'lemmy') AND (last_instance_fetch IS NULL OR last_instance_fetch < ?) ORDER BY rowid DESC", [time.time() - fba.config["recheck_instance"]] ) -for row in fba.cursor.fetchall(): +rows = fba.cursor.fetchall() +print(f"INFO: Checking {len(rows)} entries ...") +for row in rows: # NOISY-DEBUG: print("DEBUG: domain:", row[0]) if fba.is_blacklisted(row[0]): print("WARNING: domain is blacklisted:", row[0]) continue - print("INFO: Fetching instances for instance:", row[0]) - fetch_instances(row[0], None, row[1]) + print(f"INFO: Fetching instances for instance '{row[0]}'('{row[2]}') of origin '{row[1]}',nodeinfo_url='{row[3]}'") + fetch_instances(row[0], row[1], row[2], row[3]) fba.connection.close()