Files
netdisco/lib/App/Netdisco/Worker/Plugin/LoadMIBs.pm

51 lines
1.5 KiB
Perl

package App::Netdisco::Worker::Plugin::LoadMIBs;
use Dancer ':syntax';
use App::Netdisco::Worker::Plugin;
use aliased 'App::Netdisco::Worker::Status';
use Dancer::Plugin::DBIC 'schema';
use File::Spec::Functions qw(catdir catfile);
use File::Slurper qw(read_lines write_text);
# use DDP;
register_worker({ phase => 'main' }, sub {
my ($job, $workerconf) = @_;
debug "loadmibs - loading netdisco-mibs object cache";
my $home = (setting('mibhome') || catdir(($ENV{NETDISCO_HOME} || $ENV{HOME}), 'netdisco-mibs'));
my @report = read_lines(catfile($home, qw(EXTRAS reports all_oids)), 'latin-1');
my @browser = ();
foreach my $line (@report) {
my ($oid, $qual_leaf, $type, $access, $index) = split m/,/, $line;
next unless defined $oid and defined $qual_leaf;
my ($mib, $leaf) = split m/::/, $qual_leaf;
push @browser, {
oid => $oid,
oid_parts => [ grep {length} (split m/\./, $oid) ],
mib => $mib,
leaf => $leaf,
type => $type,
access => $access,
index => [($index ? (split m/:/, $index) : ())],
};
}
debug sprintf "loadmibs - loaded %d objects from netdisco-mibs",
scalar @browser;
schema('netdisco')->txn_do(sub {
my $gone = schema('netdisco')->resultset('SNMPObject')->delete;
debug sprintf 'loadmibs - removed %d oids', $gone;
schema('netdisco')->resultset('SNMPObject')->populate(\@browser);
debug sprintf 'loadmibs - added %d new oids', scalar @browser;
});
return Status->done('Loaded MIBs');
});
true;