If you feel like giving me an example that accomplishes what I want to do below, I'd be glad to use yours too. :-)
Jim Perl Learner "David Davis" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > There are quite a few DBI components for POE. You could use one of > those. I'm partial to mine, but you should judge for yourself. > > http://cpan.teknikill.net/?poe*dbi > > -- > David Davis > Perl Programmer > http://teknikill.net/ > > $7.95 per month hosting > WITH ssh access > http://hosting.teknikill.net/ > > On Thu, 31 Mar 2005 11:41:28 -0500, Jim <[EMAIL PROTECTED]> wrote: >> I have a perl Syslog server setup on a windows box because it's connected >> to >> a RAID Array. I'm using POE as the Syslog server code and I'm storing >> the >> syslog data into a DB2 database. Here is what I currently have: >> >> use warnings; >> use strict; >> >> use POE; >> use POE::Component::Server::Syslog; >> use DBI; # library for performing database functions >> use DBD::DB2; >> use DBD::DB2::Constants; >> # use Mail::SendMail; >> >> POE::Component::Server::Syslog->spawn( >> BindAddress => '129.37.2.201', >> InputState => \&client_input, >> ErrorState => \&client_error, >> ); >> >> my $debug = 1; >> >> $poe_kernel->run(); >> >> ###################################### >> >> sub client_input { >> >> # Get the syslog hash >> my $msg = $_[ARG0]; >> my $databaseHandle; >> my $connectFailureFlag = 0; >> my $search; >> my $sth; >> my $dbName = "vpn"; >> # Parse the data for DB entry >> $msg->{'msg'} =~ /^(.*?) (\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+)\.(\d+) >> SEV=. (.*?)$/; >> >> if ($debug) { >> print " Host: ".$msg->{'host'}."\n"; >> print "Severity: ".$msg->{'severity'}."\n"; >> print " Msg: ".$msg->{'msg'}."\n"; >> my $databaseHandle = DBI->connect("DBI:DB2:$dbName","xxxxx","xxxxxx") >> or >> $connectFailureFlag = 1; >> if ($connectFailureFlag == 1){ warn "Unable to establish with >> DB2:$dbName due to $DBI::errstr\n"; } >> elsif ($connectFailureFlag == 0){ # connected to DB >> $search = "INSERT INTO VPN.SYSLOG_C3K (DATE_TIME, DEVICE, SEV, MSG) >> values('$4-$2-$3-$5.$6.$7.$8', '".$msg->{'host'}."', >> ".$msg->{'severity'}.", >> '$9')"; >> $sth = $databaseHandle->prepare("$search"); # prepare the statement >> to >> read from the DB >> $sth->execute(); # execute the query >> $sth->finish; >> $databaseHandle->disconnect or warn "Disconnection failed: >> $DBI::errstr\n"; >> } >> print "$2.$3.$4.$5.$6.$7.$8 $1 $9\n\n"; >> } # if ($debug) >> } >> >> sub client_error { >> # Something went wrong with the syslog message >> # Figure out what to do, if anything, in this case later >> warn "BAD MESSAGE: $_[ARG0]"; >> } >> >> What I'd like to do is collect the syslog data into an array while having >> another process pull the data out of that array and put into the >> database. >> That way, I'm not creating database connections everytime I get a syslog >> message. Hopefully I'm clear in what I'm asking for. :-) >> >>