51 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			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;
 |