reservations add/delete use ajax, no need to wait for the page to reload
[plewww.git] / planetlab / slices / slice.php
index 24f89a5..dd71375 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 
-// $Id$
-
 // Require login
 require_once 'plc_login.php';
 
@@ -159,7 +157,7 @@ EOF;
      } else {
       print <<< EOF
 <div class='my-slice-renewal'>
-<span class='bold'>Important:</span> Please take this opportunity to review and update your slice information in the Details tab, below.
+<span class='bold'>Important:</span> Please take this opportunity to review and update your slice information in the Details tab.
 <p>
 PlanetLab's security model requires that anyone who is concerned about a slice's activity be able to immediately learn about that slice. The details that you provide are your public explanation about why the slice behaves as it does. Be sure to describe the <span class='bold'>kind of traffic</span> that your slice generates, and how it handles material that is under <span class='bold'>copyright</span>, if relevant.
 </p><p>
@@ -429,13 +427,32 @@ $visibletags = new VisibleTags ($api, 'node');
 $visibletags->columns();
 $tag_columns = $visibletags->headers();
 
-// extra columns that are not tags (for the moment not sorted correctly)
-
+//columns that are not defined as extra myslice tags
 $extra_columns = array();
-$extra_columns[]=array('tagname'=>'sitename', 'header'=>'SN', 'type'=>'string', 'title'=>'Site name', 'fetched'=>true);
-$extra_columns[]=array('tagname'=>'domain', 'header'=>'DN', 'type'=>'string', 'title'=>'Toplevel domain name', 'fetched'=>true);
-$extra_columns[]=array('tagname'=>'ipaddress', 'header'=>'IP', 'type'=>'string', 'title'=>'IP Address', 'fetched'=>true);
-$extra_columns[]=array('tagname'=>'fcdistro', 'header'=>'OS', 'type'=>'string', 'title'=>'Operating system', 'fetched'=>false);
+//MyPLC columns
+$extra_columns[]=array('tagname'=>'sitename', 'header'=>'SN', 'type'=>'string', 'title'=>'Site name', 'fetched'=>true, 'source'=>'myplc');
+$extra_columns[]=array('tagname'=>'domain', 'header'=>'DN', 'type'=>'string', 'title'=>'Toplevel domain name', 'fetched'=>true, 'source'=>'myplc');
+$extra_columns[]=array('tagname'=>'ipaddress', 'header'=>'IP', 'type'=>'string', 'title'=>'IP Address', 'fetched'=>true, 'source'=>'myplc');
+$extra_columns[]=array('tagname'=>'fcdistro', 'header'=>'OS', 'type'=>'string', 'title'=>'Operating system', 'fetched'=>false, 'source'=>'myplc');
+$extra_columns[]=array('tagname'=>'date_created', 'header'=>'DA', 'source'=>'myplc', 'type'=>'date', 'title'=>'Date added', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'arch', 'header'=>'A', 'source'=>'myplc', 'type'=>'string', 'title'=>'Architecture', 'fetched'=>false);
+if (plc_is_admin()) {
+$extra_columns[]=array('tagname'=>'deployment', 'header'=>'DL', 'source'=>'myplc', 'type'=>'string', 'title'=>'Deployment', 'fetched'=>false);
+}
+
+//CoMon Live data
+$extra_columns[]=array('tagname'=>'bwlimit', 'header'=>'BW', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Bandwidth limit', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'numcores', 'header'=>'CC', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Number of CPU Cores', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'cpuspeed', 'header'=>'CR', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'CPU clock rate', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'disksize', 'header'=>'DS', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Disk size', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'gbfree', 'header'=>'DF', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Currently available disk space', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'memsize', 'header'=>'MS', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Memory size', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'numslices', 'header'=>'SM', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Number of slices in memory', 'fetched'=>false);
+$extra_columns[]=array('tagname'=>'uptime', 'header'=>'UT', 'source'=>'comon', 'type'=>'sortAlphaNumericTop', 'title'=>'Continuous uptime until now', 'fetched'=>false);
+
+//TopHat Live data
+//$extra_columns[]=array('tagname'=>'hopcount', 'header'=>'HC', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Hop count from reference node', 'fetched'=>false);
+
 
 //Get user's column configuration
 
@@ -515,6 +532,8 @@ $node_columns=array_merge($node_fixed_columns,$visiblecolumns);
 //print_r($node_columns);
 $all_nodes=$api->GetNodes(NULL,$node_columns);
 
+$ConfigureColumns->fetch_live_data($all_nodes);
+
 //print("<br>person show configuration = ".$show_configuration);
 
 $show_conf = explode(";",$show_configuration);
@@ -578,25 +597,41 @@ Your slivers will be available only during timeslots
 where you have obtained leases. 
 You can manage your leases in the tab below.
 <br>
-Please note that as of August 2010 this feature is experimental. 
-Feedback is appreciated at <a href="mailto:devel@planet-lab.org">devel@planet-lab.org</a>
+This feature is still experimental; feedback is appreciated at <a href="mailto:devel@planet-lab.org">devel@planet-lab.org</a>
 </td><td valign=top><span onClick=closeMessage('reservable')><img class='reset' src="/planetlab/icons/clear.png" alt="hide message"></span>
 </td></tr></table>
 </div>
 EOF;
 }  
 
