Differences

This shows you the differences between two versions of the page.

Link to this comparison view

monitors:asterisk-iax2 [2009/11/23 05:32] (current)
Line 1: Line 1:
 +====== iax2.sh ======
 +
 +^ Author | [[ etmsys@rit.edu | Eric Meddaugh ]] |
 +^ Compatibility | Xymon 4.2 |
 +^ Requirements | Perl |
 +^ Download | None |
 +^ Last Update | 2008-09-11 |
 +
 +===== Description =====
 +
 +Monitor IAX2 on an Asterisk server. Needs access to UDP port 4569.
 +
 +===== Installation =====
 +=== Client configuration ===
 +
 +None.
 +
 +=== Server configuration ===
 +
 +Add following to the hobbitlaunch.cfg file
 +<​code>​
 +[iax2]
 +        ENVFILE /​home/​hobbit/​server/​etc/​hobbitserver.cfg
 +        NEEDS hobbitd
 +        CMD  $BBHOME/​ext/​iax2.sh
 +        LOGFILE $BBSERVERLOGS/​iax2.log
 +        INTERVAL 1m
 +</​code>​
 +
 +Add the "​iax2"​ tag in bb-hosts.
 +
 +===== Source =====
 +
 +==== Monitor Code ====
 +iax2.sh -- Place in ext directory, this is the main script hobbit calls.
 +<hidden onHidden="​Show Code ⇲" onVisible="​Hide Code ⇱">​
 +<​code>​
 +#!/bin/sh
 +
 +#
 +
 +COLUMN=iax2
 +TIMEOUT=10
 +
 +$BBHOME/​bin/​bbhostgrep --no-down ${COLUMN} |
 +while read L
 +do
 +     set $L
 +     ​IP="​$1"​
 +     ​HOSTNAME="​$2"​
 +     ​COLOR=green
 +
 +# linux use "/​usr/​bin/​time -p" instead of ptime
 +     /​bin/​ptime $BBHOME/​ext/​iax2ping.pl $IP >​$BBTMP/​${COLUMN}.out 2>&1
 +     ​SECONDS=`egrep "​^real"​ $BBTMP/​${COLUMN}.out | awk '​{printf $2}'`
 +     ​OK=`/​bin/​egrep -c "​Response from" $BBTMP/​${COLUMN}.out`
 +     ​BAD=`/​bin/​egrep -c "​Error"​ $BBTMP/​${COLUMN}.out`
 +
 +     if [ ${OK} -eq 0 -a ${BAD} -ge 1 ] ; then
 +        COLOR=red
 +        MSG="​IAX2 query failed
 +
 +`cat $BBTMP/​${COLUMN}.out | egrep -vi user`
 +
 +Seconds: ${SECONDS}
 +"
 +     elif [ ${OK} -ge 1 -a ${BAD} -ge 1 ] ; then
 +        COLOR=yellow
 +        MSG="​IAX2 query weird
 +
 +`cat $BBTMP/​${COLUMN}.out | egrep -vi user`
 +
 +Seconds: ${SECONDS}
 +"
 +     else
 +        COLOR=green
 +        MSG="​IAX2 query succeeded
 +
 +`cat $BBTMP/​${COLUMN}.out | egrep -vi user`
 +
 +Seconds: ${SECONDS}
 +"
 +  fi
 +
 +  $BB $BBDISP "​status $HOSTNAME.$COLUMN $COLOR `date`
 +
 +  $MSG"
 +done
 +
 +exit 0
 +</​code>​
 +</​hidden>​
 +\\ 
 +
 +iax2ping.pl -- Place in ext folder
 +<hidden onHidden="​Show Code ⇲" onVisible="​Hide Code ⇱">​
 +<code perl>
 +#​!/​usr/​bin/​perl -w 
 +#udp ping tool 
 +
 +use IO::​Socket; ​
 +$target = shift; #"​192.168.0.255"; ​
 +$target_port = 4569; 
 +
 +socket(PING,​ PF_INET, SOCK_DGRAM, getprotobyname("​udp"​)); ​
 +
 +# Build Packet ...  ​
 +# Names from ethereal filter of registration packet ​
 +
 +$src_call = "​8000";​ #8000 most siginificant bit is IAX packet type full ... required for a poke etc... ​
 +$dst_call = "​0000"; ​
 +$timestamp = "​00000000"; ​
 +$outbound_seq = "​00"; ​
 +$inbound_seq = "​00"; ​
 +$type = "​06";​ #​IAX_Control ​
 +$iax_type = "​1e";​ #POKE 
 +$msg = pack "​H24",​ $src_call . $dst_call . $timestamp . $outbound_seq . $inbound_seq . $type . $iax_type; ​
 +
 +# Send UDP packet ​
 +
 +$ipaddr = inet_aton($target); ​
 +$sendto = sockaddr_in($target_port,​$ipaddr); ​
 +
 +send(PING, $msg, 0, $sendto) == length($msg) or die "​cannot send to $target : $target_port : $!\n"; ​
 +
 +# Listen for responses... listen for TIMEOUT seconds and report all responders (works for broadcast pings)
 +
 +$MAXLEN = 1024; 
 +$TIMEOUT = 15; 
 +
 +eval { 
 +local $SIG{ALRM} = sub { die "alarm time out"; }; 
 +alarm $TIMEOUT; ​
 +$total = 3; 
 +$count = 0; 
 +while ($count < $total) { 
 +  $recvfrom = recv(PING, $msg, $MAXLEN, 0) or die "recv: $!"; ​
 +  ($port, $ipaddr) = sockaddr_in($recvfrom); ​
 +  $respaddr = inet_ntoa($ipaddr); ​
 +  print "​Response from $respaddr : $port\n"; ​
 +  $count++; ​
 +
 +
 +$type = "​06";​ #​IAX_Control ​
 +$iax_type = "​04";​ #ACK 
 +$msg = pack "​H24",​ $src_call . $dst_call . $timestamp . $outbound_seq . $inbound_seq . $type . $iax_type; ​
 +send(PING, $msg, 0, $sendto) == length($msg) or die "​cannot send to $target : $target_port : $!\n"; ​
 +
 +}; 
 +
 +if ($@) { 
 +       print "Error Timeout waiting for packet from: $target\r\n"; ​
 +       $type = "​06";​ #​IAX_Control ​
 +       ​$iax_type = "​04";​ #ACK 
 +       $msg = pack "​H24",​ $src_call . $dst_call . $timestamp . $outbound_seq . $inbound_seq . $type . $iax_type;
 +       ​send(PING,​ $msg, 0, $sendto) == length($msg) or die "​cannot send to $target : $target_port : $!\n";
 +}
 +</​code>​
 +</​hidden>​
 +
 +===== Known  Bugs and Issues =====
 +
 +===== To Do =====
 +
 +===== Credits =====
 +
 +===== Changelog =====
 +
 +  * **2008-09-11**
 +    * Initial release
  
  • monitors/asterisk-iax2.txt
  • Last modified: 2009/11/23 05:32
  • (external edit)