Mercurial > p > roundup > code
annotate scripts/weekly-report @ 8512:951db0950174
chore(build): bump actions/checkout from 6.0.1 to 6.0.2 pull #79
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Tue, 27 Jan 2026 21:40:43 -0500 |
| parents | 20ab9a4b76e9 |
| children | 9c3ec0a5c7fc |
| rev | line source |
|---|---|
| 4041 | 1 #! /usr/bin/env python |
| 3764 | 2 |
| 3 # This script generates a simple report outlining the activity in one | |
| 4 # tracker for the most recent week. | |
| 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 | 9 # This script is free software, you may redistribute it |
| 10 # and/or modify under the same terms as Python. | |
| 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 |
|
5412
c75defc1c2f0
Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4041
diff
changeset
|
25 from __future__ import print_function |
|
7785
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 import sys |
|
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 from roundup import date, instance |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
30 |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
31 # position for arguments |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
32 tracker_home_pos = 1 |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
33 optional_interval_pos = 2 |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
34 |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
35 # gather args |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
36 arg_len = len(sys.argv) |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
37 # map pos to length by adding 1. |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
38 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
|
39 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
|
40 if (arg_len < tracker_home_pos + 1 ): |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
41 print(' You need to specify a tracker home directory') |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
42 sys.exit(1) |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
43 instance_home = sys.argv[tracker_home_pos] |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
44 lookback_interval = sys.argv[optional_interval_pos] if \ |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
45 len(sys.argv) == optional_interval_pos + 1 else '-1w' |
| 3764 | 46 |
| 47 # open the instance | |
| 48 instance = instance.open(instance_home) | |
| 49 db = instance.open('admin') | |
| 50 | |
|
7785
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
51 old = date.Date(lookback_interval) |
| 3764 | 52 |
|
7785
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
53 created = [] # [issue_id_created_issue] |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
54 summary = {} # {status_id: [issue_ids in that status]} |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
55 messages = [] # [(number_of_messages, issue_id)] |
| 3764 | 56 |
| 57 # loop through all the recently-active issues | |
| 58 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
|
59 message_count = 0 |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
60 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
|
61 if ts < old: # history occurred before our current window |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
62 continue |
| 3764 | 63 if action == 'create': |
| 64 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
|
65 elif action == 'set' and 'messages' in data: |
|
7785
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
66 message_count += 1 |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
67 summary.setdefault(db.issue.get(issue_id, 'status'), |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
68 []).append(issue_id) |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
69 messages.append((message_count, issue_id)) |
| 3764 | 70 |
|
7785
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
71 #print('STATUS SUMMARY:') |
| 3764 | 72 #for k,v in summary.items(): |
|
7785
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
73 # print(k, len(v)) |
| 3764 | 74 |
|
5412
c75defc1c2f0
Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4041
diff
changeset
|
75 print('\nCREATED:') |
|
7785
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
76 if created: |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
77 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
|
78 for itemid in created])) |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
79 else: |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
80 print("No issue created in interval %s" % lookback_interval) |
| 3764 | 81 |
|
5412
c75defc1c2f0
Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4041
diff
changeset
|
82 print('\nRESOLVED:') |
| 3764 | 83 resolved_id = db.status.lookup('resolved') |
|
7785
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
84 if summary: |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
85 # deduplicate - duplicates happen when issue with resolved status |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
86 # has multiple history items (e.g. message or other |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
87 # change after resolution) |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
88 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
|
89 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
|
90 for itemid in resolved_ids ])) |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
91 else: |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
92 print("No issue resolved in interval %s" % lookback_interval) |
| 3764 | 93 |
|
5412
c75defc1c2f0
Python 3 preparation: miscellaneous Python scripts not named *.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4041
diff
changeset
|
94 print('\nTOP TEN MOST DISCUSSED:') |
|
7785
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
95 |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
96 # filter out issues with no messages |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
97 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
|
98 if messages: |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
99 messages.sort() |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
100 messages.reverse() |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
101 nmax = messages[0][0] or 1 |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
102 fmt = '%%%dd - %%s: %%s'%(len(str(nmax))) |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
103 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
|
104 for num, itemid in messages[:10]])) |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
105 else: |
|
20ab9a4b76e9
fix: multiple fixes, lint cleanup
John Rouillard <rouilj@ieee.org>
parents:
5412
diff
changeset
|
106 print("No issues discussed in interval %s" % lookback_interval) |
| 3764 | 107 |
| 108 # vim: set filetype=python ts=4 sw=4 et si |
