1 #!/usr/bin/perl
2 #===============================================================================
3 #
4 # FILE: log-parser.pl
5 #
6 # USAGE: ./log-parser.pl
7 #
8 # DESCRIPTION:
9 #
10 # OPTIONS: ---
11 # REQUIREMENTS: ---
12 # BUGS: ---
13 # NOTES: ---
14 # AUTHOR: (), <>
15 # COMPANY:
16 # VERSION: 1.0
17 # CREATED: 13.03.2008 14:51:03 CET
18 # REVISION: ---
19 #===============================================================================
21 use strict;
22 use warnings;
23 use Getopt::Long;
24 use Data::Dumper;
26 my $log_file = "/home/hickert/log.gosa-si-server";
27 #my $log_file = "/var/log/gosa-si-server.log";
28 my $within_session = 0;
29 my $within_incoming = 0;
30 my $within_header = 0;
31 my $session;
32 my $incoming;
33 my $header;
34 my $syslog_state;
36 sub check_syslog_state {
37 my ($line) = @_ ;
38 if($line =~ /$syslog_state:/ ) {
39 return $line;
40 }
41 return;
42 }
44 sub check_header {
45 my ($line) = @_ ;
47 # new header, set all values back to default
48 if ($line =~ /INFO: Incoming msg with header/ ) {
49 $within_header = 0;
50 }
52 if ($line =~ /INFO: Incoming msg with header '$header'/) {
53 $within_header = 1;
54 return $line;
55 } else {
56 if ($within_header) { return $line; }
57 }
58 return;
59 }
61 sub check_incoming {
62 my ($line) = @_ ;
64 # new incoming msg, set all values back to default
65 if ($line =~ /INFO: Incoming msg with session ID \d+ from/ ) {
66 $within_incoming = 0;
67 }
69 if ($line =~ /INFO: Incoming msg with session ID \d+ from '$incoming'/) {
70 $within_incoming = 1;
71 return $line;
72 } else {
73 if ($within_incoming) { return $line; }
74 }
75 return;
76 }
78 sub check_session {
79 my ($line) = @_ ;
81 if ($line =~ /gosa-si-server (\d+) / ) {
82 if ((defined $1) && ($1 eq $session)) {
83 $within_session = 1;
84 return $line;
85 } else { $within_session = 0; }
86 } else {
87 if ($within_session == 1) { return $line; }
88 }
89 return;
90 }
94 ### MAIN ######################################################################
96 GetOptions(
97 "s|session=s" => \$session,
98 "i|incoming=s" => \$incoming,
99 "h|header=s" => \$header,
100 "l|log=s" => \$syslog_state,
101 );
103 # check script pram
104 my $script_pram = {};
105 if (defined $session) {
106 print "session: $session\n";
107 $script_pram->{'session'} = $session;
108 }
109 if (defined $incoming) {
110 print "incoming: $incoming\n";
111 $script_pram->{'incoming'} = $incoming;
112 }
113 if (defined $header) {
114 print "header: $header\n";
115 $script_pram->{'header'} = $header;
116 }
117 if (defined $syslog_state) {
118 print "syslog_state: $syslog_state\n";
119 $script_pram->{'syslog_state'} = $syslog_state;
120 }
122 if (keys(%$script_pram) == 0) {
123 # print usage and die
124 print "exiting script\n";
125 exit(0);
126 }
128 open(FILE, "<$log_file") or die "\t can not open log-file";
129 my @lines;
130 my $positive_msg = 0;
131 # Read lines
132 while ( my $line = <FILE>){
133 chomp($line);
135 # start of a new message, plot saved log lines
136 if ($line =~ /INFO: Incoming msg with session ID \d+ from / ) {
137 if ($positive_msg) {
138 print "#####################################################\n";
139 print join("\n", @lines)."\n";
140 }
142 $positive_msg = 0;
143 $within_session = 0;
144 $within_header = 0;
145 $within_incoming = 0;
146 @lines = ();
147 }
149 push (@lines, $line);
151 my $positiv_counter = 0;
152 while (my ($pram, $val) = each %$script_pram) {
153 if ($pram eq 'session') {
154 my $l = &check_session($line);
155 if (defined $l) { $positiv_counter++; }
156 }
158 elsif ($pram eq 'incoming') {
159 my $l = &check_incoming($line);
160 if (defined $l) { $positiv_counter++; }
161 }
163 elsif ($pram eq 'header') {
164 my $l = &check_header($line);
165 if (defined $l) { $positiv_counter++; }
166 }
168 elsif ($pram eq 'syslog_state') {
169 my $l = &check_syslog_state($line);
170 if (defined $l) { $positiv_counter++; }
171 }
172 }
174 if (keys(%$script_pram) == $positiv_counter) {
175 $positive_msg = 1;
176 }
178 }