| 1 |
#!/usr/bin/perl |
| 2 |
# |
| 3 |
# Author David Cox |
| 4 |
# Created from various code examples found on the web |
| 5 |
# Last Modified 08/06/2002 |
| 6 |
# Feel free to use or modify as needed to suit your needs |
| 7 |
# |
| 8 |
# Last Modified 11/03/2009 by Joenio Costa <joenio@perl.org.br> |
| 9 |
# - Works with Nagios3 |
| 10 |
# - Add option to log DEBUG |
| 11 |
# |
| 12 |
####################################################### |
| 13 |
# MAXWAIT is used because the send message function didn't seem to |
| 14 |
# like being called to fast. The message would be sent unless I waited a second |
| 15 |
# or so. You can experiment with it but I just went with 2 seconds. |
| 16 |
####################################################### |
| 17 |
# |
| 18 |
# released under the terms of the GNU General Public License v3 |
| 19 |
|
| 20 |
use strict; |
| 21 |
use Net::Jabber; |
| 22 |
|
| 23 |
use constant SERVER => 'jabber.org'; |
| 24 |
use constant PORT => 5222; |
| 25 |
use constant USER => 'username'; |
| 26 |
use constant PASSWORD => 'password'; |
| 27 |
use constant RESOURCE => 'resource'; |
| 28 |
use constant MAXWAIT => 2; |
| 29 |
use constant DEBUGLEVEL => 0; |
| 30 |
use constant DEBUGFILE => "/tmp/notify_by_jabber.log"; |
| 31 |
|
| 32 |
open STDERR, '>', DEBUGFILE if DEBUGLEVEL; |
| 33 |
|
| 34 |
if (scalar @ARGV < 2) { |
| 35 |
die "Usage...\n $0 [jabberid] [message]\n"; |
| 36 |
} |
| 37 |
|
| 38 |
my @RECIPIENTS = split(/,/, shift @ARGV); |
| 39 |
my $MESSAGE = "@ARGV"; |
| 40 |
|
| 41 |
printf STDERR "Connecting to server %s on port %s\n", SERVER, PORT if DEBUGLEVEL; |
| 42 |
|
| 43 |
my $connection = Net::Jabber::Client->new(debuglevel => DEBUGLEVEL, debugfile => DEBUGFILE . "_net_jabber.log"); |
| 44 |
$connection->Connect( "hostname" => SERVER, "port" => PORT ) or die "Cannot connect ($!)\n"; |
| 45 |
|
| 46 |
printf STDERR "Anthenticating user %s in resource %s... ", USER, RESOURCE if DEBUGLEVEL; |
| 47 |
|
| 48 |
my @result = $connection->AuthSend( "username" => USER, "password" => PASSWORD, "resource" => RESOURCE ); |
| 49 |
|
| 50 |
print STDERR $result[0], "\n" if DEBUGLEVEL; |
| 51 |
|
| 52 |
if ($result[0] ne "ok") { |
| 53 |
die "Ident/Auth with server failed: $result[0] - $result[1]\n"; |
| 54 |
} |
| 55 |
|
| 56 |
foreach ( @RECIPIENTS ) { |
| 57 |
print STDERR "Sending message to $_\n" if DEBUGLEVEL; |
| 58 |
print STDERR " $MESSAGE\n" if DEBUGLEVEL; |
| 59 |
eval { |
| 60 |
my $message = Net::Jabber::Message->new(); |
| 61 |
$message->SetMessage( "to" => $_, "subject" => "Notification", "type" => "chat", "body" => $MESSAGE ); |
| 62 |
$connection->Send($message); |
| 63 |
}; |
| 64 |
print STDERR "$@" if $@ && DEBUGLEVEL; |
| 65 |
sleep(MAXWAIT); |
| 66 |
} |
| 67 |
|
| 68 |
print STDERR "Closing connection\n" if DEBUGLEVEL; |
| 69 |
$connection->Disconnect(); |
| 70 |
|
| 71 |
close STDERR if DEBUGLEVEL; |
| 72 |
|
| 73 |
exit 0; |