diff --git a/Netdisco/Changes b/Netdisco/Changes index dc235650..92ef0a81 100644 --- a/Netdisco/Changes +++ b/Netdisco/Changes @@ -1,3 +1,14 @@ +2.027005 - 2014-05-15 + + [ENHANCEMENTS] + + * Support offline update of oui.txt and MIBs bundle + * Support Dancer::Debug at runtime with DANCER_DEBUG=1 env var + + [BUG FIXES] + + * Improve VLAN Inventory performance and show all VLANs (C. Stromsoe) + 2.027004 - 2014-05-15 [BUG FIXES] diff --git a/Netdisco/Makefile.PL b/Netdisco/Makefile.PL index d707ffeb..fa9678b1 100644 --- a/Netdisco/Makefile.PL +++ b/Netdisco/Makefile.PL @@ -20,6 +20,7 @@ requires 'Dancer::Plugin::DBIC' => 0.2001; requires 'Dancer::Plugin::Auth::Extensible' => 0.30; requires 'Dancer::Plugin::Passphrase' => '2.0.1'; requires 'File::ShareDir' => 1.03; +requires 'File::Slurp' => 9999.19; requires 'Guard' => 1.022; requires 'HTML::Parser' => 3.70; requires 'HTTP::Tiny' => 0.029; diff --git a/Netdisco/bin/netdisco-deploy b/Netdisco/bin/netdisco-deploy index 7a6b57c0..bb0f5a7c 100755 --- a/Netdisco/bin/netdisco-deploy +++ b/Netdisco/bin/netdisco-deploy @@ -50,6 +50,7 @@ use Term::ANSIColor; use Archive::Extract; $Archive::Extract::PREFER_BIN = 1; +use File::Slurp (); use HTTP::Tiny; use Digest::MD5; use Try::Tiny; @@ -182,13 +183,20 @@ sub deploy_db { sub deploy_oui { my $schema = schema('netdisco'); $schema->storage->disconnect; - - my $url = 'http://standards.ieee.org/develop/regauth/oui/oui.txt'; - my $resp = HTTP::Tiny->new->get($url); + my @lines = (); my %data = (); - if ($resp->{success}) { - foreach my $line (split /\n/, $resp->{content}) { + if (@ARGV) { + @lines = File::Slurp::read_file($ARGV[0], err_mode => 'quiet'); + } + else { + my $url = 'http://standards.ieee.org/develop/regauth/oui/oui.txt'; + my $resp = HTTP::Tiny->new->get($url); + @lines = split /\n/, $resp->{content}; + } + + if (scalar @lines) { + foreach my $line (@lines) { if ($line =~ m/^\s*(.{2}-.{2}-.{2})\s+\(hex\)\s+(.*)\s*$/i) { my ($oui, $company) = ($1, $2); $oui =~ s/-/:/g; @@ -211,10 +219,15 @@ sub deploy_oui { ]); }); } + + print color 'bold blue'; + say 'OUI update complete.'; + } + else { + print color 'bold red'; + say 'OUI update failed.'; } - print color 'bold blue'; - say 'OUI update complete.'; print color 'reset'; } diff --git a/Netdisco/bin/netdisco-web-fg b/Netdisco/bin/netdisco-web-fg index f0d53bf7..7b31bf26 100755 --- a/Netdisco/bin/netdisco-web-fg +++ b/Netdisco/bin/netdisco-web-fg @@ -38,9 +38,13 @@ set plack_middlewares => [ pass_through => 1, )], # install Dancer::Debug for this... - #[ Debug => ( - # panels => [qw/Dancer::Settings Parameters Dancer::Version DBITrace/], - #)], + ( + $ENV{DANCER_DEBUG} ? + [ Debug => ( + panels => [qw/Dancer::Settings Parameters Dancer::Version DBITrace/], + )] + : () + ) ]; use App::Netdisco::Web; diff --git a/Netdisco/lib/App/Netdisco.pm b/Netdisco/lib/App/Netdisco.pm index bd2bcb94..f4b25b5e 100644 --- a/Netdisco/lib/App/Netdisco.pm +++ b/Netdisco/lib/App/Netdisco.pm @@ -165,7 +165,9 @@ take care of all this for you: ~/bin/netdisco-deploy -If this is a new installation of Netdisco 2, answer yes to all questions. +If this is a new installation of Netdisco 2, answer yes to all questions. If +you wish to deploy without Internet access, see the +L documentation. =head1 Startup diff --git a/Netdisco/lib/App/Netdisco/Manual/Deployment.pod b/Netdisco/lib/App/Netdisco/Manual/Deployment.pod index a340ea63..0ae7c5fa 100644 --- a/Netdisco/lib/App/Netdisco/Manual/Deployment.pod +++ b/Netdisco/lib/App/Netdisco/Manual/Deployment.pod @@ -28,6 +28,32 @@ the database service): # TYPE DATABASE USER ADDRESS METHOD host all all 127.0.0.1/32 md5 +=head1 Deploy without Internet access + +The C script asks for Internet access but it is possible to +install off-line. You should download the following two files: + +=over 4 + +=item * + +http://standards.ieee.org/develop/regauth/oui/oui.txt + +=item * + +http://downloads.sourceforge.net/project/netdisco/netdisco-mibs/latest-snapshot/netdisco-mibs-snapshot.tar.gz + +=back + +Run the C script but pass the OUI file name as a parameter on +the command line: + + ~/bin/netdisco-deploy ./oui.txt + +Then answer yes to questions, even though you're not connected to the +Internet. For the MIBs you can simply extract the downloaded archive to the +home directory of Netdisco. + =head1 Relocating the Installation The installation process installs Netdisco self-contained to your home @@ -110,6 +136,18 @@ You are instead recommended to run C behind a reverse proxy as described elsewhere in this document. Apache can easily act as an SSL reverse proxy. +=head1 Debug Tricks + +You can see what HTTP Headers are received by Netdisco, and other information +such as how it's parsing the config file, by enabling the Dancer debug plugin. +First download the plugin: + + ~/bin/localenv cpanm --notest Dancer::Debug + +Then run the web daemon with the environment variable to enable the feature: + + DANCER_DEBUG=1 ~/bin/netdisco-web restart + =head1 Further Reading... Other ways to run and host the web application can be found in the diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/VlanInventory.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/VlanInventory.pm index fcd6bc2c..ff14bd1c 100644 --- a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/VlanInventory.pm +++ b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/VlanInventory.pm @@ -16,19 +16,19 @@ register_report( get '/ajax/content/report/vlaninventory' => require_login sub { my $set = schema('netdisco')->resultset('DeviceVlan')->search( - { 'vlan.description' => { '!=', 'NULL' } }, + { 'me.description' => { '!=', 'NULL' } }, { join => { 'ports' => 'vlan' }, select => [ - 'vlan.vlan', - 'vlan.description', + 'me.vlan', + 'me.description', { count => { distinct => 'ports.ip' } }, { count => 'ports.vlan' } ], as => [qw/ vlan description dcount pcount /], - group_by => [qw/ vlan.vlan vlan.description /], + group_by => [qw/ me.vlan me.description /], } ); - return unless $set->count; + return unless $set->has_rows; if ( request->is_ajax ) { template 'ajax/report/vlaninventory.tt', { results => $set, },