1 |
#!/bin/sh |
2 |
|
3 |
# small interactive script which enables you to edit one rrd file in our |
4 |
# favourite EDITOR (vi, right?) and then apply that changes (using diff |
5 |
# and patch) to multiple files |
6 |
# |
7 |
# Dobrica Pavlinusic <dpavlin@rot13.org> 2003-11-19 |
8 |
|
9 |
if [ -z "$1" ] ; then |
10 |
echo "Usage: $0 [rrd file] ..." |
11 |
exit 1 |
12 |
fi |
13 |
|
14 |
if [ ! -z "$EDITOR" ] ; then |
15 |
editor=$EDITOR |
16 |
else |
17 |
editor=vi |
18 |
fi |
19 |
|
20 |
b=`basename $0` |
21 |
|
22 |
xmlfile=/tmp/$b.xml |
23 |
rrddiff=/tmp/$b.diff |
24 |
rrdtmp=/tmp/$b-tmp.rrd |
25 |
|
26 |
rrdtool dump $1 > $xmlfile |
27 |
cp -p $xmlfile /tmp/$1 |
28 |
|
29 |
$editor /tmp/$1 |
30 |
|
31 |
diff -uw $xmlfile /tmp/$1 > $rrddiff |
32 |
|
33 |
echo "diff between original file and edited one:" |
34 |
cat $rrddiff |
35 |
|
36 |
faildiff="" |
37 |
failrrd="" |
38 |
echo "trying to apply to all sources" |
39 |
for rrdfile in $@ ; do |
40 |
echo " $rrdfile" |
41 |
rrdtool dump $rrdfile > $xmlfile |
42 |
patch -s -p0 $xmlfile $rrddiff || faildiff="$faildiff $rrdfile" |
43 |
err=`rrdtool restore $xmlfile $rrdtmp 2>&1` |
44 |
rm -f $rrdtmp |
45 |
if [ ! -z "$err" ] ; then |
46 |
failrrd="$failrrd $rrdfile" |
47 |
fi |
48 |
done |
49 |
|
50 |
if [ ! -z "$faildiff" ] ; then |
51 |
echo "can't apply diff on files:$faildiff, aborting!" |
52 |
exit 1 |
53 |
fi |
54 |
|
55 |
if [ ! -z "$failrrd" ] ; then |
56 |
echo "can't restore xml to rrd for files:$failrrd [$err], aborting!" |
57 |
exit 1 |
58 |
fi |
59 |
|
60 |
echo "all files can be converted, doing it for real..." |
61 |
|
62 |
for rrdfile in $@ ; do |
63 |
echo " $rrdfile" |
64 |
rrdtool dump $rrdfile > $xmlfile |
65 |
patch -s -p0 $xmlfile $rrddiff && \ |
66 |
mv $rrdfile ${rrdfile}.bak && \ |
67 |
rrdtool restore $xmlfile $rrdfile |
68 |
done |