Code

more functionality for log-parser
[gosa.git] / gosa-si / tests / log-parser.pl
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) = @_ ;
80         
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;
117 if (defined $syslog_state) {
118         print "syslog_state: $syslog_state\n"; 
119         $script_pram->{'syslog_state'} = $syslog_state;
122 if (keys(%$script_pram) == 0) {
123         # print usage and die
124         print "exiting script\n"; 
125         exit(0);
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                 }
162                 
163                 elsif ($pram eq 'header') {
164                         my $l = &check_header($line);
165                         if (defined $l) { $positiv_counter++; } 
166                 }
167                 
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         }