r4812 -getSLBRelatedIPs: not needed any more
authorAlexey Andriyanov <alan@al-an.info>
Tue, 4 Oct 2011 07:06:58 +0000 (07:06 +0000)
committerAlexey Andriyanov <alan@al-an.info>
Tue, 4 Oct 2011 07:06:58 +0000 (07:06 +0000)
markupIPAddrList: mark VS- and RSPool-related IPs as trbusy
constructIPv4Address: no more 'rslist' and 'lblist' structures, but 'vslist' and 'rsplist' arrays added
scanIPv4Space: idem
updateV4Address: removed the misleading default value of first argument ($ip = 0)
renderIPv4Network: use new address markup arrays instead of getSLBRelatedIPs
renderIPAddress: display related VS and RSPools in separate portlet
--Ihis line, and those below, will be ignored--

M    trunk/wwwroot/inc/interface.php
M    trunk/wwwroot/inc/database.php
M    trunk/wwwroot/inc/functions.php
M    trunk/wwwroot/inc/slb.php

wwwroot/inc/database.php
wwwroot/inc/functions.php
wwwroot/inc/interface.php
wwwroot/inc/slb.php

index 309f1bc..6a2ad27 100644 (file)
@@ -1587,9 +1587,9 @@ function constructIPv4Address ($dottedquad = NULL)
                'reserved' => 'no',
                'outpf' => array(),
                'inpf' => array(),
-               'rslist' => array(),
                'allocs' => array(),
-               'lblist' => array()
+               'vslist' => array(),
+               'rsplist' => array(),
        );
        if ($dottedquad != NULL)
                $ret['ip'] = $dottedquad;
@@ -1691,46 +1691,26 @@ function scanIPv4Space ($pairlist)
                );
        }
 
-       // 3. look for virtual services and related LB 
-       $query = "select vs_id, inet_ntoa(vip) as ip, vport, proto, vs.name, object_id " .
-               "from IPv4VS as vs inner join IPv4LB as lb on vs.id = lb.vs_id " .
-               "where ${whereexpr3} order by vport, proto, object_id";
+       // 3. look for virtual services
+       $query = "select id, vip as ip_bin, inet_ntoa(vip) as ip from IPv4VS where ${whereexpr3}";
        $result = usePreparedSelectBlade ($query, $qparams);
        $allRows = $result->fetchAll (PDO::FETCH_ASSOC);
        unset ($result);
        foreach ($allRows as $row)
        {
-               $ip_bin = ip2long ($row['ip']);
-               if (!isset ($ret[$ip_bin]))
-                       $ret[$ip_bin] = constructIPv4Address ($row['ip']);
-               $oinfo = spotEntity ('object', $row['object_id']);
-               $ret[$ip_bin]['lblist'][] = array
-               (
-                       'vport' => $row['vport'],
-                       'proto' => $row['proto'],
-                       'vs_id' => $row['vs_id'],
-                       'name' => $row['name'],
-                       'vip' => $row['ip'],
-                       'object_id' => $row['object_id'],
-                       'object_name' => $oinfo['dname'],
-               );
+               if (!isset ($ret[$row['ip_bin']]))
+                       $ret[$row['ip_bin']] = constructIPv4Address ($row['ip']);
+               $ret[$row['ip_bin']]['vslist'][] = $row['id'];
        }
 
        // 4. don't forget about real servers along with pools
