-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlpq.py
More file actions
executable file
·152 lines (129 loc) · 5.09 KB
/
lpq.py
File metadata and controls
executable file
·152 lines (129 loc) · 5.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#! /usr/bin/env python
import argparse
from datetime import datetime
import re
try:
from launchpadlib.launchpad import Launchpad
except:
print '''ERROR: Failed to import Launchpad lib. Use below to install it
sudo apt-get install python-launchpadlib
or
pip install launchpadlib'''
exit()
TAG_TO_CUSTOMER = {
'att-aic-contrail': 'AT&T',
'dt': 'DT',
'netcracker': 'NETCRACKER',
'orange': 'ORANGE',
'ebay': 'EBAY',
'nttc': 'NTT',
}
def time_type(s, fmt = "%Y-%m-%d"):
try:
datetime_obj = datetime.strptime(s, fmt)
except:
raise argparse.ArgumentTypeError(
"Wrong time format e.g. 2018-03-19")
return s
def get_case_number(tags):
pattern = "20\d{2}-\d{4}-\d{4}$"
return [c for c in tags if re.match(pattern, c)]
def get_customer(tags):
return [TAG_TO_CUSTOMER[t] for t in tags if t in TAG_TO_CUSTOMER]
def get_times(task):
date_created = task.date_created
date_last_touch = max(task.bug.date_last_updated,
task.bug.date_last_message)
date_triaged = None
date_fix_committed = None
date_assigned = None
if not len(task.related_tasks):
date_assigned = task.date_assigned
date_triaged = task.date_triaged
date_fix_committed = task.date_fix_committed
else:
for related_task in task.related_tasks:
if related_task.date_assigned:
if date_assigned:
date_assigned = min(date_assigned, related_task.date_assigned)
else:
date_assigned = related_task.date_assigned
if related_task.date_triaged:
if date_triaged:
date_triaged = min(date_triaged, related_task.date_triaged)
else:
date_triaged = related_task.date_triaged
if related_task.date_fix_committed:
if date_fix_committed:
date_fix_committed = min(date_fix_committed, related_task.date_fix_committed)
else:
date_fix_committed = related_task.date_fix_committed
return map(lambda x:x.strftime("%Y-%m-%d") if x is not None else '',
(date_created,date_assigned,date_triaged,
date_fix_committed,date_last_touch))
def lp_query(args):
launchpad = Launchpad.login_with('juniperopenstack', 'production')
project=launchpad.projects['juniperopenstack']
open_status = ('New', 'Incomplete', 'Triaged', 'Opinion',
'Confirmed', 'In Progress', 'Triaged')
close_status = ('Invalid', 'Won\'t Fix', 'Expired',
'Fix Committed', 'Fix Released')
status = ()
if args.open_only and not args.closed_only:
status = open_status
elif args.closed_only and not args.open_only:
status = close_status
#tag = args.tag if args.tag else '*'
bugs = project.searchTasks(tags=args.tag,
status=status,
created_before=args.before,
created_since=args.after,
order_by='id')
print ('id,age,customer,importance,status,cases,reporter,'
'assignee,title,date_created,date_assigned,date_triaged,'
'date_fix_committed, date_last_touched')
for task in bugs:
id = str(task.bug.id)
owner = task.owner.display_name
assignee = 'n/a'
if task.assignee:
assignee = task.assignee.display_name
importance = task.importance
title = '"' + task.bug.title + '"'
age = (datetime.now(task.date_created.tzinfo) - task.date_created)
age_str = "%sd%sh%sm" % (str(age.days),
str(age.seconds//3600),
str((age.seconds//60)%60))
status = task.status
cases = ' '.join(get_case_number(task.bug.tags))
customers = ' '.join(get_customer(task.bug.tags))
print u','.join([id, age_str, customers, importance, status, cases,
owner, assignee, title] + get_times(task))
def main():
parser = argparse.ArgumentParser(
prog='lpq',
description='Script to query Contrail related bugs in launchpad ')
parser.add_argument(
'-a', '--after', type=time_type,
default = "2000-01-01",
help = "List launchpad created since given time " +
"e.g. 2018-03-19")
parser.add_argument(
'-b', '--before', type=time_type,
default = datetime.utcnow().strftime("%Y-%m-%d"),
help = "List launchpad created before given time " +
"e.g. 2018-03-19")
parser.add_argument(
'tag', type=str, default='*',
help = "List launchpad matching given tags")
parser.add_argument(
'--open_only', action="store_true",
help = "Only list LPs in open state")
parser.add_argument(
'--closed_only', action="store_true",
help = "Only list LPs not in open state")
parser.set_defaults(func=lp_query)
args = parser.parse_args()
args.func(args)
if __name__ == "__main__":
main()