/website/download_stats/distro_stats.py

https://github.com/mono/release
Python | 107 lines | 75 code | 27 blank | 5 comment | 6 complexity | c5f40c03ef8543e14bb19cd39a8830fb MD5 | raw file
  1. #!/usr/bin/env python
  2. import glob
  3. import re
  4. arch_count = {}
  5. distro_count = {}
  6. distro_ver_count = {}
  7. distro_ver_arch_count = {}
  8. distro_arch_count = {}
  9. arch_size = {}
  10. distro_size = {}
  11. distro_ver_size = {}
  12. distro_ver_arch_size = {}
  13. distro_arch_size = {}
  14. distros = """
  15. sles
  16. suse
  17. fedora
  18. rhel
  19. """.split()
  20. archs = """
  21. i.86
  22. x86_64
  23. ia64
  24. ppc
  25. s390
  26. s390x
  27. """.split()
  28. def accumulate(type, key, num):
  29. if not type.has_key(key):
  30. type[key] = 0
  31. type[key] += int(num)
  32. def sort_and_output(title, type):
  33. print "--------------------------------------------"
  34. print title
  35. print ""
  36. # create reverse lookup to sort by value
  37. new ={}
  38. for k,v in type.iteritems():
  39. new[v] = k
  40. sorted = new.keys()
  41. sorted.sort()
  42. sorted.reverse()
  43. total = sum(sorted)
  44. for i in sorted:
  45. print "%-20s:%15d (%.2f%%)" % (new[i], i, float(i) / float(total))
  46. print ""
  47. print "Total: %d" % total
  48. print "--------------------------------------------"
  49. print ""
  50. # collect stats
  51. for i in glob.glob("www_http/url_*.tab") + glob.glob("www_ftp/url_*.tab"):
  52. fd = open(i)
  53. for line in fd.readlines():
  54. (hits, total_size, url) = line.split()
  55. # What distro and arch? (if any)
  56. m1 = re.search("\/(%s)-(\d+)-(%s)\/" % ("|".join(distros), "|".join(archs)), line)
  57. if m1:
  58. (distro, ver, arch) = m1.groups()
  59. accumulate(arch_count, arch, hits)
  60. accumulate(distro_count, distro, hits)
  61. accumulate(distro_ver_count, "-".join((distro,ver)), hits)
  62. accumulate(distro_arch_count, "-".join((distro,arch)), hits)
  63. accumulate(distro_ver_arch_count, "-".join((distro,ver,arch)), hits)
  64. accumulate(arch_size, arch, total_size)
  65. accumulate(distro_size, distro, total_size)
  66. accumulate(distro_ver_size, "-".join((distro,ver)), total_size)
  67. accumulate(distro_arch_size, "-".join((distro,arch)), total_size)
  68. accumulate(distro_ver_arch_size, "-".join((distro,ver,arch)), total_size)
  69. fd.close()
  70. # display reports
  71. sort_and_output("Architecture Hits Count", arch_count)
  72. sort_and_output("Distribution Hits Count", distro_count)
  73. sort_and_output("Distribution Version Hits Count", distro_ver_count)
  74. sort_and_output("Distribution Architecture Hits Count", distro_arch_count)
  75. sort_and_output("Distribution Arch Version Hits Count", distro_ver_arch_count)
  76. sort_and_output("Architecture Download Size", arch_size)
  77. sort_and_output("Distribution Download Size", distro_size)
  78. sort_and_output("Distribution Version Download Size", distro_ver_size)
  79. sort_and_output("Distribution Architecture Download Size", distro_arch_size)
  80. sort_and_output("Distribution Arch Version Download Size", distro_ver_arch_size)