-       $query = "select inet_ntoa(rsip) as ip, inservice, rsport, rspool_id, rsp.name as rspool_name from " .
-               "IPv4RS as rs inner join IPv4RSPool as rsp on rs.rspool_id = rsp.id " .
-               "where ${whereexpr4} " .
-               "order by ip, rsport, rspool_id";
+       $query = "select rsip as ip_bin, inet_ntoa(rsip) as ip, rspool_id from IPv4RS where ${whereexpr4}";
        $result = usePreparedSelectBlade ($query, $qparams);
        while ($row = $result->fetch (PDO::FETCH_ASSOC))
        {
-               $ip_bin = ip2long ($row['ip']);
-               if (!isset ($ret[$ip_bin]))
-                       $ret[$ip_bin] = constructIPv4Address ($row['ip']);
-               $tmp = array();
-               foreach (array ('rspool_id', 'rsport', 'rspool_name', 'inservice') as $cname)
-                       $tmp[$cname] = $row[$cname];
-               $ret[$ip_bin]['rslist'][] = $tmp;
+               if (!isset ($ret[$row['ip_bin']]))
+                       $ret[$row['ip_bin']] = constructIPv4Address ($row['ip']);
+               $ret[$row['ip_bin']]['rsplist'][] = $row['rspool_id'];
        }
        unset ($result);
 
@@ -1954,7 +1934,7 @@ function updateAddress ($ip = 0, $name = '', $reserved = 'no')
 // This function is actually used not only to update, but also to create records,
 // that's why ON DUPLICATE KEY UPDATE was replaced by DELETE-INSERT pair
 // (MySQL 4.0 workaround).
-function updateV4Address ($ip = 0, $name = '', $reserved = 'no')
+function updateV4Address ($ip, $name = '', $reserved = 'no')
 {
        // compute update log message
        $result = usePreparedSelectBlade ('SELECT name FROM IPv4Address WHERE ip = INET_ATON(?)', array ($ip));
index cc40fb6..9cc24bf 100644 (file)
@@ -1700,6 +1700,8 @@ function markupIPAddrList (&$addrlist)
                        $addrlist[$ip_bin]['class'] = 'trbusy';
                elseif ($nrealms > 1)
                        $addrlist[$ip_bin]['class'] = 'trerror';
+               elseif (! empty ($addrlist[$ip_bin]['vslist']))
+                       $addrlist[$ip_bin]['class'] = 'trbusy';
                else
                        $addrlist[$ip_bin]['class'] = '';
        }
index 0f9181e..dc56775 100644 (file)
@@ -2566,7 +2566,6 @@ function renderIPv4Network ($id)
        echo "<table class='widetable' border=0 cellspacing=0 cellpadding=5 align='center' width='100%'>\n";
        echo "<tr><th>Address</th><th>Name</th><th>Allocation</th></tr>\n";
 
-       $slb_ips = getSLBRelatedIPs ($startip, $endip);
        for ($ip = $startip; $ip <= $endip; $ip++) :
                $dottedquad = ip_long2quad($ip);
                $secondstyle = 'tdleft' . (isset ($hl_ip) && $hl_ip == $ip ? ' port_highlight' : '');
@@ -2596,7 +2595,7 @@ function renderIPv4Network ($id)
                        echo "<strong>RESERVED</strong> ";
                        $delim = '; ';
                }
-               foreach ($range['addrlist'][$ip]['allocs'] as $ref)
+               foreach ($addr['allocs'] as $ref)
                {
                        echo $delim . $aac2[$ref['type']];
                        echo "<a href='".makeHref(array('page'=>'object', 'object_id'=>$ref['object_id'], 'tab' => 'default', 'hl_ipv4_addr'=>$addr['ip']))."'>";
@@ -2606,20 +2605,20 @@ function renderIPv4Network ($id)
                }
                if ($delim != '')
                        $delim = '<br>';
