torrus, UI, RT10574
authorlevinse <levinse>
Mon, 7 Feb 2011 05:20:41 +0000 (05:20 +0000)
committerlevinse <levinse>
Mon, 7 Feb 2011 05:20:41 +0000 (05:20 +0000)
FS/FS/NetworkMonitoringSystem/Torrus_Internal.pm
torrus/perllib/Torrus/Freeside.pm
torrus/perllib/Torrus/Renderer/HTML.pm
torrus/templates/default-dir.html

index 5d1bb06..736d178 100644 (file)
@@ -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) = @_;
 
index 359d544..239f55f 100644 (file)
@@ -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;
 
index 4001bae..657f66f 100644 (file)
@@ -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/".
index db18212..7eec267 100644 (file)
@@ -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>