use dbd::sqlite; use dbi; $logdir= "d:/logs/"; $dbdir= "d:/maint/syslog/"; $logfile= "sysmonitor.log"; $errlst= "errorlist.txt"; &FltErr; sub FltErr { chdir($logdir); open (FH, "< $errlst"); my @errors = ; open (msg, $logfile ); open (FILEHANDLE,">NTDTM.txt"); while () { chop($_); foreach my $error (@errors) { chomp ($error); if ($_ =~ $error) { print FILEHANDLE "$_ \n"; } } } close (FILEHANDLE); &sql; } sub sql{ chdir($dbdir); ###Inputs NTDTM,txt into DTM.DB sqlite database, sets all values in "Logged" field to 0 my $dbh = DBI->connect("dbi:SQLite:dtm.db","",""); #connects to DTM.db database my $sql=""; my $sqlupdate =""; $sql .= "copy DTM_Log from 'd:\\logs\\ntdtm.txt' using delimiters '|'"; #imports parsed log file into sqlite DB $sqlupdate .= "update DTM_Log SET Logged = 0 WHERE Logged is null"; #Updates all new records with 0 in logged field my $sth= $dbh->prepare($sql); my $sthupdate= $dbh->prepare($sqlupdate); my $sthoutput= $dbh->prepare($sqloutput); #print "$sql $sth \n"; #debug $sth->execute(); $sth->finish(); $sthupdate->execute(); $sthupdate->finish(); ###Select statement that returns records that have not sent to zeus my $sqlout =""; $sqlout .="SELECT rowid, Host, Date_Down, Time_Down, Event_MSG, EVT_Type FROM DTM_Log WHERE Logged = '0'"; #filters out logged events my $sthout= $dbh->prepare($sqlout); $sthout->execute(); my ( $rowid, $Host, $Date_Down, $Time_Down, $Event_MSG, $EVT_Type); $sthout->bind_columns (\$rowid, \$Host, \$Date_Down, \$Time_Down, \$Event_MSG, \$EVT_Type); ###Outputs previous select statement to file, using | as delimiter while( $sthout->fetch()){ open (OUT,">>ParsedDTM.log"); print OUT "$rowid|$Host|$Date_Down|$Time_Down|$Event_MSG|$EVT_Type\n"; #outputs fields from select statement close(OUT); } $sthout->finish(); $dbh->disconnect; }