/[pxelator]/lib/PXElator/syslogd.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /lib/PXElator/syslogd.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 230 by dpavlin, Sun Aug 16 22:23:55 2009 UTC revision 238 by dpavlin, Mon Aug 17 00:45:41 2009 UTC
# Line 7  use IO::Socket; Line 7  use IO::Socket;
7  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
8  use CouchDB;  use CouchDB;
9    
10    use server;
11    
12  our $port = 514;  our $port = 514;
13  our $MAXLEN = 1524;  our $MAXLEN = 1524;
14    
# Line 23  sub start { Line 25  sub start {
25          my $buf;          my $buf;
26          while(1) {          while(1) {
27                  $sock->recv($buf, $MAXLEN);                  $sock->recv($buf, $MAXLEN);
28    
29                    next unless $buf;
30    
31                  my ($port, $ipaddr) = sockaddr_in($sock->peername);                  my ($port, $ipaddr) = sockaddr_in($sock->peername);
32                  my $log = {                  my $log = {
33                          ip => join('.', unpack('C4',$ipaddr)),                          ip => join('.', unpack('C4',$ipaddr)),
34                          hostname => gethostbyaddr($ipaddr, AF_INET),                          buf => $buf,
                         message => $buf,  
35                  };                  };
36    
37                  if ( $buf =~ /<(\d+)>\s*(\S*)\s*:\s*(.*)/ ) {                  if ( $buf =~ s/<(\d+)>// ) {
38                          my $level = $1 % 8;                          $log->{pri}    = $1 % 8;
39                            $log->{facility} = ( $1 - $log->{pri} ) / 8;
40                    
41                            $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
42    
43                            if ( $buf =~ s/^([^:]+)\s*:\s*// ) {
44                                    my $tag = $1;
45                                    if ( $tag =~ m{^(\S+)\s(\S+)} ) {
46                                            $log->{tag} = $2;
47                                            $log->{hostname} = $1;
48                                    } else {
49                                            $log->{tag} = $tag;
50                                    }
51    
52                                    if ( $log->{tag} =~ s/\[(\d+)\]$// ) {
53                                            $log->{pid} = $1;
54                                    } elsif ( $buf =~ s/^(\d+):\s*// ) {
55                                            $log->{pid} = $1;
56                                    }
57                            }
58    
59                            if ( $log->{tag} =~ m{CRON}i && $buf =~ m{^\((\w+)\) (.+) \((.+)\)$} ) {
60                                    $log->{cron} = {
61                                            user => $1,
62                                            command => $2,
63                                            argument => $3,
64                                    };
65                            }
66    
67                          my $overlay = {                          $log->{message} = $buf;
                                 message => $3,  
                                 level   => $level,  
                                 facility => ( $1-$level ) / 8,  
                                 program  => $2,  
                         };  
   
                         $log->{$_} = $overlay->{$_} foreach keys %$overlay;  
   
                         $log->{pid} = $1 if $log->{program} =~ s/\[(\d+)\]$//;  
68                  }                  }
69    
70                  warn "log ",dump( $log );                  warn "log ",dump( $log );
71                  CouchDB::audit( 'syslog', $log );                  CouchDB::audit( 'syslog', $log );
72    
73                    server->refresh;
74          }          }
75    
76  }  }

Legend:
Removed from v.230  
changed lines
  Added in v.238

  ViewVC Help
Powered by ViewVC 1.1.26