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);
33 my($self, $router_ip, $interface, $serviceid ) = @_;
35 $interface =~ s(\/)(_)g;
37 #should just use a proper XML parser huh
39 my $newline = " $serviceid:$interface:Both:main,";
41 my @ddx = split(/\n/, $self->_torrus_loadddx);
46 while ( my $line = shift(@ddx) ) {
48 next unless $line =~ /^\s*<param\s+name="snmp-host"\s+value="$router_ip"\/?>/i;
50 while ( my $hostline = shift(@ddx) ) {
51 $new .= "$hostline\n";
52 if ( $hostline =~ /^\s*<param name="RFC2863_IF_MIB::external-serviceid"\/?>/i ) {
54 while ( my $paramline = shift(@ddx) ) {
55 if ( $paramline =~ /^\s*</param>/ ) {
56 $new .= "$newline\n$paramline";
65 } elsif ( $hostline =~ /^\s+<\/host>\s*/i ) {
68 qq( <param name="RFC2863_IF_MIB::external-serviceid">\n).
80 $self->_torrus_newddx($new);
85 $lock = new IO:::File ">>$lockfile" or die $!;
86 flock($lock, LOCK_EX);
90 flock($lock, LOCK_UN);
97 return slurp($ddxfile);
101 my($self, $ddx) = @_;
103 my $new = new IO::File ">$ddxfile.new"
104 or die "can't write to $ddxfile.new: $!";
107 rename("$ddxfile", $ddxfile.`date +%Y%m%d%H%M%S`) or die $!;
108 rename("$ddxfile.new", $ddxfile) or die $!;
110 $self->_torrus_reload;
116 #i should have better error checking
118 system('torrus', 'devdiscover', "--in=$ddxfile");
120 system('torrus', 'compile', '--tree=main'); # , '--verbose'
122 $self->_torrus_unlock;