r1724 + generateAutoPorts(): welcome new ophandler
[racktables] / inc / database.php
index 08784957c350f2387f02a407b346c3db287bcbc8..4f2fba50782b7e608418801d3e9c7df13b19d2f7 100644 (file)
@@ -5,10 +5,15 @@
 *
 */
 
-function escapeString ($value)
+function escapeString ($value, $do_db_escape = TRUE)
 {
-       global $dbxlink;
-       return substr ($dbxlink->quote (htmlentities ($value)), 1, -1);
+       $ret = htmlentities ($value, ENT_QUOTES);
+       if ($do_db_escape)
+       {
+               global $dbxlink;
+               $ret = substr ($dbxlink->quote ($ret), 1, -1);
+       }
+       return $ret;
 }
 
 // This function returns detailed information about either all or one
@@ -371,6 +376,8 @@ function commitAddObject ($new_name, $new_label, $new_barcode, $new_type_id, $ne
        $row = $result2->fetch (PDO::FETCH_NUM);
        $last_insert_id = $row[0];
        $result2->closeCursor();
+       // Do AutoPorts magic
+       executeAutoPorts ($last_insert_id, $new_type_id);
        return recordHistory ('RackObject', "id = ${last_insert_id}");
 }
 
@@ -597,7 +604,7 @@ function recordHistory ($tableName, $whereClause)
        $result = $dbxlink->query ($query);
        if ($result == NULL or $result->rowCount() != 1)
        {
-               showError ("SQL query failed for table ${tableName}", __FUNCTION__);
+               showError ("SQL query '${query}' failed for table ${tableName}", __FUNCTION__);
                return FALSE;
        }
        return TRUE;
@@ -668,11 +675,14 @@ function getResidentRacksData ($object_id = 0, $fetch_rackdata = TRUE)
        }
        $rows = $result->fetchAll (PDO::FETCH_NUM);
        $result->closeCursor();
