วันเสาร์ที่ 15 พฤษภาคม พ.ศ. 2553

monitoring sip trunk

อันนี้เป็น script สำหรับ monitor sip trunk แบบ authentication ผ่าน username/password น่ะครับ
ให้เอา script นี้ไปรันบนเครื่องที่ติดตั้ง และทำการ run asterisk ที่ใช้งานจริงอยู่น่ะครับ
ส่วนแบบ monitor sip trunk แบบ ip นี้ขอเวลา งม ก่อนถ้าได้ยังไงจะเอามาฝากอีกครับ

#!/usr/bin/php


$form = "name@domain.com";
$report_email = 'contact@domain.com';


$state = wots_up();

//echo "Status : [$state]\n";


if ($state == 'ok')

{
//grace, usually should go this route
exit;
}
else
{
//keep cool for 10 seconds, we try again.
sleep(10);
$state = wots_up();
$have_done = "We have retried in 10 seconds.\r\n";
}

if ($state == 'ok')

{
//lucky we tried
exit;
}
else
{
$have_done .= "Trying to reload the sip channels.\r\n";
$have_done .= shell_exec('/usr/sbin/asterisk -rx "module reload chan_sip"');
sleep(10);
$have_done .= "Reloaded sip channels and waited 10 seconds.\r\n";
$state = wots_up();
}
if ($state == 'ok')
{
//wipes the sweat
exit;
}

$status = "$have_done\r\n=====================have done above, the current status: =====================\r\n\r\n$status";

$status = str_replace("\n",'
',$status);


if($state=='requesting'){
$msg_err = 'Request Sent';
}elseif($state=='no_auth'){
$msg_err = 'No Authentication';
}elseif($state=='unregistered'){
$msg_err = 'Unregistered';
}elseif($state=='failed'){
$msg_err = 'Failed';
}elseif($state=='auth_sent'){
$msg_err = 'Auth. Sent';
}elseif($state=='rejected'){
$msg_err = 'Rejected';
}elseif($state=='timeout'){
$msg_err = 'Timeout';
}elseif($state=='unknown'){
$msg_err = 'Unknown';
}




$err = array("Request Sent","No Authentication","Unregistered","Failed","Auth. Sent","Rejected","Timeout","Unknown");

$status = str_replace($err,"$msg_err,"$status);
if ($state == 'requesting')
{
send_alert_email('Trunk has been sending registrating requests', $status);
}
elseif ($state == 'empty')
{
send_alert_email('Voip trunk registration status is empty', $status);
}
elseif ($state == 'no_auth')
{
send_alert_email('No Authentication is reported, wrong password?', $status);
}
elseif ($state == 'unregistered')
{
send_alert_email('We have Unregistered trunk', $status);
}
elseif ($state == 'failed')
{
send_alert_email('We have Registration failed trunk', $status);
}
elseif ($state == 'auth_sent')
{
send_alert_email('We have trunk with Auth. Sent status', $status);
}
elseif ($state == 'rejected')
{
send_alert_email('We have trunk with Rejected status', $status);
}
else
{
send_alert_email('Trunk status is not registered', "$state\r\n\r\n$status");
}

function wots_up()

{
global $status;

//Prob the trunk registration.
$status = shell_exec('/usr/sbin/asterisk -rx "sip show registry"');

if (strlen(trim($status)) == 0)
{
return 'empty';
}

$lines = explode("\n", str_replace("\r\n", "\n", trim($status)));


for ($i = 1; $i <> $temp = preg_split('/\s+/', $lines[$i]);
if (!isset($temp[3]))
{
return "Can not extract Reg State for this line: " . $lines[$i];
}
elseif ($temp[3] <> "Registered")
{
return "Unknown Reg state for this line: " . $lines[$i];
}
}
return 'ok';
}

function send_alert_email($subject, $msg = '')

{
global $report_email,$from;

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= "X-Priority: 1 (Higuest)\n";
$headers .= "X-MSMail-Priority: High\n";
$headers .= "Importance: High\n";
$headers .= "From: $from\r\n";
mail($report_email, $subject, $msg, $headers);
}



?>

ป้ายกำกับ:

0 ความคิดเห็น:

แสดงความคิดเห็น

สมัครสมาชิก ส่งความคิดเห็น [Atom]

<< หน้าแรก