This commit adds a table 'device_skip' that is used to restrict job queue searches to avoid jobs that are not permitted on this backend via *_no ACLs, or jobs on devices that have previously encountered multiple SNMP timeouts. When the backend loads or a device is added, a row is added to the table if that device should not be polled on this backend (together with the job actions which are to be skipped/denied). When a device SNMP connect fails a counter in the same row (or a new row) is incremented. There is also a new report 'SNMP Connect Failures' to show the devices with non-zero SNMP connect failure counters. A configurable limit in the setting 'max_deferrals' is used to set the threshold of no longer polling the device. To reset the deferrals/failures count, restart the Netdisco backend (which regenerates 'device_skip' cache entries). Squashed commit of the following: commitb5e32c219dAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 20:55:14 2017 +0100 show all failed connections in report commitffce3cee84Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 20:12:39 2017 +0100 only resolve fqdn once commitcc4f680f01Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 20:10:20 2017 +0100 Revert "only resolve fqdn once" This reverts commit3d136a54de. commitd8d082b30eAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 20:09:05 2017 +0100 a report to show SNMP failures commit3d136a54deAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 19:37:58 2017 +0100 only resolve fqdn once commit4550b8a84cAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 17:27:43 2017 +0100 skipover now implicit from deferrals/actionset; fix sql where logic with better correlation commitb51edbccd2Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 16:11:29 2017 +0100 only abort lock if action matches badactions commit415559b24fAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 13:56:42 2017 +0100 set skipover true when adding to actionset commit1086f2c467Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 13:50:56 2017 +0100 fix empty actionset commit31962580b8Merge:9b2e993e6808133bAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 13:25:08 2017 +0100 Merge branch 'og-device_skip' of github.com:netdisco/netdisco into og-device_skip commit6808133bdbAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 13:19:54 2017 +0100 in-job checks for acls are required for netdisco-do foreground actions commit3944dd7813Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 13:18:30 2017 +0100 avoid extra device lookup commit9b2e993e0fAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 12:31:36 2017 +0100 also delete device_skip rows when deleting device commitb55854e91dAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 11:34:27 2017 +0100 actions in device_skip table are now an array/set commit5e126eef07Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 09:36:33 2017 +0100 typo commit44266f2767Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 09:14:25 2017 +0100 *able checks within jobs should not be necessary with skiplist commite7c22e7d11Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 08:58:57 2017 +0100 increment deferrals field when job is deferred commit88ae9c00baAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 08:40:27 2017 +0100 turn connect fail into defer commiteac1857043Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 23 08:26:59 2017 +0100 rename failures column to be deferrals commit96ed444bbbAuthor: Oliver Gorwits <oliver@cpan.org> Date: Mon May 22 22:52:51 2017 +0100 set up list of jobs the backend instance should skip commit3a0019296dAuthor: Oliver Gorwits <oliver@cpan.org> Date: Mon May 22 22:01:50 2017 +0100 separate out is_*able last_* checks commitcf8589aba2Author: Oliver Gorwits <oliver@cpan.org> Date: Sun May 21 22:35:38 2017 +0100 change from ignore to skip name commited193356f8Author: Oliver Gorwits <oliver@cpan.org> Date: Sun May 21 14:52:33 2017 +0100 device_ignore table to track devices to skip in polling
		
			
				
	
	
		
			148 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| use utf8;
 | |
| package App::Netdisco::DB::Result::Admin;
 | |
| 
 | |
| # Created by DBIx::Class::Schema::Loader
 | |
| # DO NOT MODIFY THE FIRST PART OF THIS FILE
 | |
| 
 | |
| use strict;
 | |
| use warnings;
 | |
| 
 | |
| use base 'DBIx::Class::Core';
 | |
| __PACKAGE__->table("admin");
 | |
| __PACKAGE__->add_columns(
 | |
|   "job",
 | |
|   {
 | |
|     data_type         => "integer",
 | |
|     is_auto_increment => 1,
 | |
|     is_nullable       => 0,
 | |
|     sequence          => "admin_job_seq",
 | |
|   },
 | |
|   "entered",
 | |
|   {
 | |
|     data_type     => "timestamp",
 | |
|     default_value => \"current_timestamp",
 | |
|     is_nullable   => 1,
 | |
|     original      => { default_value => \"now()" },
 | |
|   },
 | |
|   "started",
 | |
|   { data_type => "timestamp", is_nullable => 1 },
 | |
|   "finished",
 | |
|   { data_type => "timestamp", is_nullable => 1 },
 | |
|   "device",
 | |
|   { data_type => "inet", is_nullable => 1 },
 | |
|   "port",
 | |
|   { data_type => "text", is_nullable => 1 },
 | |
|   "action",
 | |
|   { data_type => "text", is_nullable => 1 },
 | |
|   "subaction",
 | |
|   { data_type => "text", is_nullable => 1 },
 | |
|   "status",
 | |
|   { data_type => "text", is_nullable => 1 },
 | |
|   "username",
 | |
|   { data_type => "text", is_nullable => 1 },
 | |
|   "userip",
 | |
|   { data_type => "inet", is_nullable => 1 },
 | |
|   "log",
 | |
|   { data_type => "text", is_nullable => 1 },
 | |
|   "debug",
 | |
|   { data_type => "boolean", is_nullable => 1 },
 | |
| );
 | |
