1 package FS::NetworkMonitoringSystem::Torrus_Internal;
4 #use vars qw( $DEBUG $me );
7 use File::Slurp qw(slurp);
10 #$me = '[FS::NetworkMonitoringSystem::Torrus_Internal]';
13 our $lockfile = '/usr/local/etc/torrus/discovery/FSLOCK';
14 our $ddxfile = '/usr/local/etc/torrus/discovery/routers.ddx';
21 qq( <param name="snmp-host" value="$ip"/>\n).
24 my $ddx = $self->_torrus_loadddx;
26 $ddx =~ s{(</snmp-discovery>)}{$newhost$1};
28 $self->_torrus_newddx($ddx);
31 my($self, $router_ip, $interface, $serviceid ) = @_;
33 $interface =~ s(\/)(_)g;
35 #should just use a proper XML parser huh
37 my $newline = " $serviceid:$interface:Both:main,";
39 my @ddx = split(/\n/, $self->_torrus_loadddx);
44 while ( my $line = shift(@ddx) ) {
46 next unless $line =~ /^\s*<param\s+name="snmp-host"\s+value="$router_ip"\/?>/i;
48 while ( my $hostline = shift(@ddx) ) {
49 $new .= "$hostline\n";
50 if ( $hostline =~ /^\s*<param name="RFC2863_IF_MIB::external-serviceid"\/?>/i ) {
52 while ( my $paramline = shift(@ddx) ) {
53 if ( $paramline =~ /^\s*</param>/ ) {
54 $new .= "$newline\n$paramline";
63 } elsif ( $hostline =~ /^\s+<\/host>\s*/i ) {
66 qq( <param name="RFC2863_IF_MIB::external-serviceid">\n).
78 $self->_torrus_newddx($new);
83 $lock = new IO:::File ">>$lockfile" or die $!;
84 flock($lock, LOCK_EX);
88 flock($lock, LOCK_UN);
95 return slurp($ddxfile);
101 my $new = new IO::File ">$ddxfile.new"
102 or die "can't write to $ddxfile.new: $!";
105 rename("$ddxfile", $ddxfile.`date +%Y%m%d%H%M%S`) or die $!;
106 rename("$ddxfile.new", $ddxfile) or die $!;
108 $self->_torrus_reload;
114 #i should have better error checking
116 system('torrus', 'devdiscover', "--in=$ddxfile");
118 system('torrus', 'compile', '--tree=main'); # , '--verbose'
120 $self->_torrus_unlock;