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;
|