r1481 + done renderRSPool()
authorDenis Ovsienko <infrastation@yandex.ru>
Thu, 10 Jan 2008 17:45:06 +0000 (17:45 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Thu, 10 Jan 2008 17:45:06 +0000 (17:45 +0000)
+ small bits here and there

inc/database.php
inc/interface.php
inc/navigation.php

index 4caf0385d2271016798f4a0cd128ee6fc7189add..6d152e18d17839bfce020d1d94e3f08f99c0b055 100644 (file)
@@ -1974,12 +1974,12 @@ function getDatabaseVersion ()
 function getSLBSummary ()
 {
        global $dbxlink;
-       $query = 'select vs.id as vsid, vip as vip_bin, inet_ntoa(vip) as vip, vport, proto, ' .
+       $query = 'select vs.id as vsid, inet_ntoa(vip) as vip, vport, proto, ' .
                'vs.name, rsp.id as pool_id, rsp.name as pool_name, object_id, count(rs.id) as rscount from ' .
                'IPVirtualService as vs inner join IPRSPool as rsp on vs.id = rsp.vs_id ' .
                'inner join IPRealServer as rs on rs.rspool_id = rsp.id ' .
                'inner join IPLoadBalancer as lb on rsp.id = lb.rspool_id ' .
-               'group by rsp.id, object_id order by vip_bin, object_id';
+               'group by rsp.id, object_id order by vip, object_id';
        $result = $dbxlink->query ($query);
        if ($result == NULL)
        {
@@ -2036,4 +2036,56 @@ function getVServiceInfo ($vsid = 0)
        return $vsinfo;
 }
 
+// Collect and return the following info about the given real server pool:
+// basic information
+// parent virtual service information
+// load balancers list
+// real servers list
+
+function getRSPoolInfo ($id = 0)
+{
+       global $dbxlink;
+       $query1 = "select ${id} as id, vs_id, pool.name, pool.vsconfig, pool.rsconfig, inet_ntoa(vip) as vip, proto, " .
+               "vs.name as vs_name, vs.vsconfig as vs_vsconfig, vs.rsconfig as vs_rsconfig from " .
+               "IPRSPool as pool inner join IPVirtualService as vs on pool.vs_id = vs.id where pool.id = ${id}";
+       $result1 = $dbxlink->query ($query1);
+       if ($result1 == NULL)
+       {
+               showError ('SQL query #1 failed', __FUNCTION__);
+               return NULL;
+       }
+       $ret = array();
+       $row = $result1->fetch (PDO::FETCH_ASSOC);
+       if (!$row)
+               return NULL;
+       foreach (array ('id', 'name', 'vsconfig', 'rsconfig', 'vs_id', 'vip', 'vs_name', 'vs_vsconfig', 'vs_rsconfig') as $c)
+               $ret[$c] = $row[$c];
+       $result1->closeCursor();
+       $ret['lblist'] = array();
+       $ret['rslist'] = array();
+       $query2 = "select object_id, vsconfig, rsconfig from IPLoadBalancer where rspool_id = ${id} order by object_id";
+       $result2 = $dbxlink->query ($query2);
+       if ($result2 == NULL)
+       {
+               showError ('SQL query #2 failed', __FUNCTION__);
+               return NULL;
+       }
+       while ($row = $result2->fetch (PDO::FETCH_ASSOC))
+               foreach (array ('vsconfig', 'rsconfig') as $c)
+                       $ret['lblist'][$row['object_id']][$c] = $row[$c];
+       $result2->closeCursor();
+       $query3 = "select id, inet_ntoa(rsip) as rsip, rsport, rsconfig from IPRealServer where rspool_id = ${id} order by rsip, rsport";
+       $result3 = $dbxlink->query ($query3);
+       if ($result3 == NULL)
+       {
+               showError ('SQL query #3 failed', __FUNCTION__);
+               return NULL;
+       }
+       while ($row = $result3->fetch (PDO::FETCH_ASSOC))
+               foreach (array ('rsip', 'rsport', 'rsconfig') as $c)
+                       $ret['rslist'][$row['id']][$c] = $row[$c];
+       $result3->closeCursor();
+       return $ret;
+}
+
 ?>
index bf7c1cf5798e314700d8b5fc6ab83f904f08da3b..5d9a486faa5e52cccbfbf9f0124803a71fde8919 100644 (file)
@@ -1660,7 +1660,7 @@ function renderAddressspace ()
                echo "<table class='widetable' border=0 cellpadding=5 cellspacing=0 align='center'>\n";
                echo "<tr><th>VIP</th><th>Name</th>";
                foreach ($lblist as $lb_object_id)
-                       echo "<th><a href='$root?page=object&tab=default&object_id=${lb_object_id}'>" . $lbdname[$lb_object_id]  . "</a></th>";
+                       echo "<th><a href='${root}?page=object&tab=default&object_id=${lb_object_id}'>" . $lbdname[$lb_object_id]  . "</a></th>";
                echo "</tr>\n";
                foreach ($summary as $vsid => $vsdata)
                {
@@ -1674,7 +1674,10 @@ function renderAddressspace ()
                                        echo '&nbsp;';
                                else
                                        foreach ($vsdata['lblist'][$lb_object_id] as $pool_id => $pool_info)
-                                               echo $pool_info['size'] . '@(' . $pool_info['name'] . ')';
+                                       {
+                                               echo $pool_info['size'] . "@(<a href='${root}?page=rspool&id=${pool_id}'>";
+                                               echo $pool_info['name'] . '</a>)';
+                                       }
                                echo '</td>';
                        }
                        echo "</tr>\n";
@@ -3722,4 +3725,70 @@ function renderVSRSPoolForm ($vsid = 0)
        echo "</table>\n";
 }
 
+function renderRSPool ($pool_id = 0)
+{
+       global $root;
+       if ($pool_id <= 0)
+       {
+               showError ('Invalid pool_id', __FUNCTION__);
+               return;
+       }
+       $poolInfo = getRSPoolInfo ($pool_id);
+       if ($poolInfo == NULL)
+       {
+               showError ('getRSPoolInfo() returned NULL', __FUNCTION__);
+               return;
+       }
+
+       echo "<table border=0 class=objectview cellspacing=0 cellpadding=0>";
+       if (!empty ($poolInfo['name']))
+               echo "<tr><td colspan=2 align=center><h1>{$poolInfo['name']}</h1></td></tr>";
+       echo "<tr><td>\n";
+
+       startPortlet ('Configuration');
+       echo "<table border=0 cellspacing=0 cellpadding=3 width='100%'>\n";
+       if (!empty ($poolInfo['name']))
+               echo "<tr><th width='50%' class=tdright>Pool name:</th><td class=tdleft>${poolInfo['name']}</td></tr>\n";
+       echo "<tr><th width='50%' class=tdright>Real servers:</th><td class=tdleft>" . count ($poolInfo['rslist']) . "</td></tr>\n";
+       echo "<tr><th width='50%' class=tdright>Load balancers:</th><td class=tdleft>" . count ($poolInfo['lblist']) . "</td></tr>\n";
+       echo "<tr><th width='50%' class=tdright>Virtual service:</th><td class=tdleft>[" . $poolInfo['vip'] . "]</td></tr>\n";
+       if (!empty ($poolInfo['vs_name']))
+               echo "<tr><th width='50%' class=tdright>VS name:</th><td class=tdleft>${poolInfo['vs_name']}</td></tr>\n";
+       echo "</table>";
+       finishPortlet();
+
+       echo "</td><td rowspan=2 valign=top>\n";
+
+       startPortlet ('Real servers');
+       echo "<table cellspacing=0 cellpadding=5 align=center class=widetable>\n";
+       echo "<tr><th>address</th><th>port</th><th>configuration</th></tr>";
+       foreach ($poolInfo['rslist'] as $rs)
+       {
+               echo "<tr><td><a href='${root}?page=ipaddress&ip=${rs['rsip']}'>${rs['rsip']}</a></td>";
+               echo "<td>${rs['rsport']}</td><td>${rs['rsconfig']}</td></tr>\n";
+       }
+       echo "</table>\n";
+       finishPortlet();
+
+       echo "</td></tr>\n<tr><td>";
+       
+       startPortlet ('Load balancers');
+       echo "<table cellspacing=0 cellpadding=5 align=center class=widetable>\n";
+       echo "<tr><th>object</th><th>VS config</th><th>RS config</th></tr>";
+       foreach ($poolInfo['lblist'] as $object_id => $lbinfo)
+       {
+               $oi = getObjectInfo ($object_id);
+               echo "<tr><td><a href='${root}?page=object&object_id=${object_id}'>${oi['dname']}</a></td>";
+               echo "<td>${lbinfo['vsconfig']}</td><td>${lbinfo['rsconfig']}</td></tr>\n";
+       }
+       echo "</table>\n";
+       finishPortlet();
+
+       echo "\n";
+       echo "</td></tr></table>\n";
+#echo '<pre>';
+#print_r ($poolInfo);
+#echo '</pre>';
+}
+
 ?>
index 96a36d811842cdaa173b3a942e3b3ac6aa8b3ee9..386348b1275208cc67c91b88610cca87626e9474 100644 (file)
@@ -157,10 +157,20 @@ $page['vservice']['bypass'] = 'id';
 $page['vservice']['bypass_type'] = 'uint';
 $tab['vservice']['default'] = 'View';
 $tab['vservice']['configs'] = '[Configuration]';
-$tab['vservice']['rspool'] = 'Real servers';
+$tab['vservice']['rspool'] = 'RS pools';
 $tabhandler['vservice']['default'] = 'renderVirtualService';
 $tabhandler['vservice']['rspool'] = 'renderVSRSPoolForm';
 
+$page['rspool']['title'] = 'RS pool';
+$page['rspool']['parent'] = 'ipv4space';
+$page['rspool']['bypass'] = 'id';
+$page['rspool']['bypass_type'] = 'uint';
+$tab['rspool']['default'] = 'View';
+$tab['rspool']['editrs'] = '[Real Servers]';
+$tab['rspool']['editlb'] = '[Load Balancers]';
+$tabhandler['rspool']['default'] = 'renderRSPool';
+
+
 $page['search']['title_handler'] = 'dynamic_title_search';
 $page['search']['handler'] = 'handler_search';
 $page['search']['parent'] = 'index';