Guest User

Untitled

a guest
Dec 20th, 2023
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.48 KB | None | 0 0
  1. import sys, urllib.request, json, html.parser, re, matplotlib.pyplot as plt
  2. statusmap = {e["name"]: (e["users"], "unknown") for e
  3. in json.load(urllib.request.urlopen("https://instances.social/instances.json")) if e["users"]}
  4. statusmap.update({e["domain"]: (e["total_users"], e["severity"]) for e
  5. in json.load(urllib.request.urlopen("https://fedipact.veganism.social/federation.json"))})
  6. groups = {}
  7. for users, domain, status in reversed(sorted((users, domain, status)
  8. for domain, (users, status) in statusmap.items())):
  9. if status != "not-federated":
  10. groups.setdefault(status, []).append((users, domain))
  11. tot = sum(cnt for entries in groups.values() for cnt, domain in entries)
  12. fractions = {}
  13. for status, entries in groups.items():
  14. statuscnt = sum(cnt for cnt, domain in entries)
  15. largest = " ".join([f"{domain}({cnt} {100 * cnt / tot:.1f}%)" for cnt, domain in reversed(sorted(entries))][:4])
  16. fractions[status] = statuscnt / tot
  17. print(f"{status:13} {statuscnt:8} {len(entries):6} {100 * statuscnt / tot:5.2f}% {largest} ...")
  18. print()
  19. colormap = {"federated": "lime", "unknown": "silver", "not-federated": "blue",
  20. "blocked": "red", "fedipact": "darkred", "limited": "yellow", }
  21. plt.pie([sum(cnt for cnt, domain in entries) for entries in groups.values()],
  22. labels=groups.keys(), autopct='%1.1f%%',
  23. wedgeprops={"linewidth": 1, "edgecolor": "black"},
  24. colors=[colormap[status] for status in groups.keys()])
  25. plt.show()
  26.  
Advertisement
Add Comment
Please, Sign In to add comment