Merge branch 'master' into og-pluggable-daemon

This commit is contained in:
Oliver Gorwits
2014-05-21 21:18:58 +01:00
7 changed files with 85 additions and 16 deletions

View File

@@ -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 2.027004 - 2014-05-15
[BUG FIXES] [BUG FIXES]

View File

@@ -20,6 +20,7 @@ requires 'Dancer::Plugin::DBIC' => 0.2001;
requires 'Dancer::Plugin::Auth::Extensible' => 0.30; requires 'Dancer::Plugin::Auth::Extensible' => 0.30;
requires 'Dancer::Plugin::Passphrase' => '2.0.1'; requires 'Dancer::Plugin::Passphrase' => '2.0.1';
requires 'File::ShareDir' => 1.03; requires 'File::ShareDir' => 1.03;
requires 'File::Slurp' => 9999.19;
requires 'Guard' => 1.022; requires 'Guard' => 1.022;
requires 'HTML::Parser' => 3.70; requires 'HTML::Parser' => 3.70;
requires 'HTTP::Tiny' => 0.029; requires 'HTTP::Tiny' => 0.029;

View File

@@ -50,6 +50,7 @@ use Term::ANSIColor;
use Archive::Extract; use Archive::Extract;
$Archive::Extract::PREFER_BIN = 1; $Archive::Extract::PREFER_BIN = 1;
use File::Slurp ();
use HTTP::Tiny; use HTTP::Tiny;
use Digest::MD5; use Digest::MD5;
use Try::Tiny; use Try::Tiny;
@@ -182,13 +183,20 @@ sub deploy_db {
sub deploy_oui { sub deploy_oui {
my $schema = schema('netdisco'); my $schema = schema('netdisco');
$schema->storage->disconnect; $schema->storage->disconnect;
my @lines = ();
my $url = 'http://standards.ieee.org/develop/regauth/oui/oui.txt';
my $resp = HTTP::Tiny->new->get($url);
my %data = (); my %data = ();
if ($resp->{success}) { if (@ARGV) {
foreach my $line (split /\n/, $resp->{content}) { @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) { if ($line =~ m/^\s*(.{2}-.{2}-.{2})\s+\(hex\)\s+(.*)\s*$/i) {
my ($oui, $company) = ($1, $2); my ($oui, $company) = ($1, $2);
$oui =~ s/-/:/g; $oui =~ s/-/:/g;
@@ -211,10 +219,15 @@ sub deploy_oui {
]); ]);
}); });
} }
}
print color 'bold blue'; print color 'bold blue';
say 'OUI update complete.'; say 'OUI update complete.';
}
else {
print color 'bold red';
say 'OUI update failed.';
}
print color 'reset'; print color 'reset';
} }

View File

@@ -38,9 +38,13 @@ set plack_middlewares => [
pass_through => 1, pass_through => 1,
)], )],
# install Dancer::Debug for this... # 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; use App::Netdisco::Web;

View File

@@ -165,7 +165,9 @@ take care of all this for you:
~/bin/netdisco-deploy ~/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<Deployment|App::Netdisco::Manual::Deployment> documentation.
=head1 Startup =head1 Startup

View File

@@ -28,6 +28,32 @@ the database service):
# TYPE DATABASE USER ADDRESS METHOD # TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 md5 host all all 127.0.0.1/32 md5
=head1 Deploy without Internet access
The C<netdisco-deploy> 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<netdisco-deploy> 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 =head1 Relocating the Installation
The installation process installs Netdisco self-contained to your home The installation process installs Netdisco self-contained to your home
@@ -110,6 +136,18 @@ You are instead recommended to run C<netdisco-web> behind a reverse proxy as
described elsewhere in this document. Apache can easily act as an SSL reverse described elsewhere in this document. Apache can easily act as an SSL reverse
proxy. 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... =head1 Further Reading...
Other ways to run and host the web application can be found in the Other ways to run and host the web application can be found in the

View File

@@ -16,19 +16,19 @@ register_report(
get '/ajax/content/report/vlaninventory' => require_login sub { get '/ajax/content/report/vlaninventory' => require_login sub {
my $set = schema('netdisco')->resultset('DeviceVlan')->search( my $set = schema('netdisco')->resultset('DeviceVlan')->search(
{ 'vlan.description' => { '!=', 'NULL' } }, { 'me.description' => { '!=', 'NULL' } },
{ join => { 'ports' => 'vlan' }, { join => { 'ports' => 'vlan' },
select => [ select => [
'vlan.vlan', 'me.vlan',
'vlan.description', 'me.description',
{ count => { distinct => 'ports.ip' } }, { count => { distinct => 'ports.ip' } },
{ count => 'ports.vlan' } { count => 'ports.vlan' }
], ],
as => [qw/ vlan description dcount pcount /], 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 ) { if ( request->is_ajax ) {
template 'ajax/report/vlaninventory.tt', { results => $set, }, template 'ajax/report/vlaninventory.tt', { results => $set, },