Mercurial > p > roundup > code
view scripts/weekly-report @ 4781:6e9b9743de89
Implementation for:
http://issues.roundup-tracker.org/issue2550731
Add mechanism for the detectors to be able to tell the source of the
data changes.
Support for tx_Source property on database handle. Can be
used by detectors to find out the source of a change in an auditor to
block changes arriving by unauthenticated mechanisms (e.g. plain email
where headers can be faked). The property db.tx_Source has the
following values:
* None - Default value set to None. May be valid if it's a script
that is created by the user. Otherwise it's an error and indicates
that some code path is not properly setting the tx_Source property.
* "cli" - this string value is set when using roundup-admin and
supplied scripts.
* "web" - this string value is set when using any web based
technique: html interface, xmlrpc ....
* "email" - this string value is set when using an unauthenticated
email based technique.
* "email-sig-openpgp" - this string value is set when email with a
valid pgp signature is used. (*NOTE* the testing for this mode
is incomplete. If you have a pgp infrastructure you should test
and verify that this is properly set.)
This also includes some (possibly incomplete) tests cases for the
modes above and an example of using ts_Source in the customization.txt
document.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Tue, 23 Apr 2013 23:06:09 -0400 |
| parents | 5db2dfff85d8 |
| children | c75defc1c2f0 |
line wrap: on
line source
#! /usr/bin/env python # This script generates a simple report outlining the activity in one # tracker for the most recent week. # This script is free software, you may redistribute it # and/or modify under the same terms as Python. import sys, math from roundup import instance, date # open the instance if len(sys.argv) != 2: print 'You need to specify an instance home dir' instance_home = sys.argv[1] instance = instance.open(instance_home) db = instance.open('admin') old = date.Date('-1w') created = [] summary = {} messages = [] # loop through all the recently-active issues for issue_id in db.issue.filter(None, {'activity': '-1w;'}): num = 0 for x,ts,userid,action,data in db.issue.history(issue_id): if ts < old: continue if action == 'create': created.append(issue_id) elif action == 'set' and data.has_key('messages'): num += 1 summary.setdefault(db.issue.get(issue_id, 'status'), []).append(issue_id) messages.append((num, issue_id)) #print 'STATUS SUMMARY:' #for k,v in summary.items(): # print k, len(v) print '\nCREATED:' print '\n'.join(['%s: %s'%(id, db.issue.get(id, 'title')) for id in created]) print '\nRESOLVED:' resolved_id = db.status.lookup('resolved') print '\n'.join(['%s: %s'%(id, db.issue.get(id, 'title')) for id in summary.get(resolved_id, [])]) print '\nTOP TEN MOST DISCUSSED:' messages.sort() messages.reverse() nmax = messages[0][0] fmt = '%%%dd - %%s: %%s'%(int(math.log(nmax, 10)) + 1) print '\n'.join([fmt%(num, id, db.issue.get(id, 'title')) for num, id in messages[:10]]) # vim: set filetype=python ts=4 sw=4 et si
