summaryrefslogtreecommitdiffstats
path: root/src/usr/local
diff options
context:
space:
mode:
authorStephen Beaver <sbeaver@netgate.com>2015-09-21 13:22:07 -0400
committerStephen Beaver <sbeaver@netgate.com>2015-09-21 13:22:46 -0400
commit398814928d98d8d2e7b5d6da31e1228a8cf27dd9 (patch)
treecbe7d8b6e45964d999692bc4982d38c47b586dd5 /src/usr/local
parent725f987f52d6d770d4d4ee522fa71eeb5790b13c (diff)
downloadpfsense-398814928d98d8d2e7b5d6da31e1228a8cf27dd9.zip
pfsense-398814928d98d8d2e7b5d6da31e1228a8cf27dd9.tar.gz
Multiple fixes to status_queues.php - NOT YET TESTED
Fixed #5166 - Shows IPv6 addresses
Diffstat (limited to 'src/usr/local')
-rw-r--r--src/usr/local/www/status_queues.php298
-rw-r--r--src/usr/local/www/widgets/widgets/interfaces.widget.php3
2 files changed, 172 insertions, 129 deletions
diff --git a/src/usr/local/www/status_queues.php b/src/usr/local/www/status_queues.php
index 37537b8..e5e7f2a 100644
--- a/src/usr/local/www/status_queues.php
+++ b/src/usr/local/www/status_queues.php
@@ -1,38 +1,62 @@
-#!/usr/local/bin/php
<?php
/* $Id$ */
/*
status_queues.php
- Part of the pfSense project
- Copyright (C) 2004, 2005 Scott Ullrich
- Copyright (C) 2009 Ermal Luçi
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
*/
+/* ====================================================================
+ * Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. All rights reserved.
+ * Copyright (c) 2004, 2005 Scott Ullrich
+ * Copyright (c) 2009 Ermal Luçi
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgment:
+ * "This product includes software developed by the pfSense Project
+ * for use in the pfSense software distribution. (http://www.pfsense.org/).
+ *
+ * 4. The names "pfSense" and "pfSense Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * coreteam@pfsense.org.
+ *
+ * 5. Products derived from this software may not be called "pfSense"
+ * nor may "pfSense" appear in their names without prior written
+ * permission of the Electric Sheep Fencing, LLC.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ *
+ * "This product includes software developed by the pfSense Project
+ * for use in the pfSense software distribution (http://www.pfsense.org/).
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
/*
pfSense_BUILDER_BINARIES: /sbin/pfctl
- pfSense_MODULE: shaper
+ pfSense_MODULE: shaper
*/
##|+PRIV
@@ -42,12 +66,15 @@
##|*MATCH=status_queues.php*
##|-PRIV
+/*
header("Last-Modified: " . gmdate("D, j M Y H:i:s") . " GMT");
header("Expires: " . gmdate("D, j M Y H:i:s", time()) . " GMT");
header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0
+*/
require("guiconfig.inc");
+
class QueueStats {
public $queuename;
public $queuelength;
@@ -57,13 +84,16 @@ class QueueStats {
public $suspends;
public $drops;
}
+
if (!file_exists("{$g['varrun_path']}/qstats.pid") || !isvalidpid("{$g['varrun_path']}/qstats.pid")) {
- /* Start in the background so we don't hang up the GUI */
+ // Start in the background so we don't hang up the GUI
mwexec_bg("/usr/local/sbin/qstats -p {$g['varrun_path']}/qstats.pid");
- /* Give it a moment to start up */
+ // Give it a moment to start up
sleep(1);
}
+
$fd = @fsockopen("unix://{$g['varrun_path']}/qstats");
+
if (!$fd) {
$error = "Something wrong happened during communication with stat gathering";
} else {
@@ -78,15 +108,16 @@ if (!$fd) {
$error = "No queue statistics could be read.";
}
}
+
if ($_REQUEST['getactivity']) {
$statistics = array();
$bigger_stat = 0;
$stat_type = $_REQUEST['stats'];
- /* build the queue stats. */
+ // build the queue stats.
foreach ($altqstats['queue'] as $q) {
statsQueues($q);
}
- /* calculate the bigger amount of packets or bandwidth being moved through all queues. */
+ // calculate the bigger amount of packets or bandwidth being moved through all queues.
if ($stat_type == "0") {
foreach ($statistics as $q) {
if ($bigger_stat < $q->pps) {
@@ -100,6 +131,7 @@ if ($_REQUEST['getactivity']) {
}
}
}
+
$finscript = "";
foreach ($statistics as $q) {
if ($stat_type == "0") {
@@ -110,6 +142,9 @@ if ($_REQUEST['getactivity']) {
if ($packet_s < 0) {
$packet_s = 0;
}
+
+ $finscript .= '<script src="/jquery/jquery-1.11.2.min.js"></script>';
+ $finscript .= '<script>';
$finscript .= "jQuery('#queue{$q->queuename}width').css('width','{$packet_s}%');";
$finscript .= "jQuery('#queue{$q->queuename}pps').val('" . number_format($q->pps, 1) . "');";
$finscript .= "jQuery('#queue{$q->queuename}bps').val('" . format_bits($q->bandwidth) . "');";
@@ -117,106 +152,15 @@ if ($_REQUEST['getactivity']) {
$finscript .= "jQuery('#queue{$q->queuename}suspends').val('{$q->suspends}');";
$finscript .= "jQuery('#queue{$q->queuename}drops').val('{$q->drops}');";
$finscript .= "jQuery('#queue{$q->queuename}length').val('{$q->queuelength}');";
+ $finscript .= '</script>';
}
+
unset($statistics, $altqstats);
- header("Content-type: text/javascript");
+// header("Content-type: text/javascript");
echo $finscript;
exit;
}
-$pgtitle = array(gettext("Status"), gettext("Traffic shaper"), gettext("Queues"));
-$shortcut_section = "trafficshaper";
-include("head.inc");
-?>
-<body>
-<script src="/jquery/jquery-1.11.2.min.js"></script>
-<?php
-if (!is_array($config['shaper']['queue']) || count($config['shaper']['queue']) < 1) {
- print_info_box(gettext("Traffic shaping is not configured."));
- include("fend.inc");
- echo "</body></html>";
- exit;
-}
-?>
-<?php if (!$error): ?>
-<form action="status_queues.php" method="post">
-<script type="text/javascript">
-//<![CDATA[
- function getqueueactivity() {
- var url = "/status_queues.php";
- var pars = "getactivity=yes&stats=" + jQuery("#selStatistic").val();
- jQuery.ajax(
- url,
- {
- type: 'post',
- data: pars,
- complete: activitycallback
- });
- }
- function activitycallback(transport) {
- setTimeout('getqueueactivity()', 5100);
- }
- jQuery(document).ready(function() {
- setTimeout('getqueueactivity()', 150);
- });
-//]]>
-</script>
-<?php endif;
-
-if ($error):
- print_info_box($error);
-else: ?>
- <div class="panel panel-default">
- <div class="panel-heading"><h2 class="panel-title"><?=gettext("Status Queues"); ?></h2></div>
- <div class="panel-body table-responsive">
- <table class="table table-striped table-hover">
- <thead>
- <tr>
- <th><?=gettext("Queue"); ?></th>
- <th><?=gettext("Statistics"); ?>
- <select id="selStatistic">
- <option value="0">PPS</option>
- <option value="1">Bandwidth</option>
- </select>
- </th>
- <th><?=gettext("PPS"); ?></th>
- <th><?=gettext("Bandwidth"); ?></th>
- <th><?=gettext("Borrows"); ?></th>
- <th><?=gettext("Suspends"); ?></th>
- <th><?=gettext("Drops"); ?></th>
- <th><?=gettext("Length"); ?></th>
- </tr>
- </thead>
-<?php
- $if_queue_list = get_configured_interface_list_by_realif(false, true);
- processQueues($altqstats, 0, "");
-?>
-<?php endif; ?>
- </table>
-</br>
-
-<?php
-
- print_info_box(gettext("Queue graphs take 5 seconds to sample data"));
-?>
-
-<script type="text/javascript">
-//<![CDATA[
- function StatsShowHide(classname) {
- var firstrow = jQuery("." + classname).first();
- if (firstrow.is(':visible')) {
- jQuery("." + classname).hide();
- } else {
- jQuery("." + classname).show();
- }
- }
-//]]>
-</script>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html>
-<?php
function processQueues($altqstats, $level, $parent_name) {
global $g;
global $if_queue_list;
@@ -227,6 +171,7 @@ function processQueues($altqstats, $level, $parent_name) {
$row_background = str_repeat(dechex($gray_value), 3);
$parent_name = $parent_name . " queuerow" . $altqstats['name'] . $altqstats['interface'];
$prev_if = $altqstats['interface'];
+
foreach ($altqstats['queue'] as $q) {
$if_name = "";
foreach ($if_queue_list as $oif => $real_name) {
@@ -235,6 +180,7 @@ function processQueues($altqstats, $level, $parent_name) {
break;
}
}
+
if ($prev_if != $q['interface']) {
echo "<tr><td><b>Interface ". htmlspecialchars(convert_real_interface_to_friendly_descr($q['interface'])) . "</b></td></tr>";
$prev_if = $q['interface'];
@@ -259,7 +205,7 @@ function processQueues($altqstats, $level, $parent_name) {
$cpuUsage = 0;
echo "<td bgcolor=\"#{$row_background}\">";
echo "<div class='progress' style='height: 7px;width: 170px;'>
- <div class='progress-bar' role='progressbar' name='queue{$q['name']}{$q['interface']}width' id='queue{$q['name']}{$q['interface']}width' aria-valuenow='70' aria-valuemin='0' aria-valuemax='100' style='width: ". ($cpuUsage*100) ."%;'></div>
+ <div class='progress-bar' role='progressbar' name='queue{$q['name']}{$q['interface']}width' id='queue{$q['name']}{$q['interface']}width' aria-valuenow='70' aria-valuemin='0' aria-valuemax='100' style='width: ". ($cpuUsage*100) ."%;'></div>
</div>";
echo " </td>";
echo "<td bgcolor=\"#{$row_background}\"><input style='border: 0px solid white; background-color:#{$row_background}; color:#000000;width:70px;text-align:right;' size='10' name='queue{$q['name']}{$q['interface']}pps' id='queue{$q['name']}{$q['interface']}pps' value='(" . gettext("Loading") . ")' align='left' /></td>";
@@ -274,8 +220,9 @@ function processQueues($altqstats, $level, $parent_name) {
if (is_array($q['queue'])) {
processQueues($q, $level + 1, $parent_name);
}
- };
+ }
}
+
function statsQueues($xml) {
global $statistics;
@@ -298,10 +245,12 @@ function statsQueues($xml) {
$current->drops += $child->drops;
}
}
+
unset($child);
$statistics[] = $current;
return $current;
}
+
function format_bits($bits) {
if ($bits >= 1000000000) {
return sprintf("%.2f Gbps", $bits/1000000000);
@@ -313,4 +262,97 @@ function format_bits($bits) {
return sprintf("%d bps", $bits);
}
}
+
+$pgtitle = array(gettext("Status"), gettext("Traffic shaper"), gettext("Queues"));
+$shortcut_section = "trafficshaper";
+include("head.inc");
+
+/*
+if (!is_array($config['shaper']['queue']) || count($config['shaper']['queue']) < 1) {
+ print_info_box(gettext("Traffic shaping is not configured."));
+ include("foot.inc");
+ exit;
+}
+*/
+if (!$error):
+ print_info_box($error, 'danger');
+else:
+?>
+<form action="status_queues.php" method="post">
+ <div class="panel panel-default">
+ <div class="panel-heading"><h2 class="panel-title"><?=gettext("Status Queues"); ?></h2></div>
+ <div class="panel-body table-responsive">
+ <table class="table table-striped table-hover">
+ <thead>
+ <tr>
+ <th><?=gettext("Queue"); ?></th>
+ <th><?=gettext("Statistics"); ?>
+ <select id="selStatistic">
+ <option value="0">PPS</option>
+ <option value="1">Bandwidth</option>
+ </select>
+ </th>
+ <th><?=gettext("PPS"); ?></th>
+ <th><?=gettext("Bandwidth"); ?></th>
+ <th><?=gettext("Borrows"); ?></th>
+ <th><?=gettext("Suspends"); ?></th>
+ <th><?=gettext("Drops"); ?></th>
+ <th><?=gettext("Length"); ?></th>
+ </tr>
+ </thead>
+ <tbody>
+<?php
+ $if_queue_list = get_configured_interface_list_by_realif(false, true);
+ processQueues($altqstats, 0, "");
?>
+ </tbody>
+ </table>
+ </div>
+ </div>
+</form>
+<?php
+ print_info_box(gettext("Queue graphs take 5 seconds to sample data"));
+endif;
+
+?>
+
+<script type="text/javascript">
+//<![CDATA[
+events.push(function(){
+ function StatsShowHide(classname) {
+ var firstrow = jQuery("." + classname).first();
+ if (firstrow.is(':visible')) {
+ jQuery("." + classname).hide();
+ } else {
+ jQuery("." + classname).show();
+ }
+ }
+
+ function getqueueactivity() {
+ var url = "/status_queues.php";
+ var pars = "getactivity=yes&stats=" + jQuery("#selStatistic").val();
+
+ jQuery.ajax(
+ url,
+ {
+ type: 'post',
+ data: pars,
+ complete: activitycallback
+ }
+ );
+ }
+
+ function activitycallback(transport) {
+ setTimeout(function(){getqueueactivity()}, 5100);
+ }
+
+ setTimeout(function(){getqueueactivity()}, 150);
+});
+
+//]]>
+</script>
+
+<?php
+
+include("foot.inc");
+
diff --git a/src/usr/local/www/widgets/widgets/interfaces.widget.php b/src/usr/local/www/widgets/widgets/interfaces.widget.php
index 436d0bf..65478b2 100644
--- a/src/usr/local/www/widgets/widgets/interfaces.widget.php
+++ b/src/usr/local/www/widgets/widgets/interfaces.widget.php
@@ -114,7 +114,8 @@ foreach ($ifdescrs as $ifdescr => $ifname):
<?php if (empty($ifinfo['ipaddr'])): ?>
n/a
<?php else: ?>
- <?=$ifinfo['ipaddr']?><br />
+ <?=htmlspecialchars($ifinfo['ipaddr'])?><br />
+ <?=htmlspecialchars($ifinfo['ipaddrv6'])?>
<?php endif; ?>
</td>
</tr>
OpenPOWER on IntegriCloud