mirror of https://github.com/nucypher/nucypher.git
50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
import asyncio
|
|
from collections import Counter
|
|
from contextlib import suppress
|
|
|
|
import aiohttp
|
|
import requests
|
|
|
|
TIMEOUT = 5
|
|
template = "https://{host}/status?json=true"
|
|
|
|
requests.packages.urllib3.disable_warnings()
|
|
|
|
|
|
async def fetch(session, url):
|
|
with suppress(Exception):
|
|
async with session.get(url, ssl=False, timeout=TIMEOUT) as response:
|
|
response = await response.json()
|
|
return response["version"]
|
|
return "unknown"
|
|
|
|
|
|
async def main():
|
|
|
|
url = template.format(host="mainnet.nucypher.network:9151")
|
|
async with aiohttp.ClientSession() as session:
|
|
async with session.get(url, ssl=False, timeout=TIMEOUT) as response:
|
|
status_data = await response.json()
|
|
|
|
nodes = status_data.get("known_nodes", [])
|
|
total_nodes = len(nodes)
|
|
print(f"Number of nodes: {total_nodes}")
|
|
|
|
tasks = set()
|
|
for node in nodes:
|
|
url = template.format(host=node["rest_url"])
|
|
tasks.add(fetch(session, url))
|
|
|
|
results = Counter()
|
|
for task in asyncio.as_completed(tasks):
|
|
if task:
|
|
result = await task
|
|
results[result] += 1
|
|
|
|
items = sorted(results.items(), key=lambda result: result[1], reverse=True)
|
|
for version, count in items:
|
|
print(f"Version {version}: {count} nodes ({count*100/total_nodes:.1f}%)")
|
|
|
|
|
|
asyncio.run(main())
|