From 8dca426e92f9b424120ecb4038c2b6bfebe9977a Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Wed, 24 Apr 2013 22:18:04 +0100 Subject: [PATCH] select MAC Address display format on Node and Device Port search --- Netdisco/Changes | 1 + Netdisco/lib/App/Netdisco/DB/Result/Node.pm | 10 ++++++++++ Netdisco/lib/App/Netdisco/DB/Result/NodeIp.pm | 10 ++++++++++ Netdisco/lib/App/Netdisco/Web/Device.pm | 6 ++++++ Netdisco/share/public/css/netdisco.css | 13 +++++++++++++ Netdisco/share/views/ajax/device/ports.tt | 3 ++- Netdisco/share/views/ajax/search/node_by_ip.tt | 3 ++- Netdisco/share/views/ajax/search/node_by_mac.tt | 6 ++++-- Netdisco/share/views/sidebar/device/ports.tt | 10 +++++++++- Netdisco/share/views/sidebar/search/node.tt | 8 ++++++++ 10 files changed, 65 insertions(+), 5 deletions(-) diff --git a/Netdisco/Changes b/Netdisco/Changes index 0e17d402..af8e62d0 100644 --- a/Netdisco/Changes +++ b/Netdisco/Changes @@ -5,6 +5,7 @@ * Finally we have a discover/refresh daemon job :) * Also... a Scheduler which removes need for crontab installation * The netdisco-do script can run a one-off discover for a device + * Can select MAC Address display format on Node and Device Port search [ENHANCEMENTS] diff --git a/Netdisco/lib/App/Netdisco/DB/Result/Node.pm b/Netdisco/lib/App/Netdisco/DB/Result/Node.pm index bd91a6da..746e277e 100644 --- a/Netdisco/lib/App/Netdisco/DB/Result/Node.pm +++ b/Netdisco/lib/App/Netdisco/DB/Result/Node.pm @@ -7,6 +7,8 @@ package App::Netdisco::DB::Result::Node; use strict; use warnings; +use Net::MAC; + use base 'DBIx::Class::Core'; __PACKAGE__->table("node"); __PACKAGE__->add_columns( @@ -134,4 +136,12 @@ between the date stamp and time stamp. That is: sub time_last_stamp { return (shift)->get_column('time_last_stamp') } +=head2 net_mac + +Returns the C column instantiated into a L object. + +=cut + +sub net_mac { return Net::MAC->new(mac => (shift)->mac) } + 1; diff --git a/Netdisco/lib/App/Netdisco/DB/Result/NodeIp.pm b/Netdisco/lib/App/Netdisco/DB/Result/NodeIp.pm index 6711fbd9..2d451c63 100644 --- a/Netdisco/lib/App/Netdisco/DB/Result/NodeIp.pm +++ b/Netdisco/lib/App/Netdisco/DB/Result/NodeIp.pm @@ -7,6 +7,8 @@ package App::Netdisco::DB::Result::NodeIp; use strict; use warnings; +use Net::MAC; + use base 'DBIx::Class::Core'; __PACKAGE__->table("node_ip"); __PACKAGE__->add_columns( @@ -206,4 +208,12 @@ between the date stamp and time stamp. That is: sub time_last_stamp { return (shift)->get_column('time_last_stamp') } +=head2 net_mac + +Returns the C column instantiated into a L object. + +=cut + +sub net_mac { return Net::MAC->new(mac => (shift)->mac) } + 1; diff --git a/Netdisco/lib/App/Netdisco/Web/Device.pm b/Netdisco/lib/App/Netdisco/Web/Device.pm index 7155747b..7f2a5c66 100644 --- a/Netdisco/lib/App/Netdisco/Web/Device.pm +++ b/Netdisco/lib/App/Netdisco/Web/Device.pm @@ -51,6 +51,7 @@ hook 'before' => sub { if (not param('tab') or param('tab') ne 'ports') { params->{'age_num'} = 3; params->{'age_unit'} = 'months'; + params->{'mac_format'} = 'IEEE'; } }; @@ -62,8 +63,13 @@ hook 'before_template' => sub { tab => 'ports', age_num => 3, age_unit => 'months', + mac_format => 'IEEE', }); + # for Net::MAC method + $tokens->{mac_format_call} = 'as_'. params->{'mac_format'} + if params->{'mac_format'}; + foreach my $col (@{ var('port_columns') }) { next unless $col->{default} eq 'on'; $tokens->{device_ports}->query_param($col->{name}, 'checked'); diff --git a/Netdisco/share/public/css/netdisco.css b/Netdisco/share/public/css/netdisco.css index 1e332d39..feaa9188 100644 --- a/Netdisco/share/public/css/netdisco.css +++ b/Netdisco/share/public/css/netdisco.css @@ -252,6 +252,19 @@ td { width: 95px; } +/* set the MAC format drop-down width */ +#nd_mac_format { + margin-top: 4px; + width: 154px; +} + +/* set the MAC format drop-down width */ +#nd_node_mac_format { + margin-left: -2px; + margin-top: 4px; + width: 165px; +} + /* sidebar submit button width and spacing from Node Props */ .sidebar button { margin-top: 9px; diff --git a/Netdisco/share/views/ajax/device/ports.tt b/Netdisco/share/views/ajax/device/ports.tt index c854ea72..7205e38f 100644 --- a/Netdisco/share/views/ajax/device/ports.tt +++ b/Netdisco/share/views/ajax/device/ports.tt @@ -196,7 +196,8 @@ [% FOREACH node IN row.$nodes %] [% '
' IF row.remote_ip OR NOT loop.first %] [% 'A  ' IF NOT node.active %] - [% node.mac | html_entity %] + + [% node.net_mac.$mac_format_call | html_entity %] [% ' (' _ node.time_last_age _ ')' IF params.n_age %] [% IF params.n_ip %] [% FOREACH ip IN node.ips %] diff --git a/Netdisco/share/views/ajax/search/node_by_ip.tt b/Netdisco/share/views/ajax/search/node_by_ip.tt index 896ab5a9..6a994705 100644 --- a/Netdisco/share/views/ajax/search/node_by_ip.tt +++ b/Netdisco/share/views/ajax/search/node_by_ip.tt @@ -17,7 +17,8 @@ [% WHILE (row = macs.next) %] [% row.mac | html_entity %] + href="[% search_node %]&q=[% row.net_mac.$mac_format_call | uri %]"> + [% row.net_mac.$mac_format_call | html_entity %] [% IF params.vendor %] [% row.oui.company | html_entity %] [% END %] diff --git a/Netdisco/share/views/ajax/search/node_by_mac.tt b/Netdisco/share/views/ajax/search/node_by_mac.tt index 63638d80..34e445b9 100644 --- a/Netdisco/share/views/ajax/search/node_by_mac.tt +++ b/Netdisco/share/views/ajax/search/node_by_mac.tt @@ -20,7 +20,8 @@ [% IF first_row %] [% row.mac | html_entity %] + href="[% search_node %]&q=[% row.net_mac.$mac_format_call | uri %]"> + [% row.net_mac.$mac_format_call | html_entity %] [% ELSE %]   [% END %] @@ -51,7 +52,8 @@ [% IF first_row %] [% node.mac | html_entity %] + href="[% search_node %]&q=[% node.net_mac.$mac_format_call | uri %]"> + [% node.net_mac.$mac_format_call | html_entity %] [% ELSE %]   [% END %] diff --git a/Netdisco/share/views/sidebar/device/ports.tt b/Netdisco/share/views/sidebar/device/ports.tt index ea432913..ced30ea8 100644 --- a/Netdisco/share/views/sidebar/device/ports.tt +++ b/Netdisco/share/views/sidebar/device/ports.tt @@ -76,7 +76,7 @@
  • - Mark as Free if Down for:
    + Mark as Free if Down for:
    + [% FOREACH format IN [ 'IEEE', 'Cisco', 'Microsoft', 'Sun' ] %] + [% format %] + [% END %] + +
  • [% FOREACH item IN vars.connected_properties %]
+
+ MAC address format:
+ +