. # # }}} # include("defs.php3"); # # No PAGEHEADER since we spit out a Location header later. See below. # # # Only known and logged in users can end experiments. # $this_user = CheckLoginOrDie(); $uid = $this_user->uid(); $isadmin = ISADMIN(); $idleswaptimeout = TBGetSiteVar("idle/threshold"); $autoswap_max = TBGetSiteVar("general/autoswap_max"); # # Verify page arguments. # $reqargs = RequiredPageArguments("experiment", PAGEARG_EXPERIMENT); $optargs = OptionalPageArguments("submit", PAGEARG_STRING, "formfields", PAGEARG_ARRAY); # Need below $pid = $experiment->pid(); $eid = $experiment->eid(); # # Verify Permission. # if (! $experiment->AccessCheck($this_user, $TB_EXPT_MODIFY)) { USERERROR("You do not have permission to modify experiment $pid/$eid!", 1); } # # Spit the form out using the array of data. # function SPITFORM($experiment, $formfields, $errors) { global $isadmin, $TBDOCBASE, $linktest_levels, $EXPOSELINKTEST; global $WIKIDOCURL, $TBMAILADDR; global $autoswap_max; # # Standard Testbed Header # PAGEHEADER("Edit Experiment Settings"); echo $experiment->PageHeader(); echo "

\n"; if ($errors) { echo "\n"; while (list ($name, $message) = each ($errors)) { # XSS prevention. $message = CleanString($message); echo "\n"; } echo "
 Oops, please fix the following errors! 
$name:  $message

\n"; } # XSS prevention. while (list ($key, $val) = each ($formfields)) { $formfields[$key] = CleanString($val); } $url = CreateURL("editexp", $experiment); echo "\n"; echo "\n"; # # Swapping goo. # $swaplink = "$WIKIDOCURL/Swapping"; echo ""; # # Resource usage. # echo "\n"; echo "\n"; # # Batch Experiment? # echo "\n"; # # Run linktest, and level. # if (STUDLY() || $EXPOSELINKTEST) { echo "\n"; } echo "\n"; echo "
Description:
Swapping: \n"; if ($isadmin) { # # Batch Experiment? # echo " \n"; # # Lockdown # echo " \n"; echo " \n"; } echo " "; # # Swapout disk state saving # XXX requires more work, need to create/remove sigs as appropriate # if (0) { echo ""; } echo "
Idle Ignore
Lockdown
Swappable: This experiment can be swapped.
If not, why not (administrators option)?
Idle-Swap: Swap out this experiment after hours idle.
If not, why not?
Max. Duration [1]: Swap out after hours, even if not idle.
State Saving: Save disk state on swapout
CPU Usage: (PlanetLab Nodes Only: 1 <= X <= 5)
Mem Usage: (PlanetLab Nodes Only: 1 <= X <= 5)
\n"; echo "Batch Mode Experiment   (See Tutorial for more information)
Linktest Option: "; echo " (What is this?)"; echo "
\n"; echo "
  1. You may not turn off Maximum Duration, but you are allowed to change the the number of hours, up to $autoswap_max hours. Contact " . $TBMAILADDR . " if you need more time.
