Author: jfthomps
Date: Fri Dec 12 20:55:14 2014
New Revision: 1645069

URL: http://svn.apache.org/r1645069
Log:
VCL-776 - rework resource code to have a base class for all resources and 
inheriting classes for each resource type

added a function to all resources (except computer) to check for resource usage 
before prompting to confirm deleting it

computer.php: modified AJdeleteComputers: added query to check usage in 
blockComputers

image.php: added checkResourceInUse: checks for image usage in reservation, 
blockComputers, blockRequest, serverprofile, subimages, and vmprofile

managementnode.php: added checkResourceInUse: check for managment node usage in 
reservations and blockRequest

resource.php:
-modified AJpromptToggleDeleteResource: added call to checkResourceInUse before 
prompting to confirm deleting resource
-added checkResourceInUse stub function

schedule.php: added checkResourceInUse: check for schedule usage in computer 
table

resources.js: modified toggleDeleteResourceCB: if status is 'inuse' create 
dialog to display message to user about resource being in use

Modified:
    vcl/trunk/web/.ht-inc/computer.php
    vcl/trunk/web/.ht-inc/image.php
    vcl/trunk/web/.ht-inc/managementnode.php
    vcl/trunk/web/.ht-inc/resource.php
    vcl/trunk/web/.ht-inc/schedule.php
    vcl/trunk/web/js/resources.js

