From dd4487705963e36d21d291f78f26e7f5315bb72a Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Sat, 10 Mar 2018 09:26:00 +0000 Subject: [PATCH] #48 Node Monitor supports matching on OUI --- Changes | 7 +++++++ lib/App/Netdisco/DB.pm | 2 +- lib/App/Netdisco/DB/Result/NodeMonitor.pm | 2 ++ lib/App/Netdisco/DB/Result/Virtual/NodeMonitor.pm | 2 +- lib/App/Netdisco/Util/NodeMonitor.pm | 15 +++++++++------ .../Netdisco/Web/Plugin/AdminTask/NodeMonitor.pm | 2 ++ .../Worker/Plugin/{Monitor.pm => NodeMonitor.pm} | 2 +- share/config.yml | 3 ++- .../App-Netdisco-DB-49-50-PostgreSQL.sql | 5 +++++ share/views/ajax/admintask/nodemonitor.tt | 9 +++++++-- 10 files changed, 37 insertions(+), 12 deletions(-) rename lib/App/Netdisco/Worker/Plugin/{Monitor.pm => NodeMonitor.pm} (85%) create mode 100644 share/schema_versions/App-Netdisco-DB-49-50-PostgreSQL.sql diff --git a/Changes b/Changes index fd532969..68db4a5b 100644 --- a/Changes +++ b/Changes @@ -1,3 +1,10 @@ +2.039016 - 2018- + + [NEW FEATURES] + + * Node Montior is now included in Admin menu + * #48 Node Monitor supports matching on OUI + 2.039015 - 2018-03-05 [BUG FIXES] diff --git a/lib/App/Netdisco/DB.pm b/lib/App/Netdisco/DB.pm index e3e86ecb..ba47314b 100644 --- a/lib/App/Netdisco/DB.pm +++ b/lib/App/Netdisco/DB.pm @@ -11,7 +11,7 @@ __PACKAGE__->load_namespaces( ); our # try to hide from kwalitee - $VERSION = 49; # schema version used for upgrades, keep as integer + $VERSION = 50; # schema version used for upgrades, keep as integer use Path::Class; use File::ShareDir 'dist_dir'; diff --git a/lib/App/Netdisco/DB/Result/NodeMonitor.pm b/lib/App/Netdisco/DB/Result/NodeMonitor.pm index 87b5d36f..62f353c0 100644 --- a/lib/App/Netdisco/DB/Result/NodeMonitor.pm +++ b/lib/App/Netdisco/DB/Result/NodeMonitor.pm @@ -12,6 +12,8 @@ __PACKAGE__->table("node_monitor"); __PACKAGE__->add_columns( "mac", { data_type => "macaddr", is_nullable => 0 }, + "matchoui", + { data_type => "boolean", is_nullable => 1 }, "active", { data_type => "boolean", is_nullable => 1 }, "why", diff --git a/lib/App/Netdisco/DB/Result/Virtual/NodeMonitor.pm b/lib/App/Netdisco/DB/Result/Virtual/NodeMonitor.pm index 40813bff..86ced57d 100644 --- a/lib/App/Netdisco/DB/Result/Virtual/NodeMonitor.pm +++ b/lib/App/Netdisco/DB/Result/Virtual/NodeMonitor.pm @@ -16,7 +16,7 @@ SELECT nm.why, nm.cc, trim(trailing '.' from trim(trailing '0123456789' from dat d.name, d.location, dp.name AS portname FROM node_monitor nm, node n, device d, device_port dp -WHERE nm.mac = n.mac +WHERE ((nm.mac = n.mac) OR (nm.matchoui AND (substring(nm.mac::text from 1 for 8) = n.oui))) AND nm.active AND nm.cc IS NOT NULL AND d.ip = n.switch diff --git a/lib/App/Netdisco/Util/NodeMonitor.pm b/lib/App/Netdisco/Util/NodeMonitor.pm index 6c47e67c..ac695f6c 100644 --- a/lib/App/Netdisco/Util/NodeMonitor.pm +++ b/lib/App/Netdisco/Util/NodeMonitor.pm @@ -15,6 +15,7 @@ our %EXPORT_TAGS = (all => \@EXPORT_OK); sub _email { my ($to, $subject, $body) = @_; + return unless $to; my $domain = setting('domain_suffix') || 'localhost'; $domain =~ s/^\.//; @@ -31,7 +32,7 @@ sub monitor { my $monitor = schema('netdisco')->resultset('Virtual::NodeMonitor'); while (my $entry = $monitor->next) { - my $body = <<"end_body"; + my $body = <<"end_body"; ........ n e t d i s c o ......... Node : @{[$entry->mac]} (@{[$entry->why]}) When : @{[$entry->date]} @@ -41,11 +42,13 @@ sub monitor { end_body - _email( - $entry->cc, - "Saw mac @{[$entry->mac]} (@{[$entry->why]}) on @{[$entry->name]} @{[$entry->port]}", - $body - ); + debug sprintf ' monitor - reporting on %s at %s:%s', + $entry->mac, $entry->name, $entry->port; + _email( + $entry->cc, + "Saw mac @{[$entry->mac]} (@{[$entry->why]}) on @{[$entry->name]} @{[$entry->port]}", + $body + ); } } diff --git a/lib/App/Netdisco/Web/Plugin/AdminTask/NodeMonitor.pm b/lib/App/Netdisco/Web/Plugin/AdminTask/NodeMonitor.pm index f8483b95..59b3c1ef 100644 --- a/lib/App/Netdisco/Web/Plugin/AdminTask/NodeMonitor.pm +++ b/lib/App/Netdisco/Web/Plugin/AdminTask/NodeMonitor.pm @@ -28,6 +28,7 @@ ajax '/ajax/control/admin/nodemonitor/add' => require_role admin => sub { my $monitor = schema('netdisco')->resultset('NodeMonitor') ->create({ mac => param('mac'), + matchoui => (param('matchoui') ? \'true' : \'false'), active => (param('active') ? \'true' : \'false'), why => param('why'), cc => param('cc'), @@ -54,6 +55,7 @@ ajax '/ajax/control/admin/nodemonitor/update' => require_role admin => sub { $monitor->update({ mac => param('mac'), + matchoui => (param('matchoui') ? \'true' : \'false'), active => (param('active') ? \'true' : \'false'), why => param('why'), cc => param('cc'), diff --git a/lib/App/Netdisco/Worker/Plugin/Monitor.pm b/lib/App/Netdisco/Worker/Plugin/NodeMonitor.pm similarity index 85% rename from lib/App/Netdisco/Worker/Plugin/Monitor.pm rename to lib/App/Netdisco/Worker/Plugin/NodeMonitor.pm index 2cf41af0..0db3af56 100644 --- a/lib/App/Netdisco/Worker/Plugin/Monitor.pm +++ b/lib/App/Netdisco/Worker/Plugin/NodeMonitor.pm @@ -1,4 +1,4 @@ -package App::Netdisco::Worker::Plugin::Monitor; +package App::Netdisco::Worker::Plugin::NodeMonitor; use Dancer ':syntax'; use App::Netdisco::Worker::Plugin; diff --git a/share/config.yml b/share/config.yml index 08b80a24..487d7258 100644 --- a/share/config.yml +++ b/share/config.yml @@ -65,6 +65,7 @@ web_plugins: - Report::SubnetUtilization - Report::PortLog - AdminTask::JobQueue + - AdminTask::NodeMonitor - AdminTask::Topology - AdminTask::PollerPerformance - AdminTask::PseudoDevice @@ -376,7 +377,7 @@ worker_plugins: - 'Macsuck::WirelessNodes' - 'Macwalk' - 'MakeRancidConf' - - 'Monitor' + - 'NodeMonitor' - 'Nbtstat' - 'Nbtstat::Core' - 'Nbtwalk' diff --git a/share/schema_versions/App-Netdisco-DB-49-50-PostgreSQL.sql b/share/schema_versions/App-Netdisco-DB-49-50-PostgreSQL.sql new file mode 100644 index 00000000..91f29d7b --- /dev/null +++ b/share/schema_versions/App-Netdisco-DB-49-50-PostgreSQL.sql @@ -0,0 +1,5 @@ +BEGIN; + +ALTER TABLE node_monitor ADD COLUMN "matchoui" boolean; + +COMMIT; diff --git a/share/views/ajax/admintask/nodemonitor.tt b/share/views/ajax/admintask/nodemonitor.tt index dcd47e3e..7fc9cca1 100644 --- a/share/views/ajax/admintask/nodemonitor.tt +++ b/share/views/ajax/admintask/nodemonitor.tt @@ -3,6 +3,7 @@ Date Added MAC Address + Match OUI Enabled Reason Email @@ -13,6 +14,7 @@ + @@ -29,6 +31,9 @@ + + + @@ -73,11 +78,11 @@ $(document).ready(function() { $('#data-table').dataTable({ "columnDefs": [ { - "targets": [ 0, 2, 5 ], + "targets": [ 0, 2, 3, 6 ], "searchable": false }, { - "targets": [ 0, 2, 5 ], + "targets": [ 0, 2, 3, 6 ], "orderable": false } ],