• [^] # Re: alertes par push Jabber

    Posté par . En réponse à la dépêche Sortie de Nagios 2.0. Évalué à 10.

    Salut,

    J'utilise aussi Nagios pour monitorer mes serveurs / reseaux depuis plusieurs années. Si ca vous interesse, j'ai une checkcommand en perl qui envoie les alarmes à un client jabber.


    #!/usr/bin/perl -w

    use strict;
    use Net::Jabber qw(Client) ;
    use Net::Jabber qw(Message) ;
    use Net::Jabber qw(Protocol) ;
    use Net::Jabber qw(Presence) ;

    use constant RECIPIENT => $ARGV[0];
    use constant SERVER => 'jabber.org';
    use constant PORT => 5222;
    use constant USER => 'xxxxx';
    use constant PASSWORD => 'xxxxx';
    use constant RESOURCE => 'perl script';
    use constant MAXWAIT => 10 ;

    use vars qw/%presence/;

    my %users;
    my $connection = Net::Jabber::Client->new();

    ########################################
    #
    # Affiche la présence en ligne
    #
    ########################################
    sub handle_presence
    {
    my ($jid, $presence) = @_;
    my $fromJID = $presence->GetFrom("jid");
    my $uid = $fromJID->GetUserID();
    if ($presence->GetType() eq "unavailable")
    {
    delete($users{$uid});
    }
    else
    {
    $users{$uid} = 1;
    }
    $presence{$jid} = $presence->GetShow() || 'normal';
    }

    my $len = scalar @ARGV;
    my @field=split(/,/,$ARGV[0]);

    if ($len ne 2)
    {
    die "Usage [jabberid] [message]\n";
    }
    $ENV{https_proxy}="http://xxxxxx:8080";
    $ENV{http_proxy}="http://xxxxxx:8080";

    $connection->SetCallBacks( "presence" => \&handle_presence );

    $connection->Connect( "hostname" => SERVER,"port" => PORT,"connectiontype" => "http") or die "Cannot connect ($!)\n";

    my @result = $connection->AuthSend( "username" => USER,"password" => PASSWORD,"resource" => RESOURCE );
    $connection->PresenceSend();

    if ($result[0] ne "ok")
    {
    die "Ident/Auth with server failed: $result[0] - $result[1]\n";
    }


    $connection->Process(2);
    sleep(3);

    foreach ( @field )
    {
    my($uid) = ($_ =~ m/(.*)\@.*/);
    if(exists $users{$uid})
    {
    my $message = Net::Jabber::Message->new();
    $ARGV[1]=~s/\\n/\n/g;
    $message->SetMessage( "to" => $_, "type" => "chat", "body" => "$ARGV[1]");
    $connection->Send($message);
    sleep(MAXWAIT);
    }
    }
    $connection->Disconnect();
    exit;


    Il s'utilise en donnant les jabberid séparés par des virgules ainsi que le message. C'est un peu brut, à vous de l'améliorer...