#!/usr/bin/perl

=head1 NAME
  GraphLog - summary graph of apache log lines.

=head1 SYNOPSIS
  GraphLog [pat].. [file]..

=head1 DESCRIPTION

=head1 OPTIONS

=head1 EXAMPLES

=head1 FILES

=head1 BUGS

=head1 SEE ALSO

=head1 AUTHOR
  John Chambers <jc@trillian.mit.edu>
=cut


$| = 1;
$exitstat = 0;
%Mon2M = ('Jan',1,'Feb',2,'Mar',3,'Apr',4,'May',5,'Jun',6,'Jul',7,'Aug',8,'Sep',9,'Oct',10,'Nov',11,'Dec',12);
@G = ('#','*','=','+',':');

for $a (@ARGV) {
	if (-f $a) {
		push @file, $a;
	} else {
		push @pat, $a;
	}
}
unless (@pat) {
	push @pat, '/~jc/';
	push @pat, 'jc/music/abc/FindTune';
	push @pat, 'jc/cgi/abc/FindTune';
}

for $f (@file) {
	++$files;
	if (open(STDIN,$f)) {
		&onefile();
	}
}
unless ($files > 0) {
	&onefile();
}

for $k (sort keys %Match) {
	if (($Y,$M,$D,$P) = ($k =~ m"(\d+)/(\d+)/(\d+):(\d+)")) {
		$n = $Match{$k};
		$g = ($G[$P] || '*') x (($n + 9) / 10);
		$l = sprintf("$k %5d",$n);
		print "$l $g\n";
	}
}

exit $exitstat;


# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub onefile {
	local($line,$n,$p);
	while ($line = <>) {
		for ($n = 0; $n <= $#pat; $n ++) {
			if ($p = $pat[$n]) {
				if ($line =~ m"$p") {
					if (($d,$M,$Y,$h,$m,$s) = ($line =~ m"\[(\d+)/(\w+)/(\d+):(\d+):(\d+)")) {
						$M = $Mon2M{$M} || 0;
						$YMD = sprintf("%04d/%02d/%02d:$n",$Y,$M,$d);
						++$Match{$YMD};
					}
				}
			}
		}
	}
}

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
