You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by jf...@apache.org on 2012/03/21 19:13:58 UTC
svn commit: r1303484 - in /incubator/vcl/trunk/web: .ht-inc/requests.php
.ht-inc/states.php .ht-inc/utils.php js/code.js js/requests.js
Author: jfthomps
Date: Wed Mar 21 18:13:57 2012
New Revision: 1303484
URL: http://svn.apache.org/viewvc?rev=1303484&view=rev
Log:
VCL-527
Allow users to reinstall newer revisions
requests.php:
-modified viewRequests - added state to detailed status for server requests; changed shared reboot/reinstall dialog to be just for reboots; added reinstall dialog
-modified getViewRequestHTMLitem - added state to detailed status for server requests
-modified AJsubmitEditRequest - added call to addChangeLogEntryOther when changing admin or login group
-modified AJrebootRequest - added code to check for request being expired; added call to addChangeLogEntryOther
-added AJshowReinstallRequest
-modified AJreinstallRequest - added code to check for request being expired; added code to handle revisionid being passed as something to change
states.php: added AJshowReinstallRequest
utils.php: added addChangeLogEntryOther
code.js: added recenterDijitDialog
requests.js:
-modified showSuggestedTimesCB - changed inline recentering of dijit dialogs to call recenterDijitDialog;
added 'edit' argument to resGone
-modified editReservationCB - added 'edit' argument to resGone
-modified resGone - added argument that allows different text to be displayed so function can be called for other reasons than a normal edit; changed inline recentering of dijit dialogs to call recenterDijitDialog
-changed functions shared between reboot and reinstall to be only for reboot and added new ones for reinstalls
Modified:
incubator/vcl/trunk/web/.ht-inc/requests.php
incubator/vcl/trunk/web/.ht-inc/states.php
incubator/vcl/trunk/web/.ht-inc/utils.php
incubator/vcl/trunk/web/js/code.js
incubator/vcl/trunk/web/js/requests.js
Modified: incubator/vcl/trunk/web/.ht-inc/requests.php
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/requests.php?rev=1303484&r1=1303483&r2=1303484&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/requests.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/requests.php Wed Mar 21 18:13:57 2012
@@ -841,7 +841,6 @@ function viewRequests() {
if(checkUserHasPerm('View Debug Information'))
$nodes = getManagementNodes();
if($count = count($requests)) {
- # TODO display admin and login groups somewhere
$now = time();
for($i = 0, $failed = 0, $timedout = 0, $text = '', $showcreateimage = 0, $cluster = 0;
$i < $count;
@@ -993,7 +992,7 @@ function viewRequests() {
$requests[$i]['laststateid'] != 27) {
$cont = addContinuationsEntry('AJrebootRequest', $cdata, SECINDAY);
$text .= getViewRequestHTMLitem('rebootoption', $cont);
- $cont = addContinuationsEntry('AJreinstallRequest', $cdata, SECINDAY);
+ $cont = addContinuationsEntry('AJshowReinstallRequest', $cdata, SECINDAY);
$text .= getViewRequestHTMLitem('reinstalloption', $cont);
}
else {
@@ -1049,6 +1048,10 @@ function viewRequests() {
'logingroup' => $requests[$i]['serverlogingroup'],
'image' => $requests[$i]['prettyimage'],
'starttime' => $requests[$i]['start']);
+ if($requests[$i]['currstateid'] == 14)
+ $data['stateid'] = $requests[$i]['laststateid'];
+ else
+ $data['stateid'] = $requests[$i]['currstateid'];
$text .= getViewRequestHTMLitem('serverdetails', $requests[$i]['id'], $data);
}
@@ -1191,7 +1194,6 @@ function viewRequests() {
$text .= "this may have caused.\n";
}
- # TODO problem with auto refresh not happening when server load not ready due to user account?
$cont = addContinuationsEntry('AJviewRequests', array(), SECINDAY);
$text .= "<INPUT type=hidden id=resRefreshCont value=\"$cont\">\n";
@@ -1226,22 +1228,19 @@ function viewRequests() {
$text .= " title=\"Delete Reservation\"\n";
$text .= " duration=250\n";
$text .= " draggable=true>\n";
- #$text .= " <script type=\"dojo/connect\" event=onCancel>\n";
- #$text .= " endResDlgHide();\n";
- #$text .= " </script>\n";
$text .= " <div id=\"endResDlgContent\"></div>\n";
$text .= " <input type=\"hidden\" id=\"endrescont\">\n";
$text .= " <input type=\"hidden\" id=\"endresid\">\n";
$text .= " <div align=\"center\">\n";
$text .= " <button id=\"endResDlgBtn\" dojoType=\"dijit.form.Button\">\n";
$text .= " Delete Reservation\n";
- $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
+ $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
$text .= " submitDeleteReservation();\n";
$text .= " </script>\n";
$text .= " </button>\n";
$text .= " <button dojoType=\"dijit.form.Button\">\n";
$text .= " Cancel\n";
- $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
+ $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
$text .= " dijit.byId('endResDlg').hide();\n";
$text .= " dojo.byId('endResDlgContent').innerHTML = '';\n";
$text .= " </script>\n";
@@ -1259,13 +1258,13 @@ function viewRequests() {
$text .= " <div align=\"center\">\n";
$text .= " <button id=\"remResDlgBtn\" dojoType=\"dijit.form.Button\">\n";
$text .= " Remove Reservation\n";
- $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
+ $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
$text .= " submitRemoveReservation();\n";
$text .= " </script>\n";
$text .= " </button>\n";
$text .= " <button dojoType=\"dijit.form.Button\">\n";
$text .= " Cancel\n";
- $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
+ $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
$text .= " dijit.byId('remResDlg').hide();\n";
$text .= " dojo.byId('remResDlgContent').innerHTML = '';\n";
$text .= " </script>\n";
@@ -1278,7 +1277,7 @@ function viewRequests() {
$text .= " title=\"Modify Reservation\"\n";
$text .= " duration=250\n";
$text .= " draggable=true>\n";
- $text .= " <script type=\"dojo/connect\" event=onHide>\n";
+ $text .= " <script type=\"dojo/connect\" event=onHide>\n";
$text .= " hideEditResDlg();\n";
$text .= " </script>\n";
$text .= " <div id=\"editResDlgContent\"></div>\n";
@@ -1288,13 +1287,13 @@ function viewRequests() {
$text .= " <div align=\"center\">\n";
$text .= " <button id=\"editResDlgBtn\" dojoType=\"dijit.form.Button\">\n";
$text .= " Modify Reservation\n";
- $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
+ $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
$text .= " submitEditReservation();\n";
$text .= " </script>\n";
$text .= " </button>\n";
$text .= " <button dojoType=\"dijit.form.Button\" id=\"editResCancelBtn\">\n";
$text .= " Cancel\n";
- $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
+ $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
$text .= " dijit.byId('editResDlg').hide();\n";
$text .= " </script>\n";
$text .= " </button>\n";
@@ -1302,34 +1301,69 @@ function viewRequests() {
$text .= "</div>\n";
$text .= "<div dojoType=dijit.Dialog\n";
- $text .= " id=\"rebootreinstalldlg\"\n";
+ $text .= " id=\"rebootdlg\"\n";
$text .= " title=\"Reboot Reservation\"\n";
$text .= " duration=250\n";
$text .= " draggable=true>\n";
- $text .= " <script type=\"dojo/connect\" event=onHide>\n";
- $text .= " hideRebReinstResDlg();\n";
+ $text .= " <script type=\"dojo/connect\" event=onHide>\n";
+ $text .= " hideRebootResDlg();\n";
$text .= " </script>\n";
- $text .= " <div id=\"rebreinstResDlgContent\"></div>\n";
+ $text .= " <div id=\"rebootResDlgContent\">You can select either a ";
+ $text .= "soft or a hard reboot. A soft reboot<br>issues a reboot ";
+ $text .= "command to the operating system. A hard reboot<br>is akin to ";
+ $text .= "toggling the power switch on a computer. After<br>issuing the ";
+ $text .= "reboot, it may take several minutes before the<br>machine is ";
+ $text .= "available again. It is also possible that it will<br>not come ";
+ $text .= "back up at all. Are you sure you want to continue?<br><br></div>\n";
$text .= " <div id=\"rebootRadios\" style=\"margin-left: 90px;\">\n";
$text .= " <input type=\"radio\" name=\"reboottype\" id=\"softreboot\" checked>\n";
$text .= " <label for=\"softreboot\">Soft Reboot</label><br>\n";
$text .= " <input type=\"radio\" name=\"reboottype\" id=\"hardreboot\">\n";
$text .= " <label for=\"hardreboot\">Hard Reboot</label><br><br>\n";
$text .= " </div>\n";
- $text .= " <input type=\"hidden\" id=\"rebreinstrescont\">\n";
- #$text .= " <input type=\"hidden\" id=\"rebreinstresid\">\n";
- $text .= " <div id=\"rebreinstResDlgErrMsg\" class=\"rederrormsg\"></div>\n";
+ $text .= " <input type=\"hidden\" id=\"rebootrescont\">\n";
+ $text .= " <div id=\"rebootResDlgErrMsg\" class=\"rederrormsg\"></div>\n";
$text .= " <div align=\"center\">\n";
- $text .= " <button id=\"rebreinstResDlgBtn\" dojoType=\"dijit.form.Button\">\n";
+ $text .= " <button id=\"rebootResDlgBtn\" dojoType=\"dijit.form.Button\">\n";
$text .= " Reboot Reservation\n";
- $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
- $text .= " submitRebReinstReservation();\n";
+ $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
+ $text .= " submitRebootReservation();\n";
$text .= " </script>\n";
$text .= " </button>\n";
- $text .= " <button dojoType=\"dijit.form.Button\" id=\"rebreinstResCancelBtn\">\n";
+ $text .= " <button dojoType=\"dijit.form.Button\">\n";
$text .= " Cancel\n";
- $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
- $text .= " dijit.byId('rebootreinstalldlg').hide();\n";
+ $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
+ $text .= " dijit.byId('rebootdlg').hide();\n";
+ $text .= " </script>\n";
+ $text .= " </button>\n";
+ $text .= " </div>\n";
+ $text .= "</div>\n";
+
+ $text .= "<div dojoType=dijit.Dialog\n";
+ $text .= " id=\"reinstalldlg\"\n";
+ $text .= " title=\"Reinstall Reservation\"\n";
+ $text .= " duration=250\n";
+ $text .= " draggable=true>\n";
+ $text .= " <script type=\"dojo/connect\" event=onHide>\n";
+ $text .= " hideReinstallResDlg();\n";
+ $text .= " </script>\n";
+ $text .= " <div id=\"reinstallloading\" style=\"text-align: center\">";
+ $text .= "<img src=\"themes/$skin/css/dojo/images/loading.gif\" ";
+ $text .= "style=\"vertical-align: middle;\"> Loading...</div>\n";
+ $text .= " <div id=\"reinstallResDlgContent\"></div>\n";
+ $text .= " <input type=\"hidden\" id=\"reinstallrescont\">\n";
+ $text .= " <div id=\"reinstallResDlgErrMsg\" class=\"rederrormsg\"></div>\n";
+ $text .= " <div align=\"center\" id=\"reinstallbtns\" class=\"hidden\">\n";
+ $text .= " <button id=\"reinstallResDlgBtn\" dojoType=\"dijit.form.Button\">\n";
+ $text .= " Reinstall Reservation\n";
+ $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
+ $text .= " submitReinstallReservation();\n";
+ $text .= " </script>\n";
+ $text .= " </button>\n";
+ $text .= " <button dojoType=\"dijit.form.Button\">\n";
+ $text .= " Cancel\n";
+ $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
+ $text .= " dijit.byId('reinstalldlg').hide();\n";
$text .= " </script>\n";
$text .= " </button>\n";
$text .= " </div>\n";
@@ -1349,13 +1383,13 @@ function viewRequests() {
$text .= " <div align=\"center\">\n";
$text .= " <button id=\"suggestDlgBtn\" dojoType=\"dijit.form.Button\" disabled>\n";
$text .= " Use Selected Time\n";
- $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
+ $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
$text .= " useSuggestedEditSlot();\n";
$text .= " </script>\n";
$text .= " </button>\n";
$text .= " <button id=\"suggestDlgCancelBtn\" dojoType=\"dijit.form.Button\">\n";
$text .= " Cancel\n";
- $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
+ $text .= " <script type=\"dojo/method\" event=\"onClick\">\n";
$text .= " dijit.byId('suggestDlgBtn').set('disabled', true);\n";
$text .= " dojo.removeClass('suggestDlgBtn', 'hidden');\n";
$text .= " showDijitButton('suggestDlgBtn');\n";
@@ -1549,7 +1583,7 @@ function getViewRequestHTMLitem($item, $
$r .= " iconClass=\"noicon\"\n";
$r .= " label=\"Reinstall\">\n";
$r .= " <script type=\"dojo/method\" event=\"onClick\">\n";
- $r .= " reinstallRequest('$var1');\n";
+ $r .= " showReinstallRequest('$var1');\n";
$r .= " </script>\n";
$r .= " </div>\n";
return $r;
@@ -1605,9 +1639,29 @@ function getViewRequestHTMLitem($item, $
else
$r .= "<strong>Admin User Group</strong>: {$data['admingroup']}<br>\n";
if(empty($data['logingroup']))
- $r .= "<strong>Access User Group</strong>: (none)\n";
+ $r .= "<strong>Access User Group</strong>: (none)<br>\n";
else
- $r .= "<strong>Access User Group</strong>: {$data['logingroup']}\n";
+ $r .= "<strong>Access User Group</strong>: {$data['logingroup']}<br>\n";
+ if($data['stateid'] == 8)
+ $r .= "<strong>Status</strong>: In Use\n";
+ elseif($data['stateid'] == 24)
+ $r .= "<strong>Status</strong>: Checkpointing\n";
+ elseif($data['stateid'] == 5)
+ $r .= "<strong>Status</strong>: Failed\n";
+ elseif($data['stateid'] == 13)
+ $r .= "<strong>Status</strong>: New\n";
+ elseif($data['stateid'] == 28)
+ $r .= "<strong>Status</strong>: Hard Rebooting\n";
+ elseif($data['stateid'] == 26)
+ $r .= "<strong>Status</strong>: Soft Rebooting\n";
+ elseif($data['stateid'] == 27)
+ $r .= "<strong>Status</strong>: Reinstalling\n";
+ elseif($data['stateid'] == 6)
+ $r .= "<strong>Status</strong>: Loading\n";
+ elseif($data['stateid'] == 3)
+ $r .= "<strong>Status</strong>: In Use\n";
+ elseif($data['stateid'] == 11)
+ $r .= "<strong>Status</strong>: Timed Out\n";
$r .= "</div>\n";
$r .= "</TD>\n";
return $r;
@@ -2683,6 +2737,7 @@ function AJsubmitEditRequest() {
. "logingroupid = $logingroupid "
. "WHERE requestid = $requestid";
doQuery($query, 101);
+ addChangeLogEntryOther($request['logid'], "event:usergroups|admingroupid:$admingroupid|logingroupid:$logingroupid");
$query = "UPDATE request "
. "SET stateid = 29 "
. "WHERE id = $requestid";
@@ -2932,10 +2987,21 @@ function AJsubmitRemoveRequest() {
////////////////////////////////////////////////////////////////////////////////
function AJrebootRequest() {
$requestid = getContinuationVar('requestid');
+ $reqdata = getRequestInfo($requestid, 1);
+ if(is_null($reqdata)) {
+ print "resGone('reboot'); ";
+ print "dijit.byId('editResDlg').show();";
+ print "setTimeout(resRefresh, 1500);";
+ return;
+ }
$reboottype = processInputVar('reboottype', ARG_NUMERIC);
$newstateid = 26;
- if($reboottype == 1)
+ if($reboottype == 1) {
$newstateid = 28;
+ addChangeLogEntryOther($reqdata['logid'], "event:reboothard");
+ }
+ else
+ addChangeLogEntryOther($reqdata['logid'], "event:rebootsoft");
$query = "UPDATE request SET stateid = $newstateid WHERE id = $requestid";
doQuery($query, 101);
print "resRefresh();";
@@ -2943,6 +3009,73 @@ function AJrebootRequest() {
////////////////////////////////////////////////////////////////////////////////
///
+/// \fn AJshowReinstallRequest()
+///
+/// \brief
+///
+////////////////////////////////////////////////////////////////////////////////
+function AJshowReinstallRequest() {
+ global $user;
+ $requestid = getContinuationVar('requestid');
+ $reqdata = getRequestInfo($requestid, 1);
+ if(is_null($reqdata)) {
+ sendJSON(array('status' => 'resgone'));
+ return;
+ }
+ $imageid = $reqdata['reservations'][0]['imageid'];
+ $imgdata = getImages(0, $imageid);
+ $t = '';
+ $cdata = getContinuationVar();
+ $cont = addContinuationsEntry('AJreinstallRequest', $cdata, 300, 1, 0);
+ if(count($reqdata['reservations']) == 1 &&
+ ($imgdata[$imageid]['ownerid'] == $user['id'] ||
+ checkUserHasPerm('View Debug Information')) &&
+ count($imgdata[$imageid]['imagerevision'] > 1)) {
+ # prompt for which revision to use for reinstall
+ $t .= "This will cause the reserved machine to be reinstalled. ";
+ $t .= "You may select which version<br>of the environment you would ";
+ $t .= "like to use for the reinstall. The currently installed<br>";
+ $t .= "version what is selected.<br>";
+ $t .= "<table summary=\"lists versions of the environment\">";
+ $t .= "<TR>";
+ $t .= "<TD></TD>";
+ $t .= "<TH>Version</TH>";
+ $t .= "<TH>Creator</TH>";
+ $t .= "<TH>Created</TH>";
+ $t .= "<TH>Currently in Production</TH>";
+ $t .= "</TR>";
+ foreach($imgdata[$imageid]['imagerevision'] as $revision) {
+ $t .= "<TR>";
+ // if revision was selected or it wasn't selected but it is the production revision, show checked
+ if($reqdata['reservations'][0]['imagerevisionid'] == $revision['id'])
+ $t .= "<TD align=center><INPUT type=radio name=revisionid value={$revision['id']} checked></TD>";
+ else
+ $t .= "<TD align=center><INPUT type=radio name=revisionid value={$revision['id']}></TD>";
+ $t .= "<TD align=center>{$revision['revision']}</TD>";
+ $t .= "<TD align=center>{$revision['user']}</TD>";
+ $t .= "<TD align=center>{$revision['prettydate']}</TD>";
+ if($revision['production'])
+ $t .= "<TD align=center>Yes</TD>";
+ else
+ $t .= "<TD align=center>No</TD>";
+ $t .= "</TR>";
+ }
+ $t .= "</table><br>";
+ $t .= "<strong>NOTE</strong>: Any data saved only to the reserved ";
+ $t .= "machine <strong>will be lost</strong>. Are you sure you<br>";
+ $t .= "want to continue?<br><br>";
+ }
+ else {
+ # prompt for reinstall confirmation
+ $t .= "This will cause the reserved machine to be reinstalled. Any<br>";
+ $t .= "data saved only to the reserved machine will be lost. Are<br>";
+ $t .= "you sure you want to continue?<br><br>";
+ }
+ sendJSON(array('status' => 'success', 'txt' => $t, 'cont' => $cont));
+}
+
+////////////////////////////////////////////////////////////////////////////////
+///
/// \fn AJreinstallRequest()
///
/// \brief sets a reservation to the reinstall state and refreshes the Current
@@ -2951,9 +3084,34 @@ function AJrebootRequest() {
////////////////////////////////////////////////////////////////////////////////
function AJreinstallRequest() {
$requestid = getContinuationVar('requestid');
+ $reqdata = getRequestInfo($requestid, 1);
+ if(is_null($reqdata)) {
+ sendJSON(array('status' => 'resgone'));
+ return;
+ }
+ $revisionid = processInputVar('revisionid', ARG_NUMERIC, 0);
+ if($revisionid != 0) {
+ $imageid = $reqdata['reservations'][0]['imageid'];
+ $imgdata = getImages(0, $imageid);
+ if(! array_key_exists($revisionid, $imgdata[$imageid]['imagerevision'])) {
+ $cdata = getContinuationVar();
+ $cont = addContinuationsEntry('AJreinstallRequest', $cdata, 300, 1, 0);
+ sendJSON(array('status' => 'invalidrevisionid', 'cont' => $cont));
+ return;
+ }
+ if($reqdata['reservations'][0]['imagerevisionid'] != $revisionid) {
+ $query = "UPDATE reservation "
+ . "SET imagerevisionid = $revisionid "
+ . "WHERE id = {$reqdata['reservations'][0]['reservationid']}";
+ doQuery($query, 101);
+ }
+ addChangeLogEntryOther($reqdata['logid'], "event:reinstall|revisionid:$revisionid");
+ }
+ else
+ addChangeLogEntryOther($reqdata['logid'], "event:reinstall");
$query = "UPDATE request SET stateid = 27 WHERE id = $requestid";
doQuery($query, 101);
- print "resRefresh();";
+ sendJSON(array('status' => 'success'));
}
////////////////////////////////////////////////////////////////////////////////
Modified: incubator/vcl/trunk/web/.ht-inc/states.php
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/states.php?rev=1303484&r1=1303483&r2=1303484&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/states.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/states.php Wed Mar 21 18:13:57 2012
@@ -174,6 +174,7 @@ $noHTMLwrappers = array('sendRDPfile',
'AJeditRequest',
'AJsubmitEditRequest',
'AJrebootRequest',
+ 'AJshowReinstallRequest',
'AJreinstallRequest',
'AJshowRequestSuggestedTimes',
'AJgenerateUtilData',
@@ -367,6 +368,7 @@ $actions['mode']['subimageDialogContent'
$actions['mode']['AJaddSubimage'] = "AJaddSubimage";
$actions['mode']['AJremSubimage'] = "AJremSubimage";
$actions['mode']['AJrebootRequest'] = "AJrebootRequest";
+$actions['mode']['AJshowReinstallRequest'] = "AJshowReinstallRequest";
$actions['mode']['AJreinstallRequest'] = "AJreinstallRequest";
$actions['pages']['selectImageOption'] = "manageImages";
$actions['pages']['viewImages'] = "manageImages";
@@ -417,6 +419,7 @@ $actions['pages']['subimageDialogContent
$actions['pages']['AJaddSubimage'] = "manageImages";
$actions['pages']['AJremSubimage'] = "manageImages";
$actions['pages']['AJrebootRequest'] = "manageImages";
+$actions['pages']['AJshowReinstallRequest'] = "manageImages";
$actions['pages']['AJreinstallRequest'] = "manageImages";
# manage schedules
Modified: incubator/vcl/trunk/web/.ht-inc/utils.php
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/utils.php?rev=1303484&r1=1303483&r2=1303484&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/utils.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/utils.php Wed Mar 21 18:13:57 2012
@@ -6548,9 +6548,15 @@ function showTimeTable($links) {
/// \param $ip - (optional, default='') desired IP address
/// \param $mac - (optional, default='') desired MAC address
///
-/// \return
+/// \return an array where each key is a unix timestamp for the start time of
+/// the available slot and each element is an array with these items:\n
+/// \b start - start of slot in datetime format\n
+/// \b startts - start of slot in unix timestamp format\n
+/// \b duration - length of slot in minutes\n
+/// \b compid - id of computer for slot
///
-/// \brief
+/// \brief builds an array of available time slots close to the submitted
+/// parameters
///
////////////////////////////////////////////////////////////////////////////////
function findAvailableTimes($start, $end, $imageid, $userid, $usedaysahead,
@@ -8490,6 +8496,29 @@ function addChangeLogEntry($logid, $remo
////////////////////////////////////////////////////////////////////////////////
///
+/// \fn addChangeLogEntryOther($logid, $data)
+///
+/// \param $logid - id matching entry in log table
+/// \param $data - data to be inserted in the other field
+///
+/// \brief adds an entry to the other field in the changelog table
+///
+////////////////////////////////////////////////////////////////////////////////
+function addChangeLogEntryOther($logid, $data) {
+ $data = mysql_real_escape_string($data);
+ $query = "INSERT INTO changelog "
+ . "(logid, "
+ . "timestamp, "
+ . "other) "
+ . "VALUES "
+ . "($logid, "
+ . "NOW(), "
+ . "'$data')";
+ doQuery($query);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+///
/// \fn addSublogEntry($logid, $imageid, $imagerevisionid, $computerid,
/// $mgmtnodeid)
///
Modified: incubator/vcl/trunk/web/js/code.js
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/js/code.js?rev=1303484&r1=1303483&r2=1303484&view=diff
==============================================================================
--- incubator/vcl/trunk/web/js/code.js (original)
+++ incubator/vcl/trunk/web/js/code.js Wed Mar 21 18:13:57 2012
@@ -331,3 +331,9 @@ function showDijitButton(id) {
display: 'inline'
});
}
+
+function recenterDijitDialog(id) {
+ if(dijit.byId(id)._relativePosition)
+ delete dijit.byId(id)._relativePosition;
+ dijit.byId(id)._position();
+}
Modified: incubator/vcl/trunk/web/js/requests.js
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/js/requests.js?rev=1303484&r1=1303483&r2=1303484&view=diff
==============================================================================
--- incubator/vcl/trunk/web/js/requests.js (original)
+++ incubator/vcl/trunk/web/js/requests.js Wed Mar 21 18:13:57 2012
@@ -107,7 +107,7 @@ function showSuggestedTimesCB(data, ioAr
dojo.byId('suggestContent').innerHTML = data.items.html;
if(data.items.status == 'resgone') {
dijit.byId('suggestedTimes').hide();
- resGone();
+ resGone('edit');
resRefresh();
return;
}
@@ -122,14 +122,10 @@ function showSuggestedTimesCB(data, ioAr
dojo.byId('editResDlgErrMsg').innerHTML = '';
dijit.byId('editResDlgBtn').set('style', 'display: none');
dijit.byId('editResCancelBtn').set('label', 'Okay');
- if(dijit.byId('editResDlg')._relativePosition)
- delete dijit.byId('editResDlg')._relativePosition;
- dijit.byId('editResDlg')._position();
+ recenterDijitDialog('editResDlg');
return;
}
- if(dijit.byId('suggestedTimes')._relativePosition)
- delete dijit.byId('suggestedTimes')._relativePosition;
- dijit.byId('suggestedTimes')._position();
+ recenterDijitDialog('suggestedTimes');
suggestTimeData = data.items.data;
}
@@ -389,7 +385,7 @@ function editReservationCB(data, ioArgs)
if(data.items.status == 'resgone') {
document.body.style.cursor = 'default';
dijit.byId('editResDlg').show();
- resGone();
+ resGone('edit');
resRefresh();
return;
}
@@ -598,71 +594,113 @@ function checkResGone(reqids) {
if(editresid == reqids[i])
return;
}
- resGone();
+ resGone('edit');
}
-function resGone() {
+function resGone(type) {
+ if(type == 'edit') {
+ dojo.byId('editResDlgContent').innerHTML = "The reservation you selected<br>to edit has expired.<br><br>";
+ }
+ else if(type == 'reboot') {
+ dojo.byId('editResDlgContent').innerHTML = "The reservation you selected<br>to reboot has expired.<br><br>";
+ }
+ else if(type == 'reinstall') {
+ dojo.byId('editResDlgContent').innerHTML = "The reservation you selected<br>to reinstall has expired.<br><br>";
+ }
dojo.byId('editresid').value = '';
- dojo.byId('editResDlgContent').innerHTML = "The reservation you selected<br>to edit has expired.<br><br>";
dojo.byId('editResDlgErrMsg').innerHTML = '';
dijit.byId('editResDlgBtn').set('style', 'display: none');
dijit.byId('editResCancelBtn').set('label', 'Okay');
- if(dijit.byId('editResDlg')._relativePosition)
- delete dijit.byId('editResDlg')._relativePosition;
- dijit.byId('editResDlg')._position();
+ recenterDijitDialog('editResDlg');
}
-function hideRebReinstResDlg() {
- dijit.byId('rebootreinstalldlg').set('title', 'Reboot Reservation');
- dojo.byId('rebreinstResDlgContent').innerHTML = '';
- dojo.removeClass('rebootRadios', 'hidden');
+function hideRebootResDlg() {
dojo.byId('softreboot').checked = true;
- dojo.byId('rebreinstrescont').value = '';
- //dojo.byId('rebreinstresid').value = '';
- dojo.byId('rebreinstResDlgErrMsg').innerHTML = '';
- dijit.byId('rebreinstResDlgBtn').set('label', 'Reboot Reservation');
+ dojo.byId('rebootrescont').value = '';
+ dojo.byId('rebootResDlgErrMsg').innerHTML = '';
}
function rebootRequest(cont) {
- dijit.byId('rebootreinstalldlg').set('title', 'Reboot Reservation');
- var txt = 'You can select either a soft or a hard reboot. A soft reboot<br>'
- + 'issues a reboot command to the operating system. A hard reboot<br>'
- + 'is akin to toggling the power switch on a computer. After<br>'
- + 'issuing the reboot, it may take several minutes before the<br>'
- + 'machine is available again. It is also possible that it will<br>'
- + 'not come back up at all. Are you sure you want to continue?<br><br>';
- dojo.removeClass('rebootRadios', 'hidden');
- dojo.byId('rebreinstResDlgContent').innerHTML = txt;
- dojo.byId('rebreinstrescont').value = cont;
- dijit.byId('rebreinstResDlgBtn').set('label', 'Reboot Reservation');
- dijit.byId('rebootreinstalldlg').show();
-}
-
-function reinstallRequest(cont) {
- dijit.byId('rebootreinstalldlg').set('title', 'Reinstall Reservation');
- var txt = 'This will cause the reserved machine to be reinstalled. Any<br>'
- + 'data saved only to the reserved machine will be lost. Are<br>'
- + 'you sure you want to continue?<br><br>';
- dojo.addClass('rebootRadios', 'hidden');
- dojo.byId('rebreinstResDlgContent').innerHTML = txt;
- dojo.byId('rebreinstrescont').value = cont;
- dijit.byId('rebreinstResDlgBtn').set('label', 'Reinstall Reservation');
- dijit.byId('rebootreinstalldlg').show();
+ dojo.byId('rebootrescont').value = cont;
+ dijit.byId('rebootdlg').show();
}
-function submitRebReinstReservation() {
- var data = {continuation: dojo.byId('rebreinstrescont').value};
+function submitRebootReservation() {
+ var data = {continuation: dojo.byId('rebootrescont').value};
document.body.style.cursor = 'wait';
- if(dijit.byId('rebreinstResDlgBtn').get('label') == 'Reboot Reservation') {
- if(dojo.byId('hardreboot').checked)
- data.reboottype = 1;
- else
- data.reboottype = 0;
- }
- dijit.byId('rebootreinstalldlg').hide();
+ if(dojo.byId('hardreboot').checked)
+ data.reboottype = 1;
+ else
+ data.reboottype = 0;
+ dijit.byId('rebootdlg').hide();
RPCwrapper(data, generalReqCB);
}
+function hideReinstallResDlg() {
+ dijit.byId('reinstalldlg').hide();
+ dojo.addClass('reinstallbtns', 'hidden');
+ dojo.byId('reinstallResDlgContent').innerHTML = '';
+ dojo.byId('reinstallResDlgErrMsg').innerHTML = '';
+ dojo.byId('reinstallrescont').value = '';
+}
+
+function showReinstallRequest(cont) {
+ dojo.removeClass('reinstallloading', 'hidden');
+ dijit.byId('reinstalldlg').show();
+ var data = {continuation: cont};
+ RPCwrapper(data, showReinstallRequestCB, 1);
+ document.body.style.cursor = 'wait';
+}
+
+function showReinstallRequestCB(data, ioArgs) {
+ document.body.style.cursor = 'default';
+ if(data.items.status == 'resgone') {
+ dijit.byId('reinstalldlg').hide();
+ resGone('reinstall');
+ dijit.byId('editResDlg').show();
+ setTimeout(resRefresh, 1500);
+ return;
+ }
+ dojo.addClass('reinstallloading', 'hidden');
+ dojo.removeClass('reinstallbtns', 'hidden');
+ dojo.byId('reinstallrescont').value = data.items.cont;
+ dojo.byId('reinstallResDlgContent').innerHTML = data.items.txt;
+ recenterDijitDialog('reinstalldlg');
+}
+
+function submitReinstallReservation() {
+ var data = {continuation: dojo.byId('reinstallrescont').value};
+ var inputs = document.getElementsByName('revisionid');
+ for(var i = 0; i < inputs.length; i++) {
+ if(inputs[i].checked) {
+ data.revisionid = inputs[i].value;
+ break;
+ }
+ }
+ document.body.style.cursor = 'wait';
+ RPCwrapper(data, submitReinstallReservationCB, 1);
+}
+
+function submitReinstallReservationCB(data, ioArgs) {
+ document.body.style.cursor = 'default';
+ if(data.items.status == 'resgone') {
+ dijit.byId('reinstalldlg').hide();
+ resGone('reinstall');
+ dijit.byId('editResDlg').show();
+ setTimeout(resRefresh, 1500);
+ return;
+ }
+ if(data.items.status == 'invalidrevisionid') {
+ dojo.byId('reinstallResDlgErrMsg').innerHTML = 'An invalid version was submitted.';
+ dojo.byId('reinstallrescont').value = data.items.cont;
+ return;
+ }
+ if(data.items.status == 'success') {
+ dijit.byId('reinstalldlg').hide();
+ resRefresh();
+ }
+}
+
function showRDPbutton() {
// submitted by Gerhard Harti from ODU
if(! dojo.byId('counterdiv') || ! dojo.byId('connectdiv'))