/[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

Annotation of /lib/PXElator/syslogd.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 230 - (hide annotations)
Sun Aug 16 22:23:55 2009 UTC (14 years, 8 months ago) by dpavlin
File size: 954 byte(s)
simpliest possible syslog server

1 dpavlin 230 package syslogd;
2    
3     use warnings;
4     use strict;
5    
6     use IO::Socket;
7     use Data::Dump qw/dump/;
8     use CouchDB;
9    
10     our $port = 514;
11     our $MAXLEN = 1524;
12    
13     sub start {
14    
15     my $sock = IO::Socket::INET->new(
16     LocalPort => $port,
17     Proto => 'udp',
18     ReuseAddr => 1,
19     ) || die "can't listen to $port: $!";
20    
21     CouchDB::audit('start', { port => $port });
22    
23     my $buf;
24     while(1) {
25     $sock->recv($buf, $MAXLEN);
26     my ($port, $ipaddr) = sockaddr_in($sock->peername);
27     my $log = {
28     ip => join('.', unpack('C4',$ipaddr)),
29     hostname => gethostbyaddr($ipaddr, AF_INET),
30     message => $buf,
31     };
32    
33     if ( $buf =~ /<(\d+)>\s*(\S*)\s*:\s*(.*)/ ) {
34     my $level = $1 % 8;
35    
36     my $overlay = {
37     message => $3,
38     level => $level,
39     facility => ( $1-$level ) / 8,
40     program => $2,
41     };
42    
43     $log->{$_} = $overlay->{$_} foreach keys %$overlay;
44    
45     $log->{pid} = $1 if $log->{program} =~ s/\[(\d+)\]$//;
46     }
47    
48     warn "log ",dump( $log );
49     CouchDB::audit( 'syslog', $log );
50     }
51    
52     }
53    
54     1;

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26