logo       
Google Custom Search
    AddThis Social Bookmark Button

Re: Syslog child on Windows: msg#00073

Subject: Re: Syslog child on Windows



Also, if you don't need for the DBI stuff to be "threaded" in with the rest
of your POE app, you can just initially create another Session that is a
Queue. Then write each $msg that comes in from PoCo::Server::Syslog to the
Queue. The Queue itself just sets an alarm to periodically process itself
in a POE::Wheel::Run or you can just fork it. The child part would then
handle the database connection and writing. I do this all the time and it
works really well.
-
Lance Braswell - + 1 469 357 6112


                                                                           
             David Davis                                                   
             <david.davis@gmai                                             
             l.com>                                                     To 
                                       Jim <jimnl69@xxxxxxxxxxx>           
             03/31/2005 11:17                                           cc 
             AM                        poe@xxxxxxxx                        
                                                                   Subject 
                                       Re: Syslog child on Windows         
             Please respond to                                             
                David Davis                                                
             <david.davis@gmai                                             
                  l.com>                                                   
                                                                           
                                                                           




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 <jimnl69@xxxxxxxxxxx> 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. :-)
>
>






Try Searching:
servers, voip, java, networking, microsoft ...
<Prev in Thread] Current Thread [Next in Thread>