#476 log on delete for rows from related tables
This commit is contained in:
@@ -3,7 +3,10 @@ use base 'App::Netdisco::DB::ResultSet';
|
|||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
|
use Try::Tiny;
|
||||||
use NetAddr::IP::Lite ':lower';
|
use NetAddr::IP::Lite ':lower';
|
||||||
|
require Dancer::Logger;
|
||||||
|
|
||||||
=head1 ADDITIONAL METHODS
|
=head1 ADDITIONAL METHODS
|
||||||
|
|
||||||
@@ -591,12 +594,23 @@ handle the removal or archiving of nodes.
|
|||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
|
sub _plural { (shift || 0) == 1 ? 'entry' : 'entries' };
|
||||||
|
|
||||||
sub delete {
|
sub delete {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $schema = $self->result_source->schema;
|
my $schema = $self->result_source->schema;
|
||||||
my $devices = $self->search(undef, { columns => 'ip' });
|
my $devices = $self->search(undef, { columns => 'ip' });
|
||||||
|
|
||||||
|
my $ip = undef;
|
||||||
|
{
|
||||||
|
no autovivification;
|
||||||
|
try { $ip ||= $devices->{attrs}->{where}->{ip} };
|
||||||
|
try { $ip ||= $devices->{attrs}->{where}->{'me.ip'} };
|
||||||
|
}
|
||||||
|
die "cannot find IP address in \$devices query for delete\n"
|
||||||
|
unless $ip;
|
||||||
|
|
||||||
foreach my $set (qw/
|
foreach my $set (qw/
|
||||||
DeviceIp
|
DeviceIp
|
||||||
DeviceVlan
|
DeviceVlan
|
||||||
@@ -604,9 +618,12 @@ sub delete {
|
|||||||
DeviceModule
|
DeviceModule
|
||||||
Community
|
Community
|
||||||
/) {
|
/) {
|
||||||
$schema->resultset($set)->search(
|
my $gone = $schema->resultset($set)->search(
|
||||||
{ ip => { '-in' => $devices->as_query } },
|
{ ip => { '-in' => $devices->as_query } },
|
||||||
)->delete;
|
)->delete;
|
||||||
|
|
||||||
|
Dancer::Logger::debug sprintf ' [%s] db/device - removed %d %s from %s',
|
||||||
|
$ip, $gone, _plural($gone), $set if defined Dancer::Logger::logger();
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach my $set (qw/
|
foreach my $set (qw/
|
||||||
@@ -618,13 +635,16 @@ sub delete {
|
|||||||
)->delete;
|
)->delete;
|
||||||
}
|
}
|
||||||
|
|
||||||
$schema->resultset('Topology')->search({
|
my $gone = $schema->resultset('Topology')->search({
|
||||||
-or => [
|
-or => [
|
||||||
{ dev1 => { '-in' => $devices->as_query } },
|
{ dev1 => { '-in' => $devices->as_query } },
|
||||||
{ dev2 => { '-in' => $devices->as_query } },
|
{ dev2 => { '-in' => $devices->as_query } },
|
||||||
],
|
],
|
||||||
})->delete;
|
})->delete;
|
||||||
|
|
||||||
|
Dancer::Logger::debug sprintf ' [%s] db/device - removed %d manual topology %s',
|
||||||
|
$ip, $gone, _plural($gone) if defined Dancer::Logger::logger();
|
||||||
|
|
||||||
$schema->resultset('DevicePort')->search(
|
$schema->resultset('DevicePort')->search(
|
||||||
{ ip => { '-in' => $devices->as_query } },
|
{ ip => { '-in' => $devices->as_query } },
|
||||||
)->delete(@_);
|
)->delete(@_);
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ use base 'App::Netdisco::DB::ResultSet';
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
|
use Try::Tiny;
|
||||||
|
require Dancer::Logger;
|
||||||
|
|
||||||
__PACKAGE__->load_components(qw/
|
__PACKAGE__->load_components(qw/
|
||||||
+App::Netdisco::DB::ExplicitLocking
|
+App::Netdisco::DB::ExplicitLocking
|
||||||
/);
|
/);
|
||||||
@@ -222,12 +225,23 @@ handle the removal or archiving of nodes.
|
|||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
|
sub _plural { (shift || 0) == 1 ? 'entry' : 'entries' };
|
||||||
|
|
||||||
sub delete {
|
sub delete {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $schema = $self->result_source->schema;
|
my $schema = $self->result_source->schema;
|
||||||
my $ports = $self->search(undef, { columns => 'ip' });
|
my $ports = $self->search(undef, { columns => 'ip' });
|
||||||
|
|
||||||
|
my $ip = undef;
|
||||||
|
{
|
||||||
|
no autovivification;
|
||||||
|
try { $ip ||= ${ $ports->{attrs}->{where}->{ip}->{'-in'} }->[1]->[1] };
|
||||||
|
try { $ip ||= $ports->{attrs}->{where}->{'me.ip'} };
|
||||||
|
}
|
||||||
|
die "cannot find IP address in \$ports query for delete\n"
|
||||||
|
unless $ip;
|
||||||
|
|
||||||
foreach my $set (qw/
|
foreach my $set (qw/
|
||||||
DevicePortPower
|
DevicePortPower
|
||||||
DevicePortProperties
|
DevicePortProperties
|
||||||
@@ -235,9 +249,12 @@ sub delete {
|
|||||||
DevicePortWireless
|
DevicePortWireless
|
||||||
DevicePortSsid
|
DevicePortSsid
|
||||||
/) {
|
/) {
|
||||||
$schema->resultset($set)->search(
|
my $gone = $schema->resultset($set)->search(
|
||||||
{ ip => { '-in' => $ports->as_query }},
|
{ ip => { '-in' => $ports->as_query }},
|
||||||
)->delete;
|
)->delete;
|
||||||
|
|
||||||
|
Dancer::Logger::debug sprintf ' [%s] db/ports - removed %d port %s from %s',
|
||||||
|
$ip, $gone, _plural($gone), $set if defined Dancer::Logger::logger();
|
||||||
}
|
}
|
||||||
|
|
||||||
$schema->resultset('Node')->search(
|
$schema->resultset('Node')->search(
|
||||||
|
|||||||
Reference in New Issue
Block a user