| 
 | |
| 
 | |
| # Created by DBIx::Class::Schema::Loader v0.07015 @ 2012-01-07 14:20:02
 | |
| # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:gW4JW4pMgrufFIxFeYPYpw
 | |
| 
 | |
| __PACKAGE__->set_primary_key("job");
 | |
| 
 | |
| # You can replace this text with custom code or comments, and it will be preserved on regeneration
 | |
| 
 | |
| =head1 RELATIONSHIPS
 | |
| 
 | |
| =head2 device_skips( $backend?, $max_deferrals? )
 | |
| 
 | |
| Retuns the set of C<device_skip> entries which apply to this job. They match
 | |
| the device IP, current backend, and job action.
 | |
| 
 | |
| You probably want to use the ResultSet method C<skipped> which completes this
 | |
| query with a C<backend> host and C<max_deferrals> parameters (or sensible
 | |
| defaults).
 | |
| 
 | |
| =cut
 | |
| 
 | |
| __PACKAGE__->has_many( device_skips => 'App::Netdisco::DB::Result::DeviceSkip',
 | |
|   sub {
 | |
|     my $args = shift;
 | |
|     return {
 | |
|       "$args->{foreign_alias}.backend" => { '=' => \'?' },
 | |
|       "$args->{foreign_alias}.device"
 | |
|         => { -ident => "$args->{self_alias}.device" },
 | |
|       -or => [
 | |
|         { "$args->{foreign_alias}.actionset"
 | |
|             => { '@>' => \"string_to_array($args->{self_alias}.action,'')" } },
 | |
|         { "$args->{foreign_alias}.deferrals" => { '>=' => \'?' } },
 | |
|       ],
 | |
|     };
 | |
|   },
 | |
|   { cascade_copy => 0, cascade_update => 0, cascade_delete => 0 }
 | |
| );
 | |
| 
 | |
| =head1 METHODS
 | |
| 
 | |
| =head2 summary
 | |
| 
 | |
| An attempt to make a meaningful statement about the job.
 | |
| 
 | |
| =cut
 | |
| 
 | |
| sub summary {
 | |
|     my $job = shift;
 | |
|     return join ' ',
 | |
|       $job->action,
 | |
|       ($job->device || ''),
 | |
|       ($job->port || '');
 | |
| #      ($job->subaction ? (q{'}. $job->subaction .q{'}) : '');
 | |
| }
 | |
| 
 | |
| =head1 ADDITIONAL COLUMNS
 | |
| 
 | |
| =head2 entererd_stamp
 | |
| 
 | |
| Formatted version of the C<entered> field, accurate to the minute.
 | |
| 
 | |
| The format is somewhat like ISO 8601 or RFC3339 but without the middle C<T>
 | |
| between the date stamp and time stamp. That is:
 | |
| 
 | |
|  2012-02-06 12:49
 | |
| 
 | |
| =cut
 | |
| 
 | |
| sub entered_stamp  { return (shift)->get_column('entered_stamp')  }
 | |
| 
 | |
| =head2 started_stamp
 | |
| 
 | |
| Formatted version of the C<started> field, accurate to the minute.
 | |
| 
 | |
| The format is somewhat like ISO 8601 or RFC3339 but without the middle C<T>
 | |
| between the date stamp and time stamp. That is:
 | |
| 
 | |
|  2012-02-06 12:49
 | |
| 
 | |
| =cut
 | |
| 
 | |
| sub started_stamp  { return (shift)->get_column('started_stamp')  }
 | |
| 
 | |
| =head2 finished_stamp
 | |
| 
 | |
| Formatted version of the C<finished> field, accurate to the minute.
 | |
| 
 | |
| The format is somewhat like ISO 8601 or RFC3339 but without the middle C<T>
 | |
| between the date stamp and time stamp. That is:
 | |
| 
 | |
|  2012-02-06 12:49
 | |
| 
 | |
| =cut
 | |
| 
 | |
| sub finished_stamp  { return (shift)->get_column('finished_stamp')  }
 | |
| 
 | |
| 1;
 |