#!/usr/local/bin/perl # calamaris.cgi # Run calamaris on the squid logfile(s) require './squid-lib.pl'; $access{'calamaris'} || &error($text{'calamaris_ecannot'}); &ui_print_header(undef, $text{'calamaris_title'}, ""); # is calamaris installed? if (!&has_command($config{'calamaris'})) { print &text('calamaris_eprog', "$config{'calamaris'}", "$gconfig{'webprefix'}/config.cgi?$module_name"),"
\n"; &ui_print_footer("", $text{'index_return'}); exit; } # Work out Calamaris version and args if (`$config{'calamaris'} -V 2>&1` =~ /(revision:|Calamaris)\s+(\d\S+)/i) { $ver = $2; } $args = $config{'cal_all'} ? " -a" : ""; if ($ver >= 2.5) { if ($config{'cal_fmt'} eq 'w') { $args .= " -F html"; } else { $args .= " -F mail"; } } else { $args .= " -".$config{'cal_fmt'}; } $args .= " $config{'cal_extra'}"; # are there any logfiles to analyse? $ld = $config{'log_dir'}; opendir(DIR, $ld); while($f = readdir(DIR)) { local @st = stat("$ld/$f"); if ($f =~ /^access.log.*gz$/) { push(@files, [ "gunzip -c $ld/$f |", $st[9] ]); } elsif ($f =~ /^access.log.*Z$/) { push(@files, [ "uncompress -c $ld/$f |", $st[9] ]); } elsif ($f =~ /^access.log/) { push(@files, [ "$ld/$f", $st[9] ]); } } closedir(DIR); if (!@files) { print &text('calamaris_elogs', "$ld", "$gconfig{'webprefix'}/config.cgi?$module_name"),"
\n"; &ui_print_footer("", $text{'index_return'}); exit; } # run calamaris, parsing newest files and records first $temp = &transname(); open(CAL, "| $config{'calamaris'} $args >$temp 2>/dev/null"); if ($config{'cal_max'}) { # read only the last N lines print &text('calamaris_last', $config{'cal_max'}),"
\n";
@files = sort { $b->[1] <=> $a->[1] } @files;
$lnum = 0;
foreach $f (@files) {
$left = $config{'cal_max'} - $lnum;
last if ($left <= 0);
if ($f->[0] =~ /\|$/) {
open(LOG, "$f->[0] tail -$left |");
}
else {
open(LOG, "tail -$left $f->[0] |");
}
while(";
while(
";
}
else {
while(