[Pacemaker] [PATCH 1 of 2] low: Use awk instead of bash to calculate memory and disk sizes
Simon Horman
horms at verge.net.au
Thu Jul 8 06:16:02 UTC 2010
# HG changeset patch
# User Simon Horman <horms at verge.net.au>
# Date 1278569160 -32400
# Node ID 110d056193472fa64ffabd3069d5ed20d32b01c2
# Parent e823bf55e0d875bcd9dc1668f24547345b9bdf81
low: Use awk instead of bash to calculate memory and disk sizes
The initial motivation for this work was to remove bashisms.
However it also simplifies the code and fixes some correctness issues.
Signed-off-by: Simon Horman <horms at verge.net.au>
diff -r e823bf55e0d8 -r 110d05619347 extra/resources/SysInfo
--- a/extra/resources/SysInfo Mon Jul 05 17:17:24 2010 +0900
+++ b/extra/resources/SysInfo Thu Jul 08 15:06:00 2010 +0900
@@ -185,6 +185,17 @@
fi
}
+SysInfo_megabytes() {
+ # Size in megabytes
+ echo $1 | awk '{ n = $0;
+ sub(/[0-9]+(.[0-9]+)?/, "");
+ split(n, a, $0);
+ n=a[1];
+ if ($0 == "G" || $0 == "") { n *= 1024 };
+ if (/^kB?/) { n /= 1024 };
+ printf "%d\n", n }' # Intentionaly round to an integer
+}
+
SysInfo_mem_units() {
mem=$1
@@ -192,92 +203,20 @@
return
fi
- memlen=`expr ${#mem} - 1`
- memlen_alt=`expr ${#mem} - 2`
- if [ ${mem:$memlen:1} = "G" ]; then
- mem="${mem:0:$memlen}"
- if [ $mem != ${mem/./} ]; then
- mem_before=${mem/.*/}
- mem_after=${mem/*./}
- mem=$[mem_before*1024]
- if [ ${#mem_after} = 0 ]; then
- :
- elif [ ${#mem_after} = 1 ]; then
- mem=$[mem+100*$mem_after]
- elif [ ${#mem_after} = 2 ]; then
- mem=$[mem+10*$mem_after]
- elif [ ${#mem_after} = 3 ]; then
- mem=$[mem+$mem_after]
- else
- mem_after=${mem_after:0:3}
- mem=$[mem+$mem_after]
- fi
- fi
- elif [ ${mem:$memlen:1} = "M" ]; then
- mem=${mem/.*/}
- mem="${mem:0:$memlen}"
- elif [ ${mem:$memlen:1} = "k" ]; then
- mem="${mem:0:$memlen}"
- mem=${mem/.*/}
- mem=`expr $mem / 1024`
- elif [ ${mem:$memlen_alt:2} = "kB" ]; then
- mem="${mem:0:$memlen_alt}"
- mem=${mem/.*/}
- mem=`expr $mem / 1024`
- elif [ ${mem:$memlen_alt:2} = "Mb" ]; then
- mem="${mem:0:$memlen_alt}"
- mem=${mem/.*/}
- elif [ ${mem:$memlen_alt:2} = "MB" ]; then
- mem="${mem:0:$memlen_alt}"
- mem=${mem/.*/}
+ mem=$(SysInfo_megabytes "$1")
+
+ # Round to the next multiple of 50
+ r=$(($mem % 50))
+ if [ $r != 0 ]; then
+ mem=$(($mem + 50 - $r))
fi
- # Round to the next multiple of 50
- memlen=`expr ${#mem} - 2`
- mem_round="${mem:$memlen:2}"
- if [ x$mem_round = x ]; then
- :
- elif [ $mem_round = "00" ]; then
- :
- elif [ $mem_round -lt "50" ]; then
- mem=$[mem+50]
- mem=$[mem-$mem_round]
-
- else
- mem=$[mem+100]
- mem=$[mem-$mem_round]
- fi
echo $mem
}
SysInfo_hdd_units() {
- disk=$1
- disklen=`expr ${#disk} - 1`
- disklen_alt=`expr ${#disk} - 2`
- if [ ${disk:$disklen:1} = "G" ]; then
- disk="${disk:0:$disklen}"
- elif [ ${disk:$disklen:1} = "M" ]; then
- disk="${disk:0:$disklen}"
- disk=${disk/.*/}
- disk=`expr $disk / 1024`
- elif [ ${disk:$disklen:1} = "k" ]; then
- disk="${disk:0:$disklen}"
- disk=${disk/.*/}
- disk=`expr $disk / 1048576`
- elif [ ${disk:$disklen_alt:2} = "kB" ]; then
- disk="${disk:0:$disklen_alt}"
- disk=${disk/.*/}
- disk=`expr $disk / 1048576`
- elif [ ${disk:$disklen_alt:2} = "Mb" ]; then
- disk="${disk:0:$disklen_alt}"
- disk=${disk/.*/}
- disk=`expr $disk / 1024`
- elif [ ${disk:$disklen_alt:2} = "MB" ]; then
- disk="${disk:0:$disklen_alt}"
- disk=${disk/.*/}
- disk=`expr $disk / 1024`
- fi
- echo $disk
+ # Size in gigabytes
+ echo $(($(SysInfo_megabytes "$1") / 1024))
}
SysInfo_usage() {
More information about the Pacemaker
mailing list