r2683 - discardLDAPCache(): fix quoting in query to make it actually work
authorDenis Ovsienko <infrastation@yandex.ru>
Tue, 5 May 2009 14:06:17 +0000 (14:06 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Tue, 5 May 2009 14:06:17 +0000 (14:06 +0000)
 - renderVSList(): reduce to a renderCellList() wrapper
 - renderVSListEditForm(): switch to listCells()
 - getIPv4VSOptions(): put helper cycle here for now, use 'dname'
 - renderRSPoolLBForm(): make use of getIPv4VSOptions()
 - renderObjectSLB(): idem
 - renderCell(): handle 'ipv4vs' realm
 - scanRealmByText(): idem
 - listCells(): idem, plus put VS 'dname' calculation on SQL server side
 - renderIPv4VSCell(): don't recalculate 'dname', if already provided
 - getVSList(): replaced by listCells()

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

index e95f397..d423494 100644 (file)
@@ -241,7 +241,7 @@ function listCells ($realm)
                        'user_id' => 'user_id',
                        'user_name' => 'user_name',
                        'user_password_hash' => 'user_password_hash',
-                       'user_realname' => 'user_realname'
+                       'user_realname' => 'user_realname',
                );
                $keycolumn = 'user_id';
                $ordcolumns = array ('user_name');
@@ -253,7 +253,7 @@ function listCells ($realm)
                        'id' => 'id',
                        'ip' => 'INET_NTOA(IPv4Network.ip)',
                        'mask' => 'mask',
-                       'name' => 'name'
+                       'name' => 'name',
                );
                $keycolumn = 'id';
                $ordcolumns = array ('ip', 'mask');
@@ -274,6 +274,23 @@ function listCells ($realm)
                $keycolumn = 'id';
                $ordcolumns = array ('name');
                break;
+       case 'ipv4vs':
+               $table = 'IPv4VS';
+               $columns = array
+               (
+                       'id' => 'id',
+                       'vip' => 'INET_NTOA(vip)',
+                       'vport' => 'vport',
+                       'proto' => 'proto',
+                       'name' => 'name',
+                       'vsconfig' => 'vsconfig',
+                       'rsconfig' => 'rsconfig',
+                       'poolcount' => '(select count(vs_id) from IPv4LB where vs_id = id)',
+                       'dname' => 'CONCAT_WS("/", CONCAT_WS(":", INET_NTOA(vip), vport), proto)',
+               );
+               $keycolumn = 'id';
+               $ordcolumns = array ('vip', 'proto', 'vport');
+               break;
        default:
                showError ('invalid arg', __FUNCTION__);
                return NULL;
@@ -2675,24 +2692,6 @@ function commitUpdateVS ($vsid = 0, $vip = '', $vport = 0, $proto = '', $name =
                return TRUE;
 }
 
-// Return the list of virtual services, indexed by vs_id.
-// Each record will be shown with its basic info plus RS pools counter.
-function getVSList ($tagfilter = array())
-{
-       $whereclause = getWhereClause ($tagfilter);
-       $query = "select vs.id, inet_ntoa(vip) as vip, vport, proto, vs.name, vs.vsconfig, vs.rsconfig, count(rspool_id) as poolcount " .
-               "from IPv4VS as vs left join IPv4LB as lb on vs.id = lb.vs_id " .
-               "left join TagStorage on vs.id = TagStorage.entity_id and entity_realm = 'ipv4vs' " . 
-               "where true ${whereclause} group by vs.id order by vs.vip, proto, vport";
-       $result = useSelectBlade ($query, __FUNCTION__);
-       $ret = array ();
-       while ($row = $result->fetch (PDO::FETCH_ASSOC))
-               foreach (array ('vip', 'vport', 'proto', 'name', 'vsconfig', 'rsconfig', 'poolcount') as $cname)
-                       $ret[$row['id']][$cname] = $row[$cname];
-       $result->closeCursor();
-       return $ret;
-}
-
 // Return the list of RS pool, indexed by pool id.
 function getRSPoolList ($tagfilter = array())
 {
@@ -3825,7 +3824,7 @@ function deleteLDAPCacheRecord ($form_username)
 function discardLDAPCache ($maxage = 0)
 {
        global $dbxlink;
-       $dbxlink->exec ('DELETE from LDAPCache WHERE NOW() - first_success >= ${maxage} or NOW() < first_success');
+       $dbxlink->exec ("DELETE from LDAPCache WHERE NOW() - first_success >= ${maxage} or NOW() < first_success");
 }
 
 function getUserIDByUsername ($username)
index a0e0d50..b1cb69e 100644 (file)
@@ -2118,6 +2118,7 @@ function scanRealmByText ($realm = NULL, $ftext = '')
        case 'user':
        case 'ipv4net':
        case 'file':
+       case 'ipv4vs':
                if (!strlen ($ftext = trim ($ftext)))
                        $fexpr = array();
                else
@@ -2133,4 +2134,13 @@ function scanRealmByText ($realm = NULL, $ftext = '')
        }
 
 }
+
+function getIPv4VSOptions ()
+{
+       $ret = array();
+       foreach (listCells ('ipv4vs') as $vsid => $vsinfo)
+               $ret[$vsid] = $vsinfo['dname'] . (empty ($vsinfo['name']) ? '' : " (${vsinfo['name']})");
+       return $ret;
+}
+
 ?>
