diff --git a/META.json b/META.json index 9cbc8d50..99f5aaf2 100644 --- a/META.json +++ b/META.json @@ -152,7 +152,7 @@ }, "App::Netdisco::DB" : { "file" : "lib/App/Netdisco/DB.pm", - "version" : "66" + "version" : "67" }, "App::Netdisco::DB::ExplicitLocking" : { "file" : "lib/App/Netdisco/DB/ExplicitLocking.pm" @@ -855,7 +855,7 @@ }, "homepage" : "http://netdisco.org/", "license" : [ - "http://opensource.org/licenses/bsd-license.php" + "http://opensource.org/licenses/BSD-3-Clause" ], "repository" : { "url" : "https://github.com/netdisco/netdisco" diff --git a/META.yml b/META.yml index a4683e43..a1239c63 100644 --- a/META.yml +++ b/META.yml @@ -38,7 +38,7 @@ provides: file: lib/App/Netdisco/Configuration.pm App::Netdisco::DB: file: lib/App/Netdisco/DB.pm - version: '66' + version: '67' App::Netdisco::DB::ExplicitLocking: file: lib/App/Netdisco/DB/ExplicitLocking.pm App::Netdisco::DB::Result: @@ -593,7 +593,7 @@ resources: MailingList: https://lists.sourceforge.net/lists/listinfo/netdisco-users bugtracker: https://github.com/netdisco/netdisco/issues homepage: http://netdisco.org/ - license: http://opensource.org/licenses/bsd-license.php + license: http://opensource.org/licenses/BSD-3-Clause repository: https://github.com/netdisco/netdisco version: '2.050003' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff --git a/lib/App/Netdisco/Util/Statistics.pm b/lib/App/Netdisco/Util/Statistics.pm index 8d2a46bb..dd51d6be 100644 --- a/lib/App/Netdisco/Util/Statistics.pm +++ b/lib/App/Netdisco/Util/Statistics.pm @@ -7,7 +7,7 @@ use Time::Piece; # for OO localtime use base 'Exporter'; our @EXPORT = (); -our @EXPORT_OK = qw/update_stats/; +our @EXPORT_OK = qw/pretty_version update_stats/; our %EXPORT_TAGS = (all => \@EXPORT_OK); =head1 NAME @@ -78,10 +78,23 @@ sub update_stats { }); } -# take perl or pg versions and make pretty +=head2 pretty_version ( $versionstring , $seglen ) + +Splits a string (only numbers and dots allowed) into a number of parts which +are seglen long, then removes all leading zeros from each part and returns +the parts joined by dots as one string. + +Returns the original versionstring if unallowed characters are found or seglen +is negative. + +Returns C if seglen is zero. + +=cut + sub pretty_version { my ($version, $seglen) = @_; return unless $version and $seglen; + return $version unless $seglen > 0; return $version if $version !~ m/^[0-9.]+$/; $version =~ s/\.//g; $version = (join '.', reverse map {scalar reverse} diff --git a/lib/App/Netdisco/Web/Plugin/AdminTask/PseudoDevice.pm b/lib/App/Netdisco/Web/Plugin/AdminTask/PseudoDevice.pm index a1c64268..8cfa1ae6 100644 --- a/lib/App/Netdisco/Web/Plugin/AdminTask/PseudoDevice.pm +++ b/lib/App/Netdisco/Web/Plugin/AdminTask/PseudoDevice.pm @@ -5,6 +5,8 @@ use Dancer::Plugin::Ajax; use Dancer::Plugin::DBIC; use Dancer::Plugin::Auth::Extensible; +use App::Netdisco::Util::DNS 'hostname_from_ip'; +use App::Netdisco::Util::Statistics 'pretty_version'; use App::Netdisco::Web::Plugin; use NetAddr::IP::Lite ':lower'; @@ -34,8 +36,13 @@ ajax '/ajax/control/admin/pseudodevice/add' => require_role admin => sub { my $device = schema('netdisco')->resultset('Device') ->create({ ip => param('ip'), + dns => (hostname_from_ip(param('ip')) || ''), name => param('name'), vendor => 'netdisco', + model => 'pseudodevice', + num_ports => param('ports'), + os => 'netdisco', + os_ver => pretty_version($App::Netdisco::VERSION, 3), layers => param('layers'), last_discover => \'now()', is_pseudo => \'true', @@ -43,8 +50,8 @@ ajax '/ajax/control/admin/pseudodevice/add' => require_role admin => sub { return unless $device; $device->ports->populate([ - [qw/port type/], - map {["Port$_", 'other']} @{[1 .. param('ports')]}, + [qw/port type descr/], + map {["Port$_", 'other', "Port$_"]} @{[1 .. param('ports')]}, ]); # device_ip table is used to show whether topo is "broken" @@ -68,8 +75,8 @@ ajax '/ajax/control/admin/pseudodevice/update' => require_role admin => sub { if (param('ports') > $count) { my $start = $count + 1; $device->ports->populate([ - [qw/port type/], - map {["Port$_", 'other']} @{[$start .. param('ports')]}, + [qw/port type descr/], + map {["Port$_", 'other', "Port$_"]} @{[$start .. param('ports')]}, ]); } elsif (param('ports') < $count) { @@ -88,9 +95,13 @@ ajax '/ajax/control/admin/pseudodevice/update' => require_role admin => sub { })->delete; } } + $device->update({num_ports => param('ports')}); # also set layers $device->update({layers => param('layers')}); + + # and update last_discover, since device properties changed + $device->update({last_discover => \'now()'}); }); }; diff --git a/share/schema_versions/App-Netdisco-DB-66-67-PostgreSQL.sql b/share/schema_versions/App-Netdisco-DB-66-67-PostgreSQL.sql index 9d11d53e..1586e65f 100644 --- a/share/schema_versions/App-Netdisco-DB-66-67-PostgreSQL.sql +++ b/share/schema_versions/App-Netdisco-DB-66-67-PostgreSQL.sql @@ -6,4 +6,10 @@ UPDATE device SET is_pseudo = false; UPDATE device SET is_pseudo = true WHERE vendor = 'netdisco'; +UPDATE device SET model = 'pseudodevice' WHERE vendor = 'netdisco'; + +UPDATE device SET os_ver = '2.51.0' WHERE vendor = 'netdisco' AND os_ver IS NULL; + +UPDATE device SET os = 'netdisco' WHERE vendor = 'netdisco' AND os IS NULL; + COMMIT;