-               if (isset ($slb_ips[$ip]['vs']))
-                       foreach ($slb_ips[$ip]['vs'] as $vs)
-                       {
-                               echo "${delim}<a href='".makeHref(array('page'=>'ipv4vs', 'vs_id'=>$vs['id']))."'>";
-                               echo "${vs['name']}:${vs['vport']}/${vs['proto']}</a>&rarr;";
-                               $delim = '<br>';
-                       }
-               if (isset ($slb_ips[$ip]['rsp']))
-                       foreach ($slb_ips[$ip]['rsp'] as $rsp)
-                       {
-                               echo "${delim}&rarr;<a href='".makeHref(array('page'=>'ipv4rspool', 'pool_id'=>$rsp['id']))."'>";
-                               echo "${rsp['name']}</a>";
-                               $delim = '<br>';
-                       }
+               foreach ($addr['vslist'] as $vs_id)
+               {
+                       $vs = spotEntity ('ipv4vs', $vs_id);
+                       echo "${delim}<a href='".makeHref(array('page'=>'ipv4vs', 'vs_id'=>$vs['id']))."'>";
+                       echo "${vs['name']}:${vs['vport']}/${vs['proto']}</a>&rarr;";
+                       $delim = '<br>';
+               }
+               foreach ($addr['rsplist'] as $rsp_id)
+               {
+                       $rsp = spotEntity ('ipv4rspool', $rsp_id);
+                       echo "${delim}&rarr;<a href='".makeHref(array('page'=>'ipv4rspool', 'pool_id'=>$rsp['id']))."'>";
+                       echo "${rsp['name']}</a>";
+                       $delim = '<br>';
+               }
                echo "</td></tr>\n";
        endfor;
        // end of iteration
@@ -2885,10 +2884,28 @@ function renderIPAddress ($dottedquad)
        {
                $summary['Originated NAT connections'] = count ($address['outpf']);
                $summary['Arriving NAT connections'] = count ($address['inpf']);
-               $summary['Virtual IP instances'] = count ($address['lblist']);
-               $summary['SLB real servers'] =  count ($address['rslist']);
        }
        renderEntitySummary ($address, 'summary', $summary);
+       
+       // render SLB portlet
+       if ($address['version'] == 4 and (! empty ($address['vslist']) or ! empty ($address['rsplist'])))
+       {
+               startPortlet ("");
+               if (! empty ($address['vslist']))
+               {
+                       printf ("<h2>virtual services (%d):</h2>", count ($address['vslist']));
+                       foreach ($address['vslist'] as $vs_id)
+                               renderSLBEntityCell (spotEntity ('ipv4vs', $vs_id));
+               }
+
+               if (! empty ($address['rsplist']))
+               {
+                       printf ("<h2>RS pools (%d):</h2>", count ($address['rsplist']));
+                       foreach ($address['rsplist'] as $rsp_id)
+                               renderSLBEntityCell (spotEntity ('ipv4rspool', $rsp_id));
+               }
+               finishPortlet();
+       }
        echo "</td>\n";
 
        echo "<td class=pcright>";
index c742c42..719c0f0 100644 (file)
@@ -496,30 +496,4 @@ function getRSListInPool ($rspool_id)
        return $ret;
 }
 
-// returns array indexed by binary IP. Values are arrays like ('vs' => ..., 'rsp' => ...)
-function getSLBRelatedIPs ($startip, $endip)
-{
-       $ret = array();
-
-       $result = usePreparedSelectBlade
-       (
-               "SELECT * FROM IPv4VS WHERE vip BETWEEN ? AND ?",
-               array ($startip, $endip)
-       );
-       while ($row = $result->fetch (PDO::FETCH_ASSOC))
-               $ret[$row['vip']]['vs'][$row['id']] = $row;
-       unset ($result);
-
-       $result = usePreparedSelectBlade
-       (
-               "SELECT IPv4RSPool.*, rs.rsip FROM IPv4RSPool, (SELECT rsip, rspool_id FROM IPv4RS WHERE rsip BETWEEN ? AND ?) AS rs WHERE rs.rspool_id = IPv4RSPool.id",
-               array ($startip, $endip)
-       );
-       while ($row = $result->fetch (PDO::FETCH_ASSOC))
-               $ret[$row['rsip']]['rsp'][$row['id']] = $row;
-       unset ($result);
-       
-       return $ret;
-}
-
 ?>