[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:16248] Bug stamp-out list plotter.
Wichert が debian-devel-announce@lists.debian.org に Release
critical buglistを先月くらいからポストしているので、プロットす
るためのスクリプトを書いてみました。
プロットにはgnuplot を使っています。ただし、諸般の事情によりバー
ジョンは
G N U P L O T
Linux version 3.5
patchlevel 3.50.1.17, 27 Aug 93
last modified Fri Aug 27 05:21:33 GMT 1993
というものを使いました。
いい加減にこしらえた稚拙なスクリプトですが、それなりに見れる出
力が得られています。次の5つのグラフを書きます。
o 新規発生バグの累積
o バグ修正数の累積
o 修正されずに残ったバグ数の遷移
o その時点での全 Release-critical Bug数
o 全バグ数の累積
#実際に得られたグラフを一応JPEGに落してみたんですが、結構なサ
イズになったので添付はしないでおきます。
perlスクリプト``wak2tab''は、WichertのMailを表形式に展開します。
この様にして得た表をファイルに貯めておき、shスクリプト``tab2gp''
にまとめて食わせます。たいしたスクリプトではないので適当にいじっ
て使ってください。
-.- . -. -.
Ken Nakagaki <kenn@xxxxxxxxxxxxxxxxx>
「人は船ではない。人は会社ではない」-- Gerry Spence
-------------------------------------------
wak2tab:
#!/usr/bin/perl
$Year = 1999;
## Now, we have to use this Y2KP *incompliant* module. Sigh...
require 'timelocal.pl';
$/ = "\n\n";
## Read headers of the mail and ignore them.
$_ = <> or exit 0; # empty.
%monthn2d = (
'Jan', 1,
'Feb', 2,
'Mar', 3,
'Apr', 4,
'May', 5,
'Jun', 6,
'Jul', 7,
'Aug', 8,
'Sep', 9,
'Oct', 10,
'Nov', 11,
'Dec', 12,
'HEY!!', 0
);
while (<>){
if (/list for\s+([A-Z][a-z][a-z])\s+(\d+?)\s+(\d+?):(\d+?)\s+.([A-Z][A-Z]T)/){
@timestamp = ($1, $2, $3, $4, $5);
$timestamp[0] = $monthn2d{$timestamp[0]} - 1;
## Idunno why month of ``timelocal'' is 0..11. -- kenn.
$timestamp[2] = $timestamp[2] - (-5); # FIXME!!! What's ``CST''??
$timestamp[3] = $timestamp[3] + 0;
$ts = timegm(0, $timestamp[3], $timestamp[2], $timestamp[1], $timestamp[0], $Year-1900);
next;
}
if (!/^Package:/){ next }
@btsr = split('\n');
$btsr[0] =~ /Package: ([-\w]+)/;
$pkgname = $1;
for ($i = 1; $i <= $#btsr; $i++){
print "$1\t$ts\t$pkgname\n" if $btsr[$i] =~ /^\s+(\d+)/;
}
}
-------------------------------------------
tab2gp:
#!/bin/sh -
B="`basename $0`"
Dir="/tmp/$B.$$"
Fix="/tmp/$B.$$/fix"
New="/tmp/$B.$$/new"
Nof="/tmp/$B.$$/not"
makecomm()
{
: {$2?}
${isbegin:-false} || cat < "$2" > "$1"
sort -n < "$1" > "$1.sort"
while [ $# -gt 1 ]; do
rt="`expr $2 - $EPOCH`"
sort -n < "$2" > "$2.sort"
comm -23 "$1.sort" "$2.sort"|wc -l|(read lc; echo "$rt $lc") >> "$Fix"
comm -13 "$1.sort" "$2.sort"|wc -l|(read lc; echo "$rt $lc") >> "$New"
comm -12 "$1.sort" "$2.sort"|wc -l|(read lc; echo "$rt $lc") >> "$Nof"
shift
done
}
accum()
{
awk '{ Days = $1 / 86400; Sum += $2; print Days, Sum }' < "$1"
}
accum2()
{
paste "$1" "$2" | awk '
{
Days = $3 / 86400
if (NR == 1){
Sum = $2 + $4
}else{
Sum += $4
}
print Days, Sum
}
'
}
noaccum()
{
awk '{ Days = $1 / 86400; print Days, $2 }' < "$1"
}
total()
{
paste "$1" "$2" | awk '{ T = $4 - $2; print $1, T }'
}
while [ $# -gt 0 ]; do
case "$1" in
-b*|--b*) isbegin=true ;;
-c*|--c*) isbegin=false ;;
-d*|--d*) doplot=false ;;
-f*|--f*) shift; fixout="$1" ;;
-ne*|--ne*) shift; newout="$1" ;;
-no*|--no*) shift; notout="$1" ;;
-t*|--t*) shift; totout="$1" ;;
-T*|--T*) shift; tacout="$1" ;;
-s*|--s*) shift; scrout="$1" ;;
-|--) shift; break ;;
-*) echo "Usage:
$B [option(s)] bugtable ...
options:
--begin|--continued
--fixedbug-file _fliename_
--do-not-plot
--notfixedbug-file _fliename_
--newbug-file _fliename_
--totalbugs-file _fliename_
--Totalbugs-file _fliename_
--script-of-gnuplot _fliename_
" >&2 ; exit;;
*) break ;;
esac
shift
done
Fi="${fixout:-fix}"
Ne="${newout:-new}"
No="${notout:-notfix}"
To="${totout:-total}"
Ta="${tacout:-Total}"
Gp="${scrout:-gp}"
umask 022
trap "rm -rf \"$Dir\"; exit" 0 1 2 3 13 15
mkdir "$Dir" || exit
: > "$Dir/00" || exit
cat "$@"| while read bugid ts remain; do
echo "$bugid $remain" >> "$Dir/$ts"
done
EPOCH=`(cd "$Dir" && ls [0-9]*[0-9]|sed -n 2p)`
Epoch="`perl -e \"print scalar(gmtime($EPOCH))\"`"
(cd "$Dir" && makecomm `ls [0-9]*[0-9]`)
accum "$Fix" > "$Fi"
accum "$New" > "$Ne"
noaccum "$Nof" > "$No"
accum2 "$Nof" "$New" > "$Ta"
total "$Fi" "$Ta" > "$To"
sed "1,/^exit/d;
s,@@datafile1,$Ne,; s,@@title1,New bugs(accumulation),;
s,@@datafile2,$Fi,; s,@@title2,Fixed bugs(accumulation),;
s,@@datafile3,$No,; s,@@title3,Not-fixed bugs,;
s,@@datafile4,$To,; s,@@title4,Total bugs,;
s,@@datafile5,$Ta,; s,@@title5,Total bugs(accumulation),;
s/@@Xlabel/days since $Epoch./;
s/@@Ylabel//;
s/@@Title/Bug stamp-out list/" < $0 > "$Gp"
${doplot:-true} || exit 0
exec < /dev/tty
gnuplot "$Gp"
exit
set terminal x11
set title "@@Title" 0,0
set xlabel "@@Xlabel" 0,0
set ylabel "@@Ylabel" 0,0
plot "@@datafile1" title "@@title1" with lines, "@@datafile2" title "@@title2" with lines, "@@datafile3" title "@@title3" with lines, "@@datafile4" title "@@title4" with lines, "@@datafile5" title "@@title5" with lines
pause -1