--- lib/PXElator/syslogd.pm 2009/08/17 00:45:41 238 +++ lib/PXElator/syslogd.pm 2009/08/17 00:51:24 239 @@ -12,67 +12,71 @@ our $port = 514; our $MAXLEN = 1524; -sub start { - - my $sock = IO::Socket::INET->new( - LocalPort => $port, - Proto => 'udp', - ReuseAddr => 1, - ) || die "can't listen to $port: $!"; - - CouchDB::audit('start', { port => $port }); +sub message { + my $sock = shift; my $buf; - while(1) { - $sock->recv($buf, $MAXLEN); + $sock->recv($buf, $MAXLEN); - next unless $buf; + next unless $buf; - my ($port, $ipaddr) = sockaddr_in($sock->peername); - my $log = { - ip => join('.', unpack('C4',$ipaddr)), - buf => $buf, - }; - - if ( $buf =~ s/<(\d+)>// ) { - $log->{pri} = $1 % 8; - $log->{facility} = ( $1 - $log->{pri} ) / 8; - - $log->{timestamp} = $1 if $buf =~ s/^(\w\w\w\s+\d+\s+\d\d:\d\d:\d\d)\s*//; # strip timestamp which some syslog servers insert here - - if ( $buf =~ s/^([^:]+)\s*:\s*// ) { - my $tag = $1; - if ( $tag =~ m{^(\S+)\s(\S+)} ) { - $log->{tag} = $2; - $log->{hostname} = $1; - } else { - $log->{tag} = $tag; - } - - if ( $log->{tag} =~ s/\[(\d+)\]$// ) { - $log->{pid} = $1; - } elsif ( $buf =~ s/^(\d+):\s*// ) { - $log->{pid} = $1; - } + my ($port, $ipaddr) = sockaddr_in($sock->peername); + my $log = { + ip => join('.', unpack('C4',$ipaddr)), + buf => $buf, + }; + + if ( $buf =~ s/<(\d+)>// ) { + $log->{pri} = $1 % 8; + $log->{facility} = ( $1 - $log->{pri} ) / 8; + + $log->{timestamp} = $1 if $buf =~ s/^(\w\w\w\s+\d+\s+\d\d:\d\d:\d\d)\s*//; # strip timestamp which some syslog servers insert here + + if ( $buf =~ s/^([^:]+)\s*:\s*// ) { + my $tag = $1; + if ( $tag =~ m{^(\S+)\s(\S+)} ) { + $log->{tag} = $2; + $log->{hostname} = $1; + } else { + $log->{tag} = $tag; } - if ( $log->{tag} =~ m{CRON}i && $buf =~ m{^\((\w+)\) (.+) \((.+)\)$} ) { - $log->{cron} = { - user => $1, - command => $2, - argument => $3, - }; + if ( $log->{tag} =~ s/\[(\d+)\]$// ) { + $log->{pid} = $1; + } elsif ( $buf =~ s/^(\d+):\s*// ) { + $log->{pid} = $1; } + } - $log->{message} = $buf; + if ( $log->{tag} =~ m{CRON}i && $buf =~ m{^\((\w+)\) (.+) \((.+)\)$} ) { + $log->{cron} = { + user => $1, + command => $2, + argument => $3, + }; } - warn "log ",dump( $log ); - CouchDB::audit( 'syslog', $log ); + $log->{message} = $buf; + } + + warn "log ",dump( $log ); + CouchDB::audit( 'syslog', $log ); +} + +sub start { + my $sock = IO::Socket::INET->new( + LocalPort => $port, + Proto => 'udp', + ReuseAddr => 1, + ) || die "can't listen to $port: $!"; + + CouchDB::audit('start', { port => $port }); + + while(1) { + message($sock); server->refresh; } - } 1;