X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FNetworkMonitoringSystem%2FTorrus_Internal.pm;h=28bc8a7611732eac6ea6c8cf2a874fc38432fe43;hb=b0888dc8399fc4e8d75c874c00d01366eacf5596;hp=8f00312fb4a90a29809054be77658035a5523e23;hpb=3f17118ce8dbb578ae735ab1f20548f4a4addaea;p=freeside.git
diff --git a/FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm b/FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm
index 8f00312fb..28bc8a761 100644
--- a/FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm
+++ b/FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm
@@ -5,13 +5,14 @@ use strict;
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 FS::svc_port;
use FS::torrus_srvderive;
use FS::torrus_srvderive_component;
-use Torrus::ConfigTree;
+#use Torrus::ConfigTree;
#$DEBUG = 0;
#$me = '[FS::NetworkMonitoringSystem::Torrus_Internal]';
@@ -83,7 +84,6 @@ sub all_router_serviceids {
foreach my $host ( @hosts ) {
my $param = $host->{param};
if($param && $param->{'snmp-host'}
- && (!$router || $param->{'snmp-host'}->{'value'} eq $router)
&& $param->{'RFC2863_IF_MIB::external-serviceid'}) {
my $serviceids =
$param->{'RFC2863_IF_MIB::external-serviceid'}->{'content'};
@@ -109,6 +109,11 @@ sub port_graphs_link {
my @keys = keys %$hash; # yeah this is weird...
my $host = $keys[0];
my $iface = $hash->{$keys[0]};
+
+ #Torrus::ConfigTree is only available when running under the web UI
+ eval 'use Torrus::ConfigTree;';
+ die $@ if $@;
+
my $config_tree = new Torrus::ConfigTree( -TreeName => 'main' );
my $token = $config_tree->token("/Routers/$host/Interface_Counters/$iface/InOut_bps");
return $Torrus::Freeside::FSURL."/torrus/main?token=$token";
@@ -145,17 +150,27 @@ sub report {
if ($m == 0) { $m=12; $y-- }
#i should have better error checking
system('torrus', 'report', '--report=MonthlyUsage', "--date=$y-$m-01");
- system('torrus', 'report', '--genhtml', '--tree=main');
+ system('torrus', 'report', '--genhtml', '--all2tree=main');
}
}
+sub queued_add_router {
+ my $self = shift;
+ my $error = $self->add_router(@_);
+ die $error if $error;
+}
+
sub add_router {
- my($self, $ip) = @_;
+ my($self, $ip, $community) = @_;
+
+ $community = (defined($community) && length($community) > 1)
+ ? qq!\n !
+ : '';
my $newhost =
qq( \n).
- qq( \n).
+ qq( \n).$community.
qq( \n);
my $ddx = $self->_torrus_loadddx;
@@ -169,8 +184,10 @@ sub add_router {
sub add_interface {
my($self, $router_ip, $interface, $serviceid ) = @_;
+ #false laziness w/torrus/perllib/Torrus/Renderer.pm iface_underscore, update both
$interface =~ s(\/)(_)g; #slashes become underscores
$interface =~ s(\.)(_)g; #periods too, huh
+ $interface =~ s(\-)(_)g; #yup, and dashes
#should just use a proper XML parser huh
@@ -208,7 +225,7 @@ sub add_interface {
unless ( $added ) {
$new .=
qq( \n).
- qq( $newline\n").
+ qq( $newline\n).
qq( \n);
}
$new .= "$hostline\n";
@@ -248,23 +265,31 @@ sub _torrus_newddx {
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 $!;
- $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) = @_;
- #i should use IPC::Run and have better error checking (commands are silent
- # for success, or output errors)
+ my $stderr = '';
+ run( ['torrus', 'devdiscover', "--in=$ddxfile"], '2>'=>\$stderr );
+ return $stderr if $stderr;
- system('torrus', 'devdiscover', "--in=$ddxfile");
+ run( ['torrus', 'compile', '--tree=main'] ); # , '--verbose'
+ #typically the errors happen at the discover stage...
- system('torrus', 'compile', '--tree=main'); # , '--verbose'
-
- $self->_torrus_unlock;
+ '';
}