--- sysplogd 2009/04/10 17:49:49 1 +++ sysplogd 2009/04/10 21:22:01 3 @@ -5,11 +5,16 @@ use IO::Socket; use Data::Dump qw/dump/; +use DBI; my $port = 514; my $MAXLEN = 1524; +my $dsn = 'DBI:Pg:dbname=syslog'; +my $user = 'dpavlin'; +my $debug = 0; + my @facilities = ( qw/ kernel user mail system security internal printer news uucp clock security2 FTP NTP audit alert clock2 local0 local1 local2 local3 local4 local5 local6 local7 @@ -22,6 +27,14 @@ # ReuseAddr => 1, ) || die "can't listen to $port: $!"; +my $dbh = DBI->connect( $dsn, $user, '', { RaiseError => 1 } ) || die $DBI::errstr; + +my $sth = $dbh->prepare(qq{ + insert into log + (ip,hostname,facility,priority,level,program,message) values + (? ,? ,? ,? ,? ,? ,? ) +}); + print "INFO: listen on $port",$/; my $rin = ''; @@ -32,12 +45,10 @@ my $hostname = gethostbyaddr($ipaddr, AF_INET); my $ip = join('.', unpack('C4',$ipaddr)); warn "# ",dump( $port, $ipaddr, $hostname, $buf ); + if ( $buf=~/<(\d+)>(.*?):(.*)/ ) { - my $pri=$1; - my $head=$2; - my $msg=$3; - my $sev=$pri % 8; - my $fac=($pri-$sev) / 8; - print dump( $ip, $port, $hostname, $pri, $head, $msg, $sev, $fac, $facilities[$fac] ),$/; + my $level=$1 % 8; + my $fac=($1-$level) / 8; + $sth->execute( $ip, $hostname, $fac, $1, $level, $2, $3 ); } }