slitaz-forge annotate mirror/info/bin/makegraphs @ rev 367

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