change version
[debian6500.git] / master / root / bin / monitor_proc
CommitLineData
4aba78da
LM
1#!/bin/bash
2
3# default values
4PROGNAME=$(basename $0)
5FULLPROG=$0
6
7# usage
8function usage () {
9 echo "usage: $PROGNAME [-h] [-r] file"
10 echo " -h: help message"
11 echo " -s: set stats"
12 echo " -r: reset stats"
13 echo " file: data to monitor"
14}
15
16# reset
17function reset () {
18 echo "reseting stats"
19 [ -f $resource ] && rm $resource
20}
21
22# variables
23set=
24files=
25resource=$HOME/.$PROGNAME
26
27# parameter processing
28while [ $# -gt 0 ]; do
29 case "$1" in
30 -h) usage; exit 0;;
31 -s) set="yes";;
32 -r) reset; exit 0;;
33 *) files="$files $1";;
34 esac
35 shift
36done
37
38# check arguments
39[ "$files" ] || { echo "no file specified"; exit 1; }
40
41# read old values
42[ -f $resource ] && source $resource
43
44for f in $files; do
45
46 # check file
47 f=$(echo $f | sed 's,//*,/,g')
48 [ -f $f ] || { echo "can't find file '$f'"; exit 1; }
49
50 # main
51 var=${f//\//_}
52 newvar=($(awk '{ for (i = 1; i <= NF; i++) if ($(i) ~ /^[-+0-9][0-9]*$/) printf " %s", $(i) }' $f))
53 eval oldvar=(\${$var[@]})
54
55 # compute diff
56 for ((i=0; i<${#newvar[@]}; i++)); do
57 [ "${oldvar[$i]}" ] && v[$i]=$((newvar[i] - oldvar[i])) || v[$i]=${newvar[$i]}
58 done
59
60 # ouput
61 if [ "$set" = "yes" ]; then
62 echo "$var=(${newvar[@]})" >>$resource
63 else
64 str=""
65 for ((i=0; i<${#v[@]}; i++)); do
66 str="$str; v[$i]=${v[$i]}"
67 done
68 awk 'BEGIN { k=0 '"$str"' } { for (i=1; i<=NF; i++) if ($(i) ~ /^[-+0-9][0-9]*$/) $(i)=v[k++]; print }' $f
69 fi
70
71done
72
73# clean resource file
74if [ "$set" = "yes" ]; then
75 awk -F= '{ a[$1]=$2 } END { for (i in a) print i "=" a[i] }' $resource > $resource.n
76 mv -f $resource.n $resource
77fi