X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fqueue_report.py;h=2f92bcf676eb42b2bf79085467a5ed0880d8da1e;hb=7d1cafada3e00596f44f5d2ab1e8f2cf71d2bd8b;hp=9c349892cea4f68c8e82d11ace13d222c903027c;hpb=cfc60571b3937364f8f507e8e58e93d90b592016;p=dak.git diff --git a/dak/queue_report.py b/dak/queue_report.py index 9c349892..2f92bcf6 100755 --- a/dak/queue_report.py +++ b/dak/queue_report.py @@ -37,13 +37,16 @@ from copy import copy import glob, os, stat, sys, time import apt_pkg +try: + import rrdtool +except ImportError: + pass from daklib import utils from daklib.queue import Upload from daklib.dbconn import DBConn, has_new_comment, DBChange, DBSource, get_uid_from_fingerprint from daklib.textutils import fix_maintainer from daklib.dak_exceptions import * -import debianbts Cnf = None direction = [] @@ -61,6 +64,7 @@ Prints a report of packages in queue directories (usually new and byhand). -s, --sort=key sort output according to key, see below. -a, --age=key if using sort by age, how should time be treated? If not given a default of hours will be used. + -r, --rrd=key Directory where rrd files to be updated are stored -d, --directories=key A comma seperated list of queues to be scanned Sorting Keys: ao=age, oldest first. an=age, newest first. @@ -265,30 +269,7 @@ def table_footer(type): print "" -def find_bug_severities(bugnrs): - """Take a list of bug numbers and - return a dictionary with bug number - severity pairs.""" - statuses = None - try: statuses = debianbts.get_status(bugnrs) - except Exception: - return None - severities = {} - for bug_status in statuses: - severities[bug_status.bug_num] = bug_status.severity - return severities - -def rcbug_close_check(closes): - """Take a list of bug numbers and determine if at least one of them - is release critical.""" - severity_list = find_bug_severities(closes) - if severity_list: - severities = severity_list.values() - return ('critical' in severities) or \ - ('serious' in severities) or \ - ('grave' in severities) - return False - -def table_row(source, version, arch, last_mod, maint, distribution, closes, fingerprint, sponsor, changedby, fixes_rcbug): +def table_row(source, version, arch, last_mod, maint, distribution, closes, fingerprint, sponsor, changedby): global row_number @@ -298,9 +279,6 @@ def table_row(source, version, arch, last_mod, maint, distribution, closes, fing if dist == "experimental": trclass = "exp" - if fixes_rcbug: - trclass = "rcfix" - if not len(session.query(DBSource).filter_by(source = source).all()): trclass += " binNEW" session.commit() @@ -346,8 +324,43 @@ def table_row(source, version, arch, last_mod, maint, distribution, closes, fing ############################################################ -def process_changes_files(changes_files, type, log): - session = DBConn().session() +def update_graph_database(rrd_dir, type, n_source, n_binary): + if not rrd_dir: + return + + rrd_file = os.path.join(rrd_dir, type.lower()+'.rrd') + update = [rrd_file, "N:%s:%s" % (n_source, n_binary)] + + try: + rrdtool.update(*update) + except rrdtool.error: + create = [rrd_file]+""" +--step +300 +--start +0 +DS:ds0:GAUGE:7200:0:1000 +DS:ds1:GAUGE:7200:0:1000 +RRA:AVERAGE:0.5:1:599 +RRA:AVERAGE:0.5:6:700 +RRA:AVERAGE:0.5:24:775 +RRA:AVERAGE:0.5:288:795 +RRA:MAX:0.5:1:600 +RRA:MAX:0.5:6:700 +RRA:MAX:0.5:24:775 +RRA:MAX:0.5:288:795 +""".strip().split("\n") + try: + rc = rrdtool.create(*create) + ru = rrdtool.update(*update) + except rrdtool.error as e: + print('warning: queue_report: rrdtool error, skipping %s.rrd: %s' % (type, e)) + except NameError: + pass + +############################################################ + +def process_changes_files(changes_files, type, log, rrd_dir): msg = "" cache = {} # Read in all the .changes files @@ -393,6 +406,8 @@ def process_changes_files(changes_files, type, log): per_source_items = per_source.items() per_source_items.sort(sg_compare) + update_graph_database(rrd_dir, type, len(per_source_items), len(changes_files)) + entries = [] max_source_len = 0 max_version_len = 0 @@ -418,7 +433,9 @@ def process_changes_files(changes_files, type, log): for j in i[1]["list"]: changesbase = os.path.basename(j["filename"]) try: + session = DBConn().session() dbc = session.query(DBChange).filter_by(changesname=changesbase).one() + session.close() except Exception, e: print "Can't find changes file in NEW for %s (%s)" % (changesbase, e) dbc = None @@ -470,8 +487,7 @@ def process_changes_files(changes_files, type, log): note = " | [N]" else: note = "" - fixes_rcbug = rcbug_close_check(closes) - entries.append([source, binary, version_list, arch_list, note, last_modified, maint, distribution, closes, fingerprint, sponsor, changedby, filename, fixes_rcbug]) + entries.append([source, binary, version_list, arch_list, note, last_modified, maint, distribution, closes, fingerprint, sponsor, changedby, filename]) # direction entry consists of "Which field, which direction, time-consider" where # time-consider says how we should treat last_modified. Thats all. @@ -513,7 +529,7 @@ def process_changes_files(changes_files, type, log): if Cnf.has_key("Queue-Report::Options::822"): # print stuff out in 822 format for entry in entries: - (source, binary, version_list, arch_list, note, last_modified, maint, distribution, closes, fingerprint, sponsor, changedby, changes_file, fixes_rcbug) = entry + (source, binary, version_list, arch_list, note, last_modified, maint, distribution, closes, fingerprint, sponsor, changedby, changes_file) = entry # We'll always have Source, Version, Arch, Mantainer, and Dist # For the rest, check to see if we have them, then print them out @@ -556,8 +572,8 @@ def process_changes_files(changes_files, type, log): source_count = len(per_source_items) table_header(type.upper(), source_count, total_count) for entry in entries: - (source, binary, version_list, arch_list, note, last_modified, maint, distribution, closes, fingerprint, sponsor, changedby, undef, fixes_rcbug) = entry - table_row(source, version_list, arch_list, time_pp(last_modified), maint, distribution, closes, fingerprint, sponsor, changedby, entries, fixes_rcbug) + (source, binary, version_list, arch_list, note, last_modified, maint, distribution, closes, fingerprint, sponsor, changedby, undef) = entry + table_row(source, version_list, arch_list, time_pp(last_modified), maint, distribution, closes, fingerprint, sponsor, changedby) table_footer(type.upper()) elif not Cnf.has_key("Queue-Report::Options::822"): # The "normal" output without any formatting. @@ -565,7 +581,7 @@ def process_changes_files(changes_files, type, log): msg = "" for entry in entries: - (source, binary, version_list, arch_list, note, last_modified, undef, undef, undef, undef, undef, undef, undef, fixes_rcbug) = entry + (source, binary, version_list, arch_list, note, last_modified, undef, undef, undef, undef, undef, undef, undef) = entry msg += format % (source, version_list, arch_list, note, time_pp(last_modified)) if msg: @@ -590,6 +606,7 @@ def main(): ('8','822',"Queue-Report::Options::822"), ('s',"sort","Queue-Report::Options::Sort", "HasArg"), ('a',"age","Queue-Report::Options::Age", "HasArg"), + ('r',"rrd","Queue-Report::Options::Rrd", "HasArg"), ('d',"directories","Queue-Report::Options::Directories", "HasArg")] for i in [ "help" ]: if not Cnf.has_key("Queue-Report::Options::%s" % (i)): @@ -617,6 +634,13 @@ def main(): else: directories = [ "byhand", "new" ] + if Cnf.has_key("Queue-Report::Options::Rrd"): + rrd_dir = Cnf["Queue-Report::Options::Rrd"] + elif Cnf.has_key("Dir::Rrd"): + rrd_dir = Cnf["Dir::Rrd"] + else: + rrd_dir = None + f = None if Cnf.has_key("Queue-Report::Options::822"): # Open the report file @@ -624,11 +648,22 @@ def main(): for directory in directories: changes_files = glob.glob("%s/*.changes" % (Cnf["Dir::Queue::%s" % (directory)])) - process_changes_files(changes_files, directory, f) + process_changes_files(changes_files, directory, f, rrd_dir) if Cnf.has_key("Queue-Report::Options::822"): f.close() + if Cnf.has_key("Queue-Report::Options::New"): + for dir in directories: + print """ +

%s, last day

+

%s, last week

+

%s, last month

+

%s, last year

+

%s, last 5 years

+

%s, last 10 years

+""" % ((dir,)*12) + if Cnf.has_key("Queue-Report::Options::New"): footer()