]> git.mxchange.org Git - fba.git/blob - fetch_instances.py
Continued:
[fba.git] / fetch_instances.py
1 import sqlite3
2 import sys
3 import json
4 import time
5 import fba
6
7 def fetch_instances(domain: str, origin: str):
8     # NOISY-DEBUG: print("DEBUG: domain,origin:", domain, origin)
9     fba.cursor.execute(
10         "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [domain]
11     )
12
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])
16
17     # NOISY-DEBUG: print("DEBUG: Fetching instances for domain:", domain, origin)
18     peerlist = fba.get_peers(domain)
19
20     if (peerlist is None):
21         print("ERROR: Cannot fetch peers:", domain)
22         return
23     elif domain in fba.nodeinfos["get_peers_url"]:
24         # NOISY-DEBUG: print(f"DEBUG: domain='{domain}' has pending nodeinfo data, flushing ...")
25         fba.update_nodeinfos(domain)
26
27     print(f"INFO: Checking {len(peerlist)} instances from {domain} ...")
28     for instance in peerlist:
29         instance = instance.lower()
30
31         if instance.find("@") > 0:
32             print("WARNING: Bad instance name,domain:", instance, domain)
33             continue
34
35         if fba.is_blacklisted(instance):
36             # NOISY-DEBUG: print("DEBUG: instance is blacklisted:", instance)
37             continue
38
39         # NOISY-DEBUG: print("DEBUG: Handling instance:", instance)
40         try:
41             fba.cursor.execute(
42                 "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [instance]
43             )
44
45             if fba.cursor.fetchone() == None:
46                 # NOISY-DEBUG: print("DEBUG: Adding new instance:", instance, domain)
47                 fba.add_instance(instance, domain, sys.argv[0])
48
49             fba.connection.commit()
50
51         except Exception as e:
52             print("ERROR:", e, instance)
53             continue
54
55 instance = sys.argv[1]
56
57 # Initial fetch
58 fetch_instances(instance, None)
59
60 # Loop through some instances
61 fba.cursor.execute(
62     "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"]]
63 )
64
65 for row in fba.cursor.fetchall():
66     domain = row[0]
67     # NOISY-DEBUG: print("DEBUG: domain:", domain)
68     if fba.is_blacklisted(domain):
69         print("WARNING: domain is blacklisted:", domain)
70         continue
71
72     print("INFO: Fetching instances for instance:", domain)
73     fetch_instances(domain, None)
74
75 fba.connection.close()