]> 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: Fetching instances for domain:", domain, origin)
9     peerlist = fba.get_peers(domain)
10
11     if (peerlist is None):
12         print("ERROR: Cannot fetch peers:", domain)
13
14         fba.c.execute(
15             "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [domain]
16         )
17
18         if fba.c.fetchone() == None:
19             # NOISY-DEBUG: print("DEBUG: Adding new domain:", domain, origin)
20             fba.add_instance(domain, origin, sys.argv[0])
21
22         fba.conn.commit()
23         return
24
25     for instance in peerlist:
26         instance = instance.lower()
27         if instance.find("@") > 0:
28             print("WARNING: Bad instance name,domain:", instance, domain)
29             continue
30
31         blacklisted = False
32         for peer in fba.blacklist:
33             if peer in instance:
34                 blacklisted = True
35
36         if blacklisted:
37             # NOISY-DEBUG: print("DEBUG: domain is blacklisted:", domain)
38             continue
39
40         # NOISY-DEBUG: print("DEBUG: Handling instance:", instance)
41         try:
42             fba.c.execute(
43                 "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [instance]
44             )
45
46             if fba.c.fetchone() == None:
47                 # NOISY-DEBUG: print("DEBUG: Adding new instance:", instance, domain)
48                 fba.add_instance(instance, domain, sys.argv[0])
49
50             fba.conn.commit()
51
52         except Exception as e:
53             print("ERROR:", e, instance)
54             continue
55
56 instance = sys.argv[1]
57
58 # Initial fetch
59 fetch_instances(instance, None)
60
61 # Loop through some instances
62 fba.c.execute(
63     "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"]]
64 )
65
66 for instance in fba.c.fetchall():
67     blacklisted = False
68     for domain in fba.blacklist:
69         if domain in instance[0]:
70             blacklisted = True
71
72     if blacklisted:
73         # NOISY-DEBUG: print("DEBUG: domain is blacklisted:", instance)
74         continue
75
76     print("INFO: Fetching instances for instance:", instance[0])
77     fetch_instances(instance[0], None)
78
79 fba.conn.close()