annotate scripts/weekly-report @ 8562:9c3ec0a5c7fc

chore: remove __future print_funcion from code. Not needed as of Python 3.
author John Rouillard <rouilj@ieee.org>
date Wed, 08 Apr 2026 21:39:40 -0400
parents 20ab9a4b76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4041
5db2dfff85d8 Fix issue1891328
Stefan Seefeld <stefan@seefeld.name>
parents: 3764
diff changeset
1 #! /usr/bin/env python
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 # This script generates a simple report outlining the activity in one
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 # tracker for the most recent week.
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
6 # A second argument is the negative interval to change period
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
7 # of time.
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
8
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # This script is free software, you may redistribute it
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 # and/or modify under the same terms as Python.
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
12 #Example output
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
13 #CREATED:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
14 #2702: new item
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
15 #
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
16 #RESOLVED:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
17 #1995: Where is my Power plugs
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
18 #2501: Can you help me with Sanity
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
19 #459: I need Sanity
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
20 #
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
21 #TOP TEN MOST DISCUSSED:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
22 #2 - 491: Can you help me with Sanity
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
23 #1 - 1995: Where is my Power plugs
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
24
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
25 import sys
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
26
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
27 from roundup import date, instance
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
28
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
29 # position for arguments
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
30 tracker_home_pos = 1
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
31 optional_interval_pos = 2
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
32
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
33 # gather args
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
34 arg_len = len(sys.argv)
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
35 # map pos to length by adding 1.
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
36 if arg_len not in [tracker_home_pos + 1, optional_interval_pos + 1]:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
37 print('Usage: %s tracker-home [interval -1w]' % sys.argv[0])
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
38 if (arg_len < tracker_home_pos + 1 ):
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
39 print(' You need to specify a tracker home directory')
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
40 sys.exit(1)
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
41 instance_home = sys.argv[tracker_home_pos]
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
42 lookback_interval = sys.argv[optional_interval_pos] if \
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
43 len(sys.argv) == optional_interval_pos + 1 else '-1w'
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 # open the instance
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 instance = instance.open(instance_home)
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 db = instance.open('admin')
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
49 old = date.Date(lookback_interval)
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
51 created = [] # [issue_id_created_issue]
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
52 summary = {} # {status_id: [issue_ids in that status]}
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
53 messages = [] # [(number_of_messages, issue_id)]
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 # loop through all the recently-active issues
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 for issue_id in db.issue.filter(None, {'activity': '-1w;'}):
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
57 message_count = 0
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
58 for _x,ts,_userid,action,data in db.issue.history(issue_id):
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
59 if ts < old: # history occurred before our current window
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
60 continue
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 if action == 'create':
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 created.append(issue_id)
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4041
diff changeset
63 elif action == 'set' and 'messages' in data:
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
64 message_count += 1
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
65 summary.setdefault(db.issue.get(issue_id, 'status'),
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
66 []).append(issue_id)
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
67 messages.append((message_count, issue_id))
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
69 #print('STATUS SUMMARY:')
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 #for k,v in summary.items():
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
71 # print(k, len(v))
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4041
diff changeset
73 print('\nCREATED:')
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
74 if created:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
75 print('\n'.join(['%s: %s'%(itemid, db.issue.get(itemid, 'title'))
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
76 for itemid in created]))
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
77 else:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
78 print("No issue created in interval %s" % lookback_interval)
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4041
diff changeset
80 print('\nRESOLVED:')
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 resolved_id = db.status.lookup('resolved')
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
82 if summary:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
83 # deduplicate - duplicates happen when issue with resolved status
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
84 # has multiple history items (e.g. message or other
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
85 # change after resolution)
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
86 resolved_ids = sorted(set(summary.get(resolved_id, [])), key=int)
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
87 print('\n'.join(['%s: %s' % (itemid, db.issue.get(itemid, 'title'))
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
88 for itemid in resolved_ids ]))
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
89 else:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
90 print("No issue resolved in interval %s" % lookback_interval)
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91
5412
c75defc1c2f0 Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4041
diff changeset
92 print('\nTOP TEN MOST DISCUSSED:')
7785
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
93
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
94 # filter out issues with no messages
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
95 messages = [ message for message in messages if message[0] > 0 ]
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
96 if messages:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
97 messages.sort()
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
98 messages.reverse()
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
99 nmax = messages[0][0] or 1
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
100 fmt = '%%%dd - %%s: %%s'%(len(str(nmax)))
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
101 print('\n'.join([fmt%(num, itemid, db.issue.get(itemid, 'title'))
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
102 for num, itemid in messages[:10]]))
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
103 else:
20ab9a4b76e9 fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents: 5412
diff changeset
104 print("No issues discussed in interval %s" % lookback_interval)
3764
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
105
7f0c63868fa9 add new script
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 # vim: set filetype=python ts=4 sw=4 et si

Roundup Issue Tracker: http://roundup-tracker.org/