Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys, urllib.request, json, html.parser, re, matplotlib.pyplot as plt
- statusmap = {e["name"]: (e["users"], "unknown") for e
- in json.load(urllib.request.urlopen("https://instances.social/instances.json")) if e["users"]}
- statusmap.update({e["domain"]: (e["total_users"], e["severity"]) for e
- in json.load(urllib.request.urlopen("https://fedipact.veganism.social/federation.json"))})
- groups = {}
- for users, domain, status in reversed(sorted((users, domain, status)
- for domain, (users, status) in statusmap.items())):
- if status != "not-federated":
- groups.setdefault(status, []).append((users, domain))
- tot = sum(cnt for entries in groups.values() for cnt, domain in entries)
- fractions = {}
- for status, entries in groups.items():
- statuscnt = sum(cnt for cnt, domain in entries)
- largest = " ".join([f"{domain}({cnt} {100 * cnt / tot:.1f}%)" for cnt, domain in reversed(sorted(entries))][:4])
- fractions[status] = statuscnt / tot
- print(f"{status:13} {statuscnt:8} {len(entries):6} {100 * statuscnt / tot:5.2f}% {largest} ...")
- print()
- colormap = {"federated": "lime", "unknown": "silver", "not-federated": "blue",
- "blocked": "red", "fedipact": "darkred", "limited": "yellow", }
- plt.pie([sum(cnt for cnt, domain in entries) for entries in groups.values()],
- labels=groups.keys(), autopct='%1.1f%%',
- wedgeprops={"linewidth": 1, "edgecolor": "black"},
- colors=[colormap[status] for status in groups.keys()])
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment