projects
/
freeside.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add condition_sql optimization to "Package definitions" condition, RT#74456
[freeside.git]
/
FS
/
FS
/
NetworkMonitoringSystem
/
Torrus_Internal.pm
diff --git
a/FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm
b/FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm
index
04a6b29
..
28bc8a7
100644
(file)
--- a/
FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm
+++ b/
FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm
@@
-5,6
+5,7
@@
use strict;
use Fcntl qw(:flock);
use IO::File;
use File::Slurp qw(slurp);
use Fcntl qw(:flock);
use IO::File;
use File::Slurp qw(slurp);
+use IPC::Run qw(run);
use Date::Format;
use XML::Simple;
use FS::Record qw(qsearch qsearchs dbh);
use Date::Format;
use XML::Simple;
use FS::Record qw(qsearch qsearchs dbh);
@@
-154,11
+155,18
@@
sub report {
}
}
+sub queued_add_router {
+ my $self = shift;
+ my $error = $self->add_router(@_);
+ die $error if $error;
+}
+
sub add_router {
my($self, $ip, $community) = @_;
sub add_router {
my($self, $ip, $community) = @_;
- $community = qq!<param name="snmp-community" value="$community"/>\n !
- if length($community) > 1;
+ $community = (defined($community) && length($community) > 1)
+ ? qq!<param name="snmp-community" value="$community"/>\n !
+ : '';
my $newhost =
qq( <host>\n).
my $newhost =
qq( <host>\n).
@@
-257,23
+265,31
@@
sub _torrus_newddx {
close $new;
my $tmpname = $ddxfile . Date::Format::time2str('%Y%m%d%H%M%S',time);
close $new;
my $tmpname = $ddxfile . Date::Format::time2str('%Y%m%d%H%M%S',time);
- rename(
"$ddxfile"
, $tmpname) or die $!;
+ rename(
$ddxfile
, $tmpname) or die $!;
rename("$ddxfile.new", $ddxfile) or die $!;
rename("$ddxfile.new", $ddxfile) or die $!;
- $self->_torrus_reload;
+ my $error = $self->_torrus_reload;
+ if ( $error ) { #revert routers.ddx
+ rename($ddxfile, "$tmpname.FAILED") or die $!;
+ rename($tmpname, $ddxfile) or die $!;
+ }
+
+ $self->_torrus_unlock;
+
+ return $error;
}
sub _torrus_reload {
my($self) = @_;
}
sub _torrus_reload {
my($self) = @_;
- #i should use IPC::Run and have better error checking (commands are silent
- # for success, or output errors)
-
- system('torrus', 'devdiscover', "--in=$ddxfile");
+ my $stderr = '';
+ run( ['torrus', 'devdiscover', "--in=$ddxfile"], '2>'=>\$stderr );
+ return $stderr if $stderr;
- system('torrus', 'compile', '--tree=main'); # , '--verbose'
+ run( ['torrus', 'compile', '--tree=main'] ); # , '--verbose'
+ #typically the errors happen at the discover stage...
-
$self->_torrus_unlock
;
+
''
;
}
}