aboutsummaryrefslogtreecommitdiffstats
path: root/dist-tools/growthplot
blob: 73f4f4e9da0a4d8acb2d90f03e036fb105aee300 (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
#!/bin/sh
#
# growthplot -- plot the fetchmail project's growth as a function of time
#

PATH="$PATH:.:./dist-tools"; export PATH

tmp=/tmp/fetchmail-growthplot.$$
mkdir $tmp

# Get data from the NEWS file
timeseries >$tmp/growthplot$$
grep "^[0-9]" $tmp/growthplot$$ >$tmp/growthnumbers$$
grep "^[0-9.]*.[05].0	" $tmp/growthplot$$ >$tmp/growthmajors$$
sed '/^4.2.9/,$d' <$tmp/growthnumbers$$ >$tmp/growthannounce$$

# gnuplot line styles.  These occasionally change (like beteween 3.5 and 3.7);
# use "echo 'set terminal png; test' | gnuplot | display -" to check.
blue_boxes=3
green_crosses=2
cyan_diamonds=37	# Once purple triangles, but we can't do that anymore
brown_triangles=23

cat >$tmp/growthimage$$ <<EOF
set title "Fetchmail project growth history"
set xlabel 'Days since baseline'
set ylabel 'Participants'
set y2label 'Lines of code'
set ytics nomirror
set y2tics
set tics out
set autoscale y
set y2range [5000:50000]
set key bottom right box
set terminal png

EOF

# OK, now write the event labels
(
	count=0
	lastday=0
        breakheight=510
	while read version legend
	do
		if [ "$version" = '%' ]
		then
			echo "# Associate $lastday to '$legend'"
			count=$((count+1))
		        lastday=$(($lastday-5))
			endy=$((breakheight+50+count*50))
			if ((endy>lasttotal))
			then
			    # Label over curve hanging right, arrow down
			    arrowhead=$((lasttotal+50))
			    echo "set label '$legend' at $lastday-10, $endy+15"
			else
			    # Label under curve hanging left, arrow up
			    arrowhead=$((lasttotal-5))
			    strlen=`python -c "print len('$legend')"`
			    lablen=$((strlen*22))
			    echo "set label '$legend' at $lastday-$lablen+10, $endy-15"
			fi
			echo set arrow \
				from $lastday, $endy \
				to $lastday, $arrowhead \
				head
		else
			set -- $legend
			size=$1 
			friends=$2
			announce=$3
			total=$4
			days=$5 
			date=$6
			lastday=$days
			lasttotal=$total
		fi
	done
) <$tmp/growthplot$$ >>$tmp/growthimage$$ 

# OK, now write the major-release labels
(
	while read version size friends announce total days date
	do
	    echo "set arrow from $days, $total - 55 to $days, $total - 15 head"
	    echo "set label '$version' at $days - 5, $total - 65"
	done
) <$tmp/growthmajors$$ >>$tmp/growthimage$$ 

cat >>$tmp/growthimage$$ <<EOF
plot [] [0:] '$tmp/growthnumbers$$' using 6:5 \
		title "Both lists" with points $blue_boxes, \
     '$tmp/growthannounce$$' using 6:4 \
		title "fetchmail-announce" with points $cyan_diamonds, \
     '$tmp/growthannounce$$' using 6:3 \
		title "fetchmail-friends" with points $green_crosses, \
     '$tmp/growthnumbers$$' using 6:2 axes x1y2 \
		title "Lines of code" with points $brown_triangles
EOF

gnuplot $tmp/growthimage$$ >growth.png

rm -f $tmp/growth*
rmdir $tmp

# growthplot ends here
w"> "$MAIL" ]; then touch $MAIL 2>/dev/null chmod 600 $MAIL 2>/dev/null fi fi echo if [ "$MDA" = "1" ]; then echo "I put that (m)ail (d)elivery (a)gent in .fetchmailrc" echo "because i found it on your system, this doesn't mean" echo "it's correct or the one you want to use." echo echo "The first time you run fetchmail, you should run it" echo "this way: # fetchmail -k" echo elif [ "$MDA" = "2" ]; then echo "You seem to have sendmail, sendmail will be used" echo "as the (m)ail (d)elivery (a)gent for fetchmail." echo echo "WARNING! There's no way to know if sendmail is set up" echo "properly for local mail delivery, so the first time you" echo "run fetchmail run it this way: # fetchmail -k" echo echo "If the mail that fetchmail retrieves is not put in your mailbox," echo "you'll know that sendmail is not set up properly for the delivery" echo "of local mail." echo elif [ "$MDA" = "3" ]; then echo "I Don't know what (m)ail (d)elivery (a)gent you're going to use." echo "You need a <mda> to deliver the mail to you, after <fetchmail> retrieves it." echo echo "Put the <mda> in your .fetchmailrc file, like below." echo "password $PASS" echo mda '"/usr/bin/procmail -d %s"' echo mda '"/usr/sbin/sendmail %s"' echo echo "The first time you run fetchmail, you should run it" echo "this way: # fetchmail -k" echo fi