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 2014/12/22 22:01:40 UTC

svn commit: r1647399 - in /vcl/trunk/web: .ht-inc/requests.php js/requests.js

Author: jfthomps
Date: Mon Dec 22 21:01:39 2014
New Revision: 1647399

URL: http://svn.apache.org/r1647399
Log:
VCL-568 - refresh current reservations page 15 minutes after a reservation becomes available

requests.php:
-modified viewRequests: removed 'userconnected' from each entry in $requests, handling process a different way
-modified getViewRequestHTMLitem: changed how timeoutdata items are handled, base more things on entries in computerloadlog, if no entries in computerloadlog, refresh page after reconnecttimeout or at end of reservation, whichever is sooner; set id for each timeoutvalue based on request id
-modified AJconnectRequest: removed 'timeoutvalue' class from timeout, changed id from timeoutvalue to connecttimeout; switched to using getReservationNextTimeout instead of getReservationConnectTimeout; if timeout is not null, send it with returned data so javascript can update timeout value for reservation
-modified getReservationNextTimeout: changed connecttimeout to initialconnecttimeout, added reconnecttimeout, stopped using loadstate ids and added subquery to get ids from computerloadstate table based on the names
-removed getReservationConnectTimeout
-removed checkUserConnect
-modified addConnectTimeout: updated to get state id from computerloadstate based on state name instead of using id directly

requests.js:
-modified checkTimeouts: changed nextcheck to 15; delete timeoutvalue dom element when timeout expires; if no timeouts, set nextcheck to 60
-modified connectRequestCB: if timeoutid in data.items, update value to data.items.timeout
-modified checkConnectTimeout: if no connecttimeout object, return; updated to get value from connecttimeout instead of timeoutvalue; if value == 0, return; set value to 0 when expires before doing AJAX call

Modified:
    vcl/trunk/web/.ht-inc/requests.php
    vcl/trunk/web/js/requests.js

