view release on metacpan or search on metacpan
2.051002 - 2021-11-23
[BUG FIXES]
* Support names as well as IPs in SNMP report
2.051001 - 2021-11-14
[BUG FIXES]
* Remove patched CPAN::Uploader as the dist has been updated now
2.051000 - 2021-11-13
[NEW FEATURES]
* Feature to gather SNMP Walk, use as Pseudo Device, and Browse Objects
[ENHANCEMENTS]
* Allow contact|location|portname|snapshot to run on pseudo devices
2.038009 - 2018-01-10
[BUG FIXES]
* Fix for VLAN setting missing a variable declaration
2.038008 - 2018-01-09
[BUG FIXES]
* Add updated Test::More dependency to get tests passing again.
2.038007 - 2018-01-09
[BUG FIXES]
* Fix for VLAN setting missing a variable declaration
2.038006 - 2018-01-08
[ENHANCEMENTS]
* Request net-snmp-devel on Fedora/Red-Hat builds
* [#101] Add BSD install notes
* Update IP Inventory to show MAC address and have working Last Used sort
[BUG FIXES]
* Fix for node search on some formats of IPv6 addr being seen as MAC
* [#190] Ignore entries in the discover form that don't look like IP/hostname
* Delete all job queue entries (regardless of status) when deleting device
* [#15] Undiscovered Neighbor report JOIN fixed, and updated to include
the ports where Macsuck saw the MAC address of a known Device
* [#193] DBI Exception for Cisco ACE MacAddr format
2.029014 - 2014-11-19
[ENHANCEMENTS]
* [#133] Custom reports respect sorting in SQL
* [#159] Macsuck archive behaviour same as ND1 (unseen nodes remain active)
* [#161] Updated IOS-XR SSHCollector
* Additional debug levels for netdisco-do to show DBIx::Class and net-snmp
* [#107] navbar_autocomplete config item to disable main navbar autocomplete
[ENHANCEMENTS]
* Reports config is now a list (see ReleaseNotes)
* Add "AP" as a hint for WAP support
* Attempt to keep PID and logfile as netdisco user even when running as root
* Show netdisco-do docs on options error
* Do not leak SNMP community string into debug output (unless SHOW_COMMUNITY=1)
* Process tree updated to show daemon worker status/activity
* Handle management IP of one device being in use on another device
* Log at debug the vlan reindexing in macsuck
* Add docs note about database backups
* Always set DBIC_TRACE_PROFILE=console in environment
* Push a row into Device Modules for the chassis even if no module info
[BUG FIXES]
* Missing action to netdisco-do should not throw Perl error
* Sort CDP/LLDP data to be more consistent when multiple neighbors on a port
* Fixes to allow output of get_init_file to be used as init script
* Legitimate for same MAC to be in two VLANs on same switchport
* Fix for broken [#82] (/etc/hosts check during ARP IP resolv)
* Discover nodes on ports which have broken near-edge topology
* Use password instead of pass for Dancer::Plugin::DBIC
2.025001 - 2014-04-08
[NEW FEATURES]
* Web and Backend daemons will restart when deployment.yml is updated
* Web and Backend daemons will drop privilege to same uid/gid as their
on-disk files (to allow run-control symlink as non-root)
[ENHANCEMENTS]
* Use daterange for IP Subnets (same as IP Inventory)
* Run daemons as target binary's owning user (supports run control)
* Clean up library path fiddling across all scripts
* Rename housekeeping expiry task to be expire
* Refactor nbtstat to group probes by device where node was arped
0.4 2012-02-19
[NEW FEATURES]
* Sidebar can be pinned in place to keep it visible when scrolling.
0.3 2011-02-03
[NEW FEATURES]
* Browser History is updated with each tab change (HTML5 State). Also
the browser url is updated, meaning the Bookmark icon is no longer
necessary.
* Sidebar is now on the right hand side of the window, and is only
displayed when there are options for the current tab.
[ENHANCEMENTS]
* Refactor Javascript to place most in a static file, speed templating.
* Refactor Stylsheets to better organise and comment the settings.
* When Device Search sidebar is in use, strikethrough the navbar search.
bin/netdisco-backend view on Meta::CPAN
});
my ($hupit, $rotate) = (0, 0);
next unless @restart;
foreach my $f (@restart) {
if ($f->{path} eq $log_file) {
++$rotate;
}
else {
warn "-- $f->{path} updated.\n";
++$hupit;
}
}
$child = rotate_logs($child, $daemon, @program_args) if $rotate;
if ($hupit) {
signal_child('TERM', $child);
$child = fork_and_start($daemon, @program_args);
exit(1) unless $child;
}
}
bin/netdisco-do view on Meta::CPAN
B<p>reserve).
~/bin/netdisco-do delete -d 192.0.2.1
~/bin/netdisco-do delete -d 192.0.2.1 -e 'older than the sun'
~/bin/netdisco-do delete -d 192.0.2.1 -e 'older than the sun' -p yes
=head2 renumber
Change the canonical IP address of a device (specified with C<-d>). Pass the
new IP address in the C<-e> parameter. All related records such as topology,
log and node information will also be updated to refer to the new device.
Note that I<no> check is made as to whether the new IP is reachable for future
polling.
~/bin/netdisco-do renumber -d 192.0.2.1 -e 192.0.2.254
=head2 nbtstat
Run an nbtstat on the node (specified with C<-d>).
bin/netdisco-web view on Meta::CPAN
});
my ($hupit, $rotate) = (0, 0);
next unless @restart;
foreach my $f (@restart) {
if ($f->{path} eq $log_file) {
++$rotate;
}
else {
warn "-- $f->{path} updated.\n";
++$hupit;
}
}
rotate_logs($child) if $rotate;
if ($hupit) {
signal_child('TERM', $child);
warn "successfully terminated! Restarting the web server process.\n";
$child = fork_and_start($daemon, @program_args);
return unless $child;
lib/App/Netdisco/JobQueue.pm view on Meta::CPAN
job is booked but the processing node changes its mind and decides to return
the job to the queue. The C<$job> parameter must be an object which implements
the Netdisco job instance interface (see below).
Returns true if successful else returns false.
=head2 jq_complete( $job )
Marks a job as complete. The C<$job> parameter must be an object which
implements the Netdisco job instance interface (see below). The queue item's
status, log and finished fields will be updated from the passed C<$job>.
Returns true if successful else returns false.
=head2 jq_insert( \%job | [ \%job, \%job ...] )
Adds the passed jobs to the queue.
=head2 jq_delete( $id? )
If passed the ID of a job, deletes it from the queue. Otherwise deletes ALL
lib/App/Netdisco/JobQueue/PostgreSQL.pm view on Meta::CPAN
})->get_column('device')->all;
}
sub jq_lock {
my $job = shift;
return true unless $job->id;
my $happy = false;
# lock db row and update to show job has been picked
try {
my $updated = schema(vars->{'tenant'})->resultset('Admin')
->search({ job => $job->id, status => 'queued' }, { for => 'update' })
->update({
status => 'queued',
backend => setting('workers')->{'BACKEND'},
started => \"LOCALTIMESTAMP",
});
$happy = true if $updated > 0;
}
catch {
error $_;
};
return $happy;
}
sub jq_defer {
my $job = shift;
lib/App/Netdisco/Util/PortAccessEntity.pm view on Meta::CPAN
our @EXPORT_OK = qw/update_pae_attributes/;
our %EXPORT_TAGS = (all => \@EXPORT_OK);
=head1 NAME
App::Netdisco::Util::PortAccessEntity
=head1 DESCRIPTION
Helper subroutines to update PAE details in device_port_properties
These are updated both during discover and macsuck.
=cut
sub update_pae_attributes {
my ($device) = @_;
no warnings "uninitialized";
my $snmp = App::Netdisco::Transport::SNMP->reader_for($device)
or return Status->defer("pae failed: could not SNMP connect to $device");
debug sprintf ' [%s] pae - updating PortAccessEntity details', $device->ip;
lib/App/Netdisco/Worker/Plugin/Arpnip/Nodes.pm view on Meta::CPAN
use Regexp::Common 'net';
use NetAddr::MAC ();
use Time::HiRes 'gettimeofday';
register_worker({ phase => 'early',
title => 'prepare common data' }, sub {
my ($job, $workerconf) = @_;
my $device = $job->device;
# would be possible just to use LOCALTIMESTAMP on updated records, but by using this
# same value for them all, we can if we want add a job at the end to
# select and do something with the updated set (see set archive, below)
vars->{'timestamp'} = ($job->is_offline and $job->entered)
? (schema('netdisco')->storage->dbh->quote($job->entered) .'::timestamp')
: 'to_timestamp('. (join '.', gettimeofday) .')::timestamp';
#Â initialise the cache
vars->{'arps'} = [];
});
register_worker({ phase => 'store' }, sub {
my ($job, $workerconf) = @_;
lib/App/Netdisco/Worker/Plugin/Discover.pm view on Meta::CPAN
return Status->error('discover failed: unable to interpret device param')
unless defined $device;
return Status->error("discover failed: no device param (need -d ?)")
if $device->ip eq '0.0.0.0';
return Status->info("discover skipped: $device is not discoverable")
unless is_discoverable_now($device);
# would be possible just to use LOCALTIMESTAMP on updated records, but by using this
# same value for them all, we can if we want add a job at the end to
# select and do something with the updated set (see set archive, below)
vars->{'timestamp'} = ($job->is_offline and $job->entered)
? (schema('netdisco')->storage->dbh->quote($job->entered) .'::timestamp')
: 'to_timestamp('. (join '.', gettimeofday) .')::timestamp';
return Status->done('Discover is able to run.');
});
true;
lib/App/Netdisco/Worker/Plugin/Expire.pm view on Meta::CPAN
schema('netdisco')->resultset('UserLog')->search({
creation => \[q/< (LOCALTIMESTAMP - ?::interval)/,
(setting('expire_userlog') * 86400)],
})->delete();
});
}
# now update stats
update_stats();
return Status->done('Checked expiry and updated stats');
});
true;
lib/App/Netdisco/Worker/Plugin/LoadMIBs.pm view on Meta::CPAN
foreach my $row (@rows) {
my $value = (@{ thaw( decode_base64( from_json($row->{value}) ) ) })[0];
$value = (ref {} eq ref $value)
? { map {($_ => (defined $value->{$_} ? encode_base64($value->{$_}, '') : undef))}
keys %$value }
: (defined $value ? encode_base64($value, '') : undef);
$row->{value} = to_json([$value]);
}
schema('netdisco')->resultset('DeviceBrowser')->populate(\@rows);
debug sprintf 'loadmibs - updated %d legacy snapshot rows', scalar @rows;
}
});
return Status->done('Loaded MIBs');
});
true;
__DATA__
ad_lag_ports SNMP::Info::munge_port_list
lib/App/Netdisco/Worker/Plugin/Macsuck/InterfacesStatus.pm view on Meta::CPAN
next if vars->{'device_ports'}->{$port}->is_master;
debug sprintf ' [%s] macsuck - updating port %s status up/up due to node presence',
$device->ip, $port;
vars->{'device_ports'}->{$port}->set_column(up => 'up');
vars->{'device_ports'}->{$port}->set_column(up_admin => 'up');
}
}
my $updated = 0;
foreach my $port (values %{ vars->{'device_ports'} }) {
next unless $port->is_changed();
$port->update();
++$updated;
}
return Status->info(sprintf '%s interfaces status updated in database', $updated);
});
true;
lib/App/Netdisco/Worker/Plugin/Macsuck/Nodes.pm view on Meta::CPAN
use Regexp::Common 'net';
use NetAddr::MAC ();
use List::MoreUtils ();
register_worker({ phase => 'early',
title => 'prepare common data' }, sub {
my ($job, $workerconf) = @_;
my $device = $job->device;
# would be possible just to use LOCALTIMESTAMP on updated records, but by using this
# same value for them all, we can if we want add a job at the end to
# select and do something with the updated set (see set archive, below)
vars->{'timestamp'} = ($job->is_offline and $job->entered)
? (schema('netdisco')->storage->dbh->quote($job->entered) .'::timestamp')
: 'to_timestamp('. (join '.', gettimeofday) .')::timestamp';
#Â initialise the cache
vars->{'fwtable'} = {};
# cache the device ports to save hitting the database for many single rows
vars->{'device_ports'} = {map {($_->port => $_)}
$device->ports(undef, {prefetch => ['properties',
share/public/swagger-ui/swagger-ui-bundle.js.map view on Meta::CPAN
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 396b8c743e9ffbc09e47","webpack:///./node_modules/react/react.js","webpack:///./node_modules/prop-types/index.js","webpack:///./node_modules/babel-run...
share/public/swagger-ui/swagger-ui-json-tree-plugin.js view on Meta::CPAN
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var c=n(4),r="function"==typeof Symbol&&Symbol.for,f=r?Symbol.for("react.element"):60103,l=r?Symbol.for("react.portal"):60106,a=r?Symbol.for("react.fragment"):60107,o=r?Symbol.for("react.strict_mode"):60108,i=r?Symbol.for("react.profiler"):60114,s...
/*
object-assign
(c) Sindre Sorhus
@license MIT
*/var u=Object.getOwnPropertySymbols,l=Object.prototype.hasOwnProperty,c=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;fo...
//# sourceMappingURL=swagger-ui-json-tree-plugin.js.map
share/public/swagger-ui/swagger-ui-json-tree-plugin.js.map view on Meta::CPAN
{"version":3,"sources":["webpack://jsonTreePlugin/webpack/bootstrap","webpack://jsonTreePlugin/./node_modules/react/index.js","webpack://jsonTreePlugin/./src/index.js","webpack://jsonTreePlugin/./src/JSONTree.js","webpack://jsonTreePlugin/./node_modu...
share/public/swagger-ui/swagger-ui-standalone-preset.js.map view on Meta::CPAN
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 5e373a31950a06c8d2bb","webpack:///./node_modules/@kyleshockey/js-yaml/lib/js-yaml/type.js","webpack:///./node_modules/core-js/modules/_wks.js","webpa...
share/public/swagger-ui/swagger-ui.js.map view on Meta::CPAN
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap fb516ccd71e38bfe6f58","webpack:///external \"react\"","webpack:///external \"prop-types\"","webpack:///./node_modules/babel-runtime/helpers/classCall...
share/views/js/common.js view on Meta::CPAN
// csv download icon on any table page
// needs to be dynamically updated to use current search options
function update_csv_download_link (type, tab, show) {
var form = '#' + tab + '_form';
var query = $(form).serialize();
if (show.length) {
$('#nd_csv-download')
.attr('href', uri_base + '/ajax/content/' + type + '/' + tab + '?' + query)
.attr('download', 'netdisco-' + type + '-' + tab + '.csv')
.show();
}
share/views/js/device.js view on Meta::CPAN
$('#ports_pane').on('click', '.nd_collapse-vlans', function() {
$(this).siblings('.nd_collapsing').toggle();
if ($(this).find('.nd_arrow-up-down-left').hasClass('icon-chevron-up')) {
$(this).html('<div class="nd_arrow-up-down-left icon-chevron-down icon-large"></div>Hide VLANs');
}
else {
$(this).html('<div class="nd_arrow-up-down-left icon-chevron-up icon-large"></div>Show VLANs');
}
});
// refresh tooltips when the datatables table is updated
$('#ports_pane').on('draw.dt', function() {
$("[rel=tooltip]").tooltip({live: true});
});
// netmap show controls
$('#nd_showips').change(function() {
if ($(this).prop('checked')) {
graph.inspect().main.nodes.each(function(n) {
if (n['ORIG_LABEL'] != n['ID']) {
n['LABEL'] = n['ORIG_LABEL'] + ' ' + n['ID'];
share/views/password.tt view on Meta::CPAN
<div class="container">
<div class="row nd_hero-row">
<div class="span8 offset2">
[% IF vars.passchange_ok %]
<div class="alert alert-success fade in">
<a class="close" data-dismiss="alert">Ã</a>
Password successfully updated.
</div>
[% END %]
[% IF vars.passchange_failed %]
<div class="alert alert-error fade in">
<a class="close" data-dismiss="alert">Ã</a>
Incorrect current password, or new passwords did not match. Please try again.
</div>
[% END %]
<div class="hero-unit">
<h2>Change Password</h2>