From ed1bfa1ae706858a8301af1e3db6723d477a0f7f Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Thu, 30 May 2013 08:17:02 +0100 Subject: [PATCH] observium sparklines plugin; support X:: namespace --- Netdisco/Changes | 3 ++ Netdisco/lib/App/Netdisco/Web.pm | 3 +- Netdisco/lib/App/Netdisco/Web/Device.pm | 22 +++++++++++-- Netdisco/lib/App/Netdisco/Web/Plugin.pm | 21 ++++++++++++ .../Web/Plugin/ObserviumSparklines.pm | 15 +++++++++ Netdisco/share/views/ajax/device/ports.tt | 33 +++++++++++++++++++ .../c_observiumsparklines.tt | 2 ++ 7 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 Netdisco/lib/App/NetdiscoX/Web/Plugin/ObserviumSparklines.pm create mode 100644 Netdisco/share/views/plugin/device_port_column/c_observiumsparklines.tt diff --git a/Netdisco/Changes b/Netdisco/Changes index b26679ee..155d9191 100644 --- a/Netdisco/Changes +++ b/Netdisco/Changes @@ -11,6 +11,8 @@ * Manual Topology editing via the web * Job Queue view and delete page * Empty device table prompts initial discover on homepage + * Support for App::NetdiscoX::Web::Plugin namespace + * Observium Sparklines port column plugin [ENHANCEMENTS] @@ -20,6 +22,7 @@ * Navbar search is fuzzier * Phone node icon is a little phone handset * User icon color indicates port_control/admin ability + * Buttons for discover/macsuck/arpnip on device details page [BUG FIXES] diff --git a/Netdisco/lib/App/Netdisco/Web.pm b/Netdisco/lib/App/Netdisco/Web.pm index 32efc054..7c3221c0 100644 --- a/Netdisco/lib/App/Netdisco/Web.pm +++ b/Netdisco/lib/App/Netdisco/Web.pm @@ -21,8 +21,9 @@ sub _load_web_plugins { my $plugin_list = shift; foreach my $plugin (@$plugin_list) { + $plugin =~ s/^X::/+App::NetdiscoX::Web::Plugin::/; $plugin = 'App::Netdisco::Web::Plugin::'. $plugin - unless $plugin =~ m/^\+/; + if $plugin !~ m/^\+/; $plugin =~ s/^\+//; debug "loading Netdisco plugin $plugin"; diff --git a/Netdisco/lib/App/Netdisco/Web/Device.pm b/Netdisco/lib/App/Netdisco/Web/Device.pm index b6368918..0d333310 100644 --- a/Netdisco/lib/App/Netdisco/Web/Device.pm +++ b/Netdisco/lib/App/Netdisco/Web/Device.pm @@ -5,10 +5,12 @@ use Dancer::Plugin::Ajax; use Dancer::Plugin::DBIC; hook 'before' => sub { - # list of port detail columns - var('port_columns' => [ + my @default_port_columns_left = ( { name => 'c_admin', label => 'Port Controls', default => '' }, { name => 'c_port', label => 'Port', default => 'on' }, + ); + + my @default_port_columns_right = ( { name => 'c_descr', label => 'Description', default => '' }, { name => 'c_type', label => 'Type', default => '' }, { name => 'c_duplex', label => 'Duplex', default => '' }, @@ -24,7 +26,21 @@ hook 'before' => sub { { name => 'c_neighbors', label => 'Connected Devices', default => 'on' }, { name => 'c_stp', label => 'Spanning Tree', default => '' }, { name => 'c_up', label => 'Status', default => '' }, - ]); + ); + + # build list of port detail columns + my @port_columns = (); + + push @port_columns, + grep {$_->{position} eq 'left'} @{ setting('_extra_device_port_cols') }; + push @port_columns, @default_port_columns_left; + push @port_columns, + grep {$_->{position} eq 'mid'} @{ setting('_extra_device_port_cols') }; + push @port_columns, @default_port_columns_right; + push @port_columns, + grep {$_->{position} eq 'right'} @{ setting('_extra_device_port_cols') }; + + var('port_columns' => \@port_columns); # view settings for port connected devices var('connected_properties' => [ diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin.pm b/Netdisco/lib/App/Netdisco/Web/Plugin.pm index a2ff8d24..d83e4c26 100644 --- a/Netdisco/lib/App/Netdisco/Web/Plugin.pm +++ b/Netdisco/lib/App/Netdisco/Web/Plugin.pm @@ -4,6 +4,7 @@ use Dancer ':syntax'; use Dancer::Plugin; set( + '_extra_device_port_cols' => [], '_navbar_items' => [], '_search_tabs' => [], '_device_tabs' => [], @@ -29,6 +30,26 @@ register 'register_template_path' => sub { $path; }; +register 'register_device_port_column' => sub { + my ($self, $config) = plugin_args(@_); + $config->{default} ||= ''; + $config->{position} ||= 'right'; + + if (!length $config->{name} or !length $config->{label}) { + error "bad config to register_device_port_column"; + return; + } + + foreach my $item (@{ setting('_extra_device_port_cols') }) { + if ($item->{name} eq $config->{name}) { + $item = $config; + return; + } + } + + push @{ setting('_extra_device_port_cols') }, $config; +}; + register 'register_navbar_item' => sub { my ($self, $config) = plugin_args(@_); diff --git a/Netdisco/lib/App/NetdiscoX/Web/Plugin/ObserviumSparklines.pm b/Netdisco/lib/App/NetdiscoX/Web/Plugin/ObserviumSparklines.pm new file mode 100644 index 00000000..09e4adf1 --- /dev/null +++ b/Netdisco/lib/App/NetdiscoX/Web/Plugin/ObserviumSparklines.pm @@ -0,0 +1,15 @@ +package App::NetdiscoX::Web::Plugin::ObserviumSparklines; + +use Dancer ':syntax'; +use Dancer::Plugin::DBIC; + +use App::Netdisco::Web::Plugin; + +register_device_port_column({ + name => 'c_observiumsparklines', + position => 'mid', + label => 'Traffic', + default => 'on', +}); + +true; diff --git a/Netdisco/share/views/ajax/device/ports.tt b/Netdisco/share/views/ajax/device/ports.tt index 5ce64983..45b7d990 100644 --- a/Netdisco/share/views/ajax/device/ports.tt +++ b/Netdisco/share/views/ajax/device/ports.tt @@ -28,6 +28,17 @@ [% END %] + [% FOREACH config IN settings._extra_device_port_cols %] + [% NEXT UNLESS config.position == 'left' AND params.${config.name} %] + + [% TRY %] + [% INCLUDE "plugin/device_port_column/${config.name}.tt" %] + [% CATCH %] + + [% END %] + + [% END %] + [% IF params.c_port %] [% IF vars.user.port_control AND params.c_admin %] [% IF row.up_admin == 'up' %] @@ -52,6 +63,17 @@ [% END %] + [% FOREACH config IN settings._extra_device_port_cols %] + [% NEXT UNLESS config.position == 'mid' AND params.${config.name} %] + + [% TRY %] + [% INCLUDE "plugin/device_port_column/${config.name}.tt" %] + [% CATCH %] + + [% END %] + + [% END %] + [% IF params.c_descr %] [% row.descr | html_entity %] [% END %] @@ -229,6 +251,17 @@ [% row.up_admin.ucfirst | html_entity %] / [% row.up.ucfirst | html_entity %] [% END %] + + [% FOREACH config IN settings._extra_device_port_cols %] + [% NEXT UNLESS config.position == 'right' AND params.${config.name} %] + + [% TRY %] + [% INCLUDE "plugin/device_port_column/${config.name}.tt" %] + [% CATCH %] + + [% END %] + + [% END %] [% END %] diff --git a/Netdisco/share/views/plugin/device_port_column/c_observiumsparklines.tt b/Netdisco/share/views/plugin/device_port_column/c_observiumsparklines.tt new file mode 100644 index 00000000..ee893299 --- /dev/null +++ b/Netdisco/share/views/plugin/device_port_column/c_observiumsparklines.tt @@ -0,0 +1,2 @@ + +