#!/usr/bin/perl -w

use strict;

use BerkeleyDB;

my (%tabla,@tabla);
my ($nombre,$valor);

sub PintaLinea
{
  my ($mens,$valor)=@_;
  print "<tr><td>$mens</td><td align=right>$valor</td></tr>\n";
}

print <<EOH;
Content-Type: Text/HTML

  <html>
  <head>
    <title>Estadisticas del antivirus CLAM, Universitat de Valencia</title>
  </head>
  <body>
  <h1>Estad&iacute;sticas del antivirus CLAM</h1>
EOH

# Le indica al contadord que salve AHORA los contadores
open (FIFIFO,">/var/run/clamav/contador.fifo") or die;
print FIFIFO "SYNC\n";
close FIFIFO;

# Es lamentable, pero el "use BerkeleyDB"+tie es MUCHO más lento :-(

my $FIDB="/usr/local/etc/contador.db";
tie %tabla,  'BerkeleyDB::Hash', 
               -Filename => $FIDB,
                 or die "***Imposible abrir $FIDB: $BerkeleyDB::Error\n";
                 
for ( sort { $tabla{$b} <=> $tabla{$a} } keys %tabla ) {
  my $nombre=$_;
  my $valor=$tabla{$nombre};
  if ($nombre eq "inicio" or
      $nombre eq "mensajes" or
      $nombre eq "virus" or
      $nombre eq "enviados" or
      $nombre eq "descartados" or
      $nombre eq "arranques" ) { next; }
  else {
    push @tabla,"$nombre:$valor";
    }
  }
print "<p>";
if (defined $tabla{inicio} ) {
  PintaLinea ("Inicio de la Estadistica: ", $tabla{inicio} ); 
  }
print "</p><table>";

my $porcen=sprintf "%2.1f",($tabla{virus}*100)/$tabla{mensajes};

PintaLinea ("Mensajes Procesados", $tabla{mensajes}); 
PintaLinea ("Mensajes con virus",  "$tabla{virus} <td>($porcen%)</td>" ); 
PintaLinea ("... limpiados", $tabla{enviados}); 
PintaLinea ("... descartados", $tabla{descartados}); 
PintaLinea ("Arranques Milter", $tabla{arranques}); 
  
print "</table><h2>-----------</h2>\n<table>"; 

for (@tabla) {
  ($nombre,$valor)=split ':';
  PintaLinea ($nombre, $valor);
  }
  
print <<EOH;
  </table>
  </body>
  </html>
EOH
  
untie %tabla;

  
