/[collab-qa]/udd/udd/popcon_gatherer.py
ViewVC logotype

Contents of /udd/udd/popcon_gatherer.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1264 - (hide annotations) (download) (as text)
Wed Sep 10 22:18:10 2008 UTC (4 years, 8 months ago) by kroeckx
File MIME type: text/x-python
File size: 2952 byte(s)
Make all inserts reference the fields they want to insert into.
1 neronus-guest 900 #!/usr/bin/env python
2    
3     """
4     This script imports the popcon data into the database
5     See http://popcon.debian.org/
6     """
7    
8 neronus-guest 895 import aux
9     import sys
10     import gzip
11 neronus-guest 902 from gatherer import gatherer
12 neronus-guest 951 import re
13 neronus-guest 895
14 neronus-guest 1068 def get_gatherer(connection, config, source):
15     return popcon_gatherer(connection, config, source)
16 neronus-guest 895
17 neronus-guest 902 class popcon_gatherer(gatherer):
18 neronus-guest 1068 def __init__(self, connection, config, source):
19     gatherer.__init__(self, connection, config, source)
20 neronus-guest 895
21 neronus-guest 1068 self.assert_my_config('path', 'table', 'packages-table', 'schema')
22 neronus-guest 895
23 neronus-guest 1106 def tables(self):
24     ret = []
25 neronus-guest 1068 for sub in ('', '_src', '_src_average'):
26 neronus-guest 1106 ret.append(self.my_config['table'] + sub)
27     return ret
28 neronus-guest 895
29 neronus-guest 1068 def run(self):
30     my_config = self.my_config
31    
32 neronus-guest 998 table = my_config['table']
33 lucas 1019 table_src = table + "_src"
34 neronus-guest 998 table_src_average = table + "_src_average"
35    
36 neronus-guest 902 cur = self.cursor()
37 neronus-guest 895
38 neronus-guest 998 cur.execute("PREPARE pop_insert AS INSERT INTO %s (package, insts, vote, olde, recent, nofiles) VALUES ($1, $2, $3, $4, $5, $6)" % (table))
39 neronus-guest 895
40 neronus-guest 902 popcon = gzip.open(my_config['path'])
41 neronus-guest 895
42 neronus-guest 998 cur.execute("DELETE FROM " + table)
43 lucas 1019 cur.execute("DELETE FROM " + table_src)
44 neronus-guest 998 cur.execute("DELETE FROM " + table_src_average)
45 neronus-guest 903
46 neronus-guest 951 # used for ignoring ubuntu's broken popcon lines
47     ascii_match = re.compile("^[A-Za-z0-9-.+_]+$")
48    
49     linenr = 0
50 neronus-guest 1038 d = {}
51 neronus-guest 1036 for line in popcon:
52 neronus-guest 951 linenr += 1
53 neronus-guest 902 name, data = line.split(None, 1)
54     if name == "Submissions:":
55 neronus-guest 1038 d['data'] = int(data)
56     cur.execute("INSERT INTO " + table + " (package, vote) VALUES ('_submissions', %(data)s)", d)
57     continue
58 neronus-guest 902 try:
59     (name, vote, old, recent, nofiles) = data.split()
60 neronus-guest 1038 d['name'] = name
61     for k in ['vote', 'old', 'recent', 'nofiles']:
62     exec '%s = int(%s)' % (k,k)
63     exec 'd["%s"] = %s' % (k,k)
64     d['insts'] = vote + old + recent + nofiles
65 neronus-guest 951 if ascii_match.match(name) == None:
66 lucas 1251 # print "%s:%d - illegal package name %s" % (my_config['path'], linenr, line)
67 neronus-guest 957 continue
68 neronus-guest 1038 query = "EXECUTE pop_insert(%(name)s, %(insts)s, %(vote)s, %(old)s, %(recent)s, %(nofiles)s)"
69     cur.execute(query, d)
70 neronus-guest 902 except ValueError:
71     continue
72 neronus-guest 895
73 neronus-guest 902 cur.execute("DEALLOCATE pop_insert")
74 neronus-guest 895
75 lucas 1019 #calculate _src and _src_avg
76 neronus-guest 998 cur.execute("""
77 kroeckx 1264 INSERT INTO %(table)s_src (source, insts, vote, olde, recent, nofiles)
78     SELECT DISTINCT pkgs.source, max(insts) AS insts, max(vote) AS vote,
79     max(olde) AS old, max(recent) AS recent, max(nofiles) as nofiles
80 lucas 1064 FROM %(table)s, %(packages-table)s_summary AS pkgs
81     WHERE %(table)s.package = pkgs.package
82     GROUP BY pkgs.source;
83 lucas 1111 """ % my_config)
84 neronus-guest 998 cur.execute("""
85 kroeckx 1264 INSERT INTO %(table)s_src_average (source, insts, vote, olde, recent,
86     nofiles)
87     SELECT pkgs.source, avg(insts) AS insts, avg(vote) AS vote,
88     avg(olde) AS old, avg(recent) AS recent, avg(nofiles) as nofiles
89 lucas 1064 FROM %(table)s, %(packages-table)s_summary AS pkgs
90     WHERE %(table)s.package = pkgs.package
91     GROUP BY pkgs.source;
92 lucas 1111 """ % my_config)
93 neronus-guest 998
94 neronus-guest 895 if __name__ == '__main__':
95     main()

  ViewVC Help
Powered by ViewVC 1.1.5