\n"; } # # Construct a defaults array based on current DB info. Used for the initial # form, and to determine if any changes were made. # $defaults = array(); $defaults["description"] = $experiment->description(); $defaults["lockdown"] = $experiment->lockdown(); $defaults["idle_ignore"] = $experiment->idle_ignore(); $defaults["batchmode"] = $experiment->batchmode(); $defaults["swappable"] = $experiment->swappable(); $defaults["noswap_reason"] = $experiment->noswap_reason(); $defaults["idleswap"] = $experiment->idleswap(); $defaults["idleswap_timeout"] = $experiment->idleswap_timeout() / 60.0; $defaults["noidleswap_reason"] = $experiment->noidleswap_reason(); $defaults["autoswap"] = $experiment->autoswap(); $defaults["autoswap_timeout"] = $experiment->autoswap_timeout() / 60.0; $defaults["savedisk"] = $experiment->savedisk(); $defaults["mem_usage"] = $experiment->mem_usage(); $defaults["cpu_usage"] = $experiment->cpu_usage(); $defaults["linktest_level"] = $experiment->linktest_level(); # # A couple of defaults for turning things on. # if (!$defaults["autoswap"]) { $defaults["autoswap_timeout"] = 10; } if (!$defaults["idleswap"]) { $defaults["idleswap_timeout"] = $idleswaptimeout; } # # On first load, display initial values and exit. # if (! isset($submit)) { SPITFORM($experiment, $defaults, 0); PAGEFOOTER(); return; } # # Build up argument array to pass along. # $args = array(); # Skip passing ones that are not changing from the default (DB state.) if (isset($formfields["description"]) && $formfields["description"] != "" && ($formfields["description"] != $experiment->description())) { $args["description"] = $formfields["description"]; } if ($isadmin) { # A couple of admin-only options. # Filter booleans from checkboxes to 0 or 1. $formfields["idle_ignore"] = (!isset($formfields["idle_ignore"]) || strcmp($formfields["idle_ignore"], "1")) ? 0 : 1; if ($formfields["idle_ignore"] != $experiment->idle_ignore()) { $args["idle_ignore"] = $formfields["idle_ignore"]; } $formfields["lockdown"] = (!isset($formfields["lockdown"]) || strcmp($formfields["lockdown"], "1")) ? 0 : 1; if ($formfields["lockdown"] != $experiment->lockdown()) { $args["lockdown"] = $formfields["lockdown"]; } $formfields["swappable"] = (!isset($formfields["swappable"]) || strcmp($formfields["swappable"], "1")) ? 0 : 1; if ($formfields["swappable"] != $experiment->swappable()) { $args["swappable"] = $formfields["swappable"]; } if (isset($formfields["noswap_reason"]) && $formfields["noswap_reason"] != "" && ($formfields["noswap_reason"] != $experiment->noswap_reason())) { $args["noswap_reason"] = $formfields["noswap_reason"]; } } $formfields["idleswap"] = (!isset($formfields["idleswap"]) || strcmp($formfields["idleswap"], "1")) ? 0 : 1; if ($formfields["idleswap"] != $experiment->idleswap()) { $args["idleswap"] = $formfields["idleswap"]; } # Note that timeouts are in hours in the UI, but in minutes in the DB. if (isset($formfields["idleswap_timeout"]) && $formfields["idleswap_timeout"] != "" && ($formfields["idleswap_timeout"] != $experiment->idleswap_timeout() / 60.0)) { $args["idleswap_timeout"] = $formfields["idleswap_timeout"]; } if (isset($formfields["noidleswap_reason"]) && $formfields["noidleswap_reason"] != "" && ($formfields["noidleswap_reason"] != $experiment->noidleswap_reason())) { $args["noidleswap_reason"] = $formfields["noidleswap_reason"]; } $formfields["autoswap"] = (!isset($formfields["autoswap"]) || strcmp($formfields["autoswap"], "1")) ? 0 : 1; if ($formfields["autoswap"] != $experiment->autoswap()) { $args["autoswap"] = $formfields["autoswap"]; } if (isset($formfields["autoswap_timeout"]) && $formfields["autoswap_timeout"] != "" && ($formfields["autoswap_timeout"] != $experiment->autoswap_timeout() / 60.0)) { $args["autoswap_timeout"] = $formfields["autoswap_timeout"]; } $formfields["savedisk"] = (!isset($formfields["savedisk"]) || strcmp($formfields["savedisk"], "1")) ? 0 : 1; if ($formfields["savedisk"] != $experiment->savedisk()) { $args["savedisk"] = $formfields["savedisk"]; } if (isset($formfields["cpu_usage"]) && $formfields["cpu_usage"] != "" && ($formfields["cpu_usage"] != $experiment->cpu_usage())) { $args["cpu_usage"] = $formfields["cpu_usage"]; } if (isset($formfields["mem_usage"]) && $formfields["mem_usage"] != "" && ($formfields["mem_usage"] != $experiment->mem_usage())) { $args["mem_usage"] = $formfields["mem_usage"]; } $formfields["batchmode"] = (!isset($formfields["batchmode"]) || strcmp($formfields["batchmode"], "1")) ? 0 : 1; if ($formfields["batchmode"] != $experiment->batchmode()) { $args["batchmode"] = $formfields["batchmode"]; } # Select defaults to "none" if not set. if (isset($formfields["linktest_level"]) && $formfields["linktest_level"] != "none" && $formfields["linktest_level"] != "" && ($formfields["linktest_level"] != $experiment->linktest_level())) { $args["linktest_level"] = $formfields["linktest_level"]; } $errors = array(); if (! ($result = Experiment::EditExp($experiment, $args, $errors))) { # Always respit the form so that the form fields are not lost. # I just hate it when that happens so lets not be guilty of it ourselves. SPITFORM($experiment, $formfields, $errors); PAGEFOOTER(); return; } # # Spit out a redirect so that the history does not include a post # in it. The back button skips over the post and to the form. # header("Location: " . CreateURL("showexp", $experiment)); ?>