use strict;
use warnings;
use DateMunge;
my @messages = (
qq{The lunatics have taken over the asylum\n},
qq{Chickens have got into the server\n},
qq{All your data is gone\n},
qq{The disk drive just wants you to know it is fine\n},
qq{Random message\n},
qq{This message is intentionally blank\n});
my $start = 1150000000;
for (1 .. 29301)
{
my $message = $messages[rand @messages];
print dateStr(qq{%O.%T $message}, $start);
unless ($_ % 23)
{
for (1 .. int(rand 10) + 10)
{
$message = $messages[rand @messages];
print dateStr(qq{%O.%T $message}, $start);
}
}
$start += int rand 50;
}
####
use strict;
use warnings;
use Tie::File;
use Fcntl q{O_RDONLY};
my $logFile = q{spw586856.log};
tie my @logLines, q{Tie::File}, $logFile,
mode => O_RDONLY,
autochomp => 0,
or die qq{tie: $logFile: $!\n};
my $threshhold = q{2006-06-19.11:47:25};
my $threshholdIdx = -1;
my $firstIdx = 0;
my $lastIdx = $#logLines;
if ($threshhold lt getDate($logLines[0]))
{
die qq{Threshhold date before range in $logFile\n};
}
elsif ($threshhold gt getDate($logLines[-1]))
{
die qq{Threshhold date after range in $logFile\n};
}
BIN_CHOP:
while (1)
{
if ($threshhold eq getDate($logLines[$firstIdx]))
{
$threshholdIdx = $firstIdx;
last BIN_CHOP;
}
my $idxDiff = $lastIdx - $firstIdx;
if ($idxDiff < 2)
{
$threshholdIdx = $lastIdx;
last BIN_CHOP;
}
my $midIdx = $firstIdx + int($idxDiff / 2);
if ($threshhold eq getDate($logLines[$midIdx]))
{
STEP_LEFT:
while (1)
{
$midIdx --
if $threshhold eq getDate($logLines[$midIdx - 1])
}
$threshholdIdx = $midIdx;
last BIN_CHOP;
}
if ($threshhold lt getDate($logLines[$midIdx]))
{
$lastIdx = $midIdx;
next BIN_CHOP;
}
if ($threshhold gt getDate($logLines[$midIdx]))
{
$firstIdx = $midIdx;
next BIN_CHOP;
}
die qq{Internal error, how did we get here?\n};
}
die qq{Binary chop did not find threshhold\n}
if $threshholdIdx == -1;
print
qq{Threshhold : $threshhold\n},
qq{Line No. : @{[$threshholdIdx + 1]}\n},
qq{Log msg. : $logLines[$threshholdIdx]},
qq{Prev. msg. : $logLines[$threshholdIdx - 1]\n};
print
qq{Lines from threshhold onwards\n\n},
@logLines[$threshholdIdx .. $#logLines];
sub getDate
{
my $line = shift;
my ($date) = $line =~ m{^(\S+)};
return $date;
}
##
##
$ ls -l spw586856*
-rwxr-xr-x 1 jgillman og5a 1895 Dec 1 11:11 spw586856
-rw-r--r-- 1 jgillman og5a 2507626 Dec 1 10:58 spw586856.log
-rwxr-xr-x 1 jgillman og5a 696 Dec 1 10:56 spw586856makeData
$ wc spw586856.log
47712 332470 2507626 spw586856.log
$ head -10 spw586856.log
2006-06-11.05:26:40 Random message
2006-06-11.05:27:13 This message is intentionally blank
2006-06-11.05:28:00 Chickens have got into the server
2006-06-11.05:28:33 The lunatics have taken over the asylum
2006-06-11.05:29:16 Chickens have got into the server
2006-06-11.05:29:53 The lunatics have taken over the asylum
2006-06-11.05:30:34 The disk drive just wants you to know it is fine
2006-06-11.05:30:52 The lunatics have taken over the asylum
2006-06-11.05:31:32 All your data is gone
2006-06-11.05:31:52 All your data is gone
$ tail -10 spw586856.log
2006-06-19.11:51:40 Chickens have got into the server
2006-06-19.11:51:56 Random message
2006-06-19.11:52:44 Random message
2006-06-19.11:52:50 All your data is gone
2006-06-19.11:52:58 This message is intentionally blank
2006-06-19.11:53:44 The lunatics have taken over the asylum
2006-06-19.11:54:07 This message is intentionally blank
2006-06-19.11:54:35 The disk drive just wants you to know it is fine
2006-06-19.11:54:51 Chickens have got into the server
2006-06-19.11:55:33 Chickens have got into the server
$ time spw586856
Threshhold : 2006-06-19.11:47:25
Line No. : 47694
Log msg. : 2006-06-19.11:47:27 This message is intentionally blank
Prev. msg. : 2006-06-19.11:47:20 Chickens have got into the server
Lines from threshhold onwards
2006-06-19.11:47:27 This message is intentionally blank
2006-06-19.11:47:47 The disk drive just wants you to know it is fine
2006-06-19.11:48:36 The lunatics have taken over the asylum
2006-06-19.11:49:12 All your data is gone
2006-06-19.11:49:28 This message is intentionally blank
2006-06-19.11:50:01 Chickens have got into the server
2006-06-19.11:50:10 This message is intentionally blank
2006-06-19.11:50:38 Chickens have got into the server
2006-06-19.11:51:24 Random message
2006-06-19.11:51:40 Chickens have got into the server
2006-06-19.11:51:56 Random message
2006-06-19.11:52:44 Random message
2006-06-19.11:52:50 All your data is gone
2006-06-19.11:52:58 This message is intentionally blank
2006-06-19.11:53:44 The lunatics have taken over the asylum
2006-06-19.11:54:07 This message is intentionally blank
2006-06-19.11:54:35 The disk drive just wants you to know it is fine
2006-06-19.11:54:51 Chickens have got into the server
2006-06-19.11:55:33 Chickens have got into the server
real 0m5.28s
user 0m4.86s
sys 0m0.34s
$