Modified: vcl/trunk/web/.ht-inc/computer.php
URL: 
http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/computer.php?rev=1645069&r1=1645068&r2=1645069&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/computer.php (original)
+++ vcl/trunk/web/.ht-inc/computer.php Fri Dec 12 20:55:14 2014
@@ -3014,6 +3014,19 @@ class Computer extends Resource {
                $qh = doQuery($query);
                while($row = mysql_fetch_assoc($qh))
                        $skipcompids[] = $row['computerid'];
+               $query = "SELECT DISTINCT bc.computerid "
+                      . "FROM blockTimes bt, "
+                      .      "blockComputers bc, "
+                      .      "blockRequest br "
+                      . "WHERE bc.computerid in ($allids) AND "
+                      .       "bc.blockTimeid = bt.id AND "
+                      .       "bt.blockRequestid = br.id AND "
+                      .       "bt.end > NOW() AND "
+                      .       "bt.skip = 0 AND "
+                      .       "br.status = 'accepted'";
+               $qh = doQuery($query);
+               while($row = mysql_fetch_assoc($qh))
+                       $skipcompids[] = $row['computerid'];
                $delids = array_diff($compids, $skipcompids);
                $msg = '';
                if(count($delids)) {

Modified: vcl/trunk/web/.ht-inc/image.php
URL: 
http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/image.php?rev=1645069&r1=1645068&r2=1645069&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/image.php (original)
+++ vcl/trunk/web/.ht-inc/image.php Fri Dec 12 20:55:14 2014
@@ -147,6 +147,111 @@ class Image extends Resource {
 
        
/////////////////////////////////////////////////////////////////////////////
        ///
+       /// \fn checkResourceInUse($rscid)
+       ///
+       /// \return empty string if not being used; string of where resource is
+       /// being used if being used
+       ///
+       /// \brief checks to see if an image is being used
+       ///
+       
/////////////////////////////////////////////////////////////////////////////
+       function checkResourceInUse($rscid) {
+               $msgs = array();
+
+               # check reservations
+               $query = "SELECT rq.end "
+                      . "FROM request rq, "
+                      .      "reservation rs "
+                      . "WHERE rs.requestid = rq.id AND "
+                      .       "rs.imageid = $rscid AND "
+                      .       "rq.stateid NOT IN (1, 12) AND "
+                      .       "rq.end > NOW() "
+                      . "ORDER BY rq.end DESC "
+                      . "LIMIT 1";
+               $qh = doQuery($query);
+               if($row = mysql_fetch_assoc($qh))
+                       $msgs[] = "There is at least one 
<strong>reservation</strong> for this image. The latest end time is " . 
prettyDatetime($row['end'], 1) . '.';
+
+               # check blockComputers
+               $query = "SELECT br.name, "
+                      .        "bt.end " 
+                      . "FROM blockRequest br, " 
+                      .      "blockTimes bt, "
+                      .      "blockComputers bc "
+                      . "WHERE bc.imageid = $rscid AND "
+                      .       "bc.blockTimeid = bt.id AND "
+                      .       "bt.blockRequestid = br.id AND "
+                      .       "bt.end > NOW() AND "
+                      .       "bt.skip = 0 AND "
+                      .       "br.status = 'accepted' "
+                      . "ORDER BY bt.end DESC "
+                      . "LIMIT 1";
+               $qh = doQuery($query);
+               if($row = mysql_fetch_assoc($qh))
+                       $msgs[] = "There is at least one <strong>Block 
Allocation</strong> with computers currently allocated with this image. Block 
Allocation \"{$row['name']}\" has the latest end time which is " . 
prettyDatetime($row['end'], 1) . '.';
+
+               # check blockRequest
+               $query = "SELECT br.name, "
+                      .        "bt.end " 
+                      . "FROM blockRequest br, " 
+                      .      "blockTimes bt "
+                      . "WHERE br.imageid = $rscid AND "
+                      .       "bt.blockRequestid = br.id AND "
+                      .       "bt.end > NOW() AND "
+                      .       "bt.skip = 0 AND "
+                      .       "br.status = 'accepted' "
+                      . "ORDER BY bt.end DESC "
+                      . "LIMIT 1";
+               $qh = doQuery($query);
+               if($row = mysql_fetch_assoc($qh))
+                       $msgs[] = "There is at least one <strong>Block 
Allocation</strong> configured to use this image. Block Allocation 
\"{$row['name']}\" has the latest end time which is " . 
prettyDatetime($row['end'], 1) . '.';
+
+               # check serverprofile
+               $query = "SELECT name "
+                      . "FROM serverprofile "
+                      . "WHERE imageid = $rscid";
+               $qh = doQuery($query);
+               $profiles = array();
+               while($row = mysql_fetch_assoc($qh))
+                       $profiles[] = $row['name'];
+               if(count($profiles))
+                       $msgs[] = "The following <strong>Server 
Profiles</strong> are configured to use this image:<br><br>\n" . 
implode("<br>\n", $profiles);
+
+               # check subimages
+               $query = "SELECT DISTINCT i.prettyname "
+                      . "FROM image i, "
+                      .      "imagemeta im, "
+                      .      "subimages s "
+                      . "WHERE i.imagemetaid = im.id AND "
+                      .       "im.subimages = 1 AND "
+                      .       "s.imagemetaid = im.id AND "
+                      .       "s.imageid = $rscid";
+               $images = array();
+               while($row = mysql_fetch_assoc($qh))
+                       $images[] = $row['prettyname'];
+               if(count($images))
+                       $msgs[] = "The following <strong>images</strong> have 
the selected image assigned as a <strong>subimage</strong>:<br><br>\n" . 
implode("<br>\n", $images);
+
+               # check vmprofile
+               $query = "SELECT profilename "
+                      . "FROM vmprofile "
+                      . "WHERE imageid = $rscid";
+               $profiles = array();
+               while($row = mysql_fetch_assoc($qh))
+                       $profiles[] = $row['profilename'];
+               if(count($profiles))
+                       $msgs[] = "The following <strong>VM Host 
Profiles</strong> have the this image selected:<br><br>\n" . implode("<br>\n", 
$profiles);
+
+               if(empty($msgs))
+                       return '';
+
+               $msg = "The selected image is currently being used in the 
following ways and cannot be deleted at this time.<br><br>\n";
+               $msg .= implode("<br><br>\n", $msgs) . "<br><br>\n";
+               return $msg;
+       }
+
+       
/////////////////////////////////////////////////////////////////////////////
+       ///
        /// \fn submitToggleDeleteResourceExtra($rscid, $deleted)
        ///
        /// \param $rscid - id of a resource (from image table)

Modified: vcl/trunk/web/.ht-inc/managementnode.php
URL: 
http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/managementnode.php?rev=1645069&r1=1645068&r2=1645069&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/managementnode.php (original)
+++ vcl/trunk/web/.ht-inc/managementnode.php Fri Dec 12 20:55:14 2014
@@ -172,6 +172,58 @@ class ManagementNode extends Resource {
 
        
/////////////////////////////////////////////////////////////////////////////
        ///
+       /// \fn checkResourceInUse($rscid)
+       ///
+       /// \return empty string if not being used; string of where resource is
+       /// being used if being used
+       ///
+       /// \brief checks to see if a management node is being used
+       ///
+       
/////////////////////////////////////////////////////////////////////////////
+       function checkResourceInUse($rscid) {
+               $msgs = array();
+
+               # check reservations
+               $query = "SELECT rq.end "
+                      . "FROM request rq, "
+                      .      "reservation rs "
+                      . "WHERE rs.requestid = rq.id AND "
+                      .       "rs.managementnodeid = $rscid AND "
+                      .       "rq.stateid NOT IN (1, 12) AND "
+                      .       "rq.end > NOW() "
+                      . "ORDER BY rq.end DESC "
+                      . "LIMIT 1";
+               $qh = doQuery($query);
+               if($row = mysql_fetch_assoc($qh))
+                       $msgs[] = "There is at least one 
<strong>reservation</strong> being processed by this management node. The 
latest end time is " . prettyDatetime($row['end'], 1) . '.';
+
+               # check blockRequest
+               $query = "SELECT br.name, "
+                      .        "bt.end " 
+                      . "FROM blockRequest br, " 
+                      .      "blockTimes bt "
+                      . "WHERE br.managementnodeid = $rscid AND "
+                      .       "bt.blockRequestid = br.id AND "
+                      .       "bt.end > NOW() AND "
+                      .       "bt.skip = 0 AND "
+                      .       "br.status = 'accepted' "
+                      . "ORDER BY bt.end DESC "
+                      . "LIMIT 1";
+               $qh = doQuery($query);
+               if($row = mysql_fetch_assoc($qh))
+                       $msgs[] = "There is at least one <strong>Block 
Allocation</strong> being handled by this management node. Block Allocation 
\"{$row['name']}\" has the latest end time which is " . 
prettyDatetime($row['end'], 1) . '.';
+
+
+               if(empty($msgs))
+                       return '';
+
+               $msg = "The selected management node is currently being used in 
the following ways and cannot be deleted at this time.<br><br>\n";
+               $msg .= implode("<br><br>\n", $msgs) . "<br><br>\n";
+               return $msg;
+       }
+
+       
/////////////////////////////////////////////////////////////////////////////
+       ///
        /// \fn toggleDeleteResource($rscid)
        ///
        /// \param $rscid - id of a resource (from managementnode table)

Modified: vcl/trunk/web/.ht-inc/resource.php
URL: 
http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/resource.php?rev=1645069&r1=1645068&r2=1645069&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/resource.php (original)
+++ vcl/trunk/web/.ht-inc/resource.php Fri Dec 12 20:55:14 2014
@@ -623,6 +623,15 @@ class Resource {
                        sendJSON($rt);
                        return;
                }
+               # check usage of resource
+               $msg = $this->checkResourceInUse($rscid);
+               if($msg != '') {
+                       $rt = array('status' => 'inuse',
+                                   'msg' => $msg,
+                                   'rscid' => $rscid);
+                       sendJSON($rt);
+                       return;
+               }
                $rt = array('title' => "Confirm Delete {$this->restypename}",
                            'question' => "Delete the following 
{$this->restype}?",
                            'btntxt' => "Delete {$this->restypename}",
@@ -1592,6 +1601,21 @@ class Resource {
        
/////////////////////////////////////////////////////////////////////////////
        function extraSelectAdminOptions() {
        }
+
+       
/////////////////////////////////////////////////////////////////////////////
+       ///
+       /// \fn checkResourceInUse($rscid)
+       ///
+       /// \return empty string if not being used; string of where resource is
+       /// being used if being used
+       ///
+       /// \brief checks to see if a resource is being used; must be 
implemented in
+       /// inheriting class
+       ///
+       
/////////////////////////////////////////////////////////////////////////////
+       function checkResourceInUse($rscid) {
+               return '';
+       }
 }
 
 
////////////////////////////////////////////////////////////////////////////////

Modified: vcl/trunk/web/.ht-inc/schedule.php
URL: 
http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/schedule.php?rev=1645069&r1=1645068&r2=1645069&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/schedule.php (original)
+++ vcl/trunk/web/.ht-inc/schedule.php Fri Dec 12 20:55:14 2014
@@ -166,6 +166,33 @@ class Schedule extends Resource {
 
        
/////////////////////////////////////////////////////////////////////////////
        ///
+       /// \fn checkResourceInUse($rscid)
+       ///
+       /// \return empty string if not being used; string of where resource is
+       /// being used if being used
+       ///
+       /// \brief checks to see if a schedule is being used
+       ///
+       
/////////////////////////////////////////////////////////////////////////////
+       function checkResourceInUse($rscid) {
+               $msg = '';
+
+               $query = "SELECT hostname "
+                      . "FROM computer "
+                      . "WHERE scheduleid = $rscid AND "
+                      .       "deleted = 0";
+               $qh = doQuery($query);
+               $comps = array();
+               while($row = mysql_fetch_assoc($qh))
+                       $comps[] = $row['hostname'];
+               if(count($comps))
+                       $msg = "This schedule cannot be deleted because the 
following <strong>computers</strong> have it selected as their 
schedule:<br><br>\n" . implode("<br>\n", $comps);
+
+               return $msg;
+       }
+
+       
/////////////////////////////////////////////////////////////////////////////
+       ///
        /// \fn AJsaveResource()
        ///
        /// \brief saves changes to resource

Modified: vcl/trunk/web/js/resources.js
URL: 
http://svn.apache.org/viewvc/vcl/trunk/web/js/resources.js?rev=1645069&r1=1645068&r2=1645069&view=diff
==============================================================================
--- vcl/trunk/web/js/resources.js (original)
+++ vcl/trunk/web/js/resources.js Fri Dec 12 20:55:14 2014
@@ -261,6 +261,25 @@ function toggleDeleteResourceCB(data, io
        else if(data.items.status == 'noaccess') {
                alert(data.items.msg);
        }
+       else if(data.items.status == 'inuse') {
+               var btn = new dijit.form.Button({
+                       label: 'Close'
+               });
+               var div = document.createElement('DIV');
+               div.style = 'text-align: center;';
+               var dlg = new dijit.Dialog({
+                       id: 'resourceinusedlg',
+                       title: 'Resource In Use',
+                       content: data.items.msg,
+                       style: 'width: 400px;',
+                       autofocus: false,
+                       hide: function() {this.destroy();}
+               });
+               div.appendChild(btn.domNode);
+               dlg.containerNode.appendChild(div);
+               dojo.connect(btn, "onClick", function () {dlg.destroy();});
+               dlg.show();
+       }
 }
 
 function submitToggleDeleteResource() {


Reply via email to