Project

General

Profile

Install notify-by-jabber ยป notify-by-jabber.pl

chin-yeh, 09/08/2010 05:37 PM

 
#!/usr/bin/perl -w
#
# script for nagios notify via Jabber / Google Talk Instant Messaging
# using XMPP protocol and SASL PLAIN authentication.
#
# author: Andrew Elwell <A.Elwell@physics.gla.ac.uk>
# based on work by Thus0 <Thus0@free.fr> and David Cox
#
# released under the terms of the GNU General Public License v2
# Copyright 2007 Andrew Elwell.

use strict;
use Net::XMPP;

## Configuration
my $username = "ecosway.nagios";
my $password = "ecosway.nagiosgm";
my $resource = "nagios";
## End of configuration


my $len = scalar @ARGV;
if ($len ne 2) {
die "Usage...\n $0 [jabberid] [message]\n";
}
my @field=split(/,/,$ARGV[0]);
#------------------------------------

# Google Talk & Jabber parameters :

my $hostname = 'talk.google.com';
my $port = 5222;
my $componentname = 'gmail.com';
my $connectiontype = 'tcpip';
my $tls = 1;

#------------------------------------

my $Connection = new Net::XMPP::Client();

# Connect to talk.google.com
my $status = $Connection->Connect(
hostname => $hostname, port => $port,
componentname => $componentname,
connectiontype => $connectiontype, tls => $tls);

if (!(defined($status))) {
print "ERROR: XMPP connection failed.\n";
print " ($!)\n";
exit(0);
}

# Change hostname
my $sid = $Connection->{SESSION}->{id};
$Connection->{STREAM}->{SIDS}->{$sid}->{hostname} = $componentname;

# Authenticate
my @result = $Connection->AuthSend(
username => $username, password => $password,
resource => $resource);

if ($result[0] ne "ok") {
print "ERROR: Authorization failed: $result[0] - $result[1]\n";
exit(0);
}

# Send messages
foreach ( @field ) {
$Connection->MessageSend(
to => "$_\@$componentname",
resource => $resource,
subject => "Notification",
type => "chat",
body => $ARGV[1]);
}
    (1-1/1)