summaryrefslogtreecommitdiffstats
path: root/scripts/abrt-bz-stats
blob: 292366507ed4a00b717579504ba76e29ad836198 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/usr/bin/python
# -*- mode:python -*-

from bugzilla import RHBugzilla
from optparse import OptionParser
import sys
import os.path
import subprocess
import datetime
import pickle

parser = OptionParser(version="%prog 1.0")
parser.add_option("-u", "--user", dest="user",
                  help="Bugzilla user name (REQUIRED)", metavar="USERNAME")
parser.add_option("-p", "--password", dest="password",
                  help="Bugzilla password (REQUIRED)", metavar="PASSWORD")
parser.add_option("-b", "--bugzilla", dest="bugzilla",
                  help="Bugzilla URL (defaults to Red Hat Bugzilla)", metavar="URL")
(options, args) = parser.parse_args()

if not options.user or len(options.user) == 0:
  parser.error("User name is required.\nTry {0} --help".format(sys.argv[0]))
if not options.password or len(options.password) == 0:
  parser.error("Password is required.\nTry {0} --help".format(sys.argv[0]))
if not options.bugzilla or len(options.bugzilla) == 0:
  options.bugzilla = "https://bugzilla.redhat.com/xmlrpc.cgi"

bz = RHBugzilla()
bz.connect(options.bugzilla)
bz.login(options.user, options.password)

buginfos = bz.query({'status_whiteboard_type':'allwordssubstr','status_whiteboard':'abrt_hash'})
total = len(buginfos)
print "{0} bugs found.".format(total)

buginfos_loaded = {}
if os.path.isfile("cache"):
  f = open("cache", 'r')
  buginfos_loaded = pickle.load(f)
  f.close()

count = 0
for buginfo in buginfos:
  count += 1
  print "{0}/{1}".format(count, total)
  dtkey = buginfo.delta_ts[0:7] # YEAR-MONTH
  statuskey = buginfo.bug_status
  if buginfo.resolution != "":
    statuskey += "_" + buginfo.resolution
  if not buginfos_loaded.has_key(buginfo.bug_id):
    buginfos_loaded[buginfo.bug_id] = (dtkey, statuskey)
  if count % 100 == 0:
    f = open("cache", 'w')
    pickle.dump(buginfos_loaded, f, 2)
    f.close()
bz.logout()

stats = {}
for buginfo in buginfos_loaded.values():
  if buginfo[0] in stats:
    stat = stats[buginfo[0]]
    if buginfo[1] in stat:
      stat[buginfo[1]] += 1
    else:
      stat[buginfo[1]] = 1
  else:
    stats[buginfo[0]] = { buginfo[1]:1 }

print "STATS"
print "=========================================================================="
months = stats.keys()
months.sort()
for month in months:
  stat = stats[month]
  statuses = stat.keys()
  statuses.sort()
  print "Month ", month
  for status in statuses:
    print status, stat[status]