Hi Horms, Amazing work :) If nobody objects, I'll apply the patch.
Cheers, Dejan On Thu, Jul 08, 2010 at 03:16:02PM +0900, Simon Horman wrote: > # HG changeset patch > # User Simon Horman <ho...@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 <ho...@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() { > > _______________________________________________ > Pacemaker mailing list: Pacemaker@oss.clusterlabs.org > http://oss.clusterlabs.org/mailman/listinfo/pacemaker > > Project Home: http://www.clusterlabs.org > Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf > Bugs: > http://developerbugs.linux-foundation.org/enter_bug.cgi?product=Pacemaker _______________________________________________ Pacemaker mailing list: Pacemaker@oss.clusterlabs.org http://oss.clusterlabs.org/mailman/listinfo/pacemaker Project Home: http://www.clusterlabs.org Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf Bugs: http://developerbugs.linux-foundation.org/enter_bug.cgi?product=Pacemaker