[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