#!/usr/bin/perl use File::Map qw(:map :constants); use strict; use warnings; use Date::Parse; use POSIX qw(strftime); my $file = shift; map_file(my $map, $file); my %h; my $re = qr/(?-xism:\[((?:\S+)\s+(?:\S+)\s+(?:\d+)\s+(?:\S+)\s+(?:\d{4}))\]\s+(?:\[(?:\w+)\])?).*(Timeout.*)/; $h{$1}++ while $map =~ m{$re}g; my $INTERVAL = 600; my %blarg; my $offset = 300; foreach my $date (keys %h) { my $key = ( ( ( int( (str2time($date) - $offset ) / $INTERVAL ) + ( ( str2time($date) - $offset ) % $INTERVAL ? 1 : 0 ) ) ) * $INTERVAL ) + $offset; $blarg{$key}++; } my ($first) = (sort keys %blarg)[0]; my $window = $first; while($window < time) { my $now_string = strftime "%e, %I:%M:%S %p", localtime($window); print "$now_string, " . ($blarg{$window} ? $blarg{$window} : 0) . "\n"; $window += $INTERVAL; }