示例#1
0
    $showtypes[] = "cm";
} elseif (!isset($showtype)) {
    $showtypes[] = "cm";
    $showtypes[] = "sa";
    $showtypes[] = "ch";
} else {
    if (!($showtype == "sa" || $showtype == "cm" || $showtype == "ch")) {
        USERERROR("Improper argument: showtype={$showtype}", 1);
    }
    $showtypes[] = $showtype;
}
#
# Standard Testbed Header
#
PAGEHEADER("Geni Slice List");
if (!($isadmin || STUDLY())) {
    USERERROR("You do not have permission to view Geni slice list!", 1);
}
#
# Search box for CM only.
#
if (isset($query) && $query != $defaultsearchstring) {
    $searchstring = $query;
} else {
    $searchstring = $defaultsearchstring;
}
echo "<center>";
echo "<table class=stealth>\n";
echo "<tr>";
echo "<td class=stealth>";
echo "<form method='get' action='genislices.php'>";
 function Show($short = 0, $sortby = "")
 {
     global $TBDBNAME, $TBDOCBASE, $WIKIDOCURL;
     $pid = $this->pid();
     $eid = $this->eid();
     $nodecounts = array();
     # Node counts, by class.
     $query_result = DBQueryFatal("select nt.class,count(*) from reserved as r " . "left join nodes as n on n.node_id=r.node_id " . "left join node_types as nt on n.type=nt.type " . "where pid='{$pid}' and eid='{$eid}' group by nt.class");
     while ($row = mysql_fetch_array($query_result)) {
         $class = $row[0];
         $count = $row[1];
         $nodecounts[$class] = $count;
     }
     $query_result = DBQueryFatal("select e.*, s.archive_idx, pl.slicename, " . "round(e.minimum_nodes+.1,0) as min_nodes, " . "round(e.maximum_nodes+.1,0) as max_nodes " . " from experiments as e " . "left join experiment_stats as s on s.exptidx=e.idx " . "left join plab_slices as pl" . " on e.pid = pl.pid and e.eid = pl.eid " . "where e.pid='{$pid}' and e.eid='{$eid}'");
     if (($exprow = mysql_fetch_array($query_result)) == 0) {
         TBERROR("Experiment {$eid} in project {$pid} is gone!\n", 1);
     }
     $exp_gid = $exprow["gid"];
     $exp_name = $exprow["expt_name"];
     $exp_swapped = $exprow["expt_swapped"];
     $exp_swapuid = $exprow["expt_swap_uid"];
     $exp_end = $exprow["expt_end"];
     $exp_created = $exprow["expt_created"];
     $exp_head = $exprow["expt_head_uid"];
     $exp_swapper = $exprow["swapper_idx"];
     $exp_state = $exprow["state"];
     $exp_shared = $exprow["shared"];
     $exp_path = $exprow["path"];
     $batchmode = $exprow["batchmode"];
     $canceled = $exprow["canceled"];
     $attempts = $exprow["attempts"];
     $expt_locked = $exprow["expt_locked"];
     $priority = $exprow["priority"];
     $swappable = $exprow["swappable"];
     $noswap_reason = $exprow["noswap_reason"];
     $idleswap = $exprow["idleswap"];
     $idleswap_timeout = $exprow["idleswap_timeout"];
     $noidleswap_reason = $exprow["noidleswap_reason"];
     $autoswap = $exprow["autoswap"];
     $autoswap_timeout = $exprow["autoswap_timeout"];
     $idle_ignore = $exprow["idle_ignore"];
     $savedisk = $exprow["savedisk"];
     $swapreqs = $exprow["swap_requests"];
     $lastswapreq = $exprow["last_swap_req"];
     $minnodes = $exprow["min_nodes"];
     $maxnodes = $exprow["max_nodes"];
     $virtnodes = $exprow["virtnode_count"];
     $syncserver = $exprow["sync_server"];
     $mem_usage = $exprow["mem_usage"];
     $cpu_usage = $exprow["cpu_usage"];
     $exp_slice = $exprow["slicename"];
     $linktest_level = $exprow["linktest_level"];
     $linktest_pid = $exprow["linktest_pid"];
     $usemodelnet = $exprow["usemodelnet"];
     $mnet_cores = $exprow["modelnet_cores"];
     $mnet_edges = $exprow["modelnet_edges"];
     $lockdown = $exprow["lockdown"];
     $skipvlans = $exprow["skipvlans"];
     $exptidx = $exprow["idx"];
     $archive_idx = $exprow["archive_idx"];
     $dpdb = $exprow["dpdb"];
     $dpdbname = $exprow["dpdbname"];
     $dpdbpassword = $exprow["dpdbpassword"];
     $uuid = $exprow["eid_uuid"];
     $paniced = $exprow["paniced"];
     $panic_date = $exprow["panic_date"];
     $autoswap_hrs = $autoswap_timeout / 60.0;
     $idleswap_hrs = $idleswap_timeout / 60.0;
     $noswap = "({$noswap_reason})";
     $noidleswap = "({$noidleswap_reason})";
     $autoswap_str = $autoswap_hrs . " hour" . ($autoswap_hrs == 1 ? "" : "s");
     $idleswap_str = $idleswap_hrs . " hour" . ($idleswap_hrs == 1 ? "" : "s");
     if (!($head_user = User::Lookup($exp_head))) {
         TBERROR("Error getting object for user {$exp_head}", 1);
     }
     $showuser_url = CreateURL("showuser", $head_user);
     if (!($swapper = User::Lookup($exp_swapper))) {
         TBERROR("Error getting object for user {$exp_swapper}", 1);
     }
     $swapper_uid = $swapper->uid();
     $swapper_url = CreateURL("showuser", $swapper);
     if ($swappable) {
         $swappable = "Yes";
     } else {
         $swappable = "<b>No</b> {$noswap}";
     }
     if ($idleswap) {
         $idleswap = "Yes (after {$idleswap_str})";
     } else {
         $idleswap = "<b>No</b> {$noidleswap}";
     }
     if ($autoswap) {
         $autoswap = "<b>Yes</b> (after {$autoswap_str})";
     } else {
         $autoswap = "No";
     }
     if ($idle_ignore) {
         $idle_ignore = "<b>Yes</b>";
     } else {
         $idle_ignore = "No";
     }
     if ($savedisk) {
         $savedisk = "<b>Yes</b>";
     } else {
         $savedisk = "No";
     }
     if ($expt_locked) {
         $expt_locked = "({$expt_locked})";
     } else {
         $expt_locked = "";
     }
     $query_result = DBQueryFatal("select cause_desc " . "from experiment_stats as s,errors,causes " . "where s.exptidx = {$exptidx} " . "and errors.cause = causes.cause " . "and s.last_error = errors.session");
     if ($row = mysql_fetch_array($query_result)) {
         $err_cause = $row[0];
     } else {
         $err_cause = '';
     }
     #
     # Generate the table.
     #
     echo "<table align=center border=1>\n";
     if (!$short) {
         $thisurl = CreateURL("showexp", $this);
         echo "<tr>\n                <td>Name: </td>\n                <td class=left><a href='{$thisurl}'>{$eid}</a></td>\n              </tr>\n";
         echo "<tr>\n                <td>Description: </td>\n                <td class=\"left\">{$exp_name}</td>\n              </tr>\n";
         echo "<tr>\n                <td>Project: </td>\n                <td class=\"left\">\n                  <a href='showproject.php3?pid={$pid}'>{$pid}</a></td>\n              </tr>\n";
         echo "<tr>\n                <td>Group: </td>\n                <td class=\"left\">\n                  <a href='showgroup.php3?pid={$pid}&gid={$exp_gid}'>{$exp_gid}</a>\n                </td>\n              </tr>\n";
         if (isset($exp_slice)) {
             echo "<tr>\n                  <td>Planetlab Slice: </td>\n                  <td class=\"left\">{$exp_slice}</td>\n                </tr>\n";
         }
     }
     echo "<tr>\n            <td>Creator: </td>\n            <td class=\"left\">\n              <a href='{$showuser_url}'>{$exp_head}</a></td>\n          </tr>\n";
     if (!$swapper->SameUser($head_user)) {
         echo "<tr>\n                      <td>Swapper: </td>\n                      <td class=\"left\">\n                          <a href='{$swapper_url}'>{$swapper_uid}</a></td>\n                  </tr>\n";
     }
     if (!$short) {
         $instance = TemplateInstance::LookupByExptidx($exptidx);
         if (!is_null($instance)) {
             $guid = $instance->guid();
             $vers = $instance->vers();
             echo "<tr>\n                    <td>Template: </td>\n                    <td class=\"left\">\n                       <a href='template_show.php?guid={$guid}&version={$vers}'>\n                          {$guid}/{$vers}</a>";
             if ($instance->runidx()) {
                 $runidx = $instance->runidx();
                 $runid = $instance->GetRunID($runidx);
                 $url = CreateURL("experimentrun_show", $instance, "runidx", $runidx);
                 echo " (Current Run:\n                       <a href='{$url}'>{$runid}</a>)</td>";
             } else {
                 $runidx = $instance->LastRunIdx();
                 $runid = $instance->GetRunID($runidx);
                 $url = CreateURL("experimentrun_show", $instance, "runidx", $runidx);
                 echo " (Last Run:\n                       <a href='{$url}'>{$runid}</a>)</td>";
             }
             echo "</tr>\n";
         }
         echo "<tr>\n                <td>Created: </td>\n                <td class=\"left\">{$exp_created}</td>\n              </tr>\n";
         if ($exp_swapped) {
             echo "<tr>\n                    <td>Last Swap/Modify: </td>\n                    <td class=\"left\">{$exp_swapped}\n                        (<a href='{$swapper_url}'>{$swapper_uid}</a>)</td>\n                  </tr>\n";
         }
         if (ISADMIN()) {
             echo "<tr>\n                    <td><a href='{$WIKIDOCURL}/Swapping#swapping'>Swappable:</a></td>\n                    <td class=\"left\">{$swappable}</td>\n                  </tr>\n";
         }
         echo "<tr>\n                  <td><a href='{$WIKIDOCURL}/Swapping#idleswap'>Idle-Swap:</a></td>\n                  <td class=\"left\">{$idleswap}</td>\n              </tr>\n";
         echo "<tr>\n                <td><a href='{$WIKIDOCURL}/Swapping#autoswap'>Max. Duration:</a></td>\n                <td class=\"left\">{$autoswap}</td>\n              </tr>\n";
         echo "<tr>\n                <td><a href='{$WIKIDOCURL}/Swapping#swapstatesave'>Save State:</a></td>\n                <td class=\"left\">{$savedisk}</td>\n              </tr>\n";
         if (ISADMIN()) {
             echo "<tr>\n                    <td>Idle Ignore:</td>\n                    <td class=\"left\">{$idle_ignore}</td>\n                 </tr>\n";
         }
         echo "<tr>\n                <td>Path: </td>\n                <td class=left>{$exp_path}</td>\n              </tr>\n";
         echo "<tr>\n                <td>Status: </td>\n                <td id=exp_state class=\"left\">{$exp_state} {$expt_locked}</td>\n              </tr>\n";
         if ($err_cause) {
             echo "<tr>\n                    <td>Last Error: </td>\n                    <td class=\"left\"><a href=\"showlasterror.php3?pid={$pid}&eid={$eid}\">{$err_cause}</a></td>\n                  </tr>\n";
         }
         if ($paniced) {
             echo "<tr>\n                    <td>Paniced on: </td>\n                    <td class=left>{$panic_date}</td>\n                  </tr>\n";
         }
         if ($linktest_pid) {
             $linktest_running = "<b>(Linktest Running)</b>";
         } else {
             $linktest_running = "";
         }
         echo "<tr>\n                <td><a href='{$WIKIDOCURL}/linktest'>" . "Linktest Level</a>: </td>\n                <td class=\"left\">{$linktest_level} {$linktest_running}</td>\n              </tr>\n";
     }
     if (count($nodecounts)) {
         echo "<tr>\n                 <td>Reserved Nodes: </td>\n                 <td class=\"left\">\n";
         while (list($class, $count) = each($nodecounts)) {
             echo "{$count} ({$class}) &nbsp; ";
         }
         echo "   </td>\n              </tr>\n";
     } elseif (!$short) {
         if ($minnodes != "") {
             echo "<tr>\n                      <td>Min/Max Nodes: </td>\n                      <td class=\"left\"><font color=green>\n                          {$minnodes}/{$maxnodes} (estimates)</font></td>\n                  </tr>\n";
         } else {
             echo "<tr>\n                      <td>Minumum Nodes: </td>\n                      <td class=\"left\"><font color=green>Unknown</font></td>\n                  </tr>\n";
         }
         if ($virtnodes) {
             echo "<tr>\n                      <td>Virtual Nodes: </td>\n                      <td class=\"left\"><font>\n                          {$virtnodes}</font></td>\n                  </tr>\n";
         } else {
             echo "<tr>\n                      <td>Virtual Nodes: </td>\n                      <td class=\"left\"><font color=green>Unknown</font></td>\n                  </tr>\n";
         }
     }
     if (!$short) {
         if ($mem_usage || $cpu_usage) {
             echo "<tr>\n                      <td>Mem Usage Est: </td>\n                      <td class=\"left\">{$mem_usage}</td>\n                  </tr>\n";
             echo "<tr>\n                      <td>CPU Usage Est: </td>\n                      <td class=\"left\">{$cpu_usage}</td>\n                  </tr>\n";
         }
         $lastact = $this->LastAct();
         $idletime = $this->IdleTime();
         $stale = $this->IdleStale();
         if ($lastact != -1) {
             echo "<tr>\n                      <td>Last Activity: </td>\n                      <td class=\"left\">{$lastact}</td>\n                  </tr>\n";
             if ($stale) {
                 $str = "(stale)";
             } else {
                 $str = "";
             }
             echo "<tr>\n                      <td>Idle Time: </td>\n                      <td class=\"left\">{$idletime} hours {$str}</td>\n                  </tr>\n";
         }
         if (!($swapreqs == "" || $swapreqs == 0)) {
             echo "<tr>\n                      <td>Swap Requests: </td>\n                      <td class=\"left\">{$swapreqs}</td>\n                  </tr>\n";
             echo "<tr>\n                      <td>Last Swap Req.: </td>\n                      <td class=\"left\">{$lastswapreq}</td>\n                  </tr>\n";
         }
         $lockflip = $lockdown ? 0 : 1;
         $lockval = $lockdown ? "Yes" : "No";
         echo "<tr>\n                   <td>Locked Down:</td>\n                   <td>{$lockval} (<a href=toggle.php?pid={$pid}&eid={$eid}" . "&type=lockdown&value={$lockflip}>Toggle</a>)\n                   </td>\n              </tr>\n";
         if (ISADMIN() || STUDLY() || OPSGUY()) {
             $thisflip = $skipvlans ? 0 : 1;
             $flipval = $skipvlans ? "Yes" : "No";
             echo "<tr>\n                       <td>Skip Vlans:</td>\n                       <td>{$flipval} (<a href=toggle.php?pid={$pid}&eid={$eid}" . "&type=skipvlans&value={$thisflip}>Toggle</a>)\n                       </td>\n                      </tr>\n";
         }
     }
     if ($batchmode) {
         echo "<tr>\n                    <td>Batch Mode: </td>\n                    <td class=\"left\">Yes</td>\n                  </tr>\n";
         echo "<tr>\n                    <td>Start Attempts: </td>\n                    <td class=\"left\">{$attempts}</td>\n                  </tr>\n";
     }
     if ($canceled) {
         echo "<tr>\n                 <td>Cancel Flag: </td>\n                 <td class=\"left\">{$canceled}</td>\n              </tr>\n";
     }
     if (!$short) {
         if (ISADMIN()) {
             echo "<tr>\n                        <td>UUID: </td>\n                        <td class=left>{$uuid}</td>\n                      </tr>\n";
         }
         if ($usemodelnet) {
             echo "<tr>\n                      <td>Use Modelnet: </td>\n                      <td class=\"left\">Yes</td>\n                  </tr>\n";
             echo "<tr>\n                      <td>Modelnet Phys Core Nodes: </td>\n                      <td class=\"left\">{$mnet_cores}</td>\n                  </tr>\n";
             echo "<tr>\n                      <td>Modelnet Phys Edge Nodes: </td>\n                      <td class=\"left\">{$mnet_edges}</td>\n                  </tr>\n";
         }
         if (isset($syncserver)) {
             echo "<tr>\n                      <td>Sync Server: </td>\n                      <td class=\"left\">{$syncserver}</td>\n                  </tr>\n";
         }
         if ($dpdb && $dpdbname && $dpdbpassword) {
             echo "<tr>\n                      <td>DataBase Name: </td>\n                      <td class=\"left\">{$dpdbname}</td>\n                  </tr>\n";
             echo "<tr>\n                      <td>DataBase User: </td>\n                      <td class=\"left\">E{$exptidx}</td>\n                  </tr>\n";
             echo "<tr>\n                      <td>DataBase Password: </td>\n                      <td class=\"left\">{$dpdbpassword}</td>\n                  </tr>\n";
         }
         echo "<tr>\n                  <td>Index: </td>\n                  <td class=\"left\">{$exptidx}";
         if ($archive_idx) {
             echo " ({$archive_idx}) ";
         }
         echo " </td>\n              </tr>\n";
     }
     if (!$short) {
         if ($this->geniflags()) {
             $slice = GeniSlice::Lookup("geni-cm", $uuid);
             if ($slice) {
                 $slice_hrn = $slice->hrn();
                 $slice_urn = $slice->urn();
                 if (ISADMIN()) {
                     $url = CreateURL("showslice", "slice_idx", $slice->idx(), "showtype", "cm");
                     echo "<tr>\n                                <td>Geni Slice (CM): </td>\n                                <td class=\"left\">\n                                     <a href='{$url}'>{$slice_urn}</a></td>\n                              </tr>\n";
                 } else {
                     echo "<tr>\n                                <td>Geni Slice (CM): </td>\n                                <td class=\"left\">{$slice_urn}</td>\n                              </tr>\n";
                 }
             }
         } else {
             $slice = GeniSlice::LookupByExperiment("geni-sa", $this);
             if ($slice) {
                 $slice_hrn = $slice->hrn();
                 $slice_urn = $slice->urn();
                 if (ISADMIN()) {
                     $url = CreateURL("showslice", "slice_idx", $slice->idx(), "showtype", "sa");
                     echo "<tr>\n                                 <td>Geni Slice (SA): </td>\n                                 <td class=\"left\">\n                                      <a href='{$url}'>{$slice_urn}</a></td>\n                             </tr>\n";
                 } else {
                     echo "<tr>\n                                <td>Geni Slice (SA): </td>\n                                <td class=\"left\">{$slice_urn}</td>\n                              </tr>\n";
                 }
                 $slice = GeniSlice::Lookup("geni-cm", $slice_hrn);
                 if ($slice) {
                     if (ISADMIN()) {
                         $url = CreateURL("showslice", "slice_idx", $slice->idx(), "showtype", "cm");
                         echo "<tr>\n                                     <td>Geni Slice (CM): </td>\n                                     <td class=\"left\">\n                                           <a href='{$url}'>{$slice_urn}</a></td>\n                                  </tr>\n";
                     } else {
                         echo "<tr>\n                                    <td>Geni Slice (SA): </td>\n                                    <td class=\"left\">{$slice_urn}</td>\n                                  </tr>\n";
                     }
                 }
             }
         }
     }
     echo "</table>\n";
 }