Modified: vcl/trunk/web/.ht-inc/requests.php
URL: http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/requests.php?rev=1647399&r1=1647398&r2=1647399&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/requests.php (original)
+++ vcl/trunk/web/.ht-inc/requests.php Mon Dec 22 21:01:39 2014
@@ -112,10 +112,8 @@ function viewRequests() {
 			$cdata = array('requestid' => $requests[$i]['id']);
 			$reqids[] = $requests[$i]['id'];
 			$imageid = $requests[$i]["imageid"];
-			$requests[$i]['userconnected'] = 0;
 			$text .= "  <TR valign=top id=reqrow{$requests[$i]['id']}>\n";
 			if(requestIsReady($requests[$i]) && $requests[$i]['useraccountready']) {
-				$requests[$i]['userconnected'] = checkUserConnect($requests[$i]);
 				$connect = 1;
 				# request is ready, print Connect! and End buttons
 				$cont = addContinuationsEntry('AJconnectRequest', $cdata, SECINDAY);
@@ -234,8 +232,6 @@ function viewRequests() {
 					}
 					/*else
 						$text .= getViewRequestHTMLitem('endcreateoptiondisable');*/
-					// TODO uncomment the following when live imaging works
-					// TODO add a check to ensure it is a VM
 					if(array_key_exists($imageid, $resources['image']) && ! $cluster &&
 					   $requests[$i]['server'] && ($requests[$i]['currstateid'] == 8 ||
 						($requests[$i]['currstateid'] == 14 && $requests[$i]['laststateid'] == 8))) {
@@ -951,6 +947,7 @@ function viewRequests() {
 ///
 ////////////////////////////////////////////////////////////////////////////////
 function getViewRequestHTMLitem($item, $var1='', $data=array()) {
+	global $user;
 	$r = '';
 	if($item == 'connectbtn') {
 		$r .= "    <TD>\n";
@@ -1171,14 +1168,21 @@ function getViewRequestHTMLitem($item, $
 		return $r;
 	}
 	if($item == 'timeoutdata') {
-		if($data['userconnected']) {
-			$end = datetimeToUnix($data['end']) + 15;
-			$r .= "     <input type=\"hidden\" class=\"timeoutvalue\" value=\"$end\">\n";
+		$timeout = getReservationNextTimeout($data['resid']);
+		$end = datetimeToUnix($data['end']);
+		if(! is_null($timeout)) {
+			if($timeout > $end)
+				$timeout = $end;
+			$r .= "     <input type=\"hidden\" class=\"timeoutvalue\" id=\"timeoutvalue|$var1\" value=\"$timeout\">\n";
 		}
 		else {
-			$timeout = getReservationNextTimeout($data['resid']);
-			if(! is_null($timeout))
-				$r .= "     <input type=\"hidden\" class=\"timeoutvalue\" value=\"$timeout\">\n";
+			$timeout = getVariable("reconnecttimeout|{$user['affiliation']}");
+			if(is_null($timeout))
+				$timeout = getVariable("reconnecttimeout", 900);
+			$timeout = time() + $timeout + 15;
+			if($timeout > $end)
+				$timeout = $end;
+			$r .= "     <input type=\"hidden\" class=\"timeoutvalue\" id=\"timeoutvalue|$var1\" value=\"$timeout\">\n";
 		}
 		return $r;
 	}
@@ -1788,7 +1792,6 @@ function AJupdateWaitTime() {
 			$maxstart = mktime(23, 45, 0, date('n', $tmp), date('j', $tmp), date('Y', $tmp));
 			if($start > $maxstart)
 				return;
-			#print "console.log('start okay');";
 		}
 	}
 
@@ -1796,7 +1799,6 @@ function AJupdateWaitTime() {
 	$ending = processInputVar('ending', ARG_STRING);
 	if(! preg_match('/^indefinite|endat|duration$/', $ending))
 		return;
-	#print "console.log('right ending');";
 	if($ending == 'indefinite') {
 		$end = datetimeToUnix('2038-01-01 00:00:00');
 	}
@@ -1830,7 +1832,6 @@ function AJupdateWaitTime() {
 			print "dojo.removeClass('deployerr', 'hidden');";
 			return;
 		}
-		#print "console.log('valid IP address');";
 		$mappedmns = getMnsFromImage($imageid);
 		$mnnets = checkAvailableNetworks($fixedIP);
 		$intersect = array_intersect($mappedmns, $mnnets);
@@ -1840,7 +1841,6 @@ function AJupdateWaitTime() {
 			print "dojo.removeClass('deployerr', 'hidden');";
 			return;
 		}
-		#print "console.log('IP to mn okay');";
 	}
 
 	printImageDescription($imageid);
@@ -4171,9 +4171,9 @@ function AJconnectRequest() {
 			                  $requestData['reservations'][0]['computerid']);
 	}
 
-	$timeout = getReservationConnectTimeout($requestData['reservations'][0]['reservationid']);
+	$timeout = getReservationNextTimeout($requestData['reservations'][0]['reservationid']);
 	if(! is_null($timeout))
-		$h .= "<input type=\"hidden\" class=\"timeoutvalue\" id=\"timeoutvalue\" value=\"$timeout\">\n";
+		$h .= "<input type=\"hidden\" id=\"connecttimeout\" value=\"$timeout\">\n";
 
 	if($requestData['forimaging']) {
 		$h .= _("<font color=red><big><strong>NOTICE:</strong> Later in this process, you must accept a ");
@@ -4285,7 +4285,12 @@ function AJconnectRequest() {
 	$cdata = array('requestid' => $requestid);
 	$cont = addContinuationsEntry('AJcheckConnectTimeout', $cdata, SECINDAY);
 	$h .= "<input type=\"hidden\" id=\"refreshcont\" value=\"$cont\">\n";
-	sendJSON(array('html' => $h));
+	$return = array('html' => $h);
+	if(! is_null($timeout)) {
+		$return['timeoutid'] = "timeoutvalue|$requestid";
+		$return['timeout'] = $timeout;
+	}
+	sendJSON($return);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -4300,7 +4305,7 @@ function AJcheckConnectTimeout() {
 	$reqdata = getRequestInfo($requestid, 1);
 	$stateid = $reqdata['stateid'];
 	if($stateid == 14)
-		$stateid == $reqdata['laststateid'];
+		$stateid = $reqdata['laststateid'];
 	if(is_null($reqdata) ||
 	   $stateid == 1 ||
 	   $stateid == 11 ||
@@ -4765,29 +4770,38 @@ function processRequestInput() {
 function getReservationNextTimeout($resid) {
 	global $user;
 	$query = "SELECT UNIX_TIMESTAMP(cll.timestamp) AS timestamp, "
-	       .        "cll.loadstateid, "
+	       .        "cls.loadstatename, "
 	       .        "COALESCE(v2.value, v1.value) AS acknowledgetimeout, "
-	       .        "COALESCE(v4.value, v3.value) AS connecttimeout "
+	       .        "COALESCE(v4.value, v3.value) AS initialconnecttimeout, "
+	       .        "COALESCE(v6.value, v5.value) AS reconnecttimeout "
 	       . "FROM computerloadlog cll, "
+	       .      "computerloadstate cls, "
 	       .      "variable v1, "
-	       .      "variable v3 "
+	       .      "variable v3, "
+	       .      "variable v5 "
 	       . "LEFT JOIN variable v2 ON (v2.name = 'acknowledgetimeout|{$user['affiliation']}') "
-	       . "LEFT JOIN variable v4 ON (v4.name = 'connecttimeout|{$user['affiliation']}') "
+	       . "LEFT JOIN variable v4 ON (v4.name = 'initialconnecttimeout|{$user['affiliation']}') "
+	       . "LEFT JOIN variable v6 ON (v6.name = 'reconnecttimeout|{$user['affiliation']}') "
 	       . "WHERE cll.reservationid = $resid AND "
-	       .       "(cll.loadstateid = 58 OR "
-	       .       "cll.loadstateid = 55) AND "
+	       .       "cll.loadstateid = cls.id AND "
+	       .       "cll.loadstateid IN (SELECT id "
+	       .                           "FROM computerloadstate "
+	       .                           "WHERE loadstatename IN ('acknowledgetimeout', 'initialconnecttimeout', 'reconnecttimeout')) AND "
 	       .       "v1.name = 'acknowledgetimeout' AND "
-	       .       "v3.name = 'connecttimeout' "
+	       .       "v3.name = 'initialconnecttimeout' AND "
+	       .       "v5.name = 'reconnecttimeout' "
 	       . "ORDER BY cll.timestamp DESC "
 	       . "LIMIT 1";
 	$qh = doQuery($query);
 	if($row = mysql_fetch_assoc($qh)) {
 		if(! is_numeric($row['timestamp']))
 			return NULL;
-		if($row['loadstateid'] == 58)
-			return $row['timestamp'] + $row['acknowledgetimeout'] + 15;
-		elseif($row['loadstateid'] == 55)
-			return $row['timestamp'] + $row['connecttimeout'] + 15;
+		if($row['loadstatename'] == 'acknowledgetimeout')
+			return $row['timestamp'] + $row['acknowledgetimeout'] + 5;
+		elseif($row['loadstatename'] == 'initialconnecttimeout')
+			return $row['timestamp'] + $row['initialconnecttimeout'] + 5;
+		elseif($row['loadstatename'] == 'reconnecttimeout')
+			return $row['timestamp'] + $row['reconnecttimeout'] + 5;
 		else
 			return NULL;
 	}
@@ -4797,62 +4811,6 @@ function getReservationNextTimeout($resi
 
 ////////////////////////////////////////////////////////////////////////////////
 ///
-/// \fn getReservationConnectTimeout($resid)
-///
-/// \param $resid - reservation id
-///
-/// \return unix timestamp
-///
-/// \brief determines the time at which the specified reservation will time out
-/// if not connected or NULL if there is no entry
-///
-////////////////////////////////////////////////////////////////////////////////
-function getReservationConnectTimeout($resid) {
-	global $user;
-	$query = "SELECT UNIX_TIMESTAMP(cll.timestamp) AS timestamp, "
-	       .        "COALESCE(v2.value, v1.value) AS connecttimeout "
-	       . "FROM computerloadlog cll, "
-	       .      "variable v1 "
-	       . "LEFT JOIN variable v2 ON (v2.name = 'connecttimeout|{$user['affiliation']}') "
-	       . "WHERE cll.reservationid = $resid AND "
-	       .       "cll.loadstateid = 55 AND "
-	       .       "v1.name = 'connecttimeout'";
-	$qh = doQuery($query);
-	if($row = mysql_fetch_assoc($qh)) {
-		if(! is_numeric($row['timestamp']))
-			return NULL;
-		return $row['timestamp'] + $row['connecttimeout'] + 15;
-	}
-	else
-		return NULL;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-///
-/// \fn checkUserConnect($data)
-///
-/// \param $data - item from request data array returned by getUserRequests
-///
-/// \return 0 if user has not connected; 1 if user has connected
-///
-/// \brief checks computerloadlog to see if user has connected to reservation
-/// yet
-///
-////////////////////////////////////////////////////////////////////////////////
-function checkUserConnect($data) {
-	$query = "SELECT loadstateid "
-	       . "FROM computerloadlog "
-	       . "WHERE loadstateid = 42 AND "
-	       .       "reservationid = {$data['resid']} "
-	       . "LIMIT 1";
-	$qh = doQuery($query);
-	if($row = mysql_fetch_assoc($qh))
-		return 1;
-	return 0;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-///
 /// \fn addConnectTimeout($resid, $compid)
 ///
 /// \param $resid - reservation id
@@ -4867,11 +4825,12 @@ function addConnectTimeout($resid, $comp
 	       .        "computerid, "
 	       .        "loadstateid, "
 	       .        "timestamp) "
-	       . "VALUES "
-	       .        "($resid, "
+	       . "SELECT $resid, "
 	       .        "$compid, "
-	       .        "55, "
-	       .        "NOW())";
+	       .        "id, "
+	       .        "NOW() "
+	       . "FROM computerloadstate "
+	       . "WHERE loadstatename = 'initialconnecttimeout'";
 	doQuery($query);
 }
 

Modified: vcl/trunk/web/js/requests.js
URL: http://svn.apache.org/viewvc/vcl/trunk/web/js/requests.js?rev=1647399&r1=1647398&r2=1647399&view=diff
==============================================================================
--- vcl/trunk/web/js/requests.js (original)
+++ vcl/trunk/web/js/requests.js Mon Dec 22 21:01:39 2014
@@ -1249,20 +1249,22 @@ function submitNewReservationCB(data, io
 }
 
 function checkTimeouts() {
-	// TODO set nextcheck to 15 once VCL-568 is completed in vcld
-	var nextcheck = 16;
+	var nextcheck = 15;
 	var nodes = dojo.query('.timeoutvalue');
 	var tmp = new Date();
 	var now = (tmp.getTime() - tmp.getMilliseconds()) / 1000;
 	for(var i = 0; i < nodes.length; i++) {
 		var testval = parseInt(nodes[i].value);
 		if(testval <= now) {
+			nodes[i].parentNode.removeChild(nodes[i]);
 			resRefresh();
 			break;
 		}
 		else if(testval - now < nextcheck)
 			nextcheck = testval - now;
 	}
+	if(nodes.length == 0)
+		nextcheck = 60;
 	check_timeout_timer = setTimeout(checkTimeouts, nextcheck * 1000);
 }
 
@@ -1324,6 +1326,8 @@ function connectRequest(cont) {
 
 function connectRequestCB(data, ioArgs) {
 	dijit.byId('connectDlgContent').set('content', data.items.html);
+	if('timeoutid' in data.items)
+		dojo.byId(data.items.timeoutid).value = data.items.timeout;
 	dijit.byId('connectDlg').show();
 	if('refresh' in data.items && data.items.refresh == 1)
 		resRefresh();
@@ -1715,12 +1719,15 @@ function submitReinstallReservationCB(da
 
 function checkConnectTimeout() {
 	var nextcheck = 15;
-	if(! dojo.byId('timeoutvalue'))
+	if(! dojo.byId('connecttimeout'))
+		return;
+	var timeout = parseInt(dojo.byId('connecttimeout').value);
+	if(timeout == 0)
 		return;
-	var timeout = parseInt(dojo.byId('timeoutvalue').value);
 	var tmp = new Date();
 	var now = (tmp.getTime() - tmp.getMilliseconds()) / 1000;
 	if(timeout <= now) {
+		dojo.byId('connecttimeout').value = 0;
 		var cont = dojo.byId('refreshcont').value;
 		RPCwrapper({continuation: cont}, checkConnectTimeoutCB, 1, 30000);
 		return;