+  // get settings from environment, otherwise set to defaults
+  // when to start, in hours in the future from now
+  $leases_offset=$_GET['leases_offset'];
+  if ( ! $leases_offset ) $leases_offset=0;
+  // how many timeslots to show
+  $leases_slots=$_GET['leases_slots'];
+  if ( ! $leases_slots ) $leases_slots = 36;
+  // offset in hours (in the future) from now 
+  $leases_w = $_GET['leases_w'];
+  if ( ! $leases_w) $leases_w=20;
+  // number of timeslots to display
+
   $grain=$api->GetLeaseGranularity();
+
+  // these elements are for passing data to the javascript layer
+  echo "<span class='hidden' id='leases_slicename'>" . $slice['name'] . "</span>";
+  echo "<span class='hidden' id='leases_sliceid'>" . $slice['slice_id']. "</span>";
+  echo "<span class='hidden' id='leases_grain'>" . $grain . "</span>";
+  echo "<span class='hidden' id='leases_offset'>" . $leases_offset . "</span>";
+  echo "<span class='hidden' id='leases_slots'>" . $leases_slots . "</span>";
+  echo "<span class='hidden' id='leases_w'>" . $leases_w . "</span>";
+
+  // cut off
   if ($profiling) plc_debug_prof('6 granul',$grain);
   // where to start from, expressed as an offset in hours from now
-  $resa_offset=$_GET['resa_offset'];
-  if ( ! $resa_offset ) $resa_offset=0;
-  $rough_start=time()+$resa_offset*3600;
-  // xxx should be configurable
-  $resa_slots=$_GET['resa_slots'];
-  if ( ! $resa_slots ) $resa_slots = 36;
-  // for now, show the next 72 hours, or 72 grains, which ever is smaller
-  $duration=$resa_slots*$grain;
+  $rough_start=time()+$leases_offset*3600;
+  // show the next 36 grains 
+  $duration=$leases_slots*$grain;
   $steps=$duration/$grain;
   $start=intval($rough_start/$grain)*$grain;
   $end=$rough_start+$duration;
@@ -615,11 +650,11 @@ EOF;
     $lease['nuntil']=($lease['t_until']-$start)/$grain;
     $host_hash[$hostname] []= $lease;
   }
