diff options
author | jim-p <jimp@pfsense.org> | 2010-12-14 12:06:26 -0500 |
---|---|---|
committer | jim-p <jimp@pfsense.org> | 2010-12-14 12:06:26 -0500 |
commit | ece257304f51da5f3aaabf6e6823add79bbcac92 (patch) | |
tree | 75e2fe23e43bd31dfe6a1ae7b625a5df03e43649 /usr/local | |
parent | a776c720e6757fc12222643665f749c2e6d05c1c (diff) | |
download | pfsense-ece257304f51da5f3aaabf6e6823add79bbcac92.zip pfsense-ece257304f51da5f3aaabf6e6823add79bbcac92.tar.gz |
Replace the LB status widget completely with one that supports the current LB system.
Diffstat (limited to 'usr/local')
-rw-r--r-- | usr/local/www/widgets/widgets/load_balancer_status.widget.php | 237 |
1 files changed, 121 insertions, 116 deletions
diff --git a/usr/local/www/widgets/widgets/load_balancer_status.widget.php b/usr/local/www/widgets/widgets/load_balancer_status.widget.php index c1cf979..5993b67 100644 --- a/usr/local/www/widgets/widgets/load_balancer_status.widget.php +++ b/usr/local/www/widgets/widgets/load_balancer_status.widget.php @@ -1,137 +1,142 @@ <?php /* - $Id$ - Copyright 2007 Scott Dale - Part of pfSense widgets (www.pfsense.com) - originally based on m0n0wall (http://m0n0.ch/wall) + Copyright 2010 Jim Pingle + Portions copied from status_lb_pool.php, status_lb_vs.php, and vslb.inc: + Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>. + Copyright (C) 2005-2008 Bill Marquette - Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net> - and Jonathan Watt <jwatt@jwatt.org>. - All rights reserved. + Part of pfSense widgets (www.pfsense.com) + originally based on m0n0wall (http://m0n0.ch/wall) - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: + Copyright (C) 2004-2005 T. Lechat <dev@lechat.org>, Manuel Kasper <mk@neon1.net> + and Jonathan Watt <jwatt@jwatt.org>. + All rights reserved. - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: - 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. + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. - 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. + 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. */ require_once("guiconfig.inc"); require_once("pfsense-utils.inc"); require_once("functions.inc"); +require_once("vslb.inc"); + +$now = time(); +$year = date("Y"); - if (!is_array($config['load_balancer']['lbpool'])) { +if (!is_array($config['load_balancer']['lbpool'])) { $config['load_balancer']['lbpool'] = array(); - } - if (!is_array($config['load_balancer']['virtual_server'])) { - $config['load_balancer']['virtual_server'] = array(); - } - $a_vs = &$config['load_balancer']['virtual_server']; - $a_pool = &$config['load_balancer']['lbpool']; - - $slbd_logfile = "{$g['varlog_path']}/slbd.log"; - - $nentries = $config['syslog']['nentries']; - if (!$nentries) - $nentries = 50; - - $now = time(); - $year = date("Y"); - - +} +if (!is_array($config['load_balancer']['virtual_server'])) { + $config['load_balancer']['virtual_server'] = array(); +} +$a_vs = &$config['load_balancer']['virtual_server']; +$a_pool = &$config['load_balancer']['lbpool']; +$rdr_a = get_lb_redirects(); +$relay_hosts = get_lb_summary(); + +$lb_logfile = "{$g['varlog_path']}/relayd.log"; +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + ?> - <table bgcolor="#990000" width="100%" border="0" cellspacing="0" cellpadding="0"> - <tr> - <td width="10%" class="listhdrr">Name</td> - <td width="10%" class="listhdrr">Port</td> - <td width="10%" class="listhdrr">Servers</td> - <td width="30%" class="listhdrr">Status</td> - <td width="30%" class="listhdr">Description</td> - </tr> - <?php $i = 0; foreach ($a_vs as $vsent): ?> - <tr> - <td class="listlr"> - <?=$vsent['name'];?> - </td> - <td class="listr" align="center" > - <?=$vsent['port'];?> - <br /> - </td> - <td class="listr" align="center" > - <table border="0" cellpadding="0" cellspacing="2"> - <?php - foreach ($a_pool as $vipent) { - if ($vipent['name'] == $vsent['pool']) { - foreach ((array) $vipent['servers'] as $server) { - PRINT "<tr><td> {$server} </td></tr>"; - } +<table bgcolor="#990000" width="100%" border="0" cellspacing="0" cellpadding="0"> + <tr> + <td width="10%" class="listhdrr">Server</td> + <td width="10%" class="listhdrr">Pool</td> + <td width="30%" class="listhdr">Description</td> + </tr> + <?php $i = 0; foreach ($a_vs as $vsent): ?> + <tr> + <?php + switch (trim($rdr_a[$vsent['name']]['status'])) { + case 'active': + $bgcolor = "lightgreen"; + $rdr_a[$vsent['name']]['status'] = "Active"; + break; + case 'down': + $bgcolor = "lightcoral"; + $rdr_a[$vsent['name']]['status'] = "Down"; + break; + default: + $bgcolor = "lightgray"; + $rdr_a[$vsent['name']]['status'] = 'Unknown - relayd not running?'; + } + ?> + <td class="listlr"> + <?=$vsent['name'];?><br/> + <span style="background-color: <?=$bgcolor?>; display: block"><i><?=$rdr_a[$vsent['name']]['status']?></i></span> + <?=$vsent['ipaddr'].":".$vsent['port'];?><br/> + </td> + <td class="listr" align="center" > + <table border="0" cellpadding="0" cellspacing="2"> + <?php + foreach ($a_pool as $pool) { + if ($pool['name'] == $vsent['pool']) { + $pool_hosts=array(); + foreach ((array) $pool['servers'] as $server) { + $svr['ip']['addr']=$server; + $svr['ip']['state']=$relay_hosts[$pool['name'].":".$pool['port']][$server]['state']; + $svr['ip']['avail']=$relay_hosts[$pool['name'].":".$pool['port']][$server]['avail']; + $pool_hosts[]=$svr; } - } - ?> - </table> - </td> - <td class="listr" > - <table border="0" cellpadding="0" cellspacing="2"> - <?php - $poolfile = "{$g['tmp_path']}/{$vsent['name']}.pool"; - if(file_exists("$poolfile")) { - $poolstatus = file_get_contents("$poolfile"); + foreach ((array) $pool['serversdisabled'] as $server) { + $svr['ip']['addr']="$server"; + $svr['ip']['state']='disabled'; + $svr['ip']['avail']='disabled'; + $pool_hosts[]=$svr; } - foreach ($a_pool as $vipent) { - if ($vipent['name'] == $vsent['pool']) { - foreach ((array) $vipent['servers'] as $server) { - $lastchange = ""; - $monitorip = $server; - $logstates = return_clog($slbd_logfile, $nentries, array("$monitorip", "marking"), true); - $logstates = $logstates[0]; - - if(stristr($logstates, $monitorip)) { - $date = preg_split("/[ ]+/" , $logstates); - $lastchange = "$date[0] $date[1] $year $date[2]"; - } - if(stristr($poolstatus, $monitorip)) { - $online = "Online"; - $bgcolor = "lightgreen"; - $change = $now - strtotime("$lastchange"); - if($change < 300) { - $bgcolor = "khaki"; - } - } else { - $online = "Offline"; - $bgcolor = "lightcoral"; + asort($pool_hosts); + foreach ((array) $pool_hosts as $server) { + if($server['ip']['addr']!="") { + switch ($server['ip']['state']) { + case 'up': + $bgcolor = "lightgreen"; + $checked = "checked"; + break; + case 'disabled': + $bgcolor = "white"; + $checked = ""; + break; + default: + $bgcolor = "lightcoral"; + $checked = "checked"; } - PRINT "<tr><td bgcolor=\"$bgcolor\" > $online </td><td>"; - if($lastchange <> "") { - PRINT "Last change $lastchange"; - } else { - PRINT "No changes found in logfile"; - } - PRINT "</td></tr>"; - } + echo "<tr>"; + echo "<td bgcolor={$bgcolor}> {$server['ip']['addr']}:{$pool['port']} </td><td bgcolor={$bgcolor}>"; + if($server['ip']['avail']) + echo " ({$server['ip']['avail']}) "; + echo "</td></tr>"; + } } } - ?> - </table> - </td> - <td class="listbg" > - <font color="#FFFFFF"><?=$vipent['descr'];?></font> - </td> - </tr> - <?php $i++; endforeach; ?> - </table> + } + ?> + </table> + </td> + <td class="listbg" > + <font color="#FFFFFF"><?=$vsent['descr'];?></font> + </td> + </tr> + <?php $i++; endforeach; ?> +</table> |