blob: ccf899bfe46ea521a63deb94fd66b7a441380cc6 (
plain)
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
|
#!/bin/bash
# silly, but good-enough bugzilla monitoring
# jpokorny@redhat.com (will be pleased to know about further enhancements)
# usage:
# 1. optionally git clone git://git.fedorahosted.org/git/python-bugzilla
# (system-wide can also be used)
# 2. open ~/.watchbzrc for editing
# - set BUGZILLA_ROOT when using cloned python-bugzilla
# - optionally set STATUS and COMPONENT as per example
# (or pass such string as a 1st argument)
# - optionally set BZUSER to avoid the need to login manually before
# the "watch session"; you can set BZPASSWORD as well but be careful!
set -u
export LANG=C
HERE=$(dirname $0)
BUGZILLA=$(which bugzilla 2>/dev/null)
BUGZILLA_ROOT=/usr
BUGZILLA_COOKIE=~/.watchbzcookies
BUGZILLA_LOGOUT=1
# example defaults, modify via ~/.watchbzrc
COMPONENT=luci,ricci,clustermon,conga,sunzi
STATUS=OPEN
REFRESH_INTERVAL=600 # [s], better not to drain bugzilla's power...
# user configuration
[ -f ~/.watchbzrc ] && source ~/.watchbzrc
# guess correct paths
if [ -z "$BUGZILLA" ]; then
# BUGZILLA_ROOT (path to local repo) should rather be set in ~/.watchbzrc
BUGZILLA="${BUGZILLA_ROOT}/bin/bugzilla"
export PYTHONPATH="${BUGZILLA_ROOT}:${PYTHONPATH}"
fi
# hardcoded for now (note the SEP - OUTPUT_FMT relationship)
SEP=@@@
WIDTH=$(( $(stty size | cut -d' ' -f2) - 1 ))
# arguments
if [ $# -ge 1 ]; then
if [[ "$1" = -* ]]; then
STATUS=$(echo "$1" | cut -c2-)
shift
fi
if [ $# -ge 1 ]; then
COMPONENT="$1"
fi
fi
# omit component if only single one queried
echo $COMPONENT | grep -q ','
if [ $? -eq 0 ]; then
OUTPUT_FMT="%{component}$SEP%{bug_id}$SEP%{product}$SEP%{priority}$SEP%{status}$SEP%{flags}$SEP%{short_desc}"
else
OUTPUT_FMT="%{bug_id}$SEP%{product}$SEP%{priority}$SEP%{status}$SEP%{flags}$SEP%{short_desc}"
fi
do_logout () {
rm "${BUGZILLA_COOKIE}"
}
# exclusively using globals
do_init () {
# login when available
if [ -n "$BZUSER" ] && [ ! -f "${BUGZILLA_COOKIE}" ]; then
"$BUGZILLA" --cookiefile="${BUGZILLA_COOKIE}" login "$BZUSER" $BZPASSWORD
if [ $? -ne 0 ]; then
echo "Cannot log in"
exit 2
fi
fi
# C-c handler to optionally remove cookie on exit
test $BUGZILLA_LOGOUT -ne 0 && trap do_logout INT
}
# exclusively using globals
do_watch () {
#sh -c \
watch -t --interval $REFRESH_INTERVAL --differences=cumulative \
"$BUGZILLA --cookiefile="${BUGZILLA_COOKIE}" query -c $COMPONENT \
-t $STATUS --outputformat $OUTPUT_FMT \
| sed -u \
-e \"s|${SEP}Red Hat Enterprise Linux |${SEP}EL|\" \
-e \"s|${SEP}Fedora|${SEP} F |\" \
-e \"s|${SEP}NEW|${SEP}N|\" \
-e \"s|${SEP}ASSIGNED|${SEP}A|\" \
-e \"s|${SEP}POST|${SEP}P|\" \
-e \"s|${SEP}MODIFIED|${SEP}M|\" \
-e \"s|${SEP}ON_QA|${SEP}Q|\" \
-e \"s|${SEP}ON_DEV|${SEP}D|\" \
-e \"s|${SEP}VERIFIED|${SEP}V|\" \
-e \"s|${SEP}RELEASE_PENDING|${SEP}R|\" \
-e \"s|${SEP}CLOSED|${SEP}C|\" \
-e \"s|${SEP}urgent|${SEP}!!!|\" \
-e \"s|${SEP}high|${SEP}!!|\" \
-e \"s|${SEP}medium|${SEP} ! |\" \
-e \"s|${SEP}low|${SEP} ~ |\" \
-e \"s|${SEP}unspecified|${SEP} ? |\" \
-e \"s|qa_ack|QA|\" \
-e \"s|pm_ack|PM|\" \
-e \"s|devel_ack|D|\" \
-e \"s|needinfo|I|\" \
-e \"s|exception|E|\" \
-e \"s|blocker|BL|\" \
-e \"s|requires_release_note|RN|\" \
-e \"s|docs_scoped|DS|\" \
-e \"s|rhel-||g\" \
-e \"s|qe_test_coverage||\" \
-e \"s|None||\" \
| ${HERE}/table-data $SEP | sort | cut -c-$WIDTH"
# todo: colours for priorities (rhbz#801626)
#-e 's/\(urgent\)/\^\[\[31m\1\^\[\[0m/' \
}
do_init
do_watch
|