-  # leases_data is the name used by leases.js to locate this table
-  echo "<table id='leases_data'>";
-  # pass (slice_id,slicename) as the [0,0] coordinate as thead>tr>td
-  echo "<thead><tr><td>" . $slice['slice_id'] . '&' . $slice['name'] . "</td>";
-  # the timeslot headers read (timestamp,label)
+  // leases_data is the name used by leases.js to locate this table
+  echo "<table id='leases_data' class='hidden'>";
+  // pass (slice_id,slicename,x_grain) in the upper-left cell, as thead>tr>td
+  echo "<thead><tr><td>" . $slice['slice_id'] . '&' . $slice['name'] . '&' . $leases_w . "</td>";
+  // the timeslot headers read (timestamp,label)
   $day_names=array('Su','M','Tu','W','Th','F','Sa');
   for ($i=0; $i<$steps; $i++) {
     $timestamp=($start+$i*$grain);
@@ -663,7 +698,7 @@ EOF;
 <div id='leases_area'></div>
 
 <div id='leases_buttons'>
-  <button id='leases_clear' type='submit'>Clear</button>
+  <button id='leases_refresh' type='submit'>Refresh</button>
   <button id='leases_submit' type='submit'>Submit</button>
 </div>
 EOF;
@@ -697,8 +732,8 @@ print("<input type='hidden' id='show_tag_id' value='".$show_tag_id."' />");
 print("<input type='hidden' id='show_configuration' value='".$show_configuration."' />");
 print("<input type='hidden' id='column_configuration' value='".$slice_column_configuration."' />");
 print("<br><input type='hidden' size=80 id='full_column_configuration' value='".$column_configuration."' />");
-print("<input type='hidden' id='previousConf' value='".$slice_column_configuration."'></input>");
-print("<input type='hidden' id='defaultConf' value='".$default_configuration."'></input>");
+print("<input type='hidden' id='previousConf' value='".$slice_column_configuration."' />");
+print("<input type='hidden' id='defaultConf' value='".$default_configuration."' />");
 
 //print ("showing column message = ".$show_columns_message);
 if ($show_columns_message == '0') 
@@ -709,7 +744,7 @@ $note_display = "";
   print <<<EOF
 <div id='note_columns_div' style="align:center; background-color:#CAE8EA; padding:4px; width:800px; $note_display">
 <table align=center><tr><td valign=top>
-This tab allows you to customize the columns in the node tables, below. Information on the nodes comes from a variety of monitoring sources. If you, as either a user or a provider of monitoring data, would like to see additional columns made available, please send us your request in mail to <a href="mailto:devel@planet-lab.org">devel@planet-lab.org</a>
+This tab allows you to customize the columns in the node tables, below. Information on the nodes comes from a variety of monitoring sources. If you, as either a user or a provider of monitoring data, would like to see additional columns made available, please send us your request in mail to <a href="mailto:support@myslice.info">support@myslice.info</a>. You can find more information about the MySlice project at <a href="http://trac.myslice.info">http://trac.myslice.info</a>.
 </td><td valign=top><span onClick=closeMessage('columns')><img class='reset' src="/planetlab/icons/clear.png" alt="hide message permanently"></span>
 </td></tr></table>
 </div>
@@ -797,8 +832,10 @@ $table->cell($node['node_id'], array('display'=>'none'));
 //extra columns
 $node['domain'] = topdomain($hostname);
 $node['sitename'] = l_site_t($node['site_id'],$site_hash[$node['site_id']]);
-$node['ipaddress'] = l_interface_t($interface_id,$ip);
-
+if ($interface_id)
+        $node['ipaddress'] = l_interface_t($interface_id,$ip);
+  else
+        $node['ipaddress'] = "n/a";
 
  //foreach ($visiblecolumns as $tagname) $table->cell($node[$tagname]);
  $ConfigureColumns->cells($table, $node);
@@ -933,15 +970,24 @@ $tag_value_threshold=24;
   $form->start();
   $table->start();
   if ($tags) {
+    // Get hostnames for nodes in a single pass
+    $_node_ids = array();
+    foreach ($tags as $tag) {
+      if ($tag['node_id']) {
+        array_push($_node_ids, $tag['node_id']);
+      }
+    }
+    $_nodes = $api->GetNodes(array('node_id' => $_node_ids), array('node_id', 'hostname'));
+    $_hostnames = array();
+    foreach ($_nodes as $_node) {
+      $_hostnames[$_node['node_id']] = $_node['hostname'];
+    }
+
+    // Loop through tags again to display
     foreach ($tags as $tag) {
       $node_name = "ALL";
       if ($tag['node_id']) {
-        $tag_nodes = $api->GetNodes(array('node_id'=>$tag['node_id']));
-       if ($profiling) plc_debug_prof('9 node for slice tag',count($tag_nodes));
-        if($tag_nodes) {
-          $node = $tag_nodes[0];
-          $node_name = $node['hostname'];
-        }
+        $node_name = $_hostnames[$tag['node_id']];
       }
       $nodegroup_name="n/a";
       if ($tag['nodegroup_id']) {