[1/2] memory.cgi: Fix memory usage table

Message ID 20210608063719.283-1-hofmann@leo-andres.de
State Accepted
Headers
Series [1/2] memory.cgi: Fix memory usage table |

Commit Message

Leo-Andres Hofmann June 8, 2021, 6:37 a.m. UTC
  procps 3.3.10 introduced a new output format for the "free" command.
This patch adapts the new format.

Fixes: #12628

Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
---
 html/cgi-bin/memory.cgi | 35 ++++++++++++++++-------------------
 langs/de/cgi-bin/de.pl  |  1 +
 langs/en/cgi-bin/en.pl  |  1 +
 3 files changed, 18 insertions(+), 19 deletions(-)
  

Comments

Bernhard Bitsch June 8, 2021, 11:50 a.m. UTC | #1
Applied and tested.

Am 08.06.2021 um 08:37 schrieb Leo-Andres Hofmann:
> procps 3.3.10 introduced a new output format for the "free" command.
> This patch adapts the new format.
> 
> Fixes: #12628
> 
> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
> ---
>   html/cgi-bin/memory.cgi | 35 ++++++++++++++++-------------------
>   langs/de/cgi-bin/de.pl  |  1 +
>   langs/en/cgi-bin/en.pl  |  1 +
>   3 files changed, 18 insertions(+), 19 deletions(-)
> 
> diff --git a/html/cgi-bin/memory.cgi b/html/cgi-bin/memory.cgi
> index 204365294..89fa7d14a 100644
> --- a/html/cgi-bin/memory.cgi
> +++ b/html/cgi-bin/memory.cgi
> @@ -64,7 +64,6 @@ if ( $querry[0] =~ "memory"){
>   	
>   	&Header::openbox('100%', 'center', $Lang::tr{'memory'});
>   	print "<table width='95%' cellspacing='5'>";
> -	my $ram=0;
>   	my $size=0;
>   	my $used=0;
>   	my $free=0;
> @@ -72,10 +71,12 @@ if ( $querry[0] =~ "memory"){
>   	my $shared=0;
>   	my $buffers=0;
>   	my $cached=0;
> +	my $available=0;
>   
> -	open(FREE,'/usr/bin/free |');
> -	while(<FREE>){
> -		if ($_ =~ m/^\s+total\s+used\s+free\s+shared\s+buffers\s+cached$/ ){
> +	# output format: kibibytes, wide mode (buffers and cache in two columns)
> +	open(my $cmd_fh, "-|", '/usr/bin/free -k -w') or die $!;
> +	while(<$cmd_fh>){
> +		if ($_ =~ m/^\s+total\s+used\s+free\s+shared\s+buffers\s+cache\s+available$/ ){
>   			print <<END
>   <tr>
>   <td align='center'>&nbsp;</td>
> @@ -87,13 +88,12 @@ if ( $querry[0] =~ "memory"){
>   END
>   ;
>   		}else{
> -			if ($_ =~ m/^Mem:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/){
> -				($ram,$size,$used,$free,$shared,$buffers,$cached) = ($1,$1,$2,$3,$4,$5,$6);
> +			if ($_ =~ m/^Mem:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/){
> +				($size,$used,$free,$shared,$buffers,$cached,$available) = ($1,$2,$3,$4,$5,$6,$7);
>   				($percent = ($used/$size)*100) =~ s/^(\d+)(\.\d+)?$/$1%/;
>   				print <<END
>   <tr>
>   <td class='boldbase'><b>$Lang::tr{'ram'}</b></td>
> -<td align='center'>$size  KB</td>
>   END
>   ;
>   			}elsif($_ =~ m/^Swap:\s+(\d+)\s+(\d+)\s+(\d+)$/){
> @@ -106,17 +106,13 @@ END
>   				print <<END
>   <tr>
>   <td class='boldbase'><b>$Lang::tr{'swap'}</b></td>
> -<td align='center'>$size  KB</td>
>   END
>   ;
> -			}elsif($ram and $_ =~ m/^-\/\+ buffers\/cache:\s+(\d+)\s+(\d+)$/ ){
> -				($used,$free) = ($1,$2);
> -				($percent = ($used/$ram)*100) =~ s/^(\d+)(\.\d+)?$/$1%/;
> -				print "<tr><td colspan='2' class='boldbase'><b>$Lang::tr{'excluding buffers and cache'}</b></td>";
>   			}
>   			print <<END
> -<td align='center'>$used KB</td>
> -<td align='center'>$free KB</td>
> +<td align='center'>$size KiB</td>
> +<td align='center'>$used KiB</td>
> +<td align='center'>$free KiB</td>
>   <td>
>   END
>   ;
> @@ -129,12 +125,13 @@ END
>   ;
>   		}
>   	}
> -	close FREE;
> +	close($cmd_fh);
>   	print <<END
> -<tr><td class='boldbase' colspan='2'><br /></td></tr>
> -<tr><td class='boldbase'><b>$Lang::tr{'shared'}</b></td><td align='center'>$shared KB</td></tr>
> -<tr><td class='boldbase'><b>$Lang::tr{'buffers'}</b></td><td align='center'>$buffers KB</td></tr>
> -<tr><td class='boldbase'><b>$Lang::tr{'cached'}</b></td><td align='center'>$cached KB</td></tr>
> +<tr><td colspan='6'><br /></td></tr>
> +<tr><td class='boldbase'><b>$Lang::tr{'shared'}</b></td><td align='center'>$shared KiB</td></tr>
> +<tr><td class='boldbase'><b>$Lang::tr{'buffers'}</b></td><td align='center'>$buffers KiB</td></tr>
> +<tr><td class='boldbase'><b>$Lang::tr{'cached'}</b></td><td align='center'>$cached KiB</td></tr>
> +<tr><td class='boldbase'><b>$Lang::tr{'available'}</b></td><td align='center'>$available KiB</td></tr>
>   </table>
>   END
>   ;
> diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl
> index 0bc579cd2..058ec7b07 100644
> --- a/langs/de/cgi-bin/de.pl
> +++ b/langs/de/cgi-bin/de.pl
> @@ -507,6 +507,7 @@
>   'cache management' => 'Cache-Verwaltung',
>   'cache size' => 'Cache-Größe (MB):',
>   'cached' => 'zwischengespeichert',
> +'available' => 'verfügbar',
>   'cached memory' => 'Zwischenspeicher ',
>   'cached swap' => 'Zwischenspeicher (Swap)',
>   'calamaris available reports' => 'Verfügbare Berichte',
> diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl
> index 1c69b3798..942c67f20 100644
> --- a/langs/en/cgi-bin/en.pl
> +++ b/langs/en/cgi-bin/en.pl
> @@ -522,6 +522,7 @@
>   'cache management' => 'Cache management',
>   'cache size' => 'Cache size (MB):',
>   'cached' => 'cached',
> +'available' => 'available',
>   'cached memory' => 'Cached Memory  ',
>   'cached swap' => 'Cached Swap',
>   'calamaris available reports' => 'Available reports',
>
  
Michael Tremer June 8, 2021, 4:47 p.m. UTC | #2
Hello,

Bernhard, you should use this tag then to get your credit:

Tested-by: Bernhard Bitsch <bbitsch@ipfire.org>

Patchwork will add this to the Git commit.

Best,
-Michael

> On 8 Jun 2021, at 12:50, Bernhard Bitsch <bbitsch@ipfire.org> wrote:
> 
> Applied and tested.
> 
> Am 08.06.2021 um 08:37 schrieb Leo-Andres Hofmann:
>> procps 3.3.10 introduced a new output format for the "free" command.
>> This patch adapts the new format.
>> Fixes: #12628
>> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
>> ---
>>  html/cgi-bin/memory.cgi | 35 ++++++++++++++++-------------------
>>  langs/de/cgi-bin/de.pl  |  1 +
>>  langs/en/cgi-bin/en.pl  |  1 +
>>  3 files changed, 18 insertions(+), 19 deletions(-)
>> diff --git a/html/cgi-bin/memory.cgi b/html/cgi-bin/memory.cgi
>> index 204365294..89fa7d14a 100644
>> --- a/html/cgi-bin/memory.cgi
>> +++ b/html/cgi-bin/memory.cgi
>> @@ -64,7 +64,6 @@ if ( $querry[0] =~ "memory"){
>>  	
>>  	&Header::openbox('100%', 'center', $Lang::tr{'memory'});
>>  	print "<table width='95%' cellspacing='5'>";
>> -	my $ram=0;
>>  	my $size=0;
>>  	my $used=0;
>>  	my $free=0;
>> @@ -72,10 +71,12 @@ if ( $querry[0] =~ "memory"){
>>  	my $shared=0;
>>  	my $buffers=0;
>>  	my $cached=0;
>> +	my $available=0;
>>  -	open(FREE,'/usr/bin/free |');
>> -	while(<FREE>){
>> -		if ($_ =~ m/^\s+total\s+used\s+free\s+shared\s+buffers\s+cached$/ ){
>> +	# output format: kibibytes, wide mode (buffers and cache in two columns)
>> +	open(my $cmd_fh, "-|", '/usr/bin/free -k -w') or die $!;
>> +	while(<$cmd_fh>){
>> +		if ($_ =~ m/^\s+total\s+used\s+free\s+shared\s+buffers\s+cache\s+available$/ ){
>>  			print <<END
>>  <tr>
>>  <td align='center'>&nbsp;</td>
>> @@ -87,13 +88,12 @@ if ( $querry[0] =~ "memory"){
>>  END
>>  ;
>>  		}else{
>> -			if ($_ =~ m/^Mem:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/){
>> -				($ram,$size,$used,$free,$shared,$buffers,$cached) = ($1,$1,$2,$3,$4,$5,$6);
>> +			if ($_ =~ m/^Mem:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/){
>> +				($size,$used,$free,$shared,$buffers,$cached,$available) = ($1,$2,$3,$4,$5,$6,$7);
>>  				($percent = ($used/$size)*100) =~ s/^(\d+)(\.\d+)?$/$1%/;
>>  				print <<END
>>  <tr>
>>  <td class='boldbase'><b>$Lang::tr{'ram'}</b></td>
>> -<td align='center'>$size  KB</td>
>>  END
>>  ;
>>  			}elsif($_ =~ m/^Swap:\s+(\d+)\s+(\d+)\s+(\d+)$/){
>> @@ -106,17 +106,13 @@ END
>>  				print <<END
>>  <tr>
>>  <td class='boldbase'><b>$Lang::tr{'swap'}</b></td>
>> -<td align='center'>$size  KB</td>
>>  END
>>  ;
>> -			}elsif($ram and $_ =~ m/^-\/\+ buffers\/cache:\s+(\d+)\s+(\d+)$/ ){
>> -				($used,$free) = ($1,$2);
>> -				($percent = ($used/$ram)*100) =~ s/^(\d+)(\.\d+)?$/$1%/;
>> -				print "<tr><td colspan='2' class='boldbase'><b>$Lang::tr{'excluding buffers and cache'}</b></td>";
>>  			}
>>  			print <<END
>> -<td align='center'>$used KB</td>
>> -<td align='center'>$free KB</td>
>> +<td align='center'>$size KiB</td>
>> +<td align='center'>$used KiB</td>
>> +<td align='center'>$free KiB</td>
>>  <td>
>>  END
>>  ;
>> @@ -129,12 +125,13 @@ END
>>  ;
>>  		}
>>  	}
>> -	close FREE;
>> +	close($cmd_fh);
>>  	print <<END
>> -<tr><td class='boldbase' colspan='2'><br /></td></tr>
>> -<tr><td class='boldbase'><b>$Lang::tr{'shared'}</b></td><td align='center'>$shared KB</td></tr>
>> -<tr><td class='boldbase'><b>$Lang::tr{'buffers'}</b></td><td align='center'>$buffers KB</td></tr>
>> -<tr><td class='boldbase'><b>$Lang::tr{'cached'}</b></td><td align='center'>$cached KB</td></tr>
>> +<tr><td colspan='6'><br /></td></tr>
>> +<tr><td class='boldbase'><b>$Lang::tr{'shared'}</b></td><td align='center'>$shared KiB</td></tr>
>> +<tr><td class='boldbase'><b>$Lang::tr{'buffers'}</b></td><td align='center'>$buffers KiB</td></tr>
>> +<tr><td class='boldbase'><b>$Lang::tr{'cached'}</b></td><td align='center'>$cached KiB</td></tr>
>> +<tr><td class='boldbase'><b>$Lang::tr{'available'}</b></td><td align='center'>$available KiB</td></tr>
>>  </table>
>>  END
>>  ;
>> diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl
>> index 0bc579cd2..058ec7b07 100644
>> --- a/langs/de/cgi-bin/de.pl
>> +++ b/langs/de/cgi-bin/de.pl
>> @@ -507,6 +507,7 @@
>>  'cache management' => 'Cache-Verwaltung',
>>  'cache size' => 'Cache-Größe (MB):',
>>  'cached' => 'zwischengespeichert',
>> +'available' => 'verfügbar',
>>  'cached memory' => 'Zwischenspeicher ',
>>  'cached swap' => 'Zwischenspeicher (Swap)',
>>  'calamaris available reports' => 'Verfügbare Berichte',
>> diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl
>> index 1c69b3798..942c67f20 100644
>> --- a/langs/en/cgi-bin/en.pl
>> +++ b/langs/en/cgi-bin/en.pl
>> @@ -522,6 +522,7 @@
>>  'cache management' => 'Cache management',
>>  'cache size' => 'Cache size (MB):',
>>  'cached' => 'cached',
>> +'available' => 'available',
>>  'cached memory' => 'Cached Memory  ',
>>  'cached swap' => 'Cached Swap',
>>  'calamaris available reports' => 'Available reports',
  
Bernhard Bitsch June 9, 2021, 9:25 p.m. UTC | #3
Tested-by: Bernhard Bitsch <bbitsch@ipfire.org>

Am 08.06.2021 um 08:37 schrieb Leo-Andres Hofmann:
> procps 3.3.10 introduced a new output format for the "free" command.
> This patch adapts the new format.
> 
> Fixes: #12628
> 
> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
> ---
>   html/cgi-bin/memory.cgi | 35 ++++++++++++++++-------------------
>   langs/de/cgi-bin/de.pl  |  1 +
>   langs/en/cgi-bin/en.pl  |  1 +
>   3 files changed, 18 insertions(+), 19 deletions(-)
> 
> diff --git a/html/cgi-bin/memory.cgi b/html/cgi-bin/memory.cgi
> index 204365294..89fa7d14a 100644
> --- a/html/cgi-bin/memory.cgi
> +++ b/html/cgi-bin/memory.cgi
> @@ -64,7 +64,6 @@ if ( $querry[0] =~ "memory"){
>   	
>   	&Header::openbox('100%', 'center', $Lang::tr{'memory'});
>   	print "<table width='95%' cellspacing='5'>";
> -	my $ram=0;
>   	my $size=0;
>   	my $used=0;
>   	my $free=0;
> @@ -72,10 +71,12 @@ if ( $querry[0] =~ "memory"){
>   	my $shared=0;
>   	my $buffers=0;
>   	my $cached=0;
> +	my $available=0;
>   
> -	open(FREE,'/usr/bin/free |');
> -	while(<FREE>){
> -		if ($_ =~ m/^\s+total\s+used\s+free\s+shared\s+buffers\s+cached$/ ){
> +	# output format: kibibytes, wide mode (buffers and cache in two columns)
> +	open(my $cmd_fh, "-|", '/usr/bin/free -k -w') or die $!;
> +	while(<$cmd_fh>){
> +		if ($_ =~ m/^\s+total\s+used\s+free\s+shared\s+buffers\s+cache\s+available$/ ){
>   			print <<END
>   <tr>
>   <td align='center'>&nbsp;</td>
> @@ -87,13 +88,12 @@ if ( $querry[0] =~ "memory"){
>   END
>   ;
>   		}else{
> -			if ($_ =~ m/^Mem:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/){
> -				($ram,$size,$used,$free,$shared,$buffers,$cached) = ($1,$1,$2,$3,$4,$5,$6);
> +			if ($_ =~ m/^Mem:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/){
> +				($size,$used,$free,$shared,$buffers,$cached,$available) = ($1,$2,$3,$4,$5,$6,$7);
>   				($percent = ($used/$size)*100) =~ s/^(\d+)(\.\d+)?$/$1%/;
>   				print <<END
>   <tr>
>   <td class='boldbase'><b>$Lang::tr{'ram'}</b></td>
> -<td align='center'>$size  KB</td>
>   END
>   ;
>   			}elsif($_ =~ m/^Swap:\s+(\d+)\s+(\d+)\s+(\d+)$/){
> @@ -106,17 +106,13 @@ END
>   				print <<END
>   <tr>
>   <td class='boldbase'><b>$Lang::tr{'swap'}</b></td>
> -<td align='center'>$size  KB</td>
>   END
>   ;
> -			}elsif($ram and $_ =~ m/^-\/\+ buffers\/cache:\s+(\d+)\s+(\d+)$/ ){
> -				($used,$free) = ($1,$2);
> -				($percent = ($used/$ram)*100) =~ s/^(\d+)(\.\d+)?$/$1%/;
> -				print "<tr><td colspan='2' class='boldbase'><b>$Lang::tr{'excluding buffers and cache'}</b></td>";
>   			}
>   			print <<END
> -<td align='center'>$used KB</td>
> -<td align='center'>$free KB</td>
> +<td align='center'>$size KiB</td>
> +<td align='center'>$used KiB</td>
> +<td align='center'>$free KiB</td>
>   <td>
>   END
>   ;
> @@ -129,12 +125,13 @@ END
>   ;
>   		}
>   	}
> -	close FREE;
> +	close($cmd_fh);
>   	print <<END
> -<tr><td class='boldbase' colspan='2'><br /></td></tr>
> -<tr><td class='boldbase'><b>$Lang::tr{'shared'}</b></td><td align='center'>$shared KB</td></tr>
> -<tr><td class='boldbase'><b>$Lang::tr{'buffers'}</b></td><td align='center'>$buffers KB</td></tr>
> -<tr><td class='boldbase'><b>$Lang::tr{'cached'}</b></td><td align='center'>$cached KB</td></tr>
> +<tr><td colspan='6'><br /></td></tr>
> +<tr><td class='boldbase'><b>$Lang::tr{'shared'}</b></td><td align='center'>$shared KiB</td></tr>
> +<tr><td class='boldbase'><b>$Lang::tr{'buffers'}</b></td><td align='center'>$buffers KiB</td></tr>
> +<tr><td class='boldbase'><b>$Lang::tr{'cached'}</b></td><td align='center'>$cached KiB</td></tr>
> +<tr><td class='boldbase'><b>$Lang::tr{'available'}</b></td><td align='center'>$available KiB</td></tr>
>   </table>
>   END
>   ;
> diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl
> index 0bc579cd2..058ec7b07 100644
> --- a/langs/de/cgi-bin/de.pl
> +++ b/langs/de/cgi-bin/de.pl
> @@ -507,6 +507,7 @@
>   'cache management' => 'Cache-Verwaltung',
>   'cache size' => 'Cache-Größe (MB):',
>   'cached' => 'zwischengespeichert',
> +'available' => 'verfügbar',
>   'cached memory' => 'Zwischenspeicher ',
>   'cached swap' => 'Zwischenspeicher (Swap)',
>   'calamaris available reports' => 'Verfügbare Berichte',
> diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl
> index 1c69b3798..942c67f20 100644
> --- a/langs/en/cgi-bin/en.pl
> +++ b/langs/en/cgi-bin/en.pl
> @@ -522,6 +522,7 @@
>   'cache management' => 'Cache management',
>   'cache size' => 'Cache size (MB):',
>   'cached' => 'cached',
> +'available' => 'available',
>   'cached memory' => 'Cached Memory  ',
>   'cached swap' => 'Cached Swap',
>   'calamaris available reports' => 'Available reports',
>
  
Michael Tremer June 10, 2021, 9:10 a.m. UTC | #4
*thumbs up*

> On 9 Jun 2021, at 22:25, Bernhard Bitsch <bbitsch@ipfire.org> wrote:
> 
> Tested-by: Bernhard Bitsch <bbitsch@ipfire.org>
> 
> Am 08.06.2021 um 08:37 schrieb Leo-Andres Hofmann:
>> procps 3.3.10 introduced a new output format for the "free" command.
>> This patch adapts the new format.
>> Fixes: #12628
>> Signed-off-by: Leo-Andres Hofmann <hofmann@leo-andres.de>
>> ---
>>  html/cgi-bin/memory.cgi | 35 ++++++++++++++++-------------------
>>  langs/de/cgi-bin/de.pl  |  1 +
>>  langs/en/cgi-bin/en.pl  |  1 +
>>  3 files changed, 18 insertions(+), 19 deletions(-)
>> diff --git a/html/cgi-bin/memory.cgi b/html/cgi-bin/memory.cgi
>> index 204365294..89fa7d14a 100644
>> --- a/html/cgi-bin/memory.cgi
>> +++ b/html/cgi-bin/memory.cgi
>> @@ -64,7 +64,6 @@ if ( $querry[0] =~ "memory"){
>>  	
>>  	&Header::openbox('100%', 'center', $Lang::tr{'memory'});
>>  	print "<table width='95%' cellspacing='5'>";
>> -	my $ram=0;
>>  	my $size=0;
>>  	my $used=0;
>>  	my $free=0;
>> @@ -72,10 +71,12 @@ if ( $querry[0] =~ "memory"){
>>  	my $shared=0;
>>  	my $buffers=0;
>>  	my $cached=0;
>> +	my $available=0;
>>  -	open(FREE,'/usr/bin/free |');
>> -	while(<FREE>){
>> -		if ($_ =~ m/^\s+total\s+used\s+free\s+shared\s+buffers\s+cached$/ ){
>> +	# output format: kibibytes, wide mode (buffers and cache in two columns)
>> +	open(my $cmd_fh, "-|", '/usr/bin/free -k -w') or die $!;
>> +	while(<$cmd_fh>){
>> +		if ($_ =~ m/^\s+total\s+used\s+free\s+shared\s+buffers\s+cache\s+available$/ ){
>>  			print <<END
>>  <tr>
>>  <td align='center'>&nbsp;</td>
>> @@ -87,13 +88,12 @@ if ( $querry[0] =~ "memory"){
>>  END
>>  ;
>>  		}else{
>> -			if ($_ =~ m/^Mem:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/){
>> -				($ram,$size,$used,$free,$shared,$buffers,$cached) = ($1,$1,$2,$3,$4,$5,$6);
>> +			if ($_ =~ m/^Mem:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/){
>> +				($size,$used,$free,$shared,$buffers,$cached,$available) = ($1,$2,$3,$4,$5,$6,$7);
>>  				($percent = ($used/$size)*100) =~ s/^(\d+)(\.\d+)?$/$1%/;
>>  				print <<END
>>  <tr>
>>  <td class='boldbase'><b>$Lang::tr{'ram'}</b></td>
>> -<td align='center'>$size  KB</td>
>>  END
>>  ;
>>  			}elsif($_ =~ m/^Swap:\s+(\d+)\s+(\d+)\s+(\d+)$/){
>> @@ -106,17 +106,13 @@ END
>>  				print <<END
>>  <tr>
>>  <td class='boldbase'><b>$Lang::tr{'swap'}</b></td>
>> -<td align='center'>$size  KB</td>
>>  END
>>  ;
>> -			}elsif($ram and $_ =~ m/^-\/\+ buffers\/cache:\s+(\d+)\s+(\d+)$/ ){
>> -				($used,$free) = ($1,$2);
>> -				($percent = ($used/$ram)*100) =~ s/^(\d+)(\.\d+)?$/$1%/;
>> -				print "<tr><td colspan='2' class='boldbase'><b>$Lang::tr{'excluding buffers and cache'}</b></td>";
>>  			}
>>  			print <<END
>> -<td align='center'>$used KB</td>
>> -<td align='center'>$free KB</td>
>> +<td align='center'>$size KiB</td>
>> +<td align='center'>$used KiB</td>
>> +<td align='center'>$free KiB</td>
>>  <td>
>>  END
>>  ;
>> @@ -129,12 +125,13 @@ END
>>  ;
>>  		}
>>  	}
>> -	close FREE;
>> +	close($cmd_fh);
>>  	print <<END
>> -<tr><td class='boldbase' colspan='2'><br /></td></tr>
>> -<tr><td class='boldbase'><b>$Lang::tr{'shared'}</b></td><td align='center'>$shared KB</td></tr>
>> -<tr><td class='boldbase'><b>$Lang::tr{'buffers'}</b></td><td align='center'>$buffers KB</td></tr>
>> -<tr><td class='boldbase'><b>$Lang::tr{'cached'}</b></td><td align='center'>$cached KB</td></tr>
>> +<tr><td colspan='6'><br /></td></tr>
>> +<tr><td class='boldbase'><b>$Lang::tr{'shared'}</b></td><td align='center'>$shared KiB</td></tr>
>> +<tr><td class='boldbase'><b>$Lang::tr{'buffers'}</b></td><td align='center'>$buffers KiB</td></tr>
>> +<tr><td class='boldbase'><b>$Lang::tr{'cached'}</b></td><td align='center'>$cached KiB</td></tr>
>> +<tr><td class='boldbase'><b>$Lang::tr{'available'}</b></td><td align='center'>$available KiB</td></tr>
>>  </table>
>>  END
>>  ;
>> diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl
>> index 0bc579cd2..058ec7b07 100644
>> --- a/langs/de/cgi-bin/de.pl
>> +++ b/langs/de/cgi-bin/de.pl
>> @@ -507,6 +507,7 @@
>>  'cache management' => 'Cache-Verwaltung',
>>  'cache size' => 'Cache-Größe (MB):',
>>  'cached' => 'zwischengespeichert',
>> +'available' => 'verfügbar',
>>  'cached memory' => 'Zwischenspeicher ',
>>  'cached swap' => 'Zwischenspeicher (Swap)',
>>  'calamaris available reports' => 'Verfügbare Berichte',
>> diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl
>> index 1c69b3798..942c67f20 100644
>> --- a/langs/en/cgi-bin/en.pl
>> +++ b/langs/en/cgi-bin/en.pl
>> @@ -522,6 +522,7 @@
>>  'cache management' => 'Cache management',
>>  'cache size' => 'Cache size (MB):',
>>  'cached' => 'cached',
>> +'available' => 'available',
>>  'cached memory' => 'Cached Memory  ',
>>  'cached swap' => 'Cached Swap',
>>  'calamaris available reports' => 'Available reports',
  

Patch

diff --git a/html/cgi-bin/memory.cgi b/html/cgi-bin/memory.cgi
index 204365294..89fa7d14a 100644
--- a/html/cgi-bin/memory.cgi
+++ b/html/cgi-bin/memory.cgi
@@ -64,7 +64,6 @@  if ( $querry[0] =~ "memory"){
 	
 	&Header::openbox('100%', 'center', $Lang::tr{'memory'});
 	print "<table width='95%' cellspacing='5'>";
-	my $ram=0;
 	my $size=0;
 	my $used=0;
 	my $free=0;
@@ -72,10 +71,12 @@  if ( $querry[0] =~ "memory"){
 	my $shared=0;
 	my $buffers=0;
 	my $cached=0;
+	my $available=0;
 
-	open(FREE,'/usr/bin/free |');
-	while(<FREE>){
-		if ($_ =~ m/^\s+total\s+used\s+free\s+shared\s+buffers\s+cached$/ ){
+	# output format: kibibytes, wide mode (buffers and cache in two columns)
+	open(my $cmd_fh, "-|", '/usr/bin/free -k -w') or die $!;
+	while(<$cmd_fh>){
+		if ($_ =~ m/^\s+total\s+used\s+free\s+shared\s+buffers\s+cache\s+available$/ ){
 			print <<END
 <tr>
 <td align='center'>&nbsp;</td>
@@ -87,13 +88,12 @@  if ( $querry[0] =~ "memory"){
 END
 ;
 		}else{
-			if ($_ =~ m/^Mem:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/){
-				($ram,$size,$used,$free,$shared,$buffers,$cached) = ($1,$1,$2,$3,$4,$5,$6);
+			if ($_ =~ m/^Mem:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/){
+				($size,$used,$free,$shared,$buffers,$cached,$available) = ($1,$2,$3,$4,$5,$6,$7);
 				($percent = ($used/$size)*100) =~ s/^(\d+)(\.\d+)?$/$1%/;
 				print <<END
 <tr>
 <td class='boldbase'><b>$Lang::tr{'ram'}</b></td>
-<td align='center'>$size  KB</td>
 END
 ;
 			}elsif($_ =~ m/^Swap:\s+(\d+)\s+(\d+)\s+(\d+)$/){
@@ -106,17 +106,13 @@  END
 				print <<END
 <tr>
 <td class='boldbase'><b>$Lang::tr{'swap'}</b></td>
-<td align='center'>$size  KB</td>
 END
 ;
-			}elsif($ram and $_ =~ m/^-\/\+ buffers\/cache:\s+(\d+)\s+(\d+)$/ ){
-				($used,$free) = ($1,$2);
-				($percent = ($used/$ram)*100) =~ s/^(\d+)(\.\d+)?$/$1%/;
-				print "<tr><td colspan='2' class='boldbase'><b>$Lang::tr{'excluding buffers and cache'}</b></td>";
 			}
 			print <<END
-<td align='center'>$used KB</td>
-<td align='center'>$free KB</td>
+<td align='center'>$size KiB</td>
+<td align='center'>$used KiB</td>
+<td align='center'>$free KiB</td>
 <td>
 END
 ;
@@ -129,12 +125,13 @@  END
 ;
 		}
 	}
-	close FREE;
+	close($cmd_fh);
 	print <<END
-<tr><td class='boldbase' colspan='2'><br /></td></tr>
-<tr><td class='boldbase'><b>$Lang::tr{'shared'}</b></td><td align='center'>$shared KB</td></tr>
-<tr><td class='boldbase'><b>$Lang::tr{'buffers'}</b></td><td align='center'>$buffers KB</td></tr>
-<tr><td class='boldbase'><b>$Lang::tr{'cached'}</b></td><td align='center'>$cached KB</td></tr>
+<tr><td colspan='6'><br /></td></tr>
+<tr><td class='boldbase'><b>$Lang::tr{'shared'}</b></td><td align='center'>$shared KiB</td></tr>
+<tr><td class='boldbase'><b>$Lang::tr{'buffers'}</b></td><td align='center'>$buffers KiB</td></tr>
+<tr><td class='boldbase'><b>$Lang::tr{'cached'}</b></td><td align='center'>$cached KiB</td></tr>
+<tr><td class='boldbase'><b>$Lang::tr{'available'}</b></td><td align='center'>$available KiB</td></tr>
 </table>
 END
 ;
diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl
index 0bc579cd2..058ec7b07 100644
--- a/langs/de/cgi-bin/de.pl
+++ b/langs/de/cgi-bin/de.pl
@@ -507,6 +507,7 @@ 
 'cache management' => 'Cache-Verwaltung',
 'cache size' => 'Cache-Größe (MB):',
 'cached' => 'zwischengespeichert',
+'available' => 'verfügbar',
 'cached memory' => 'Zwischenspeicher ',
 'cached swap' => 'Zwischenspeicher (Swap)',
 'calamaris available reports' => 'Verfügbare Berichte',
diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl
index 1c69b3798..942c67f20 100644
--- a/langs/en/cgi-bin/en.pl
+++ b/langs/en/cgi-bin/en.pl
@@ -522,6 +522,7 @@ 
 'cache management' => 'Cache management',
 'cache size' => 'Cache size (MB):',
 'cached' => 'cached',
+'available' => 'available',
 'cached memory' => 'Cached Memory  ',
 'cached swap' => 'Cached Swap',
 'calamaris available reports' => 'Available reports',