index 744ba91..68bf96f 100644 (file)
@@ -4200,9 +4200,6 @@ function renderRSPoolLBForm ($pool_id = 0)
        showMessageOrError();
 
        $poolInfo = getRSPoolInfo ($pool_id);
-       $vs_list = array ();
-       foreach (getVSList() as $vsid => $vsinfo)
-               $vs_list[$vsid] = buildVServiceName ($vsinfo) . (empty ($vsinfo['name']) ? '' : " (${vsinfo['name']})");
 
        if (count ($poolInfo['lblist']))
        {
@@ -4236,7 +4233,7 @@ function renderRSPoolLBForm ($pool_id = 0)
        printOpFormIntro ('addLB');
        echo "<tr valign=top><th>LB / VS</th><td class=tdleft>";
        printSelect (getNarrowObjectList ('IPV4LB_LISTSRC'), 'object_id', NULL, 1);
-       printSelect ($vs_list, 'vs_id', NULL, 2);
+       printSelect (getIPv4VSOptions(), 'vs_id', NULL, 2);
        echo "</td><td>";
        printImageHREF ('add', 'Configure LB', TRUE, 5);
        echo "</td></tr>\n";
@@ -4378,30 +4375,7 @@ function renderRSPool ($pool_id = 0)
 
 function renderVSList ()
 {
-       global $nextorder;
-       $tagfilter = getTagFilter();
-       $vslist = getVSList ($tagfilter);
-       echo "<table border=0 class=objectview>\n";
-       echo "<tr><td class=pcleft>";
-
-       startPortlet ('Virtual services (' . count ($vslist) . ')');
-       echo "<table class=widetable border=0 cellpadding=10 cellspacing=0 align=center>\n";
-       echo "<tr><th>endpoint, name, tags</th><th>VS configuration</th><th>RS configuration</th></tr>";
-       $order = 'odd';
-       foreach ($vslist as $vsid => $vsinfo)
-       {
-               echo "<tr align=left valign=top class=row_${order}><td class=tdleft>";
-               renderVSCell ($vsid);
-               echo "</td><td class=slbconf>${vsinfo['vsconfig']}</td>";
-               echo "<td class=slbconf>${vsinfo['rsconfig']}</td>";
-               echo "</tr>\n";
-               $order = $nextorder[$order];
-       }
-       echo "</table>";
-       finishPortlet();
-       echo '</td><td class=pcright>';
-       renderTagFilterPortlet ($tagfilter, 'ipv4vs');
-       echo '</td></tr></table>';
+       renderCellList ('ipv4vs', 'Virtual services');
 }
 
 function renderVSListEditForm ()
@@ -4433,7 +4407,7 @@ function renderVSListEditForm ()
        echo "</form>\n";
        finishPortlet();
 
-       $vslist = getVSList();
+       $vslist = listCells ('ipv4vs');
        if (!count ($vslist))
                return;
        startPortlet ('Manage existing (' . count ($vslist) . ')');
@@ -5142,9 +5116,7 @@ function renderObjectSLB ($object_id)
 {
        global $nextorder;
        showMessageOrError();
-       $vs_list = $rsplist = array();
-       foreach (getVSList() as $vsid => $vsinfo)
-               $vs_list[$vsid] = buildVServiceName ($vsinfo) . (empty ($vsinfo['name']) ? '' : " (${vsinfo['name']})");
+       $rsplist = array();
        foreach (getRSPoolList() as $pool_id => $poolInfo)
                $rsplist[$pool_id] = $poolInfo['name'];
 
@@ -5152,7 +5124,7 @@ function renderObjectSLB ($object_id)
        echo "<table cellspacing=0 cellpadding=5 align=center class=widetable>\n";
        printOpFormIntro ('addLB');
        echo "<tr valign=top><th>VS / RS pool</th><td class=tdleft>";
-       printSelect ($vs_list, 'vs_id', NULL, 1);
+       printSelect (getIPv4VSOptions(), 'vs_id', NULL, 1);
        echo "</td><td>";
        printSelect ($rsplist, 'pool_id', NULL, 2);
        echo "</td><td>";
@@ -5781,6 +5753,9 @@ function renderCell ($cell)
        case 'file':
                renderFileCell ($cell);
                break;
+       case 'ipv4vs':
+               renderIPv4VSCell ($cell);
+               break;
        default:
                showError ('odd data', __FUNCTION__);
                break;
@@ -5844,8 +5819,10 @@ function renderIPv4VSCell ($vsinfo)
        printImageHREF ('VS');
        echo "</td><td>";
        echo "<a href='${root}?page=ipv4vs&vs_id=${vsinfo['id']}'>";
-       echo buildVServiceName ($vsinfo);
-       echo "</a></td></tr><tr><td>";
+       // FIXME: this is a workaround
+       if (!isset ($vsinfo['dname']))
+               $vsinfo['dname'] = buildVServiceName ($vsinfo);
+       echo $vsinfo['dname'] . "</a></td></tr><tr><td>";
        echo $vsinfo['name'];
        echo '</td></tr><tr><td>';
        $tags = loadEntityTags ('ipv4vs', $vsinfo['id']);