r2684 - renderRSPoolList(): reduce to a wrapper
authorDenis Ovsienko <infrastation@yandex.ru>
Tue, 5 May 2009 16:44:14 +0000 (16:44 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Tue, 5 May 2009 16:44:14 +0000 (16:44 +0000)
 - getIPv4RSPoolOptions(): one more temporary slow helper func
 - getRSPoolList(): obsoleted by listCells()

inc/database.php
inc/functions.php
inc/interface.php

index d423494..822cfc1 100644 (file)
@@ -291,6 +291,20 @@ function listCells ($realm)
                $keycolumn = 'id';
                $ordcolumns = array ('vip', 'proto', 'vport');
                break;
+       case 'ipv4rspool':
+               $table = 'IPv4RSPool';
+               $columns = array
+               (
+                       'id' => 'id',
+                       'name' => 'name',
+                       'refcnt' => '(select count(rspool_id) from IPv4LB where rspool_id = id)',
+                       'rscount' => '(select count(rspool_id) from IPv4RS where rspool_id = IPv4RSPool.id)',
+                       'vsconfig' => 'vsconfig',
+                       'rsconfig' => 'rsconfig',
+               );
+               $keycolumn = 'id';
+               $ordcolumns = array ('name', 'id');
+               break;
        default:
                showError ('invalid arg', __FUNCTION__);
                return NULL;
@@ -2692,23 +2706,6 @@ function commitUpdateVS ($vsid = 0, $vip = '', $vport = 0, $proto = '', $name =
                return TRUE;
 }
 
-// Return the list of RS pool, indexed by pool id.
-function getRSPoolList ($tagfilter = array())
-{
-       $whereclause = getWhereClause ($tagfilter);
-       $query = "select pool.id, pool.name, count(rspool_id) as refcnt, pool.vsconfig, pool.rsconfig " .
-               "from IPv4RSPool as pool left join IPv4LB as lb on pool.id = lb.rspool_id " .
-               "left join TagStorage on pool.id = TagStorage.entity_id and entity_realm = 'ipv4rspool' " .
-               "where true ${whereclause} group by pool.id order by pool.name, pool.id";
-       $result = useSelectBlade ($query, __FUNCTION__);
-       $ret = array ();
-       while ($row = $result->fetch (PDO::FETCH_ASSOC))
-               foreach (array ('name', 'refcnt', 'vsconfig', 'rsconfig') as $cname)
-                       $ret[$row['id']][$cname] = $row[$cname];
-       $result->closeCursor();
-       return $ret;
-}
-
 function loadThumbCache ($rack_id = 0)
 {
        $ret = NULL;
index b1cb69e..177a131 100644 (file)
@@ -2119,6 +2119,7 @@ function scanRealmByText ($realm = NULL, $ftext = '')
        case 'ipv4net':
        case 'file':
        case 'ipv4vs':
+       case 'ipv4rspool':
                if (!strlen ($ftext = trim ($ftext)))
                        $fexpr = array();
                else
@@ -2143,4 +2144,12 @@ function getIPv4VSOptions ()
        return $ret;
 }
 
+function getIPv4RSPoolOptions ()
+{
+       $ret = array();
+       foreach (listCells ('ipv4rspool') as $pool_id => $poolInfo)
+               $ret[$pool_id] = $poolInfo['name'];
+       return $ret;
+}
+
 ?>
index 68bf96f..35d8507 100644 (file)
@@ -4276,15 +4276,12 @@ function renderVServiceLBForm ($vs_id = 0)
                finishPortlet();
        }
 
-       $rsplist = array();
-       foreach (getRSPoolList() as $pool_id => $poolInfo)
-               $rsplist[$pool_id] = $poolInfo['name'];
        startPortlet ('Add new');
        echo "<table cellspacing=0 cellpadding=5 align=center class=widetable>\n";
        printOpFormIntro ('addLB');
        echo "<tr valign=top><th>LB / RS pool</th><td class=tdleft>";
        printSelect (getNarrowObjectList ('IPV4LB_LISTSRC'), 'object_id', NULL, 1);
-       printSelect ($rsplist, 'pool_id', NULL, 2);
+       printSelect (getIPv4RSPoolOptions(), 'pool_id', NULL, 2);
        echo "</td><td>";
        printImageHREF ('add', 'Configure LB', TRUE, 5);
        echo "</td></tr>\n";
