From 8c37ba9a0caeffdbe133968750f5b4d1e7b7fb69 Mon Sep 17 00:00:00 2001 From: levinse Date: Mon, 7 Feb 2011 05:20:41 +0000 Subject: [PATCH] torrus, UI, RT10574 --- FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm | 49 ++++++++++++++++++++++++ torrus/perllib/Torrus/Freeside.pm | 7 ++++ torrus/perllib/Torrus/Renderer/HTML.pm | 19 ++++++++- torrus/templates/default-dir.html | 29 ++++++++++---- 4 files changed, 95 insertions(+), 9 deletions(-) diff --git a/FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm b/FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm index 5d1bb06f1..736d178fa 100644 --- a/FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm +++ b/FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm @@ -6,6 +6,9 @@ use Fcntl qw(:flock); use IO::File; use File::Slurp qw(slurp); use Date::Format; +use XML::Simple; +use FS::svc_port; +use FS::Record qw(qsearch); #$DEBUG = 0; #$me = '[FS::NetworkMonitoringSystem::Torrus_Internal]'; @@ -21,6 +24,52 @@ sub new { return $self; } +sub get_router_serviceids { + my $self = shift; + my $router = shift; + + my $ddx_xml = slurp($ddxfile); + my $xs = new XML::Simple(RootName=> undef, SuppressEmpty => '', + ForceArray => 1, ); + my $ddx_hash = $xs->XMLin($ddx_xml); + if($ddx_hash->{host}){ + my @hosts = @{$ddx_hash->{host}}; + foreach my $host ( @hosts ) { + my $param = $host->{param}; + if($param && $param->{'snmp-host'} + && $param->{'snmp-host'}->{'value'} eq $router + && $param->{'RFC2863_IF_MIB::external-serviceid'}) { + my $serviceids = $param->{'RFC2863_IF_MIB::external-serviceid'}->{'content'}; + my %hash = (); + if($serviceids) { + my @serviceids = split(',',$serviceids); + foreach my $serviceid ( @serviceids ) { + $serviceid =~ s/^\s+|\s+$//g; + my @s = split(':',$serviceid); + next unless scalar(@s) == 4; + $hash{$s[1]} = $s[0]; + } + } + return \%hash; + } + } + } + ''; +} + +sub find_svc { + my $self = shift; + my $serviceid = shift; + return '' unless $serviceid =~ /^[0-9A-Za-z_\-.\\\/ ]+$/; + + my @svc_port = qsearch('svc_port', { 'serviceid' => $serviceid }); + return '' unless scalar(@svc_port); + + # for now it's like this, later on just change to qsearchs + + return $svc_port[0]; +} + sub add_router { my($self, $ip) = @_; diff --git a/torrus/perllib/Torrus/Freeside.pm b/torrus/perllib/Torrus/Freeside.pm index 359d544f0..239f55f1a 100644 --- a/torrus/perllib/Torrus/Freeside.pm +++ b/torrus/perllib/Torrus/Freeside.pm @@ -5,6 +5,7 @@ use warnings; #Freeside use FS::Mason qw( mason_interps ); +use FS::NetworkMonitoringSystem; my $outbuf; my( $fs_interp, $rt_interp ) = mason_interps('standalone', 'outbuf'=>\$outbuf); @@ -59,5 +60,11 @@ sub freesideComponent { } +sub load_nms { + my $self = shift; + my $nms = new FS::NetworkMonitoringSystem; + $nms; +} + 1; diff --git a/torrus/perllib/Torrus/Renderer/HTML.pm b/torrus/perllib/Torrus/Renderer/HTML.pm index 4001baeed..657f66f00 100644 --- a/torrus/perllib/Torrus/Renderer/HTML.pm +++ b/torrus/perllib/Torrus/Renderer/HTML.pm @@ -14,7 +14,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -# $Id: HTML.pm,v 1.6 2011-02-05 06:32:36 levinse Exp $ +# $Id: HTML.pm,v 1.7 2011-02-07 05:20:41 levinse Exp $ # Stanislav Sinyagin package Torrus::Renderer::HTML; @@ -120,12 +120,29 @@ sub render_html 'freesideComponent' => sub { return $self->freesideComponent(@_); }, 'uri_escape' => sub { return uri_escape(@_); }, 'matches' => sub { return $_[0] =~ $_[1]; }, + 'load_nms' => sub { return $self->load_nms; }, + 'get_serviceids' => sub { my $nms = shift; + my $router = shift; + return $nms->get_router_serviceids($router); + }, 'popup_link' => sub { my $type = shift; if($type eq 'nms-add_iface.html') { my $host = shift; my $iface = shift; + my $nms = shift; + my $serviceids = shift; + my $svc_port = ''; + + $svc_port = $nms->find_svc($serviceids->{$iface}) + if($serviceids && $serviceids->{$iface}); + + if($svc_port) { + my $url = $Torrus::Freeside::FSURL."/view/svc_port.cgi?".$svc_port->svcnum; + return "View Service"; + } + return $self->freesideComponent('/elements/popup_link.html', 'action' => "/freeside/misc/". diff --git a/torrus/templates/default-dir.html b/torrus/templates/default-dir.html index db1821260..7eec26744 100644 --- a/torrus/templates/default-dir.html +++ b/torrus/templates/default-dir.html @@ -4,13 +4,26 @@ [% INCLUDE legend %] -[% IF matches(thepath,'Interface_Counters/$') %] - [% freesideComponent('/elements/init_overlib.html') %] -[% END %] -[% IF matches(thepath,'Routers/$') %] - [% freesideComponent('/elements/init_overlib.html') %] - [% popup_link('nms-add_router.html') %] -[% END %] +[% + IF matches(thepath,'Interface_Counters/$'); + freesideComponent('/elements/init_overlib.html'); + nms = load_nms(); + router = nodeName(parent(token)); + serviceids = get_serviceids(nms,router); + END; + IF matches(thepath,'Interface_Counters/.*?/$'); + nms = load_nms(); + router = nodeName(parent(parent(token))); + serviceids = get_serviceids(nms,router); + + # HACK! this doesn't do what you think it does... + popup_link('nms-add_iface.html',router,uri_escape(nodeName(token)),nms,serviceids); + END; + IF matches(thepath,'Routers/$'); + freesideComponent('/elements/init_overlib.html'); + popup_link('nms-add_router.html'); + END; +%]

Directories you can jump to:

@@ -50,7 +63,7 @@ thisIsAlias ? '':''; %] [% IF matches(thepath,'Interface_Counters/$') %] - [% popup_link('nms-add_iface.html',nodeName(parent(token)),uri_escape(nodeName(child))) %] + [% popup_link('nms-add_iface.html',router,uri_escape(nodeName(child)),nms,serviceids) %] [% END %] -- 2.11.0