diff options
| -rw-r--r-- | FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm | 49 | ||||
| -rw-r--r-- | torrus/perllib/Torrus/Freeside.pm | 7 | ||||
| -rw-r--r-- | torrus/perllib/Torrus/Renderer/HTML.pm | 19 | ||||
| -rw-r--r-- | 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 <ssinyagin@yahoo.com>  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 "<A HREF='$url'>View Service</A>"; +					} +  					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; +%]  <P>Directories you can jump to:</P>  <DIV CLASS="Listing"> @@ -50,7 +63,7 @@           thisIsAlias ? '</EM>':''; %]        [% IF matches(thepath,'Interface_Counters/$') %]  	<FONT SIZE="-1"> -        [% 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) %]  	</FONT>        [% END %]      </SPAN>  | 
