7 def fetch_instances(domain: str, origin: str):
8 # NOISY-DEBUG: print("DEBUG: Fetching instances for domain:", domain, origin)
9 peerlist = fba.get_peers(domain)
11 if (peerlist is None):
12 print("ERROR: Cannot fetch peers:", domain)
16 "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [domain]
19 if fba.c.fetchone() == None:
20 # NOISY-DEBUG: print("DEBUG: Adding new domain:", domain, origin)
21 fba.add_instance(domain, origin, sys.argv[0])
23 print(f"INFO: Checking {len(peerlist)} instances from {domain} ...")
24 for instance in peerlist:
25 instance = instance.lower()
27 if instance.find("@") > 0:
28 print("WARNING: Bad instance name,domain:", instance, domain)
31 if fba.is_blacklisted(instance):
32 # NOISY-DEBUG: print("DEBUG: instance is blacklisted:", instance)
35 # NOISY-DEBUG: print("DEBUG: Handling instance:", instance)
38 "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [instance]
41 if fba.c.fetchone() == None:
42 # NOISY-DEBUG: print("DEBUG: Adding new instance:", instance, domain)
43 fba.add_instance(instance, domain, sys.argv[0])
47 except Exception as e:
48 print("ERROR:", e, instance)
51 instance = sys.argv[1]
54 fetch_instances(instance, None)
56 # Loop through some instances
58 "SELECT domain FROM instances WHERE software IN ('pleroma', 'mastodon', 'friendica', 'misskey', 'gotosocial') AND (last_nodeinfo IS NULL OR last_nodeinfo < ?) ORDER BY rowid DESC", [time.time() - fba.config["recheck_instance"]]
61 for instance in fba.c.fetchall():
62 if fba.is_blacklisted(instance[0]):
63 # NOISY-DEBUG: print("DEBUG: domain is blacklisted:", instance)
66 print("INFO: Fetching instances for instance:", instance[0])
67 fetch_instances(instance[0], None)