Hi,
On 5/20/09 5:39 PM, Israel Brewster wrote:
Which is basically the same thing as hacking the Python script except
for a) having to start from scratch, and b) having to work in a language
I have little experience with :-) I was sort of hoping someone had
already done the above steps and would be willing to share :-D Oh well,
it won't take more than a couple of hours to whip the Python into shape,
and has the advantage of being self-contained, aside from some standard
Python modules (so no installing from CPAN or the like). Thanks for the
suggestion though :-)
I missed the part about Python, sorry. :D
However I wish to share with you and the rest of us this Perl script I
wrote to notify Growl.
It is based on the example provided by Net::Growl. Obviously, Net::Growl
is required. A small documentation is included too.
I hope it's bug free and will be useful to some of you. :)
--
Mathieu
#!/usr/bin/perl -w
#
# Created by Mathieu Gagné 2009
#
use strict;
use warnings;
use Net::Growl;
use Getopt::Long qw(:config no_ignore_case bundling);
# Default values
my $application = 'Nagios';
my $title = 'Alert';
my $message = '';
my $priority = 2;
my $sticky = 0;
my $destination = 'localhost';
my $password = '';
my $help = 0;
my $pod2usage = sub {
# Load Pod::Usage only if needed.
require "Pod/Usage.pm";
import Pod::Usage;
pod2usage(@_);
};
# Declare and retreive options
GetOptions(
'h|help' => \$help,
'a|application=s' => \$application,
't|title=s' => \$title,
'm|message=s' => \$message,
'P|priority=i' => \$priority,
's|sticky' => \$sticky,
'H|host=s' => \$destination,
'p|password=s' => \$password,
) or $pod2usage->(1);
# Print help
$pod2usage->(1) if $help;
# Validate options
if ( $application eq '' ) {
die "Error: Missing mandatory option: application\n";
}
if ( $title eq '' ) {
die "Error: Missing mandatory option: title\n";
}
if ( $message eq '' ) {
die "Error: Missing mandatory option: message\n";
}
if ( $priority eq '' ) {
die "Error: Missing mandatory option: priority\n";
}
if ( $password eq '' ) {
die "Error: Missing mandatory option: password\n";
}
#
# Main program
#
# Set up the Socket
my %addr = (
PeerAddr => $destination,
PeerPort => Net::Growl::GROWL_UDP_PORT,
Proto => 'udp',
);
my $s = IO::Socket::INET->new ( %addr ) || die "Could not create socket: $!\n";
# Register the application
my $p = Net::Growl::RegistrationPacket->new(
application => $application,
password => $password,
);
$p->addNotification();
print $s $p->payload();
# Send a notification
$p = Net::Growl::NotificationPacket->new(
application => $application,
title => $title,
description => $message,
priority => $priority,
sticky => $sticky,
password => $password,
);
print $s $p->payload();
close($s);
=head1 NAME
notify-growl
=head1 DESCRIPTION
Allow Nagios to send Growl Notifications over the network.
=head1 SYNOPSIS
notify-growl options
=head1 OPTIONS
=over 4
=item B<-h|--help>
Print help message and exit.
=item B<-H <hostaddress>>
Hostaddress of the destination accepting Growl Notifications over the network.
(Default: localhost)
=item B<-a|--application>
Application name used to register to Growl. (Default: Nagios)
=item B<-t|--title>
Title of the Growl notification. (Default: Alert)
=item B<-m|--message>
Message of the Growl notification.
=item B<-P|--priority>
Priority of the Growl notification. (Default: 2)
=item B<-s|--sticky>
Sticky Growl notification. (Default: no)
=item B<-p|--password>
Password to connect to the destination accepting Growl Notifications over the
network.
=back
=head1 EXAMPLES
define command {
command_name notify-host-by-growl
command_line $USER1$/notify-growl -H localhost -p password -a Nagios -t
Alert -m "$NOTIFICATIONTYPE$ Alert $HOSTNAME$[$HOSTADDRESS$] is $HOSTSTATE$"
}
define command {
command_name notify-service-by-growl
command_line $USER1$/notify-growl -H localhost -p password -a Nagios -t
Alert -m "$NOTIFICATIONTYPE$ Alert $HOSTNAME$[$HOSTADDRESS$]/$SERVICEDESC$ is
$SERVICESTATE$"
}
=cut
------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, &
iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://www.creativitycat.com
_______________________________________________
Nagios-users mailing list
Nagios-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nagios-users
::: Please include Nagios version, plugin version (-v) and OS when reporting
any issue.
::: Messages without supporting info will risk being sent to /dev/null