#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 warnings; | ||||
|  | ||||
| use Try::Tiny; | ||||
| use NetAddr::IP::Lite ':lower'; | ||||
| require Dancer::Logger; | ||||
|  | ||||
| =head1 ADDITIONAL METHODS | ||||
|  | ||||
| @@ -591,12 +594,23 @@ handle the removal or archiving of nodes. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| sub _plural { (shift || 0) == 1 ? 'entry' : 'entries' }; | ||||
|  | ||||
| sub delete { | ||||
|   my $self = shift; | ||||
|  | ||||
|   my $schema = $self->result_source->schema; | ||||
|   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/ | ||||
|     DeviceIp | ||||
|     DeviceVlan | ||||
| @@ -604,9 +618,12 @@ sub delete { | ||||
|     DeviceModule | ||||
|     Community | ||||
|   /) { | ||||
|       $schema->resultset($set)->search( | ||||
|       my $gone = $schema->resultset($set)->search( | ||||
|         { ip => { '-in' => $devices->as_query } }, | ||||
|       )->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/ | ||||
| @@ -618,13 +635,16 @@ sub delete { | ||||
|       )->delete; | ||||
|   } | ||||
|  | ||||
|   $schema->resultset('Topology')->search({ | ||||
|   my $gone = $schema->resultset('Topology')->search({ | ||||
|     -or => [ | ||||
|       { dev1 => { '-in' => $devices->as_query } }, | ||||
|       { dev2 => { '-in' => $devices->as_query } }, | ||||
|     ], | ||||
|   })->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( | ||||
|     { ip => { '-in' => $devices->as_query } }, | ||||
|   )->delete(@_); | ||||
|   | ||||
| @@ -4,6 +4,9 @@ use base 'App::Netdisco::DB::ResultSet'; | ||||
| use strict; | ||||
| use warnings; | ||||
|  | ||||
| use Try::Tiny; | ||||
| require Dancer::Logger; | ||||
|  | ||||
| __PACKAGE__->load_components(qw/ | ||||
|   +App::Netdisco::DB::ExplicitLocking | ||||
| /); | ||||
| @@ -222,12 +225,23 @@ handle the removal or archiving of nodes. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| sub _plural { (shift || 0) == 1 ? 'entry' : 'entries' }; | ||||
|  | ||||
| sub delete { | ||||
|   my $self = shift; | ||||
|  | ||||
|   my $schema = $self->result_source->schema; | ||||
|   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/ | ||||
|     DevicePortPower | ||||
|     DevicePortProperties | ||||
| @@ -235,9 +249,12 @@ sub delete { | ||||
|     DevicePortWireless | ||||
|     DevicePortSsid | ||||
|   /) { | ||||
|       $schema->resultset($set)->search( | ||||
|       my $gone = $schema->resultset($set)->search( | ||||
|         { ip => { '-in' => $ports->as_query }}, | ||||
|       )->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( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user