r1885 + implement tag filtering for IPv4 RS pools
authorDenis Ovsienko <infrastation@yandex.ru>
Mon, 14 Apr 2008 19:59:33 +0000 (19:59 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Mon, 14 Apr 2008 19:59:33 +0000 (19:59 +0000)
inc/database.php
inc/interface.php
inc/ophandlers.php

index aff3704..c420a00 100644 (file)
@@ -2231,11 +2231,24 @@ function getVSList ($tagfilter = array())
 }
 
 // Return the list of RS pool, indexed by pool id.
-function getRSPoolList ()
+function getRSPoolList ($tagfilter = array())
 {
+       if (!count ($tagfilter))
+               $whereclause = '';
+       else
+       {
+               $whereclause = 'where ';
+               $orclause = '';
+               foreach ($tagfilter as $tag_id)
+               {
+                       $whereclause .= $orclause . 'tag_id = ' . $tag_id;
+                       $orclause = ' or ';
+               }
+       }
        $query = "select pool.id, pool.name, count(rspool_id) as refcnt, pool.vsconfig, pool.rsconfig " .
                "from IPRSPool as pool left join IPLoadBalancer as lb on pool.id = lb.rspool_id " .
-               "group by pool.id order by pool.id, name";
+               "left join TagStorage on pool.id = TagStorage.target_id and target_realm = 'ipv4rspool' " .
+               "${whereclause} group by pool.id order by pool.id, name";
        $result = useSelectBlade ($query);
        $ret = array ();
        while ($row = $result->fetch (PDO::FETCH_ASSOC))
index 6200a0b..14d6f30 100644 (file)
@@ -4642,12 +4642,17 @@ function renderVSListEditForm ()
 function renderRSPoolList ()
 {
        global $root, $nextorder;
-       $pool_list = getRSPoolList();
+       $tagfilter = isset ($_REQUEST['tagfilter']) ? $_REQUEST['tagfilter'] : array();
+       $tagfilter = complementByKids ($tagfilter);
+       $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');
        echo "<table class=widetable border=0 cellpadding=10 cellspacing=0 align=center>\n";
        echo "<tr><th>refcnt</th><th>name</th><th>VS configuration</th><th>RS configuration</th></tr>";
        $order = 'odd';
@@ -4662,6 +4667,10 @@ function renderRSPoolList ()
                $order = $nextorder[$order];
        }
        echo "</table>";
+       finishPortlet ();
+       echo '</td><td class=pcright>';
+       renderTagFilterPortlet ($tagfilter, 'ipv4rspool');
+       echo '</td></tr></table>';
 }
 
 function editRSPools ()
@@ -5095,7 +5104,7 @@ function renderIPv4VSTags ($id)
 
 function renderIPv4RSPoolTags ($id)
 {
-       renderEntityTags ('ip4rspool', 'id', $id);
+       renderEntityTags ('ip4rspool', 'pool_id', $id);
 }
 
 function renderEntityTags ($entity_realm = '', $bypass_name, $entity_id = 0)
index f33ece9..c7265d3 100644 (file)
@@ -1364,7 +1364,7 @@ function saveIPv4VSTags ()
 
 function saveIPv4RSPoolTags ()
 {
-       return saveEntityTags ('ipv4rspool', 'id');
+       return saveEntityTags ('ipv4rspool', 'pool_id');
 }
 
 function destroyTag ()