| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package main; |
|
2
|
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
require 'timelocal.pl'; |
|
4
|
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
package SyslogScan::ParseDate; |
|
6
|
6
|
|
|
6
|
|
32
|
use strict; |
|
|
6
|
|
|
|
|
10
|
|
|
|
6
|
|
|
|
|
3522
|
|
|
7
|
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
my $gDefaultYear; |
|
9
|
|
|
|
|
|
|
sub setDefaultYear |
|
10
|
|
|
|
|
|
|
{ |
|
11
|
0
|
|
|
0
|
|
|
$gDefaultYear = shift; |
|
12
|
|
|
|
|
|
|
} |
|
13
|
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
my $ONE_MONTH = 30*24*60*60; |
|
15
|
|
|
|
|
|
|
my $ELEVEN_MONTH = 11 * $ONE_MONTH; |
|
16
|
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
my @gMonthList = qw ( jan feb mar apr may jun jul aug sep oct nov dec ); |
|
18
|
|
|
|
|
|
|
my %gMonthTable = (); |
|
19
|
|
|
|
|
|
|
my ($i, $month); |
|
20
|
|
|
|
|
|
|
foreach $month (@gMonthList) |
|
21
|
|
|
|
|
|
|
{ |
|
22
|
|
|
|
|
|
|
$gMonthTable{$month} = $i++; |
|
23
|
|
|
|
|
|
|
} |
|
24
|
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
sub parseDate { |
|
26
|
0
|
|
|
0
|
|
|
my $date = shift; |
|
27
|
|
|
|
|
|
|
|
|
28
|
0
|
|
|
|
|
|
my $defaultYear = $gDefaultYear; |
|
29
|
|
|
|
|
|
|
|
|
30
|
|
|
|
|
|
|
# assume pure number is already in time_t format |
|
31
|
0
|
0
|
|
|
|
|
return $date if ($date !~ /[^\d]/); |
|
32
|
|
|
|
|
|
|
|
|
33
|
0
|
0
|
|
|
|
|
if ($date =~ /(\d\d?)\.(\d\d?)\.(\d\d) (\d\d):(\d\d):(\d\d)/) |
|
34
|
|
|
|
|
|
|
{ |
|
35
|
|
|
|
|
|
|
# 06.01.96 01:20:30 is June 1 1996 at 1:20:30 |
|
36
|
|
|
|
|
|
|
#print STDERR "$6,$5,$4,$2,$1,$3 resolves to ", scalar(localtime(timelocal($6,$5,$4,$2,$1,$3))), "\n"; |
|
37
|
0
|
|
|
|
|
|
return ::timelocal($6,$5,$4,$2,$1-1,$3); |
|
38
|
|
|
|
|
|
|
} |
|
39
|
|
|
|
|
|
|
|
|
40
|
|
|
|
|
|
|
# assume date is in syslog format |
|
41
|
0
|
0
|
|
|
|
|
my ($engMonth, $mday, $year, $hour, $min, $sec) = |
|
42
|
|
|
|
|
|
|
$date =~ /(\w\w\w) ?(\d\d?)( \d\d\d\d)? (\d\d):(\d\d):(\d\d)/ or |
|
43
|
|
|
|
|
|
|
die "unknown date format: $date"; |
|
44
|
|
|
|
|
|
|
|
|
45
|
0
|
0
|
|
|
|
|
$year -= 1900 if defined $year; #compatibility with timelocal() |
|
46
|
|
|
|
|
|
|
|
|
47
|
0
|
|
|
|
|
|
$engMonth =~ tr/A-Z/a-z/; |
|
48
|
0
|
|
|
|
|
|
my $mon; |
|
49
|
0
|
0
|
|
|
|
|
defined ($mon = $gMonthTable{$engMonth}) or |
|
50
|
|
|
|
|
|
|
die "unknown month: $engMonth"; |
|
51
|
|
|
|
|
|
|
|
|
52
|
0
|
0
|
|
|
|
|
if (! defined($year)) |
|
53
|
|
|
|
|
|
|
{ |
|
54
|
|
|
|
|
|
|
# no year was specified, look for default |
|
55
|
0
|
0
|
|
|
|
|
if (defined($defaultYear)) |
|
56
|
|
|
|
|
|
|
{ |
|
57
|
0
|
0
|
0
|
|
|
|
$defaultYear > 1970 and $defaultYear < 2030 or |
|
58
|
|
|
|
|
|
|
die "default year $defaultYear does not look right"; |
|
59
|
0
|
|
|
|
|
|
$year = $defaultYear - 1900; |
|
60
|
|
|
|
|
|
|
} |
|
61
|
|
|
|
|
|
|
else |
|
62
|
|
|
|
|
|
|
{ |
|
63
|
|
|
|
|
|
|
# try to guess time closest to now |
|
64
|
0
|
|
|
|
|
|
my $now = time; |
|
65
|
0
|
|
|
|
|
|
$year = (localtime($now))[5]; |
|
66
|
|
|
|
|
|
|
|
|
67
|
0
|
|
|
|
|
|
my $candidate = ::timelocal($sec, $min, $hour, $mday, $mon, $year); |
|
68
|
|
|
|
|
|
|
|
|
69
|
0
|
0
|
|
|
|
|
if (($candidate - $now) > $ONE_MONTH) |
|
|
|
0
|
|
|
|
|
|
|
70
|
|
|
|
|
|
|
{ |
|
71
|
|
|
|
|
|
|
# log entry was probably made last year |
|
72
|
0
|
|
|
|
|
|
$year--; |
|
73
|
|
|
|
|
|
|
} |
|
74
|
|
|
|
|
|
|
elsif (($now - $candidate) > $ELEVEN_MONTH) |
|
75
|
|
|
|
|
|
|
{ |
|
76
|
|
|
|
|
|
|
# log entry was made 'next year', possible if |
|
77
|
|
|
|
|
|
|
# computers on LAN have different times |
|
78
|
0
|
|
|
|
|
|
$year++; |
|
79
|
|
|
|
|
|
|
} |
|
80
|
|
|
|
|
|
|
} |
|
81
|
|
|
|
|
|
|
} |
|
82
|
|
|
|
|
|
|
|
|
83
|
0
|
|
|
|
|
|
my $parsedDate = ::timelocal($sec, $min, $hour, $mday, $mon, $year); |
|
84
|
0
|
0
|
|
|
|
|
$parsedDate == -1 and die "could not parse date: $date"; |
|
85
|
0
|
|
|
|
|
|
return $parsedDate; |
|
86
|
|
|
|
|
|
|
}; |
|
87
|
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
1; |