56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
package App::Netdisco::Util::NodeMonitor;
 | 
						|
 | 
						|
use App::Netdisco;
 | 
						|
 | 
						|
use Dancer qw/:syntax :script/;
 | 
						|
use Dancer::Plugin::DBIC 'schema';
 | 
						|
 | 
						|
use Net::Domain 'hostfqdn';
 | 
						|
use App::Netdisco::Util::DNS qw/hostname_from_ip ipv4_from_hostname/;
 | 
						|
 | 
						|
use base 'Exporter';
 | 
						|
our @EXPORT_OK = qw/
 | 
						|
  monitor
 | 
						|
/;
 | 
						|
our %EXPORT_TAGS = (all => \@EXPORT_OK);
 | 
						|
 | 
						|
sub _email {
 | 
						|
  my ($to, $subject, $body) = @_;
 | 
						|
  return unless $to;
 | 
						|
  my $domain = (hostfqdn || 'fqdn-undefined');
 | 
						|
 | 
						|
  my $SENDMAIL = '/usr/sbin/sendmail';
 | 
						|
  open (SENDMAIL, "| $SENDMAIL -t") or die "Can't open sendmail at $SENDMAIL.\n";
 | 
						|
    print SENDMAIL "To: $to\n";
 | 
						|
    print SENDMAIL "From: Netdisco <netdisco\@$domain>\n";
 | 
						|
    print SENDMAIL "Subject: $subject\n\n";
 | 
						|
    print SENDMAIL $body;
 | 
						|
  close (SENDMAIL) or die "Can't send letter. $!\n";
 | 
						|
}
 | 
						|
 | 
						|
sub monitor {
 | 
						|
  my $monitor = schema('netdisco')->resultset('Virtual::NodeMonitor');
 | 
						|
 | 
						|
  while (my $entry = $monitor->next) {
 | 
						|
    my $body = <<"end_body";
 | 
						|
........ n e t d i s c o .........
 | 
						|
  Node    : @{[$entry->mac]} (@{[$entry->why]})
 | 
						|
  When    : @{[$entry->date]}
 | 
						|
  Switch  : @{[$entry->name]} (@{[$entry->switch]})
 | 
						|
  Port    : @{[$entry->port]} (@{[$entry->portname]})
 | 
						|
  Location: @{[$entry->location]}
 | 
						|
 | 
						|
end_body
 | 
						|
 | 
						|
    debug sprintf ' monitor - reporting on %s at %s:%s',
 | 
						|
      $entry->mac, $entry->name, $entry->port;
 | 
						|
    _email(
 | 
						|
      $entry->cc,
 | 
						|
      "Saw mac @{[$entry->mac]} (@{[$entry->why]}) on @{[$entry->name]} @{[$entry->port]}",
 | 
						|
      $body
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
1;
 |