8 def fetch_instances(domain: str, origin: str, software: str):
9 # NOISY-DEBUG: print("DEBUG: domain,origin,software:", domain, origin, software)
11 "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [domain]
14 if fba.cursor.fetchone() == None:
15 # NOISY-DEBUG: print("DEBUG: Adding new domain:", domain, origin)
16 fba.add_instance(domain, origin, sys.argv[0])
18 # NOISY-DEBUG: print("DEBUG: Fetching instances for domain:", domain, software)
19 peerlist = fba.get_peers(domain, software)
21 if (peerlist is None):
22 print("ERROR: Cannot fetch peers:", domain)
24 elif domain in fba.nodeinfos["get_peers_url"]:
25 # NOISY-DEBUG: print(f"DEBUG: domain='{domain}' has pending nodeinfo data, flushing ...")
26 fba.update_nodeinfos(domain)
28 print(f"INFO: Checking {len(peerlist)} instances from {domain} ...")
29 for instance in peerlist:
30 # NOISY-DEBUG: print("DEBUG: BEFORE instance:", instance)
31 instance = fba.tidyup(instance)
32 # NOISY-DEBUG: print("DEBUG: AFTER instance:", instance)
35 print("WARNING: Empty instance after tidyup(), domain:", domain)
37 elif not validators.domain(instance):
38 print("WARNING: Bad instance name,domain:", instance, domain)
40 elif fba.is_blacklisted(instance):
41 # NOISY-DEBUG: print("DEBUG: instance is blacklisted:", instance)
44 # NOISY-DEBUG: print("DEBUG: Handling instance:", instance)
47 "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [instance]
50 if fba.cursor.fetchone() == None:
51 # NOISY-DEBUG: print("DEBUG: Adding new instance:", instance, domain)
52 fba.add_instance(instance, domain, sys.argv[0])
54 fba.connection.commit()
56 except Exception as e:
57 print("ERROR:", e, instance)
60 instance = sys.argv[1]
63 fetch_instances(instance, None, None)
65 # Loop through some instances
67 "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"]]
70 rows = fba.cursor.fetchall()
71 print(f"INFO: Checking {len(rows)} entries ...")
73 # NOISY-DEBUG: print("DEBUG: domain:", row[0])
74 if fba.is_blacklisted(row[0]):
75 print("WARNING: domain is blacklisted:", row[0])
78 print("INFO: Fetching instances for instance:", row[0])
79 fetch_instances(row[0], None, row[1])
81 fba.connection.close()