]
def fetch_instances(domain: str, origin: str, software: str, command: str, path: str = None):
- logger.debug("domain='%s',origin='%s',software='%s',path='%s' - CALLED!", domain, origin, software, path)
+ logger.debug("domain='%s',origin='%s',software='%s',command='%s',path='%s' - CALLED!", domain, origin, software, command, path)
domain_helper.raise_on(domain)
if not isinstance(origin, str) and origin is not None:
raise ValueError(f"Parameter origin[]='{type(origin)}' is not 'str'")
+ elif not isinstance(command, str):
+ raise ValueError(f"Parameter command[]='{type(command)}' is not 'str'")
+ elif command == "":
+ raise ValueError("Parameter 'command' is empty")
elif software is None:
logger.debug("Updating last_instance_fetch for domain='%s' ...", domain)
instances.set_last_instance_fetch(domain)
logger.debug("Determined software='%s' for domain='%s'", software, domain)
elif not isinstance(software, str):
raise ValueError(f"Parameter software[]='{type(software)}' is not 'str'")
- elif not isinstance(command, str):
- raise ValueError(f"Parameter command[]='{type(command)}' is not 'str'")
- elif command == "":
- raise ValueError("Parameter 'command' is empty")
if not instances.is_registered(domain):
logger.debug("Adding new domain='%s',origin='%s',command='%s',path='%s',software='%s'", domain, origin, command, path, software)
logger.debug("Invoking peertube.fetch_peers(%s) ...", domain)
return peertube.fetch_peers(domain)
- # Init peers variable
- peers = list()
-
# No CSRF by default, you don't have to add network.api_headers by yourself here
headers = tuple()
except network.exceptions as exception:
logger.warning("Exception '%s' during checking CSRF (fetch_peers,%s) - EXIT!", type(exception), __name__)
instances.set_last_error(domain, exception)
- return peers
+ return list()
- logger.debug("Fetching peers from domain='%s',software='%s' ...", domain, software)
- data = network.get_json_api(
- domain,
+ paths = {
"/api/v1/instance/peers",
- headers,
- (config.get("connection_timeout"), config.get("read_timeout"))
- )
+ "/api/v3/site",
+ }
- logger.debug("data[]='%s'", type(data))
- if "error_message" in data:
- logger.debug("Was not able to fetch peers, trying alternative ...")
+ # Init peers variable
+ peers = list()
+
+ logger.debug("Checking %d paths ...", len(paths))
+ for path in paths:
+ logger.debug("Fetching path='%s' from domain='%s',software='%s' ...", path, domain, software)
data = network.get_json_api(
domain,
- "/api/v3/site",
+ path,
headers,
(config.get("connection_timeout"), config.get("read_timeout"))
)
logger.debug("data[]='%s'", type(data))
if "error_message" in data:
- logger.warning("Could not reach any JSON API at domain='%s',status_code='%d',error_message='%s'", domain, data['status_code'], data['error_message'])
- elif "federated_instances" in data["json"]:
- logger.debug("Found federated_instances for domain='%s'", domain)
- peers = peers + add_peers(data["json"]["federated_instances"])
- logger.debug("Added instance(s) to peers")
- else:
- message = "JSON response does not contain 'federated_instances' or 'error_message'"
- logger.warning("message='%s',domain='%s'", message, domain)
- instances.set_last_error(domain, message)
- elif isinstance(data["json"], list):
- logger.debug("Querying API was successful: domain='%s',data[json]()=%d", domain, len(data['json']))
- peers = data["json"]
- else:
- logger.warning("Cannot parse data[json][]='%s'", type(data['json']))
-
- logger.debug("Adding %d for domain='%s'", len(peers), domain)
+ logger.debug("Was not able to fetch peers from path='%s',domain='%s' ...", path, domain)
+ instances.set_last_error(domain, data)
+ elif "json" in data and len(data["json"]) > 0:
+ logger.debug("Querying API path='%s' was successful: domain='%s',data[json]()=%d", path, domain, len(data['json']))
+ peers = data["json"]
+ instances.set_success(domain)
+ break
+
+ logger.debug("Invoking instances.set_total_peers(%s,%d) ...", domain, len(peers))
instances.set_total_peers(domain, peers)
logger.debug("peers()=%d - EXIT!", len(peers))
if "error_message" not in data:
nodeinfo = data["json"]
+ instances.set_success(domain)
+
logger.debug("Found entries: nodeinfo()=%d,domain='%s'", len(nodeinfo), domain)
if "links" in nodeinfo:
logger.debug("Found nodeinfo[links]()=%d record(s)", len(nodeinfo["links"]))
logger.debug("link[href]='%s',data[]='%s'", link["href"], type(data))
if "error_message" not in data and "json" in data:
- logger.debug("Found JSON nodeinfo()=%d", len(data))
+ logger.debug("Found JSON data()=%d", len(data))
instances.set_detection_mode(domain, "AUTO_DISCOVERY")
instances.set_nodeinfo_url(domain, link["href"])
+ instances.set_success(domain)
break
else:
instances.set_last_error(domain, data)