-       if (!$fetch_rackdata)
-               return $rows[0];
        $ret = array();
        foreach ($rows as $row)
        {
+               if (!$fetch_rackdata)
+               {
+                       $ret[$row[0]] = $row[0];
+                       continue;
+               }
                $rackData = getRackData ($row[0]);
                if ($rackData == NULL)
                {
@@ -1408,7 +1418,7 @@ function getDict ()
 
 function getDictStats ()
 {
-       $stock_chapters = array (1, 2, 3, 11, 12, 13, 14, 16, 17, 18, 19, 20);
+       $stock_chapters = array (1, 2, 3, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23);
        global $dbxlink;
        $query =
                "select Chapter.chapter_no, chapter_name, count(dict_key) as wc from " .
@@ -1460,6 +1470,62 @@ function getDictStats ()
        return $ret;
 }
 
+function getIPv4Stats()
+{
+       global $dbxlink;
+       $ret = array();
+       $subject = array();
+       $subject[] = array ('q' => 'select count(id) from IPRanges', 'txt' => 'Networks');
+       $subject[] = array ('q' => 'select count(ip) from IPAddress', 'txt' => 'Addresses commented/reserved');
+       $subject[] = array ('q' => 'select count(ip) from IPBonds', 'txt' => 'Addresses allocated');
+       $subject[] = array ('q' => 'select count(*) from PortForwarding', 'txt' => 'NAT rules');
+       $subject[] = array ('q' => 'select count(id) from IPVirtualService', 'txt' => 'Virtual services');
+       $subject[] = array ('q' => 'select count(id) from IPRSPool', 'txt' => 'Real server pools');
+       $subject[] = array ('q' => 'select count(id) from IPRealServer', 'txt' => 'Real servers');
+       $subject[] = array ('q' => 'select count(distinct object_id) from IPLoadBalancer', 'txt' => 'Load balancers');
+
+       foreach ($subject as $item)
+       {
+               $result = $dbxlink->query ($item['q']);
+               if ($result == NULL)
+               {
+                       showError ("SQL query '${item['q']}' failed", __FUNCTION__);
+                       return NULL;
+               }
+               $row = $result->fetch (PDO::FETCH_NUM);
+               $ret[$item['txt']] = $row[0];
+               $result->closeCursor();
+               unset ($result);
+       }
+       return $ret;
+}
+
+function getRackspaceStats()
+{
+       global $dbxlink;
+       $ret = array();
+       $subject = array();
+       $subject[] = array ('q' => 'select count(*) from Dictionary where chapter_no = 3', 'txt' => 'Rack rows');
+       $subject[] = array ('q' => 'select count(*) from Rack', 'txt' => 'Racks');
+       $subject[] = array ('q' => 'select avg(height) from Rack', 'txt' => 'Average rack height');
+       $subject[] = array ('q' => 'select sum(height) from Rack', 'txt' => 'Total rack units in field');
+
+       foreach ($subject as $item)
+       {
+               $result = $dbxlink->query ($item['q']);
+               if ($result == NULL)
+               {
+                       showError ("SQL query '${item['q']}' failed", __FUNCTION__);
+                       return NULL;
+               }
+               $row = $result->fetch (PDO::FETCH_NUM);
+               $ret[$item['txt']] = empty ($row[0]) ? 0 : $row[0];
+               $result->closeCursor();
+               unset ($result);
+       }
+       return $ret;
+}
+
 function commitUpdateDictionary ($chapter_no = 0, $dict_key = 0, $dict_value = '')
 {
        if ($chapter_no <= 0 or $dict_key <= 0 or empty ($dict_value))
@@ -2001,16 +2067,10 @@ function getDatabaseVersion ()
 function getSLBSummary ()
 {
        global $dbxlink;
-       $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 IPLoadBalancer as lb on vs.id = lb.vs_id ' .
-               'inner join IPRSPool as rsp on lb.rspool_id = rsp.id ' .
-               'inner join IPRealServer as rs on lb.rspool_id = rs.rspool_id ' .
-               'group by rsp.id, object_id order by vip, object_id';
        $query = 'select vs.id as vsid, inet_ntoa(vip) as vip, vport, proto, vs.name, object_id, ' .
                'lb.rspool_id, pool.name as pool_name, count(rs.id) as rscount ' .
                'from IPVirtualService as vs inner join IPLoadBalancer as lb on vs.id = lb.vs_id ' .
-               'inner join IPRSPool as pool on rspool_id = pool.id ' .
+               'inner join IPRSPool as pool on lb.rspool_id = pool.id ' .
                'left join IPRealServer as rs on rs.rspool_id = lb.rspool_id ' .
                'group by vs.id, object_id order by vs.vip, object_id';
        $result = $dbxlink->query ($query);
@@ -2149,7 +2209,7 @@ function getRSPoolInfo ($id = 0)
        return $ret;
 }
 
-function addRStoRSPool ($pool_id = 0, $rsip = '', $rsport = 0, $rsconfig = '')
+function addRStoRSPool ($pool_id = 0, $rsip = '', $rsport = 0, $inservice = 'no', $rsconfig = '')
 {
        if ($pool_id <= 0 or $rsport <= 0)
        {
@@ -2164,6 +2224,7 @@ function addRStoRSPool ($pool_id = 0, $rsip = '', $rsport = 0, $rsconfig = '')
                        'rsip' => "inet_aton('${rsip}')",
                        'rsport' => $rsport,
                        'rspool_id' => $pool_id,
+                       'inservice' => ($inservice == 'yes' ? "'yes'" : "'no'"),
                        'rsconfig' => (empty ($rsconfig) ? 'NULL' : "'${rsconfig}'")
                )
        );
@@ -2286,8 +2347,6 @@ function commitUpdateLB ($object_id = 0, $pool_id = 0, $vs_id = 0, $vsconfig = '
        $result = $dbxlink->exec ($query);
        if ($result === NULL)
                return FALSE;
-       elseif ($result != 1)
-               return FALSE;
        else
                return TRUE;
 }
@@ -2311,8 +2370,6 @@ function commitUpdateVS ($vsid = 0, $vip = '', $vport = 0, $proto = '', $name =
        $result = $dbxlink->exec ($query);
        if ($result === NULL)
                return FALSE;
-       elseif ($result != 1)
-               return FALSE;
        else
                return TRUE;
 }
@@ -2588,4 +2645,17 @@ function commitSetInService ($rs_id = 0, $inservice = '')
                return TRUE;
 }
 
+function executeAutoPorts ($object_id = 0, $type_id = 0)
+{
+       if ($object_id == 0 or $type_id == 0)
+       {
+               showError ('Invalid arguments', __FUNCTION__);
+               die;
+       }
+       $ret = TRUE;
+       foreach (getAutoPorts ($type_id) as $autoport)
+               $ret = $ret and '' == commitAddPort ($object_id, $autoport['name'], $autoport['type'], '', '');
+       return $ret;
+}
+
 ?>