Ejemplo de CGI-BIN para generar estadísticas desde la DB de contador
#!/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í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;