[Pacemaker] [PATCH 1 of 2] low: Use awk instead of bash to calculate memory and disk sizes
Dejan Muhamedagic
dejanmm at fastmail.fm
Fri Jul 9 13:57:17 UTC 2010
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 <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() {
>
> _______________________________________________
> Pacemaker mailing list: Pacemaker at 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
More information about the Pacemaker
mailing list