From d772ac32580e088437a9bbedfc2a348d2760a5aa Mon Sep 17 00:00:00 2001 From: Erik Kristensen Date: Sun, 11 Sep 2005 06:17:32 +0000 Subject: Added SAJAX support. System Meters are updated via AJAX now. Started XHTML/CSS cleanup. --- usr/local/www/includes/functions.inc.php | 98 ++++++++++++ usr/local/www/includes/sajax.class.php | 261 +++++++++++++++++++++++++++++++ 2 files changed, 359 insertions(+) create mode 100644 usr/local/www/includes/functions.inc.php create mode 100644 usr/local/www/includes/sajax.class.php (limited to 'usr/local/www/includes') diff --git a/usr/local/www/includes/functions.inc.php b/usr/local/www/includes/functions.inc.php new file mode 100644 index 0000000..88465ab --- /dev/null +++ b/usr/local/www/includes/functions.inc.php @@ -0,0 +1,98 @@ + 60) + $uptime += 30; + $updays = (int)($uptime / 86400); + $uptime %= 86400; + $uphours = (int)($uptime / 3600); + $uptime %= 3600; + $upmins = (int)($uptime / 60); + + $uptimestr = ""; + if ($updays > 1) + $uptimestr .= "$updays days, "; + else if ($updays > 0) + $uptimestr .= "1 day, "; + $uptimestr .= sprintf("%02d:%02d", $uphours, $upmins); + return $uptimestr; +} + +function get_cputicks() { + $cputicks = explode(" ", `/sbin/sysctl -n kern.cp_time`); + return $cputicks; +} + +function get_cpuusage($cpuTicks, $cpuTicks2) { + + $diff = array(); + $diff['user'] = ($cpuTicks2[0] - $cpuTicks[0])+1; + $diff['nice'] = ($cpuTicks2[1] - $cpuTicks[1])+1; + $diff['sys'] = ($cpuTicks2[2] - $cpuTicks[2])+1; + $diff['intr'] = ($cpuTicks2[3] - $cpuTicks[3])+1; + $diff['idle'] = ($cpuTicks2[4] - $cpuTicks[4])+1; + + //echo ""; + $totalDiff = $diff['user'] + $diff['nice'] + $diff['sys'] + $diff['intr'] + $diff['idle']; + $totalused = $diff['user'] + $diff['nice'] + $diff['sys'] + $diff['intr'] - 1; + $cpuUsage = round(100 * ($totalused / $totalDiff), 0); + + #$totalDiff = $diff['user'] + $diff['nice'] + $diff['sys'] + $diff['intr'] + $diff['idle']; + #$cpuUsage = round(100 * (1 - $diff['idle'] / $totalDiff), 0); + + return $cpuUsage; +} + +function get_pfstate() { + global $config; + if (isset($config['system']['maximumstates']) and $config['system']['maximumstates'] > 0) + $maxstates="/{$config['system']['maximumstates']}"; + else + $maxstates="/10000"; + $curentries = `/sbin/pfctl -si |grep current`; + if (preg_match("/([0-9]+)/", $curentries, $matches)) { + $curentries = $matches[1]; + } + return $curentries . $maxstates; +} + + +function disk_usage() +{ + exec("df -h | grep -w '/' | awk '{ print $5 }' | cut -d '%' -f 1", $dfout); + $diskusage = trim($dfout[0]); + + return $diskusage; +} + +function swap_usage() +{ + $swapUsage = `/usr/sbin/swapinfo | cut -c45-55 | grep "%"`; + $swapUsage = ereg_replace('%', "", $swapUsage); + $swapUsage = ereg_replace(' ', "", $swapUsage); + $swapUsage = rtrim($swapUsage); + + return $swapUsage; +} + +function mem_usage() +{ + exec("/sbin/sysctl -n vm.stats.vm.v_active_count vm.stats.vm.v_inactive_count " . + "vm.stats.vm.v_wire_count vm.stats.vm.v_cache_count vm.stats.vm.v_free_count", $memory); + + $totalMem = $memory[0] + $memory[1] + $memory[2] + $memory[3] + $memory[4]; + $freeMem = $memory[4]; + $usedMem = $totalMem - $freeMem; + $memUsage = round(($usedMem * 100) / $totalMem, 0); + + return $memUsage; +} \ No newline at end of file diff --git a/usr/local/www/includes/sajax.class.php b/usr/local/www/includes/sajax.class.php new file mode 100644 index 0000000..3274e49 --- /dev/null +++ b/usr/local/www/includes/sajax.class.php @@ -0,0 +1,261 @@ +sajax_remote_uri = $this->sajax_get_my_uri(); + } + + + /** + * PHP 4 Constructor + * + * @param string $remoteURI + */ + function sajax($remoteURI = NULL) + { + $this->__construct($$remoteURI); + } + + + /** + * + * + */ + function sajax_get_my_uri() + { + global $REQUEST_URI; + + return $REQUEST_URI; + } + + + + function sajax_handle_client_request() { + + $mode = ""; + + if (! empty($_GET["rs"])) + $mode = "get"; + + if (!empty($_POST["rs"])) + $mode = "post"; + + if (empty($mode)) + return; + + if ($mode == "get") { + // Bust cache in the head + header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past + header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); + // always modified + header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 + header ("Pragma: no-cache"); // HTTP/1.0 + $func_name = $_GET["rs"]; + if (! empty($_GET["rsargs"])) + $args = $_GET["rsargs"]; + else + $args = array(); + } + else { + $func_name = $_POST["rs"]; + if (! empty($_POST["rsargs"])) + $args = $_POST["rsargs"]; + else + $args = array(); + } + + if (! in_array($func_name, $this->sajax_export_list)) + echo "-:$func_name not callable"; + else { + echo "+:"; + $result = call_user_func_array($func_name, $args); + echo $result; + } + exit; + } // End sajax_handle_client_request() function ... + + + function sajax_get_common_js() { + + $t = strtoupper($this->sajax_request_type); + if ($t != "GET" && $t != "POST") + return "// Invalid type: $t.. \n\n"; + + ob_start(); + ?> + + // remote scripting library + // (c) copyright 2005 modernmethod, inc + var sajax_debug_mode = sajax_debug_mode ? "true" : "false"; ?>; + var sajax_request_type = ""; + + function sajax_debug(text) { + if (sajax_debug_mode) + alert("RSD: " + text) + } + function sajax_init_object() { + sajax_debug("sajax_init_object() called..") + + var A; + try { + A=new ActiveXObject("Msxml2.XMLHTTP"); + } catch (e) { + try { + A=new ActiveXObject("Microsoft.XMLHTTP"); + } catch (oc) { + A=null; + } + } + if(!A && typeof XMLHttpRequest != "undefined") + A = new XMLHttpRequest(); + if (!A) + sajax_debug("Could not create connection object."); + return A; + } + function sajax_do_call(func_name, args) { + var i, x, n; + var uri; + var post_data; + + uri = "sajax_remote_uri; ?>"; + if (sajax_request_type == "GET") { + if (uri.indexOf("?") == -1) + uri = uri + "?rs=" + escape(func_name); + else + uri = uri + "&rs=" + escape(func_name); + for (i = 0; i < args.length-1; i++) + uri = uri + "&rsargs[]=" + escape(args[i]); + uri = uri + "&rsrnd=" + new Date().getTime(); + post_data = null; + } else { + post_data = "rs=" + escape(func_name); + for (i = 0; i < args.length-1; i++) + post_data = post_data + "&rsargs[]=" + escape(args[i]); + } + + x = sajax_init_object(); + x.open(sajax_request_type, uri, true); + if (sajax_request_type == "POST") { + x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1"); + x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + } + x.onreadystatechange = function() { + if (x.readyState != 4) + return; + sajax_debug("received " + x.responseText); + + var status; + var data; + status = x.responseText.charAt(0); + data = x.responseText.substring(2); + if (status == "-") + alert("Error: " + data); + else + args[args.length-1](data); + } + x.send(post_data); + sajax_debug(func_name + " uri = " + uri + "/post = " + post_data); + sajax_debug(func_name + " waiting.."); + delete x; + } + + sajax_get_common_js(); + } + + + function sajax_esc($val) + { + return str_replace('"', '\\\\"', $val); + } + + + /** + * sajax_get_one_stub + * + * @param string $func_name + */ + function sajax_get_one_stub($func_name) + { + ob_start(); + ?> + + // wrapper for + + function x_() { + sajax_do_call("", + x_.arguments); + } + + sajax_export_list[] = func_get_arg($i); + } + } + + + function sajax_get_javascript() + { + $html = ""; + if (! $this->sajax_js_has_been_shown) { + $html .= $this->sajax_get_common_js(); + $this->sajax_js_has_been_shown = 1; + } + foreach ($this->sajax_export_list as $func) { + $html .= $this->sajax_get_one_stub($func); + } + return $html; + } + + + function sajax_show_javascript() + { + echo $this->sajax_get_javascript(); + } + + +} // End sajax class + + +?> -- cgit v1.1