summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlevinse <levinse>2011-02-07 05:20:41 +0000
committerlevinse <levinse>2011-02-07 05:20:41 +0000
commit8c37ba9a0caeffdbe133968750f5b4d1e7b7fb69 (patch)
treefaa7322e969cc71cdeae57b2eaf619689e28d3eb
parent3a4bf42c4385863ea83423b279b39ff6e650f79d (diff)
torrus, UI, RT10574
-rw-r--r--FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm49
-rw-r--r--torrus/perllib/Torrus/Freeside.pm7
-rw-r--r--torrus/perllib/Torrus/Renderer/HTML.pm19
-rw-r--r--torrus/templates/default-dir.html29
4 files changed, 95 insertions, 9 deletions
diff --git a/FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm b/FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm
index 5d1bb06..736d178 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 359d544..239f55f 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 4001bae..657f66f 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 db18212..7eec267 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>