]> 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
24     print(f"INFO: Checking {len(peerlist)} instances from {domain} ...")
25     for instance in peerlist:
26         instance = instance.lower()
27
28         if instance.find("@") > 0:
29             print("WARNING: Bad instance name,domain:", instance, domain)
30             continue
31
32         if fba.is_blacklisted(instance):
33             # NOISY-DEBUG: print("DEBUG: instance is blacklisted:", instance)
34             continue
35
36         # NOISY-DEBUG: print("DEBUG: Handling instance:", instance)
37         try:
38             fba.cursor.execute(
39                 "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [instance]
40             )
41
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])
45
46             fba.connection.commit()
47
48         except Exception as e:
49             print("ERROR:", e, instance)
50             continue
51
52 instance = sys.argv[1]
53
54 # Initial fetch
55 fetch_instances(instance, None)
56
57 # Loop through some instances
58 fba.cursor.execute(
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"]]
60 )
61
62 for row in fba.cursor.fetchall():
63     domain = row[0]
64     # NOISY-DEBUG: print("DEBUG: domain:", domain)
65     if fba.is_blacklisted(domain):
66         # NOISY-DEBUG: print("DEBUG: domain is blacklisted:", domain)
67         continue
68
69     print("INFO: Fetching instances for instance:", domain)
70     fetch_instances(domain, None)
71
72 fba.connection.close()