From 65d4de2e8e1ceced029b0061327b402069554a31 Mon Sep 17 00:00:00 2001 From: Scott Dale Date: Sun, 30 Dec 2007 21:13:12 +0000 Subject: Use AJAX for loading of new widgets. Now most widgets will use AJAX for new data. Also improved performance --- usr/local/www/includes/functions.inc.php | 129 +++++++++++++++++++++++++++---- usr/local/www/index.php | 101 ++++++++++-------------- 2 files changed, 152 insertions(+), 78 deletions(-) (limited to 'usr/local/www') diff --git a/usr/local/www/includes/functions.inc.php b/usr/local/www/includes/functions.inc.php index b7c5b4f..dc58e9c 100644 --- a/usr/local/www/includes/functions.inc.php +++ b/usr/local/www/includes/functions.inc.php @@ -5,6 +5,9 @@ if(Connection_Aborted()) { } require_once("config.inc"); +require_once('guiconfig.inc'); + + function get_stats() { $stats['cpu'] = cpu_usage(); @@ -12,6 +15,9 @@ function get_stats() { $stats['uptime'] = get_uptime(); $stats['states'] = get_pfstate(); $stats['temp'] = get_temp(); + $stats['datetime'] = update_date_time(); + $stats['interfacestatistics'] = get_interfacestats(); + $stats['interfacestatus'] = get_interfacestatus(); $stats = join("|", $stats); @@ -43,25 +49,25 @@ function get_uptime() { } function cpu_usage() { - $cpuTicks = explode(" ", `/sbin/sysctl -n kern.cp_time`); - sleep(1); - $cpuTicks2 = explode(" ", `/sbin/sysctl -n kern.cp_time`); + exec("sysctl -n kern.cp_time && sleep 1 && sysctl -n kern.cp_time",$cpuTicksEx); + + $cpuTicks = explode(" ", $cpuTicksEx[0]); + $cpuTicks2 = explode(" ", $cpuTicksEx[1]); $diff = array(); - $diff['user'] = ($cpuTicks2[0] - $cpuTicks[0]); - $diff['nice'] = ($cpuTicks2[1] - $cpuTicks[1]); - $diff['sys'] = ($cpuTicks2[2] - $cpuTicks[2]); - $diff['intr'] = ($cpuTicks2[3] - $cpuTicks[3]); - $diff['idle'] = ($cpuTicks2[4] - $cpuTicks[4]); - - //echo ""; - $totalDiff = $diff['user'] + $diff['nice'] + $diff['sys'] + $diff['intr'] + $diff['idle']; - $totalused = $diff['user'] + $diff['nice'] + $diff['sys'] + $diff['intr']; - if (isset($totalused)&&$totalused <= 0) { - $totalused = 0.001; - } - $cpuUsage = floor(100 * ($totalused / $totalDiff)); - + $diff['user'] = ($cpuTicks2[0] - $cpuTicks[0]); + $diff['nice'] = ($cpuTicks2[1] - $cpuTicks[1]); + $diff['sys'] = ($cpuTicks2[2] - $cpuTicks[2]); + $diff['intr'] = ($cpuTicks2[3] - $cpuTicks[3]); + $diff['idle'] = ($cpuTicks2[4] - $cpuTicks[4]); + + //echo ""; + $totalDiff = $diff['user'] + $diff['nice'] + $diff['sys'] + $diff['intr'] + $diff['idle']; + $totalused = $diff['user'] + $diff['nice'] + $diff['sys'] + $diff['intr']; + if (isset($totalused)&&$totalused <= 0) { + $totalused = 0.001; + } + $cpuUsage = floor(100 * ($totalused / $totalDiff)); return $cpuUsage; } @@ -142,3 +148,92 @@ function mem_usage() return $memUsage; } +function update_date_time() { + + $datetime = date("D M j G:i:s T Y"); + return $datetime; +} + +function get_interfacestats(){ + + global $config; + //build interface list for widget use + $i = 0; $ifdescrs = array('wan' => 'WAN', 'lan' => 'LAN'); + for ($j = 1; isset($config['interfaces']['opt' . $j]); $j++) { + $ifdescrs['opt' . $j] = $config['interfaces']['opt' . $j]['descr']; + } + $array_in_packets = array(); + $array_out_packets = array(); + $array_in_bytes = array(); + $array_out_bytes = array(); + $array_in_errors = array(); + $array_out_errors = array(); + $array_collisions = array(); + $array_interrupt = array(); + $new_data = ""; + + //build data arrays + foreach ($ifdescrs as $ifdescr => $ifname){ + $ifinfo = get_interface_info($ifdescr); + $new_data .= "{$ifinfo['inpkts']},"; + $new_data .= "{$ifinfo['outpkts']},"; + $new_data .= format_bytes($ifinfo['inbytes']) . ","; + $new_data .= format_bytes($ifinfo['outbytes']) . ","; + if (isset($ifinfo['inerrs'])){ + $new_data .= "{$ifinfo['inerrs']},"; + $new_data .= "{$ifinfo['outerrs']},"; + } + else{ + $new_data .= "0,"; + $new_data .= "0,"; + } + if (isset($ifinfo['collisions'])) + $new_data .= htmlspecialchars($ifinfo['collisions']) . ","; + else + $new_data .= "0,"; + + + + }//end for + + return $new_data; + +} + +function get_interfacestatus(){ + $data = ""; + global $config; + + //build interface list for widget use + $i = 0; $ifdescrs = array('wan' => 'WAN', 'lan' => 'LAN'); + for ($j = 1; isset($config['interfaces']['opt' . $j]); $j++) { + $ifdescrs['opt' . $j] = $config['interfaces']['opt' . $j]['descr']; + } + + foreach ($ifdescrs as $ifdescr => $ifname){ + $ifinfo = get_interface_info($ifdescr); + $data .= $ifname . ","; + if($ifinfo['status'] == "up" || $ifinfo['status'] == "associated") { + $data .= "up"; + }else if ($ifinfo['status'] == "no carrier") { + $data .= "down"; + }else if ($ifinfo['status'] == "down") { + $data .= "block"; + } + $data .= ","; + if ($ifinfo['ipaddr']){ + $data .= htmlspecialchars($ifinfo['ipaddr']); + if ($ifinfo['dhcplink']) { + $data .= " (DHCP)"; + } + } + $data .= ","; + if ($ifinfo['status'] != "down") + $data .= htmlspecialchars($ifinfo['media']); + + $data .= "~"; + + } + return $data; +} + diff --git a/usr/local/www/index.php b/usr/local/www/index.php index 91f88eb..128aaf9 100755 --- a/usr/local/www/index.php +++ b/usr/local/www/index.php @@ -51,8 +51,8 @@ $oSajax->sajax_export("get_stats"); $oSajax->sajax_handle_client_request(); ############################################################################ - - + + ## Check to see if we have a swap space, ## if true, display, if false, hide it ... if(file_exists("/usr/sbin/swapinfo")) { @@ -191,57 +191,43 @@ foreach($phpincludefiles as $includename) { include($directory . $includename); } -//function to create widget tabs when called -function display_widget_tabs(& $tab_array) { - echo "
"; - $tabscounter = 0; - foreach ($tab_array as $ta) { - $dashpos = strpos($ta[2],'-'); - $tabname = $ta[2] . "-tab"; - $tabclass = substr($ta[2],0,$dashpos); - $tabclass = $tabclass . "-class"; - if ($ta[1] == true) { - $tabActive = "table-cell"; - $tabNonActive = "none"; - } - else { - $tabActive = "none"; - $tabNonActive = "table-cell"; - } - echo "
"; - echo "   {$ta[0]}"; - echo "   "; - echo "
"; - - echo "
"; - echo "   {$ta[0]}"; - echo "   "; - echo "
"; - } - - echo ""; - echo "
"; -} - $jscriptstr = << + +function widgetAjax(widget) { + uri = "widgets/widgets/" + widget + ".widget.php"; + var opt = { + // Use GET + method: 'get', + evalScripts: 'true', + asynchronous: true, + // Handle 404 + on404: function(t) { + alert('Error 404: location "' + t.statusText + '" was not found.'); + }, + // Handle other errors + onFailure: function(t) { + alert('Error ' + t.status + ' -- ' + t.statusText); + } + } + new Ajax.Updater(widget, uri, opt); + } + + function addDiv(selectedDiv){ - selectedDiv = selectedDiv + "-div"; - textlink = d.getElementById(selectedDiv); + selectedDiv2 = selectedDiv + "-container"; + d = document; + textlink = d.getElementById(selectedDiv2); if (textlink.style.display != "none") { - Effect.Shake(selectedDiv); + Effect.Shake(selectedDiv2); } else { - Effect.Appear(selectedDiv, {duration:1}); - d = document; - selectIntLink = selectedDiv + "-input"; + widgetAjax(selectedDiv); + Effect.Appear(selectedDiv2, {duration:1}); + selectIntLink = selectedDiv2 + "-input"; textlink = d.getElementById(selectIntLink); textlink.value = "show"; showSave(); @@ -259,7 +245,7 @@ function configureDiv(selectedDiv){ } function showDiv(selectedDiv,swapButtons){ - //appear element + //appear element Effect.BlindDown(selectedDiv, {duration:1}); showSave(); d = document; @@ -274,7 +260,7 @@ function showDiv(selectedDiv,swapButtons){ textlink.style.display = "none"; } - selectIntLink = selectedDiv + "-div-input"; + selectIntLink = selectedDiv + "-container-input"; textlink = d.getElementById(selectIntLink); textlink.value = "show"; @@ -294,7 +280,7 @@ function minimizeDiv(selectedDiv,swapButtons){ textlink = d.getElementById(selectIntLink); textlink.style.display = "none"; } - selectIntLink = selectedDiv + "-div-input"; + selectIntLink = selectedDiv + "-container-input"; textlink = d.getElementById(selectIntLink); textlink.value = "hide"; @@ -302,7 +288,7 @@ function minimizeDiv(selectedDiv,swapButtons){ function closeDiv(selectedDiv){ showSave(); - selectedDiv = selectedDiv + "-div"; + selectedDiv = selectedDiv + "-container"; Effect.Fade(selectedDiv, {duration:1}); d = document; selectIntLink = selectedDiv + "-input"; @@ -423,9 +409,6 @@ echo $jscriptstr; if(!file_exists("/usr/local/www/themes/{$g['theme']}/no_big_logo")) echo "

"; ?> - -