Howto:Monitor device uptime and gather traces with trap information via automated script
This article provides an example script used to download a trap trace in a short time after device reboot.
Applies To
This information applies to
- all innovaphone devices
More Information
In some cases a gateway or a phone may become instable due to configuration or firmware bugs resulting in not predictable restarts of the device. In this case may be useful for diagnosis to download a trace from the device right away. This article provides a simple PHP script for this purpose.
Configuration
At first get and install the PHP as described in the related article. Then create a new file called uptime.php with following code in it:
<?php
// PBX ip addresses
$pbx_ips = array(
"192.168.0.1",
"192.168.0.2"
);
// admin username
$user = "admin";
// admin password
$pass = "ip6000";
//loop script
$loop = true;
//$DEBUG = true;
$DEBUG = false;
// GET request for V9 and later firmware
$get_uptime = "/CMD0/box_info.xml?xsl=box_info.xsl&m3=&help=General/Info";
// GET request for V8 and older firmware, uncomment the line below
//$get_uptime = "/CMD0/mod_cmd_no_pwd.xml?cmd=box-info&xsl=box_info.xsl";
$get_trace = "/log.txt";
while($loop){
foreach($pbx_ips as $pbx_ip){
//URL
$url_uptime = "http://".$pbx_ip.$get_uptime;
$url_trace = "http://".$user.":".$pass."@".$pbx_ip.$get_trace;
if ($DEBUG) echo "GET ".$url_uptime."\r\n";
// get XML Object List form PBX
$xml_string = file_get_contents($url_uptime);
if(!$xml_string) {
if ($DEBUG) echo "GET ".$url_uptime." failed\r\n";
continue;
}
if ($DEBUG) var_dump($xml_string);
// convert to UTF-8, create SimpleXMLElement
$xml = new SimpleXMLElement(utf8_encode($xml_string));
if ($DEBUG) echo "Uptime ".$pbx_ip." ".$xml->sys['uptime']." s.\r\n";
if ($xml->sys['uptime'] < 20){
$current_datetime_log = date("d.m.Y H:i:s",time());
$current_datetime_file = date("d.m.Y-H-i-s",time());
$message = $current_datetime_log." ".$pbx_ip." ALARM uptime ".$xml->sys['uptime']." seconds!!!\r\n";
echo $message;
file_put_contents("traps.txt",$message, FILE_APPEND);
$trace_text = file_get_contents($url_trace);
file_put_contents("trace-".$pbx_ip."-".$current_datetime_file.".txt",$trace_text);
}
}
if ($DEBUG) echo "Sleep 20 s.\r\n";
if($loop) sleep(20);
}
?>
You have to change $pbx_ips, $user and $pass.
Usage
Open a command prompt and change to the location you stored uptime.php in. In our example it is the same directory we have extracted PHP to.
Now you can run the script:
C:\Temp\php-5.2.5-Win32> php.exe uptime.php
The script will run until you stop it with Ctrl+C. In case that any of the devices listed in $pbx_ips
performs a reboot, a trace
will be dowloaded in the current directory.
Known Problems
To run this script on a web server (thus polling all listed devices once on each refresh of this page), set $loop to false.
Related Articles
Howto:Export_PBX_userlist_from_PBX_with_e164_numbering_schema