fritz-usage-report.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. # coding: utf-8
  2. import netaddr
  3. import datetime
  4. import lglass.bird
  5. import lglass.route
  6. import lglass.database.file
  7. with open("routes.bird") as fh:
  8. routes = lglass.route.RoutingTable(lglass.bird.parse_routes(fh))
  9. db = lglass.database.file.FileDatabase("/home/zorun/net.dn42.registry/data")
  10. dn42_native = netaddr.IPNetwork("172.22.0.0/15")
  11. db_nets = netaddr.IPSet()
  12. route_nets = netaddr.IPSet()
  13. for type, primary_key in db.list():
  14. if type == "inetnum":
  15. addr = netaddr.IPNetwork(primary_key)
  16. if addr not in dn42_native:
  17. continue
  18. obj = db.get(type, primary_key)
  19. if "BLK" in obj.getfirst("netname", ""):
  20. continue
  21. db_nets.add(addr)
  22. for route in routes:
  23. if route.prefix not in dn42_native:
  24. continue
  25. route_nets.add(route.prefix)
  26. all_nets = netaddr.IPSet()
  27. all_nets.add(dn42_native)
  28. announced_nets = route_nets
  29. registered_nets = db_nets
  30. unused_nets = all_nets - announced_nets
  31. unregistered_nets = all_nets - registered_nets
  32. free_nets = unused_nets.intersection(unregistered_nets)
  33. print("DN42 network usage report")
  34. print("Date: {}".format(datetime.datetime.now()))
  35. print()
  36. print("Statistics:")
  37. print(" Total {}".format(len(all_nets)))
  38. print("-" * 80)
  39. print(" Announced {}\t{}%".format(len(announced_nets), len(announced_nets)/len(all_nets)*100))
  40. print(" Registered {}\t{}%".format(len(registered_nets), len(registered_nets)/len(all_nets)*100))
  41. print(" Unregistered {}\t{}%".format(len(unregistered_nets), len(unregistered_nets)/len(all_nets)*100))
  42. print(" Unused {}\t{}%".format(len(unused_nets), len(unused_nets)/len(all_nets)*100))
  43. print(" Free {}\t{}%".format(len(free_nets), len(free_nets)/len(all_nets)*100))
  44. print()
  45. print("Announced netwoks:")
  46. for net in announced_nets.iter_cidrs():
  47. print(" * {}".format(net))
  48. print()
  49. print("Registered netwoks:")
  50. for net in registered_nets.iter_cidrs():
  51. print(" * {}".format(net))
  52. print()
  53. print("Unregistered netwoks:")
  54. for net in unregistered_nets.iter_cidrs():
  55. print(" * {}".format(net))
  56. print()
  57. print("Unused netwoks:")
  58. for net in unused_nets.iter_cidrs():
  59. print(" * {}".format(net))
  60. print()
  61. print("Free netwoks:")
  62. for net in free_nets.iter_cidrs():
  63. print(" * {}".format(net))