From 0fbb34b2c44101979a3423b9c591eb66fcf9ba02 Mon Sep 17 00:00:00 2001 From: Rodolphe Quiedeville Date: Thu, 14 Oct 2010 02:01:42 +0200 Subject: [PATCH] Ported by Cerien to 1.6 --- plugins/other/asterisk_sippeers | 239 ++++++++++++++++++++++---------- 1 file changed, 168 insertions(+), 71 deletions(-) diff --git a/plugins/other/asterisk_sippeers b/plugins/other/asterisk_sippeers index 02ebd237..5bad961d 100755 --- a/plugins/other/asterisk_sippeers +++ b/plugins/other/asterisk_sippeers @@ -1,71 +1,168 @@ -#!/usr/bin/perl -w -# -# Copyright (C) 2009 Paul McCormack -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; version 2 dated June, -# 1991. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# If you improve this script please send your version to my email address -# with the copyright notice upgrade with your name. -# -# Plugin to monitor number of sip peers registered -# -# -#%# family=asterisk - -use strict; - -if ($ARGV[0] and $ARGV[0] eq "autoconf") -{ - print "yes\n"; - exit 0; -} - -if ($ARGV[0] and $ARGV[0] eq "config") -{ - print "graph_title Asterisk connected sip peers\n"; - print "graph_args --base 1000 -l 0\n"; - print "graph_vlabel peers\n"; - print "graph_category asterisk\n"; - print "peers_online.label peers online\n"; - print "peers_offline.label peers offline\n"; - print "unmon_online.label unmonitored online\n"; - print "unmon_offline.label unmonitored offline\n"; - print "peers_offline.warning 1\n"; - print "peers_offline.critical 2\n"; - exit 0; -} - -open(LINE, 'asterisk -rx "sip show peers"|'); - -my ($online)=(0,0); -my ($offline)=(0,0); -my ($unmon_online)=(0,0); -my ($unmon_offline)=(0,0); - -while () -{ - $online = $1 if ($_ =~ /Monitored: (\d+) online/); - $offline = $1 if ($_ =~ /Monitored: \d+ online, (\d+) offline/); - $unmon_online = $1 if ($_ =~ /Unmonitored: (\d+) online/); - $unmon_offline = $1 if ($_ =~ /Unmonitored: \d+ online, (\d+) offline/); -} - -close(LINE); - -print "peers_online.value $online\n"; -print "peers_offline.value $offline\n"; -print "unmon_online.value $unmon_online\n"; -print "unmon_offline.value $unmon_offline\n"; - +#!/usr/bin/perl -w +# -*- perl -*- + +=head1 NAME + +asterix_sippeers - Plugin to monitor number of sip peers registered + +=head1 CONFIGURATION + +The following configuration parameters are used by this plugin + + [asterisk_sippeers] + env.host - hostname to connect to + env.port - port number to connect to + env.username - username used for authentication + env.secret - secret used for authentication + +The "username" and "secret" parameters are mandatory, and have no +defaults. + +=head2 DEFAULT CONFIGURATION + + [asterisk_sippeers] + env.host 127.0.0.1 + env.port 5038 + +=head1 AUTHOR + +Copyright (C) 2005 Rodolphe Quiedeville + +Ported to Asterisk 1.6 by cerien.jean@gmail.com + +=head1 LICENSE + +Gnu GPLv2 + +=begin comment + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 dated June, 1991. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +USA. + +If you improve this script please send your version to my email +address with the copyright notice upgrade with your name. + +=end comment + +=head1 MAGIC MARKERS + + #%# family=contrib + +=cut + +# ################################################################################# +# Following example from current asterisk 1.4 +#> sip show peers +#Name/username Host Dyn Nat ACL Port Status +#104-RANDALLBUILT/104-RAND 74.218.176.166 D 5060 Unmonitored +#... +#102-ROCKSOLID/102-ROCKSOL (Unspecified) D 0 Unmonitored +#101-ROCKSOLID/101-ROCKSOL (Unspecified) D N 0 UNKNOWN +#20 sip peers [Monitored: 0 online, 1 offline Unmonitored: 2 online, 17 offline] +# ################################################################################# + +use strict; + +my $ret = undef; +if (! eval "require Net::Telnet;") +{ + $ret = "Net::Telnet not found"; +} + +if ($ARGV[0] and $ARGV[0] eq "config") +{ + print "graph_title Asterisk sip peers\n"; + print "graph_args --base 1000 -l 0\n"; + print "graph_order mon moff umon umoff\n"; + print "graph_vlabel peers\n"; + print "graph_category asterisk\n"; + #print "peers.label total\n"; + print "mon.draw AREA\n"; + print "mon.label monitored online\n"; + print "moff.draw STACK\n"; + print "moff.label monitored offline\n"; + print "umon.draw STACK\n"; + print "umon.label unmonitored online\n"; + print "umoff.draw STACK\n"; + print "umoff.label unmonitored offline\n"; + #graph_scale no + #load.warning 10 + #load.critical 120 + #graph_info The ... describes .... + #load.info Average load for the five minutes. + exit 0; +} + +my $host = exists $ENV{'host'} ? $ENV{'host'} : "127.0.0.1"; +my $port = exists $ENV{'port'} ? $ENV{'port'} : "5038"; + +my $username = $ENV{'username'}; +my $secret = $ENV{'secret'}; + +my $pop = new Net::Telnet (Telnetmode => 0); +$pop->open(Host => $host, + Port => $port); + +## Read connection message. +my $line = $pop->getline; +die $line unless $line =~ /^Asterisk/; + +## Send user name. +$pop->print("Action: login"); +$pop->print("Username: $username"); +$pop->print("Secret: $secret"); +$pop->print("Events: off"); +$pop->print(""); + +#Response: Success +#Message: Authentication accepted + +## Request status of messages. +$pop->print("Action: command"); +$pop->print("Command: sip show peers"); +$pop->print(""); + +my ($peers,$monitor_online,$monitor_offline,$unmonitor_online,$unmonitor_offline)=(0,0,0,0,0); + +while (($line = $pop->getline) and ($line !~ /END COMMAND/o)) +{ + my @fields = split(' ', $line); + my $count = @fields; + #20 sip peers [Monitored: 0 online, 1 offline Unmonitored: 2 online, 17 offline] + if (($count > 10) and ($fields[1] eq 'sip' and $fields[2] eq 'peers')) { + $peers = $fields[0]; + $monitor_online = $fields[4]; + $monitor_offline = $fields[6]; + $unmonitor_online = $fields[9]; + $unmonitor_offline = $fields[11]; + #print STDERR "$peers $monitor_online $monitor_offline $unmonitor_online $unmonitor_offline\n"; + last; + } +} + +$pop->print("Action: logoff"); +$pop->print(""); + +# purge the last lines to avoid error message on CLI +while ($line = $pop->getline) +{ +# print STDERR " $line \n"; +} +#print "peers.value $peers\n"; +print "mon.value $monitor_online\n"; +print "moff.value $monitor_offline\n"; +print "umon.value $unmonitor_online\n"; +print "umoff.value $unmonitor_offline\n"; + +# vim:syntax=perl