observium sparklines plugin; support X:: namespace
This commit is contained in:
@@ -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]
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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' => [
|
||||
|
||||
@@ -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(@_);
|
||||
|
||||
|
||||
15
Netdisco/lib/App/NetdiscoX/Web/Plugin/ObserviumSparklines.pm
Normal file
15
Netdisco/lib/App/NetdiscoX/Web/Plugin/ObserviumSparklines.pm
Normal file
@@ -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;
|
||||
@@ -28,6 +28,17 @@
|
||||
[% END %]
|
||||
</td>
|
||||
|
||||
[% FOREACH config IN settings._extra_device_port_cols %]
|
||||
[% NEXT UNLESS config.position == 'left' AND params.${config.name} %]
|
||||
<td>
|
||||
[% TRY %]
|
||||
[% INCLUDE "plugin/device_port_column/${config.name}.tt" %]
|
||||
[% CATCH %]
|
||||
<!-- dummy content required by Template Toolkit TRY -->
|
||||
[% END %]
|
||||
</td>
|
||||
[% END %]
|
||||
|
||||
[% IF params.c_port %]
|
||||
[% IF vars.user.port_control AND params.c_admin %]
|
||||
[% IF row.up_admin == 'up' %]
|
||||
@@ -52,6 +63,17 @@
|
||||
</a></td>
|
||||
[% END %]
|
||||
|
||||
[% FOREACH config IN settings._extra_device_port_cols %]
|
||||
[% NEXT UNLESS config.position == 'mid' AND params.${config.name} %]
|
||||
<td>
|
||||
[% TRY %]
|
||||
[% INCLUDE "plugin/device_port_column/${config.name}.tt" %]
|
||||
[% CATCH %]
|
||||
<!-- dummy content required by Template Toolkit TRY -->
|
||||
[% END %]
|
||||
</td>
|
||||
[% END %]
|
||||
|
||||
[% IF params.c_descr %]
|
||||
<td nowrap>[% row.descr | html_entity %]</td>
|
||||
[% END %]
|
||||
@@ -229,6 +251,17 @@
|
||||
[% row.up_admin.ucfirst | html_entity %] / [% row.up.ucfirst | html_entity %]
|
||||
</td>
|
||||
[% END %]
|
||||
|
||||
[% FOREACH config IN settings._extra_device_port_cols %]
|
||||
[% NEXT UNLESS config.position == 'right' AND params.${config.name} %]
|
||||
<td>
|
||||
[% TRY %]
|
||||
[% INCLUDE "plugin/device_port_column/${config.name}.tt" %]
|
||||
[% CATCH %]
|
||||
<!-- dummy content required by Template Toolkit TRY -->
|
||||
[% END %]
|
||||
</td>
|
||||
[% END %]
|
||||
</tr>
|
||||
[% END %]
|
||||
</tbody>
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
<!-- not yet a hyperlink as observium does not support device details page by device-name -->
|
||||
<img src="http://[% settings.plugin_c_observiumsparklines.webhost | html_entity %]/graph.php?type=port_bits&device=[% device | uri %]&port=[% row.port | uri %]&from=-1d&to=now&width=100&height=20&legend=no"/>
|
||||
Reference in New Issue
Block a user