import code
authorChristian Weiske <cweiske@cweiske.de>
Thu, 11 Nov 2010 19:15:38 +0000 (20:15 +0100)
committerChristian Weiske <cweiske@cweiske.de>
Thu, 11 Nov 2010 19:15:38 +0000 (20:15 +0100)
functions.php [new file with mode: 0644]
munin.php [new file with mode: 0755]
reboot.php [new file with mode: 0644]
status.php [new file with mode: 0644]

diff --git a/functions.php b/functions.php
new file mode 100644 (file)
index 0000000..fa4693f
--- /dev/null
@@ -0,0 +1,132 @@
+<?php
+/**
+* Functions to access the router
+*
+* PHP version 5
+*
+* @category Tools
+* @package  linksys-wrt3g-tools
+* @author   Christian Weiske <cweiske@cweiske.de>
+* @license  AGPL v3
+* @link     http://cweiske.de/linksys-wrt3g-tools.htm
+*/
+require_once 'HTTP/Request2.php';
+
+
+class Wrt3g
+{
+    protected static $arTranslations = array(
+        'GPRS_MSG.WWBEAR'      => 'type',
+        'GPRS_MSG.NNAME'       => 'network',
+        'GPRS_MSG.STRENGTH'    => 'signal strength',
+        'GPRS_MSG.ACQUIRING'   => 'aquiring',
+        'GPRS_MSG.WWBEAR_GPRS' => 'GPRS',
+        'GPRS_MSG.WWBEAR_UMTS' => 'UMTS',
+    );
+
+    /**
+    * Reboots the router.
+    *
+    * @return HTTP_Request2_Response
+    *
+    * @throws Exception When the router can't be reached, or unauthorized
+    */
+    function reboot()
+    {
+        $r = new HTTP_Request2();
+        $r->setMethod(HTTP_Request2::METHOD_POST);
+        $r->setUrl(
+            'http://'
+            . $GLOBALS['linksys-wrt3g-tools']['user']
+            . ':' . $GLOBALS['linksys-wrt3g-tools']['password']
+            . '@' . $GLOBALS['linksys-wrt3g-tools']['ip']
+            . '/apply.cgi'
+        );
+        $r->addPostParameter('action', 'Reboot');
+        $r->addPostParameter('submit_button', 'Diagnostics');
+        $r->addPostParameter('wait_time', 1);
+
+        $resp = $r->send();
+        return $resp;
+    }//function reboot()
+
+
+
+    /**
+    * Retrieves status information about the router
+    *
+    * @return array Array with several key-value pairs
+    *               connection => connecting, disconnected, connected
+    *
+    * @throws Exception When the router can't be reached, or unauthorized
+    */
+    function getStatus()
+    {
+        $arRetval = array();
+
+        $strUrlBase = 'http://'
+            . $GLOBALS['linksys-wrt3g-tools']['user']
+            . ':' . $GLOBALS['linksys-wrt3g-tools']['password']
+            . '@' . $GLOBALS['linksys-wrt3g-tools']['ip'];
+
+        /**
+        * Connection status
+        */
+        $r = new HTTP_Request2();
+        $r->setMethod(HTTP_Request2::METHOD_GET);
+        $r->setUrl($strUrlBase . '/index_wstatus2.asp');
+        $resp = $r->send();
+        echo $resp->getStatus() . ' ' . $resp->getReasonPhrase() . "\n";
+        $body = $resp->getBody();
+        preg_match('/var status2 = "(.+)"/', $body, $arMatches);
+
+        $strStatus = $arMatches[1];
+        //Connecting
+        //Disconnected
+        //Connected
+        $arRetval['connection'] = strtolower($strStatus);
+
+        /**
+        * GPRS/UMTS Status
+        */
+        $r->setUrl($strUrlBase . '/index_wstatus1.asp');
+        $resp = $r->send();
+        $body = $resp->getBody();
+        $arRetval = array_merge($arRetval, $this->parseStatus($body));
+
+        return $arRetval;
+    }//function getStatus()
+
+
+
+    /**
+    * Parses the body and returns extracted values
+    *
+    * @param string $body HTML document to parse
+    *
+    * @return array Array of key-value pairs
+    */
+    function parseStatus($body)
+    {
+        $arRetval = array();
+        $arMatches = array();
+        preg_match_all('#>Capture\(([^)]+)\)</#', $body, $arMatches);
+        $arData = array();
+        reset($arMatches[1]);
+        while (current($arMatches[1])) {
+            $key   = current($arMatches[1]);
+            $value = next($arMatches[1]);
+            if (isset(self::$arTranslations[$key])) {
+                $key = self::$arTranslations[$key];
+            }
+            if (isset(self::$arTranslations[$value])) {
+                $value = self::$arTranslations[$value];
+            }
+            $arRetval[$key] = $value;
+            next($arMatches[1]);
+        }
+
+        return $arRetval;
+    }
+}
+?>
\ No newline at end of file
diff --git a/munin.php b/munin.php
new file mode 100755 (executable)
index 0000000..b645e5c
--- /dev/null
+++ b/munin.php
@@ -0,0 +1,71 @@
+#!/usr/bin/env php
+<?php
+/**
+* munin node output for the router status
+*
+* PHP version 5
+*
+* @category Tools
+* @package  linksys-wrt3g-tools
+* @author   Christian Weiske <cweiske@cweiske.de>
+* @license  AGPL v3
+* @link     http://cweiske.de/linksys-wrt3g-tools.htm
+*/
+require_once dirname(__FILE__) . '/config.php';
+require_once dirname(__FILE__) . '/functions.php';
+
+if (isset($argv[1]) && $argv[1] == 'autoconf') {
+    echo "yes\n";
+    exit();
+} else if (isset($argv[1]) && $argv[1] == 'config') {
+    echo <<<TXT
+graph_title WRT3G router status
+graph_args --base 1000 -l 0 --upper-limit 7
+graph_vlabel Status values
+graph_category network
+graph_info This graph shows the status of WRT3G router
+conn_connected.label Connected
+conn_connected.info Router is connected
+conn_connected.draw LINE2
+conn_connecting.label Connecting
+conn_connecting.info Router is connecting
+conn_connecting.draw LINE2
+conn_disconnected.label Disconnected
+conn_disconnected.info Router is disconnected
+conn_disconnected.draw LINE2
+notavailable.label Not available
+notavailable.info Router cannot be reached
+notavailable.draw LINE2
+type_gprs.label GPRS
+type_gprs.info Connection via GPRS
+type_gprs.draw LINE2
+type_umts.label UMTS
+type_umts.info Connection via UMTS
+type_umts.draw LINE2
+
+TXT;
+    exit();
+}
+
+
+$arStatus = wrt3g_getStatus();
+try {
+    $conn = $arStatus['connection'];
+    if ($conn == 'disconnected') {
+        echo "conn_disconnected.value 1\n";
+    } else if ($conn == 'connecting') {
+        echo "conn_connecting.value 2\n";
+    } else if ($conn == 'connected') {
+        echo "conn_connected.value 3\n";
+    }
+
+    $type = strtolower($arStatus['type']);
+    if ($type == 'gprs') {
+        echo "type_gprs.value 4.5\n";
+    } else if ($type == 'umts') {
+        echo "type_umts.value 5\n";
+    }
+} catch (Exception $e) {
+    echo "notavailable 0.5\n";
+}
+?>
\ No newline at end of file
diff --git a/reboot.php b/reboot.php
new file mode 100644 (file)
index 0000000..a6c1981
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+/**
+* Reboots the router
+*
+* PHP version 5
+*
+* @category Tools
+* @package  linksys-wrt3g-tools
+* @author   Christian Weiske <cweiske@cweiske.de>
+* @license  AGPL v3
+* @link     http://cweiske.de/linksys-wrt3g-tools.htm
+*/
+require_once dirname(__FILE__) . '/config.php';
+require_once dirname(__FILE__) . '/functions.php';
+
+try {
+    $w = new Wrt3g();
+    $resp = $w->reboot();
+    echo $resp->getStatus() . ' ' . $resp->getReasonPhrase() . "\n";
+} catch (Exception $e) {
+    echo 'Error: ' . $e->getMessage() . "\n";
+}
+?>
\ No newline at end of file
diff --git a/status.php b/status.php
new file mode 100644 (file)
index 0000000..9adfd02
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+/**
+* Shows router UMTS status
+*
+* PHP version 5
+*
+* @category Tools
+* @package  linksys-wrt3g-tools
+* @author   Christian Weiske <cweiske@cweiske.de>
+* @license  AGPL v3
+* @link     http://cweiske.de/linksys-wrt3g-tools.htm
+*/
+require_once dirname(__FILE__) . '/config.php';
+require_once dirname(__FILE__) . '/functions.php';
+try {
+    $w = new Wrt3g();
+    $arStatus = $w->getStatus();
+    foreach ($arStatus as $key => $value) {
+        echo $key . ': ' . $value . "\n";
+    }
+} catch (Exception $e) {
+    echo 'Error: ' . $e->getMessage() . "\n";
+}
+?>
\ No newline at end of file