rev |
line source |
pankso@157
|
1 #!/bin/sh
|
pankso@157
|
2 #*/5 * * * * /var/www/mirror-info/bin/makegraphs >/dev/null
|
pankso@157
|
3
|
pankso@157
|
4 # RRD database directory
|
pankso@157
|
5 rrdlog="/var/spool/rrd"
|
pankso@157
|
6
|
pankso@157
|
7 # Images directory
|
pankso@184
|
8 rrdgraph="/var/www/mirror-info/images/rrd"
|
pankso@157
|
9
|
pankso@157
|
10 # Colors
|
pankso@157
|
11 #rrdcolors="--color SHADEA#EAE9EE --color SHADEB#EAE9EE --color BACK#EAE9EE"
|
pankso@157
|
12 rrdcolors="--color SHADEA#FFFFFF --color SHADEB#FFFFFF --color BACK#FFFFFF"
|
pankso@157
|
13 rrdgraphargs="-aPNG -i -z --alt-y-grid -w 600 -h 100 -r $rrdcolors"
|
pankso@157
|
14
|
pankso@157
|
15 [ -d $rrdlog ] || mkdir -p $rrdlog
|
pankso@157
|
16 [ -d $rrdgraph ] || mkdir -p $rrdgraph
|
pankso@157
|
17
|
pascal@367
|
18 RRDTOOLYEAR=$(rrdtool --help | sed '/Copyright/!d;s/.*-\([0-9]*\) .*/\1/')
|
pascal@367
|
19
|
pankso@157
|
20 updatecpudata() {
|
pankso@157
|
21 [ -e "$rrdlog/cpu.rrd" ] || rrdtool create $rrdlog/cpu.rrd --step=300 \
|
pankso@157
|
22 DS:user:COUNTER:600:0:500000000 \
|
pankso@157
|
23 DS:system:COUNTER:600:0:500000000 \
|
pankso@157
|
24 DS:idle:COUNTER:600:0:500000000 \
|
pankso@157
|
25 RRA:AVERAGE:0.5:1:576 RRA:AVERAGE:0.5:6:672 \
|
pankso@157
|
26 RRA:AVERAGE:0.5:24:732 RRA:AVERAGE:0.5:144:1460
|
pankso@157
|
27 grep '^cpu' /proc/stat | while read cpu user nice system idle misc; do
|
pankso@157
|
28 rrdtool update $rrdlog/cpu.rrd -t user:system:idle \
|
pankso@157
|
29 N:$(( $user + $nice )):$system:$idle
|
pankso@157
|
30 break
|
pankso@157
|
31 done
|
pankso@157
|
32
|
pankso@157
|
33 [ -e "$rrdlog/cpu2.rrd" ] &&
|
pankso@157
|
34 grep '^cpu' /proc/stat | while read cpu user nice system idle misc; do
|
pankso@157
|
35 rrdtool update $rrdlog/cpu2.rrd -t nice:user:system:idle \
|
pankso@157
|
36 N:$nice:$user:$system:$idle
|
pankso@157
|
37 break
|
pankso@157
|
38 done
|
pankso@157
|
39 }
|
pankso@157
|
40
|
pankso@157
|
41 updatecpugraph() {
|
pankso@157
|
42 period=$1
|
pascal@361
|
43 info="$(sed '/cpuinfo=/!d;s/.*cpuinfo=\([^ ]*\).*/: \1/;s/_/ /g' /proc/cmdline)"
|
pascal@713
|
44 [ -n "$info" ] || info="$(grep '^model name' /etc/cpuinfo)"
|
pascal@361
|
45 info="$(echo "$info" | cut -d: -f2 | sed 's/ * / /g' | head -1)"
|
pankso@157
|
46 rrdtool graph "$rrdgraph/cpu-$period.png" --start -1$period \
|
pankso@157
|
47 $rrdgraphargs -l 0 -u 100 -t "cpu usage per $period [$info ]" \
|
pascal@561
|
48 -v " " \
|
pankso@157
|
49 DEF:user=$rrdlog/cpu.rrd:user:AVERAGE \
|
pankso@157
|
50 DEF:system=$rrdlog/cpu.rrd:system:AVERAGE \
|
pankso@157
|
51 DEF:idle=$rrdlog/cpu.rrd:idle:AVERAGE \
|
pankso@157
|
52 'CDEF:total=user,system,idle,+,+' \
|
pankso@157
|
53 'CDEF:userpct=100,user,total,/,*' \
|
pankso@157
|
54 'CDEF:systempct=100,system,total,/,*' \
|
pankso@157
|
55 'CDEF:idlepct=100,idle,total,/,*' \
|
pankso@157
|
56 'AREA:userpct#0000FF:user cpu usage' \
|
pankso@157
|
57 'STACK:systempct#FF0000:system cpu usage' \
|
pankso@157
|
58 'STACK:idlepct#00FF00:idle cpu usage\j'
|
pankso@157
|
59 }
|
pankso@157
|
60
|
pankso@157
|
61
|
pankso@157
|
62 updatememgraph() {
|
pankso@157
|
63 period=$1
|
pankso@157
|
64 info="$(free | awk '\
|
pankso@157
|
65 { \
|
pankso@157
|
66 if (/Mem:/) { \
|
pankso@157
|
67 if ($2 < 10000) printf "%d KB",$2; \
|
pankso@157
|
68 else if ($2 < 10000000) printf "%d MB",$2/1024; \
|
pankso@157
|
69 else printf "%d GB",$2/1024/1024; \
|
pankso@157
|
70 } \
|
pankso@157
|
71 }')"
|
pankso@157
|
72 info2="$(free | awk '\
|
pankso@157
|
73 { \
|
pankso@157
|
74 if (/Swap:/) { \
|
pankso@157
|
75 if ($2 < 10000) printf "%d KB",$2; \
|
pankso@157
|
76 else if ($2 < 10000000) printf "%d MB",$2/1024; \
|
pankso@157
|
77 else printf "%d GB",$2/1024/1024; \
|
pankso@157
|
78 } \
|
pankso@157
|
79 }')"
|
pankso@157
|
80 rrdtool graph "$rrdgraph/memory-$period.png" --start -1$period \
|
pankso@157
|
81 $rrdgraphargs -l 0 -u 100 \
|
pankso@157
|
82 -t "memory usage per $period [ $info + $info2 swap ]" \
|
pascal@561
|
83 -v " " \
|
pankso@157
|
84 DEF:used=$rrdlog/mem.rrd:memused:AVERAGE \
|
pankso@157
|
85 DEF:free=$rrdlog/mem.rrd:memfree:AVERAGE \
|
pankso@157
|
86 DEF:shared=$rrdlog/mem.rrd:memshared:AVERAGE \
|
pankso@157
|
87 DEF:buffer=$rrdlog/mem.rrd:membuffers:AVERAGE \
|
pankso@157
|
88 DEF:cache=$rrdlog/mem.rrd:memcache:AVERAGE \
|
pankso@157
|
89 DEF:swused=$rrdlog/mem.rrd:swapused:AVERAGE \
|
pankso@157
|
90 DEF:swfree=$rrdlog/mem.rrd:swapfree:AVERAGE \
|
pankso@157
|
91 'CDEF:total=used,free,+' \
|
pankso@157
|
92 'CDEF:used2=used,buffer,cache,shared,+,+,-' \
|
pankso@157
|
93 'CDEF:usedpct=100,used2,total,/,*' \
|
pankso@157
|
94 'CDEF:sharedpct=100,shared,total,/,*' \
|
pankso@157
|
95 'CDEF:bufferpct=100,buffer,total,/,*' \
|
pankso@157
|
96 'CDEF:cachepct=100,cache,total,/,*' \
|
pankso@157
|
97 'CDEF:freepct=100,free,total,/,*' \
|
pankso@157
|
98 'CDEF:swtotal=swused,swfree,+' \
|
pankso@157
|
99 'CDEF:swusedpct=100,swused,swtotal,/,*' \
|
pankso@157
|
100 'AREA:usedpct#0000FF:used memory' \
|
pankso@157
|
101 'STACK:sharedpct#FF7F00:shared memory' \
|
pankso@157
|
102 'STACK:bufferpct#FF00FF:buffered memory' \
|
pankso@157
|
103 'STACK:cachepct#FFFF00:cached memory' \
|
pankso@157
|
104 'STACK:freepct#00FF00:free memory' \
|
pascal@369
|
105 'LINE2:swusedpct#FF0000:used swap\g' \
|
pascal@369
|
106 'GPRINT:swusedpct:MAX:%1.0lf%%\j'
|
pankso@157
|
107 }
|
pankso@157
|
108
|
pankso@157
|
109 updatememdata () {
|
pankso@157
|
110 [ -e "$rrdlog/mem.rrd" ] ||
|
pankso@157
|
111 rrdtool create "$rrdlog/mem.rrd" --step=300 \
|
pankso@157
|
112 DS:memused:ABSOLUTE:600:0:5000000000 \
|
pankso@157
|
113 DS:memfree:ABSOLUTE:600:0:5000000000 \
|
pankso@157
|
114 DS:memshared:ABSOLUTE:600:0:5000000000 \
|
pankso@157
|
115 DS:membuffers:ABSOLUTE:600:0:5000000000 \
|
pankso@157
|
116 DS:memcache:ABSOLUTE:600:0:5000000000 \
|
pankso@157
|
117 DS:swapused:ABSOLUTE:600:0:5000000000 \
|
pankso@157
|
118 DS:swapfree:ABSOLUTE:600:0:5000000000 \
|
pankso@157
|
119 RRA:AVERAGE:0.5:1:576 RRA:AVERAGE:0.5:6:672 \
|
pankso@157
|
120 RRA:AVERAGE:0.5:24:732 RRA:AVERAGE:0.5:144:1460
|
pankso@157
|
121
|
pankso@157
|
122 while read tag count unit; do
|
pankso@157
|
123 case "$tag" in
|
pankso@157
|
124 MemTotal:) memtotal=$(($count * 1024));;
|
pankso@157
|
125 MemFree:) memfree=$(($count * 1024))
|
pankso@157
|
126 memused=$(($memtotal - $memfree))
|
pankso@157
|
127 memshared=0;;
|
pankso@157
|
128 MemShared:) memshared=$(($count * 1024));;
|
pankso@157
|
129 Buffers:) membuffers=$(($count * 1024));;
|
pankso@157
|
130 Cached:) memcache=$(($count * 1024));;
|
pankso@157
|
131 SwapTotal:) swaptotal=$(($count * 1024));;
|
pankso@157
|
132 SwapFree:) swapfree=$(($count * 1024))
|
pankso@157
|
133 swapused=$(( $swaptotal - $swapfree));;
|
pankso@157
|
134 esac
|
pankso@157
|
135 done < /proc/meminfo
|
pankso@157
|
136
|
pankso@157
|
137 rrdtool update "$rrdlog/mem.rrd" \
|
pankso@157
|
138 -t memused:memfree:memshared:membuffers:memcache:swapused:swapfree \
|
pankso@157
|
139 "N:$memused:$memfree:$memshared:$membuffers:$memcache:$swapused:$swapfree"
|
pankso@157
|
140 }
|
pankso@157
|
141
|
pankso@157
|
142 getmax() {
|
pankso@157
|
143 rrdtool fetch $rrdlog/$1.rrd AVERAGE | awk '\
|
pankso@157
|
144 BEGIN {max=0} \
|
pankso@157
|
145 /^[0-9]/ { \
|
pankso@157
|
146 if ($2 != "nan" && $2 > max) max=$2; \
|
pankso@157
|
147 if ($3 != "nan" && $3 > max) max=$3; \
|
pankso@157
|
148 } \
|
pankso@157
|
149 END { print max }' | sed 's/,/./'
|
pankso@157
|
150 }
|
pankso@157
|
151
|
pankso@157
|
152 updatediskgraph() {
|
pankso@157
|
153 period=$1
|
pascal@361
|
154 extra="--logarithmic --lower-limit 1"
|
pascal@698
|
155 [ "$period" = "day" ] && maxdisk="$(getmax disk)" && extra=""
|
pascal@367
|
156 info="$(fdisk -l 2> /dev/null | sed '/dev/!d;s|.*: \(.*\), .*|\1|;q')"
|
pascal@367
|
157 [ -n "$info" ] && info="[ $info ]"
|
pankso@157
|
158 [ -r $2 ] &&
|
pankso@157
|
159 info="[ $(fdisk -l 2> /dev/null | grep "^Disk $2:" | \
|
pascal@367
|
160 sed "s|Disk $2: \(.*\), .*|\1|") ]" ||
|
pankso@157
|
161 if [ -e /sys/block/${2#/dev/}/device/iodone_cnt ]; then
|
pankso@157
|
162 # --right-axis-label "I/O state %"
|
pankso@157
|
163 rrdtool graph "$rrdgraph/disk-$period.png" --start -1$period \
|
pankso@157
|
164 $rrdgraphargs -t "disk access per $period $info" \
|
pascal@361
|
165 $extra -v "Sectors/second" --units=si \
|
pankso@157
|
166 DEF:read=$rrdlog/disk.rrd:readsect:AVERAGE \
|
pankso@157
|
167 DEF:write=$rrdlog/disk.rrd:writesect:AVERAGE \
|
pankso@157
|
168 DEF:req=$rrdlog/iodisk.rrd:req:AVERAGE \
|
pankso@157
|
169 DEF:done=$rrdlog/iodisk.rrd:done:AVERAGE \
|
pankso@157
|
170 DEF:err=$rrdlog/iodisk.rrd:err:AVERAGE \
|
pankso@157
|
171 "CDEF:readpct=100,read,$maxdisk,/,*" \
|
pankso@157
|
172 "CDEF:writepct=100,write,$maxdisk,/,*" \
|
pankso@157
|
173 "CDEF:errpct=100,err,req,/,*" \
|
pankso@157
|
174 "CDEF:donepct=100,done,req,/,*" \
|
pascal@334
|
175 'AREA:readpct#0000FF:sectors written from disk' \
|
pascal@334
|
176 'STACK:writepct#00FF00:sectors read to disk' \
|
pankso@157
|
177 'LINE2:donepct#FFFF00:I/O complete' \
|
pankso@157
|
178 'LINE2:errpct#FF0000:I/O error\j'
|
pankso@157
|
179 else
|
pankso@157
|
180 rrdtool graph "$rrdgraph/disk-$period.png" --start -1$period \
|
pankso@157
|
181 $rrdgraphargs -t "disk access per $period $info" \
|
pascal@361
|
182 $extra -v "Sectors/second" --units=si \
|
pankso@157
|
183 DEF:read=$rrdlog/disk.rrd:readsect:AVERAGE \
|
pankso@157
|
184 DEF:write=$rrdlog/disk.rrd:writesect:AVERAGE \
|
pascal@361
|
185 DEF:blk=$rrdlog/usagedisk.rrd:broot:AVERAGE \
|
pascal@361
|
186 DEF:ino=$rrdlog/usagedisk.rrd:iroot:AVERAGE \
|
pankso@157
|
187 "CDEF:readpct=100,read,$maxdisk,/,*" \
|
pankso@157
|
188 "CDEF:writepct=100,write,$maxdisk,/,*" \
|
pascal@334
|
189 'AREA:readpct#0000FF:sectors written from disk' \
|
pascal@361
|
190 'STACK:writepct#00FF00:sectors read to disk' \
|
pascal@367
|
191 'LINE1:ino#FF00FF:inodes used' \
|
pascal@367
|
192 'GPRINT:ino:MAX:%1.0lf%%' \
|
pascal@367
|
193 'LINE1:blk#FF0000:blocks used' \
|
pascal@367
|
194 'GPRINT:blk:MAX:%1.0lf%%\j'
|
pankso@157
|
195 fi
|
pankso@157
|
196 }
|
pankso@157
|
197
|
pankso@157
|
198 updatediskdata() {
|
pankso@157
|
199 dev=$1
|
pankso@157
|
200 [ -e "$rrdlog/disk.rrd" ] ||
|
pankso@157
|
201 rrdtool create "$rrdlog/disk.rrd" --step=300 \
|
pankso@157
|
202 DS:readsect:COUNTER:600:0:5000000000 \
|
pankso@157
|
203 DS:writesect:COUNTER:600:0:5000000000 \
|
pankso@157
|
204 RRA:AVERAGE:0.5:1:576 RRA:AVERAGE:0.5:6:672 \
|
pankso@157
|
205 RRA:AVERAGE:0.5:24:732 RRA:AVERAGE:0.5:144:1460
|
pankso@157
|
206 [ -e "$rrdlog/iodisk.rrd" ] ||
|
pankso@157
|
207 rrdtool create "$rrdlog/iodisk.rrd" --step=300 \
|
pankso@157
|
208 DS:done:GAUGE:600:0:U DS:err:GAUGE:600:0:U \
|
pankso@157
|
209 DS:req:GAUGE:600:0:U \
|
pankso@157
|
210 RRA:AVERAGE:0.5:1:576 RRA:AVERAGE:0.5:6:672 \
|
pankso@157
|
211 RRA:AVERAGE:0.5:24:732 RRA:AVERAGE:0.5:144:1460
|
pascal@361
|
212 [ -e "$rrdlog/usagedisk.rrd" ] ||
|
pascal@361
|
213 rrdtool create "$rrdlog/usagedisk.rrd" --step=300 \
|
pascal@361
|
214 DS:broot:GAUGE:600:0:U DS:iroot:GAUGE:600:0:U \
|
pascal@361
|
215 RRA:AVERAGE:0.5:1:576 RRA:AVERAGE:0.5:6:672 \
|
pascal@361
|
216 RRA:AVERAGE:0.5:24:732 RRA:AVERAGE:0.5:144:1460
|
pankso@157
|
217
|
pankso@157
|
218 while read major minor name readreq readsect writereq writesect misc; do
|
pankso@157
|
219 [ $major = $(( 0x$(stat -c %t $dev) )) ] || continue
|
pankso@157
|
220 [ $minor = $(( 0x$(stat -c %T $dev) )) ] || continue
|
pankso@157
|
221 rrdtool update "$rrdlog/disk.rrd" -t readsect:writesect \
|
pankso@157
|
222 N:$readsect:$writesect
|
pankso@157
|
223 done < /proc/diskstats
|
pankso@157
|
224 disk=${dev:0:8}
|
pankso@157
|
225 dir=/sys/block/${disk#/dev/}/device
|
pascal@361
|
226 iroot=$(df -i / | sed '$!d;s/.* \([0-9]*\)% \/.*/\1/')
|
pascal@361
|
227 broot=$(df / | sed '$!d;s/.* \([0-9]*\)% \/.*/\1/')
|
pascal@361
|
228 rrdtool update "$rrdlog/usagedisk.rrd" -t broot:iroot N:$broot:$iroot
|
pascal@361
|
229 [ -e $dir/iorequest_cnt ] || return
|
pankso@157
|
230 done=$(printf "%d\n" $(cat $dir/iodone_cnt 2> /dev/null) )
|
pankso@157
|
231 err=$(printf "%d\n" $(cat $dir/ioerr_cnt 2> /dev/null) )
|
pankso@157
|
232 req=$(printf "%d\n" $(cat $dir/iorequest_cnt 2> /dev/null) )
|
pankso@157
|
233 rrdtool update "$rrdlog/iodisk.rrd" -t done:err:req N:$done:$err:$req
|
pankso@157
|
234 }
|
pankso@157
|
235
|
pankso@157
|
236 updateifgraph() {
|
pankso@157
|
237 interface=$1
|
pankso@157
|
238 period=$2
|
pankso@157
|
239 rrdtool graph "$rrdgraph/$interface-$period.png" --start -1$period \
|
pankso@157
|
240 $rrdgraphargs -t "traffic on $interface graph per $period" \
|
pankso@157
|
241 --logarithmic -A -v "Bytes/second" --units=si \
|
pankso@157
|
242 DEF:incoming=$rrdlog/$interface.rrd:incoming:AVERAGE \
|
pankso@157
|
243 DEF:outgoing=$rrdlog/$interface.rrd:outgoing:AVERAGE \
|
pascal@361
|
244 DEF:tcp=$rrdlog/proto-$interface.rrd:tcp:AVERAGE \
|
pascal@367
|
245 DEF:rsync=$rrdlog/proto-$interface.rrd:rsync:AVERAGE \
|
pankso@157
|
246 'AREA:incoming#00FF00:incoming traffic' \
|
pascal@367
|
247 'AREA:rsync#FF00FF:updates' \
|
pascal@361
|
248 'LINE1:outgoing#0000FF:outgoing traffic' \
|
pascal@367
|
249 'GPRINT:outgoing:MAX:max %5.3lf %sBps' \
|
pascal@367
|
250 'LINE1:tcp#000000:connections' \
|
pascal@367
|
251 'GPRINT:tcp:MAX:max %2.0lf\j'
|
pascal@367
|
252 rrdtool graph "$rrdgraph/proto-$interface-$period.png" --start -1$period \
|
pascal@367
|
253 $rrdgraphargs -t "traffic on $interface graph per $period" \
|
pascal@367
|
254 --logarithmic -A -v "Bytes/second" --units=si \
|
pascal@367
|
255 DEF:rsync=$rrdlog/proto-$interface.rrd:rsync:AVERAGE \
|
pascal@367
|
256 DEF:www=$rrdlog/proto-$interface.rrd:www:AVERAGE \
|
pascal@367
|
257 DEF:ssh=$rrdlog/proto-$interface.rrd:ssh:AVERAGE \
|
pascal@367
|
258 DEF:tcp=$rrdlog/proto-$interface.rrd:tcp:AVERAGE \
|
pascal@367
|
259 DEF:udp=$rrdlog/proto-$interface.rrd:udp:AVERAGE \
|
pascal@367
|
260 'AREA:tcp#00FF00:tcp connections' \
|
pascal@367
|
261 'AREA:rsync#0000FF:rsync' \
|
pascal@367
|
262 'LINE1:www#FF0000:www' \
|
pascal@367
|
263 'LINE1:ssh#FF00FF:ssh' \
|
pascal@367
|
264 'LINE1:udp#000000:udp connections\j'
|
pankso@157
|
265 }
|
pankso@157
|
266
|
pankso@157
|
267 netframes() {
|
pankso@157
|
268 ifconfig $1 | grep "$2 packets" | sed -re "s/.*$3:([0-9]+).*/\1/g"
|
pankso@157
|
269 }
|
pankso@157
|
270
|
pankso@157
|
271 netstats() {
|
pankso@157
|
272 ifconfig $1 | grep bytes | sed -re "s/.*$2 bytes:([0-9]+).*/\1/g"
|
pankso@157
|
273 }
|
pankso@157
|
274
|
pascal@361
|
275 netproto()
|
pascal@361
|
276 {
|
pascal@361
|
277 proto=${1:-tcp}
|
pascal@361
|
278 if [ -n "$2" ]; then
|
pascal@361
|
279 netstat -an 2> /dev/null | grep -v '0.0.0.0:*' | grep "^$proto" | grep ":$2 " | wc -l
|
pascal@361
|
280 else
|
pascal@361
|
281 netstat -an 2> /dev/null | grep -v '0.0.0.0:*' | grep "^$proto" | wc -l
|
pascal@361
|
282 fi
|
pascal@361
|
283 }
|
pascal@361
|
284
|
pankso@157
|
285 updateifdata() {
|
pankso@157
|
286 interface=$1
|
pankso@157
|
287 [ -e "$rrdlog/$interface.rrd" ] ||
|
pankso@157
|
288 rrdtool create "$rrdlog/$interface.rrd" --step=300 \
|
pankso@157
|
289 DS:incoming:COUNTER:600:0:U \
|
pankso@157
|
290 DS:outgoing:COUNTER:600:0:U \
|
pankso@157
|
291 RRA:AVERAGE:0.5:1:576 RRA:AVERAGE:0.5:6:672 \
|
pankso@157
|
292 RRA:AVERAGE:0.5:24:732 RRA:AVERAGE:0.5:144:1460
|
pankso@157
|
293 [ -e "$rrdlog/packets-$interface.rrd" ] ||
|
pankso@157
|
294 rrdtool create "$rrdlog/packets-$interface.rrd" --step=300 \
|
pankso@157
|
295 DS:in:COUNTER:600:0:U DS:out:COUNTER:600:0:U \
|
pankso@157
|
296 DS:inerr:COUNTER:600:0:U DS:outerr:COUNTER:600:0:U \
|
pankso@157
|
297 DS:indrop:COUNTER:600:0:U DS:outdrop:COUNTER:600:0:U \
|
pankso@157
|
298 DS:inov:COUNTER:600:0:U DS:outov:COUNTER:600:0:U \
|
pankso@157
|
299 DS:frame:COUNTER:600:0:U DS:carrier:COUNTER:600:0:U \
|
pankso@157
|
300 RRA:AVERAGE:0.5:1:576 RRA:AVERAGE:0.5:6:672 \
|
pankso@157
|
301 RRA:AVERAGE:0.5:24:732 RRA:AVERAGE:0.5:144:1460
|
pascal@361
|
302 [ -e "$rrdlog/proto-$interface.rrd" ] ||
|
pascal@361
|
303 rrdtool create "$rrdlog/proto-$interface.rrd" --step=300 \
|
pascal@361
|
304 DS:tcp:GAUGE:600:0:U DS:udp:GAUGE:600:0:U \
|
pascal@361
|
305 DS:rsync:GAUGE:600:0:U DS:www:GAUGE:600:0:U \
|
pascal@361
|
306 DS:ssh:GAUGE:600:0:U \
|
pascal@361
|
307 RRA:AVERAGE:0.5:1:576 RRA:AVERAGE:0.5:6:672 \
|
pascal@361
|
308 RRA:AVERAGE:0.5:24:732 RRA:AVERAGE:0.5:144:1460
|
pankso@157
|
309 rx=$(netstats $interface RX)
|
pankso@157
|
310 tx=$(netstats $interface TX)
|
pankso@157
|
311 rrdtool update "$rrdlog/$interface.rrd" -t incoming:outgoing \
|
pankso@157
|
312 N:${rx:-U}:${tx:-U}
|
pankso@157
|
313 rx=$(netframes $interface RX packets)
|
pankso@157
|
314 tx=$(netframes $interface TX packets)
|
pankso@157
|
315 rxerr=$(netframes $interface RX errors)
|
pankso@157
|
316 txerr=$(netframes $interface TX errors)
|
pankso@157
|
317 rxdrop=$(netframes $interface RX dropped)
|
pankso@157
|
318 txdrop=$(netframes $interface TX dropped)
|
pankso@157
|
319 rxov=$(netframes $interface RX overruns)
|
pankso@157
|
320 txov=$(netframes $interface TX overruns)
|
pankso@157
|
321 frame=$(netframes $interface RX frame)
|
pankso@157
|
322 carrier=$(netframes $interface TX carrier)
|
pankso@157
|
323 rrdtool update "$rrdlog/packets-$interface.rrd" \
|
pankso@157
|
324 -t in:out:inerr:outerr:indrop:outdrop:inov:outov:frame:carrier \
|
pankso@157
|
325 N:${rx:-U}:${tx:-U}:${rxerr:-U}:${txerr:-U}:${rxdrop:-U}:${txdrop:-U}:${rxov:-U}:${txov:-U}:${frame:-U}:${carrier:-U}
|
pascal@361
|
326 rsync=$(netproto tcp 873)
|
pascal@361
|
327 www=$(netproto tcp 80)
|
pascal@361
|
328 ssh=$(netproto tcp 22)
|
pascal@361
|
329 tcp=$(netproto tcp)
|
pascal@361
|
330 udp=$(netproto udp)
|
pascal@361
|
331 rrdtool update "$rrdlog/proto-$interface.rrd" \
|
pascal@361
|
332 -t tcp:udp:rsync:www:ssh \
|
pascal@361
|
333 N:${tcp:-U}:${udp:-U}:${rsync:-U}:${www:-U}:${ssh:-U}
|
pankso@157
|
334 }
|
pankso@157
|
335
|
pankso@157
|
336 getdisk()
|
pankso@157
|
337 {
|
pankso@157
|
338 local d
|
pankso@157
|
339 local i
|
pankso@157
|
340 d=$(stat -c %04D $1)
|
pankso@157
|
341 for i in /dev/* ; do
|
pascal@698
|
342 [ $(stat -c "%02t%02T" $i) = $d ] || continue
|
pankso@157
|
343 echo $i
|
pankso@157
|
344 break
|
pankso@157
|
345 done
|
pankso@157
|
346 }
|
pankso@157
|
347
|
pankso@157
|
348 ###
|
pankso@157
|
349 ### System graphs
|
pankso@157
|
350 ###
|
pankso@157
|
351
|
pankso@157
|
352 updatecpudata
|
pankso@157
|
353 updatecpugraph day
|
pankso@157
|
354 updatecpugraph week
|
pankso@157
|
355 updatecpugraph month
|
pankso@157
|
356 updatecpugraph year
|
pankso@157
|
357
|
pankso@157
|
358 updatememdata
|
pankso@157
|
359 updatememgraph day
|
pankso@157
|
360 updatememgraph week
|
pankso@157
|
361 updatememgraph month
|
pankso@157
|
362 updatememgraph year
|
pankso@157
|
363
|
pankso@157
|
364 if [ -e /proc/diskstats ]; then
|
pankso@157
|
365 disk=$(getdisk $0)
|
pankso@157
|
366 updatediskdata $disk
|
pankso@157
|
367 updatediskgraph day ${disk:0:8}
|
pankso@157
|
368 updatediskgraph week ${disk:0:8}
|
pankso@157
|
369 updatediskgraph month ${disk:0:8}
|
pankso@157
|
370 updatediskgraph year ${disk:0:8}
|
pankso@157
|
371 fi
|
pankso@157
|
372
|
pankso@157
|
373 iface=$(/sbin/route -n | awk '{ if (/^0.0.0.0/) print $8 }')
|
pankso@157
|
374 updateifdata $iface
|
pankso@157
|
375 updateifgraph $iface day
|
pankso@157
|
376 updateifgraph $iface week
|
pankso@157
|
377 updateifgraph $iface month
|
pankso@157
|
378 updateifgraph $iface year
|
pascal@361
|
379
|
pascal@361
|
380 [ ! -s $rrdgraph/boot.html -o /var/log/boot.log -nt $rrdgraph/boot.html ] &&
|
pascal@361
|
381 cat > $rrdgraph/boot.html <<EOT
|
pascal@361
|
382 <html>
|
pascal@361
|
383 <body>
|
pascal@367
|
384 $(stat -c %y /var/log/dmesg.log | sed 's/\.0*//')
|
pascal@367
|
385 <span style="color: blue"><i>$(cat /proc/cmdline)</i></span>
|
pascal@361
|
386 <pre>
|
pascal@361
|
387 $(cat /var/log/dmesg.log /var/log/boot.log | \
|
pascal@361
|
388 sed -e 's/</\</g;s/>/\>/g' -e 's/.*\]R//' -e 's/.*\[?8h//' \
|
pascal@361
|
389 -e 's|.\[1m|<b>|' -e 's|.\[0m|</b>|' -e 's|.\[[0-9][0-9Gm;]*||g' \
|
pascal@361
|
390 -e ':a;s/^\(.\{1,68\}\)\(\[ [A-Za-z]* \]\)/\1 \2/;ta' \
|
pascal@361
|
391 -e 's#\[ OK \]#[ <span style="color: green">OK</span> ]#' \
|
pascal@361
|
392 -e 's#\[ Failed \]#[ <span style="color: red">Failed</span> ]#' \
|
pascal@361
|
393 -e 's|No such .*|<span style="color: red">&</span>|' \
|
pascal@361
|
394 -e 's|ERROR .*|<span style="color: red">&</span>|' \
|
pascal@361
|
395 -e 's|command line: \(.*\)|command line: <span style="color: blue">\1</span>|' \
|
pascal@361
|
396 )
|
pascal@361
|
397 </pre>
|
pascal@361
|
398 </body>
|
pascal@361
|
399 </html>
|
pascal@361
|
400 EOT
|