7 def fetch_instances(domain: str, origin: str):
8 # NOISY-DEBUG: print("DEBUG: domain,origin:", domain, origin)
10 "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [domain]
13 if fba.cursor.fetchone() == None:
14 # NOISY-DEBUG: print("DEBUG: Adding new domain:", domain, origin)
15 fba.add_instance(domain, origin, sys.argv[0])
17 # NOISY-DEBUG: print("DEBUG: Fetching instances for domain:", domain, origin)
18 peerlist = fba.get_peers(domain)
20 if (peerlist is None):
21 print("ERROR: Cannot fetch peers:", domain)
24 print(f"INFO: Checking {len(peerlist)} instances from {domain} ...")
25 for instance in peerlist:
26 instance = instance.lower()
28 if instance.find("@") > 0:
29 print("WARNING: Bad instance name,domain:", instance, domain)
32 if fba.is_blacklisted(instance):
33 # NOISY-DEBUG: print("DEBUG: instance is blacklisted:", instance)
36 # NOISY-DEBUG: print("DEBUG: Handling instance:", instance)
39 "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [instance]
42 if fba.cursor.fetchone() == None:
43 # NOISY-DEBUG: print("DEBUG: Adding new instance:", instance, domain)
44 fba.add_instance(instance, domain, sys.argv[0])
46 fba.connection.commit()
48 except Exception as e:
49 print("ERROR:", e, instance)
52 instance = sys.argv[1]
55 fetch_instances(instance, None)
57 # Loop through some instances
59 "SELECT domain FROM instances WHERE software IN ('pleroma', 'mastodon', 'friendica', 'misskey', 'gotosocial', 'bookwyrm', 'takahe') AND (last_nodeinfo IS NULL OR last_nodeinfo < ?) ORDER BY rowid DESC", [time.time() - fba.config["recheck_instance"]]
62 for row in fba.cursor.fetchall():
64 # NOISY-DEBUG: print("DEBUG: domain:", domain)
65 if fba.is_blacklisted(domain):
66 # NOISY-DEBUG: print("DEBUG: domain is blacklisted:", domain)
69 print("INFO: Fetching instances for instance:", domain)
70 fetch_instances(domain, None)
72 fba.connection.close()