#! /usr/bin/perl -w use Ace 1.51; open(LOG,"report.data") || die "Can't open logfile\n"; my $DB = Ace->connect(-port => 20000100, -host => 'localhost') || die "Can't connect to database\n", Ace->error; $beginrecord = 0; for (;;){ while (<LOG>) { if (/^\s+hostname: (.*)/) { $host_name = $1; $beginrecord = 1} elsif (/^\s+ip address: (.*)/) {$ip = $1} elsif (/^\s+ethernet address: (.*)/) {$c_ea = $1} elsif (/^\s+old Ethernet address: (.*)/) {$p_ea = $1} elsif (/^\s+ethernet vendor: (.*)/) {$c_ev = $1} elsif (/^\s+old Ethernet vendor: (.*)/) {$p_ev = $1} elsif (/^\s+timestamp: (.*)/) {$c_ts = $1} elsif (/^\s+previous timestamp: (.*)/) {$p_ts = $1} elsif (/^\s+delta: (.*)/) {$delta_ts = $1} else { &process if ($beginrecord) }; } sleep 300; # pause 5 minutes seek (LOG,0,1); } sub process { # remove whitespace foreach ($host_name,$ip,$c_ea,$p_ea,$c_ev, $p_ev,$c_ts,$p_ts,$delta_ts) { s/^\s+//; s/\s+$//; } # give "unknown" records a unique name if ($host_name =~ /<unknown>/) { $host_name = "unknown on $c_ts $c_ea" } # check to see if the object already exists my $existing_host = $DB->fetch( Host => "$host_name"); if (!$existing_host){ # create new Host object my $new_host = $DB->new(-class=>'Host', -name=>"$host_name"); if ($host_name){ $new_host->add(host_name => "$host_name"); $host_name = "" } if ($ip){ $new_host->add(ip_address => "$ip"); $ip = "" } if ($c_ea){ $new_host->add(current_ea => "$c_ea"); $c_ea = ""} if ($p_ea){ $new_host->add(previous_ea => "$p_ea"); $p_ea = ""} if ($c_ev){ $new_host->add(current_ev => "$c_ev"); $c_ev = ""} if ($p_ev){ $new_host->add(previous_ev => "$p_ev"); $p_ev = ""} if ($c_ts){ $new_host->add(current_ts => "$c_ts"); $c_ts = ""} if ($p_ts){ $new_host->add(previous_ts => "$p_ts"); $p_ts = ""} if ($delta_ts){ $new_host->add(delta_ts => "$delta_ts"); $delta_ts = "" } # commit record to the database $new_host->commit; } else { # update existing Host object if ($c_ea){ $existing_host->add(current_ea => "$c_ea"); $c_ea = ""} if ($p_ea){ $existing_host->add(previous_ea => "$p_ea"); $p_ea = ""} if ($c_ev){ $existing_host->add(current_ev => "$c_ev"); $c_ev = ""} if ($p_ev){ $existing_host->add(previous_ev => "$p_ev"); $p_ev = ""} if ($c_ts){ $existing_host->add(current_ts => "$c_ts"); $c_ts = ""} if ($p_ts){ $existing_host->add(previous_ts => "$p_ts"); $p_ts = ""} if ($delta_ts){ $existing_host->add(delta_ts => "$delta_ts"); $delta_ts = "" } # commit changes to the database $existing_host->commit; } #reset got record flag $beginrecord = 0; }