]> 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         return
14
15     fba.c.execute(
16         "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [domain]
17     )
18
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])
22
23     print(f"INFO: Checking {len(peerlist)} instances from {domain} ...")
24     for instance in peerlist:
25         instance = instance.lower()
26
27         if instance.find("@") > 0:
28             print("WARNING: Bad instance name,domain:", instance, domain)
29             continue
30
31         if fba.is_blacklisted(instance):
32             # NOISY-DEBUG: print("DEBUG: instance is blacklisted:", instance)
33             continue
34
35         # NOISY-DEBUG: print("DEBUG: Handling instance:", instance)
36         try:
37             fba.c.execute(
38                 "SELECT domain FROM instances WHERE domain = ? LIMIT 1", [instance]
39             )
40
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])
44
45             fba.conn.commit()
46
47         except Exception as e:
48             print("ERROR:", e, instance)
49             continue
50
51 instance = sys.argv[1]
52
53 # Initial fetch
54 fetch_instances(instance, None)
55
56 # Loop through some instances
57 fba.c.execute(
58     "SELECT domain FROM instances WHERE software IN ('pleroma', 'mastodon', 'friendica', 'misskey', 'gotosocial') AND (software IS NULL OR last_nodeinfo IS NULL OR last_nodeinfo < ?) ORDER BY rowid DESC", [time.time() - fba.config["recheck_instance"]]
59 )
60
61 for instance in fba.c.fetchall():
62     if fba.is_blacklisted(instance[0]):
63         # NOISY-DEBUG: print("DEBUG: domain is blacklisted:", instance)
64         continue
65
66     print("INFO: Fetching instances for instance:", instance[0])
67     fetch_instances(instance[0], None)
68
69 fba.conn.close()