#!/usr/local/bin/perl require CGI; my $q = new CGI; if($q->path_info) { $file = $q->path_translated; open(FH, $file) || die "open '$file' $!"; $fh = \*FH; } else { $fh = \*DATA } %ConfigVars = map { $_,1 } qw(Log); %Log = (); read_config($fh); eval { require "Logfile/$Log{Server}.pm" }; die $@ if $@; print $q->header, $q->start_html('HTTPD Log report'); if($q->request_method eq "POST") { generate_log(); } else { print_form(); } print $q->end_html; sub generate_log { my($file,$sort) = map { $q->param($_) || "" } qw(File Sort); my $list = [$q->param('List')]; $sort ||= "Date"; $file ||= $Log{File}; $list = [qw(Host)] unless @$list;; my $log = new Logfile::Apache File => $file, Group => [qw(File Host Domain Date User)]; print "
\n";
    $log->report(Group => "Date", Sort => $sort, 
		 List => $list);
    print "
\n"; } sub print_form { my($method) = @_; my($resp,@html); print $q->startform(-script => $q->script_name), "

HTTPD Log report


\n", "File: ", $q->popup_menu(-name => 'File', -values => [$Log{File}, <$Log{Archive}/*.gz>]), "

List: ", $q->checkbox_group(-name => 'List', -values => [qw(Date File Host Domain User)]), "

Sort by: ", $q->radio_group(-name => 'Sort', -values => [qw(Date File Host Domain User)]), $q->submit('POSTACTION', " OK "), $q->endform; } sub read_config { my($fh) = @_; my($hash,$key,$val); no strict 'refs'; while(<$fh>) { clean(*_); next if /^$/; ($hash,$key,$val) = split; unless(defined $ConfigVars{$hash}) { die "Unknown configuration directive '$hash'"; } $$hash{$key} = $val; } } sub clean { local(*_) = @_; chomp; s/#.*//; s/^\s+//; s/\s+$/ /; } __END__ Log Server Apache Log File /usr/www/80/logs/access_log Log Archive /usr/www/log_archive/1996