示例#3
0
include "defs.php3";
#
# Only known and logged in users can do this.
#
$this_user = CheckLoginOrDie();
$uid = $this_user->uid();
$isadmin = ISADMIN();
#
# Verify page arguments
#
$optargs = OptionalPageArguments("sortby", PAGEARG_STRING);
#
# Standard Testbed Header
#
PAGEHEADER("Emulab Site List");
if (!($isadmin || OPSGUY() || STUDLY())) {
    USERERROR("Cannot view site list.", 1);
}
if (!isset($sortby)) {
    $sortby = "created";
}
$sortclause = "";
if ($sortby == "created") {
    $sortclause = "order by created";
} elseif ($sortby == "urn") {
    $sortclause = "order by urn";
} elseif ($sortby == "commonname") {
    $sortclause = "order by commonname";
} elseif ($sortby == "buildinfo") {
    $sortclause = "order by buildinfo";
} elseif ($sortby == "updated") {
# License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this file.  If not, see <http://www.gnu.org/licenses/>.
#
# }}}
#
include "defs.php3";
include_once "node_defs.php";
#
# Only known and logged in users can do this.
#
$this_user = CheckLoginOrDie();
$uid = $this_user->uid();
$isadmin = ISADMIN();
if (!$isadmin && !STUDLY()) {
    USERERROR("You are not allowed to view this page!", 1);
}
#
# Verify page arguments.
#
$optargs = OptionalPageArguments("type", PAGEARG_STRING);
#
# Standard Testbed Header
#
PAGEHEADER("Node Control Center");
$query_result = DBQueryFatal("select n.inception,util.*, " . "  UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(n.inception) as age " . "  from node_utilization as util " . "left join nodes as n on n.node_id=util.node_id " . "left join node_types as t on t.type=n.type " . "where n.inception is not null and t.class='pc' and " . "      role='testnode'" . "order BY priority");
if (mysql_num_rows($query_result) == 0) {
    echo "<center>Oops, no nodes to show you!</center>";
    PAGEFOOTER();
    exit;
function SPITFORM($template, $formfields, $parameters, $errors)
{
    global $TBDB_EIDLEN, $EXPOSELINKTEST, $EXPOSESTATESAVE, $TBDOCBASE;
    global $TBVALIDDIRS_HTML, $linktest_levels;
    global $WIKIDOCURL;
    PAGEHEADER("Instantiate an Experiment Template");
    echo "<center>\n";
    $template->Show();
    echo "</center>\n";
    echo "<br>\n";
    $guid = $template->guid();
    $vers = $template->vers();
    if ($errors) {
        echo "<table class=nogrid\n                     align=center border=0 cellpadding=6 cellspacing=0>\n              <tr>\n                 <th align=center colspan=2>\n                   <font size=+1 color=red>\n                      &nbsp;Oops, please fix the following errors!&nbsp;\n                   </font>\n                 </td>\n              </tr>\n";
        while (list($name, $message) = each($errors)) {
            echo "<tr>\n                     <td align=right>\n                       <font color=red>{$name}:&nbsp;</font></td>\n                     <td align=left>\n                       <font color=red>{$message}</font></td>\n                  </tr>\n";
        }
        echo "</table><br>\n";
    } else {
        echo "<blockquote><blockquote><font size=+1>";
        echo "Template Instantiation will map your template onto actual " . "testbed hardware. This used to be known as " . "<em>experiment swapin</em> " . "but we decided we like <em>instantiation</em> better.";
        echo "</font></blockquote></blockquote><br>\n";
    }
    $url = CreateURL("template_swapin", $template);
    echo "<form action='{$url}' method=post>\n";
    echo "<table align=center border=1>\n";
    #
    # Pass along replay info, but no need to display it.
    #
    if (isset($formfields["replay_instance_idx"])) {
        echo "<input type=hidden name=\"formfields[replay_instance_idx]\"\n                     value='" . $formfields["replay_instance_idx"] . "'>\n";
        if (isset($formfields["replay_run_idx"])) {
            echo "<input type=hidden name=\"formfields[replay_run_idx]\"\n                         value='" . $formfields["replay_run_idx"] . "'>\n";
        }
    }
    #
    # EID:
    #
    echo "<tr>\n              <td class='pad4'>ID:\n              <br><font size='-1'>(alphanumeric, no blanks)</font></td>\n              <td class='pad4' class=left>\n                  <input type=text\n                         name=\"formfields[eid]\"\n                         value=\"" . $formfields["eid"] . "\"\n\t                 size={$TBDB_EIDLEN}\n                         maxlength={$TBDB_EIDLEN}>\n              </td>\n          </tr>\n";
    #
    # Swapping
    #
    # Add in hidden fields to send swappable and noswap_reason, since
    # they do not show on the form
    echo "<input type=hidden name=\"formfields[exp_swappable]\"\n                 value='{$formfields['exp_swappable']}'>\n";
    echo "<input type=hidden name=\"formfields[exp_noswap_reason]\" value='";
    echo htmlspecialchars($formfields["exp_noswap_reason"], ENT_QUOTES);
    echo "'>\n";
    if (isset($view['hide_swap'])) {
        $idlevars = array('exp_idleswap', 'exp_noidleswap_reason', 'exp_idleswap_timeout', 'exp_autoswap', 'exp_autoswap_timeout');
        while (list($index, $value) = each($idlevars)) {
            if (isset($formfields[$value])) {
                echo "<input type='hidden' name='formfields[{$value}]'\n                             value='{$formfields[$value]}'>\n";
            }
        }
    } else {
        echo "<tr>\n\t\t  <td class='pad4'>\n\t\t    <a href='{$WIKIDOCURL}/Swapping#swapping'>\n\t\t    Swapping:</td>\n\t\t  <td>\n\t\t  <table cellpadding=0 cellspacing=0 border=0><tr>\n\t\t  <td><input type='checkbox'\n\t\t\t name='formfields[exp_idleswap]'\n\t\t\t value='1'";
        if ($formfields["exp_idleswap"] == "1") {
            echo " checked='1'";
        }
        echo "></td>\n\t\t  <td><a href='{$WIKIDOCURL}/Swapping#idleswap'>\n\t\t  <b>Idle-Swap:</b></a> Swap out this experiment\n\t\t  after \n\t\t  <input type='text' name='formfields[exp_idleswap_timeout]'\n\t\t\t value='";
        echo htmlspecialchars($formfields["exp_idleswap_timeout"], ENT_QUOTES);
        echo "' size='3'> hours idle.</td>\n\t\t  </tr><tr>\n\t\t  <td> </td>\n\t\t  <td>If not, why not?<br><textarea rows=2 cols=50\n\t\t\t      name='formfields[exp_noidleswap_reason]'>";
        echo htmlspecialchars($formfields["exp_noidleswap_reason"], ENT_QUOTES);
        echo "</textarea></td>\n\t\t  </tr><tr>\n\t\t  <td><input type='checkbox'\n\t\t\t name='formfields[exp_autoswap]'\n\t\t\t value='1' ";
        if ($formfields["exp_autoswap"] == "1") {
            echo " checked='1'";
        }
        echo "></td>\n\t\t  <td><a href='{$WIKIDOCURL}/Swapping#autoswap'>\n\t\t  <b>Max. Duration:</b></a> Swap out after\n\t\t  <input type='text' name='formfields[exp_autoswap_timeout]'\n\t\t\t value='";
        echo htmlspecialchars($formfields["exp_autoswap_timeout"], ENT_QUOTES);
        echo "' size='3'> hours, even if not idle.</td>\n\t\t  </tr>";
        if (STUDLY() || $EXPOSESTATESAVE) {
            echo "<tr><td>\n\t         <input type=checkbox name='formfields[exp_savedisk]'\n\t         value='Yep'";
            if (isset($formfields["exp_savedisk"]) && strcmp($formfields["exp_savedisk"], "Yep") == 0) {
                echo " checked='1'";
            }
            echo "></td>\n";
            echo "<td><a href='{$WIKIDOCURL}/Swapping#swapstatesave'>\n\t\t  <b>State Saving:</b></a> Save disk state on swapout</td>\n\t\t  </tr>";
        }
        echo "</table></td></tr>";
    }
    if (count($parameters)) {
        #
        # Lets get an array of mouseovers to use in the form.
        #
        unset($mouseovers);
        $template->FormalParameterMouseOvers($mouseovers);
        #
        # Table of inputs.
        #
        echo "<tr>\n\t\t  <td class='pad4'>Formal Parameters:</td>\n\t\t  <td>\n \t\t    <table cellpadding=0 cellspacing=0 border=0>\n";
        while (list($name, $value) = each($parameters)) {
            if (!isset($value)) {
                $value = "&nbsp";
            }
            $mouseover = isset($mouseovers[$name]) ? $mouseovers[$name] : "";
            echo "<tr>\n                    <td class='pad4' {$mouseover}>{$name}</td>\n                    <td class='pad4' class=left>\n                        <input type=text\n                               name=\"parameters[{$name}]\"\n                               value=\"" . $value . "\"\n\t                       size=60\n                               maxlength=1024>\n                    </td>\n                  </tr>\n";
        }
        echo "<tr><td>&nbsp;&nbsp;<b>or</b> XML file:\n               </td><td></td></tr>\n";
        echo "<tr>\n                  <td class='pad4'>On Server<br>\n                           <font size='-1'>({$TBVALIDDIRS_HTML})</font></td>\n                  <td class='pad4'>\n\t              <input type=text\n                             name=\"formfields[parameter_xmlfile]\"\n                             value=\"" . $formfields["parameter_xmlfile"] . "\"\n\t                     size=60>\n";
        echo "</td></tr>\n";
        echo "</table></td></tr>";
    }
    #
    # Description
    #
    echo "<tr>\n              <td colspan=2>\n               Use this text area for an (optional) description:\n              </td>\n          </tr>\n          <tr>\n              <td colspan=2 align=center class=left>\n                  <textarea name=\"formfields[description]\"\n                    rows=5 cols=80>" . str_replace("\r", "", $formfields["description"]) . "</textarea>\n              </td>\n          </tr>\n";
    #
    # Batch Experiment?
    #
    echo "<tr>\n\t      <td class='pad4' colspan=2>\n\t      <input type=checkbox name='formfields[batched]' value='Yep'";
    if (isset($formfields["batched"]) && strcmp($formfields["batched"], "Yep") == 0) {
        echo " checked='1'";
    }
    echo ">\n";
    echo "Batch Mode Instantiation &nbsp;\n\t  <font size='-1'>(See\n          <a href='{$WIKIDOCURL}/Tutorial#BatchMode'>Tutorial</a>\n          for more information)</font>\n\t  </td>\n\t  </tr>\n";
    #
    # Preload?
    #
    echo "<tr>\n\t      <td class='pad4' colspan=2>\n\t\t  <input type=checkbox name='formfields[preload]'\n                         value='Yep'";
    if (isset($formfields["preload"]) && strcmp($formfields["preload"], "Yep") == 0) {
        echo " checked='1'";
    }
    echo ">\n";
    echo "Do Not Swap In</td>\n\t </tr>\n";
    #
    # Run linktest, and level.
    #
    if (STUDLY() || $EXPOSELINKTEST) {
        echo "<tr>\n              <td><a href='{$WIKIDOCURL}/linktest'>Linktest</a> Option:</td>\n              <td><select name=\"formfields[exp_linktest]\">\n                          <option value=0>Skip Linktest </option>\n";
        for ($i = 1; $i <= TBDB_LINKTEST_MAX; $i++) {
            $selected = "";
            if (strcmp($formfields["exp_linktest"], "{$i}") == 0) {
                $selected = "selected";
            }
            echo "        <option {$selected} value={$i}>Level {$i} - " . $linktest_levels[$i] . "</option>\n";
        }
        echo "       </select>";
        echo "    (<a href='{$WIKIDOCURL}/linktest'><b>What is this?</b></a>)";
        echo "    </td>\n              </tr>\n";
    }
    echo "<tr>\n              <td class='pad4' align=center colspan=2>\n                <b><input type=submit name=swapin value='Instantiate'></b>\n              </td>\n         </tr>\n        </form>\n        </table>\n";
}