@@ -4445,41 +4442,7 @@ function renderVSListEditForm ()
 
 function renderRSPoolList ()
 {
-       global $pageno, $nextorder;
-       $tagfilter = getTagFilter();
-       $pool_list = getRSPoolList ($tagfilter);
-       if ($pool_list === NULL)
-       {
-               showError ('getRSPoolList() failed', __FUNCTION__);
-               return;
-       }
-       echo "<table border=0 class=objectview>\n";
-       echo "<tr><td class=pcleft>";
-       startPortlet ('RS pools (' . count ($pool_list) . ')');
-       echo "<table class=widetable border=0 cellpadding=10 cellspacing=0 align=center>\n";
-       echo "<tr><th>name, refcnt, tags</th><th>VS configuration</th><th>RS configuration</th></tr>";
-       $order = 'odd';
-       foreach ($pool_list as $pool_id => $pool_info)
-       {
-               $pooltags = loadEntityTags ('ipv4rspool', $pool_id);
-               echo "<tr valign=top class=row_${order}><td class=tdleft>";
-               echo "<a href='".makeHref(array('page'=>'ipv4rspool', 'pool_id'=>$pool_id))."'>" . (empty ($pool_info['name']) ? 'ANONYMOUS' : $pool_info['name']) . '</a>';
-               echo ($pool_info['refcnt'] ? ", ${pool_info['refcnt']}" : '');
-               if (count ($pooltags))
-               {
-                       echo '<br>';
-                       echo serializeTags ($pooltags, makeHref(array('page'=>$pageno, 'tab'=>'default'))."&");
-               }
-               echo "</td><td class=tdleft><pre>${pool_info['vsconfig']}</pre></td>";
-               echo "<td class=tdleft><pre>${pool_info['rsconfig']}</pre></td>";
-               echo "</tr>\n";
-               $order = $nextorder[$order];
-       }
-       echo "</table>";
-       finishPortlet ();
-       echo '</td><td class=pcright>';
-       renderTagFilterPortlet ($tagfilter, 'ipv4rspool');
-       echo '</td></tr></table>';
+       renderCellList ('ipv4rspool', 'RS pools');
 }
 
 function editRSPools ()
@@ -4501,7 +4464,7 @@ function editRSPools ()
        echo "</table></form>";
        finishPortlet();
 
-       $pool_list = getRSPoolList();
+       $pool_list = listCells ('ipv4rspool');
        if (!count ($pool_list))
                return;
        startPortlet ('Manage existing (' . count ($pool_list) . ')');
@@ -4512,7 +4475,7 @@ function editRSPools ()
        {
                printOpFormIntro ('upd', array ('pool_id' => $pool_id));
                echo "<tr valign=top class=row_${order}><td>";
-               if ($pool_info['refcnt'])
+               if ($pool_info['refcnt'] or $pool_info['rscount'])
                        printImageHREF ('nodelete', 'RS pool is used ' . $pool_info['refcnt'] . ' time(s)');
                else
                {
@@ -4536,7 +4499,7 @@ function renderRealServerList ()
 {
        global $nextorder;
        $rslist = getRSList ();
-       $pool_list = getRSPoolList ();
+       $pool_list = listCells ('ipv4rspool');
        echo "<table class=widetable border=0 cellpadding=10 cellspacing=0 align=center>\n";
        echo "<tr><th>RS pool</th><th>in service</th><th>real IP address</th><th>real port</th><th>RS configuration</th></tr>";
        $order = 'even';
@@ -5116,9 +5079,8 @@ function renderObjectSLB ($object_id)
 {
        global $nextorder;
        showMessageOrError();
-       $rsplist = array();
-       foreach (getRSPoolList() as $pool_id => $poolInfo)
-               $rsplist[$pool_id] = $poolInfo['name'];
+       // Keep the list in a variable to assist in decoding pool name below.
+       $rsplist = getIPv4RSPoolOptions();
 
        startPortlet ('Add new');
        echo "<table cellspacing=0 cellpadding=5 align=center class=widetable>\n";
@@ -5756,6 +5718,9 @@ function renderCell ($cell)
        case 'ipv4vs':
                renderIPv4VSCell ($cell);
                break;
+       case 'ipv4rspool':
+               renderRSPoolCell ($cell['id'], $cell['name']);
+               break;
        default:
                showError ('odd data', __FUNCTION__);
                break;