]> git.mxchange.org Git - fba.git/commitdiff
Continued:
authorRoland Häder <roland@mxchange.org>
Sun, 2 Jul 2023 18:16:01 +0000 (20:16 +0200)
committerRoland Häder <roland@mxchange.org>
Sun, 2 Jul 2023 18:16:01 +0000 (20:16 +0200)
- command update_nodeinfo() now supports --domain and --software parameter
- without them only out-dated instances are being check
- also determined software is being updated

fba/boot.py
fba/commands.py
fba/models/instances.py

index d04fd95a38c89111ba808f6e4c6828aa79561391..c25f707ef3a22290ce803afbeaf1d45368940774 100644 (file)
@@ -188,6 +188,8 @@ def init_parser():
         help="Updates nodeinfo for all instances",
     )
     parser.set_defaults(command=commands.update_nodeinfo)
+    parser.add_argument("--domain", help="Instance name (aka. domain)")
+    parser.add_argument("--software", help="Name of software, e.g. 'lemmy'")
 
     logger.debug("EXIT!")
 
index cf88126fdcd3f292a55e8558cdeb8dc64e1d5d5c..5a59379da16571518780777fdd174aab5c476f33 100644 (file)
@@ -1374,15 +1374,34 @@ def fetch_fedilist(args: argparse.Namespace) -> int:
 def update_nodeinfo(args: argparse.Namespace) -> int:
     logger.debug("args[]='%s' - CALLED!", type(args))
 
-    database.cursor.execute("SELECT domain FROM instances WHERE last_nodeinfo < ?", [time.time() - config.get("recheck_block")])
+    if args.domain is not None and args.domain != "":
+        logger.debug("Fetching args.domain='%s'", args.domain)
+        database.cursor.execute("SELECT domain FROM instances WHERE domain = ?", [args.domain])
+    elif args.software is not None and args.software != "":
+        logger.info("Fetching domains for args.software='%s'", args.software)
+        database.cursor.execute("SELECT domain FROM instances WHERE software = ?", [args.software])
+    else:
+        logger.info("Fetching domains for recently updated ...")
+        database.cursor.execute("SELECT domain FROM instances WHERE last_nodeinfo < ? OR last_nodeinfo IS NULL", [time.time() - config.get("recheck_block")])
 
     domains = database.cursor.fetchall()
 
     logger.info("Checking %d domain(s) ...", len(domains))
     for row in domains:
-        logger.info("Updating nodeinfo for row[domain]='%s' ...", row["domain"])
-        federation.fetch_nodeinfo(row["domain"])
+        logger.debug("row[]='%s'", type(row))
+        try:
+            logger.info("Updating nodeinfo for row[domain]='%s' ...", row["domain"])
+            software = federation.determine_software(row["domain"])
+
+            logger.info("Determined software='%s'", software)
+            instances.set_software(row["domain"], software)
+            instances.set_success(row["domain"])
+        except network.exceptions as exception:
+            logger.warning("Exception '%s' during updating nodeinfo for row[domain]='%s'", type(exception), row["domain"])
+            instances.set_last_error(row["domain"], exception)
+
         instances.set_last_nodeinfo(row["domain"])
+        instances.update_data(row["domain"])
 
     logger.debug("Success! - EXIT!")
     return 0
index 59dc6b222e3f4db721dedb3126fe678657b8aad8..2017153a147104df3ee02064a1dba147dd64bbf4 100644 (file)
@@ -65,6 +65,8 @@ _pending = {
     "last_error_details" : {},
     # Wether obfuscation has been used
     "has_obfuscation"    : {},
+    # Determined software
+    "software"           : {},
 }
 
 def _set_data(key: str, domain: str, value: any):
@@ -445,3 +447,16 @@ def set_has_obfuscation(domain: str, status: bool):
     # Set timestamp
     _set_data("has_obfuscation", domain, status)
     logger.debug("EXIT!")
+
+def set_software(domain: str, software: str):
+    logger.debug("domain='%s',software='%s' - CALLED!", domain, software)
+    domain_helper.raise_on(domain)
+
+    if not isinstance(software, str) and software is not None:
+        raise ValueError(f"Parameter software[]='{type(software)}' is not 'str'")
+    elif software == "":
+        raise ValueError("Parameter 'software' is empty")
+
+    # Set timestamp
+    _set_data("software", domain, software)
+    logger.debug("EXIT!")