checkpoint
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Mon, 19 Jan 2009 12:38:44 +0000 (12:38 +0000)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Mon, 19 Jan 2009 12:38:44 +0000 (12:38 +0000)
18 files changed:
planetlab/includes/plc_functions.php
planetlab/includes/plc_minitabs.php
planetlab/includes/plc_session.php
planetlab/includes/plc_tables.php
planetlab/nodes/all_hosts.php [deleted file]
planetlab/nodes/all_ips.php [deleted file]
planetlab/nodes/alpha_hosts.php [deleted file]
planetlab/nodes/alpha_ips.php [deleted file]
planetlab/nodes/beta_hosts.php [deleted file]
planetlab/nodes/beta_ips.php [deleted file]
planetlab/nodes/etc_hosts.php [deleted file]
planetlab/nodes/node.php [new file with mode: 0644]
planetlab/nodes/nodes.php [moved from planetlab/nodes/newindex.php with 87% similarity]
planetlab/nodes/production_hosts.php [deleted file]
planetlab/nodes/production_ips.php [deleted file]
planetlab/tags/index.php [moved from planetlab/slices/tags.php with 100% similarity]
planetlab/tags/nodegroups.php [moved from planetlab/nodes/node_groups.php with 100% similarity]
planetlab/tags/tag_action.php [moved from planetlab/slices/tag_action.php with 100% similarity]

index a0f3e59..2dde891 100644 (file)
@@ -86,7 +86,60 @@ function is_reserved_network_addr($network_addr) {
   return false;
 }
 
-////////////////////////////////////////////////////////////  peerscopes
+//////////////////////////////////////////////////////////// roles & other checks on global $plc
+function plc_is_admin () {
+  global $plc;
+  return in_array( 10, $plc->person['role_ids']);
+}
+function plc_is_pi () {
+  global $plc;
+  return in_array( 20, $plc->person['role_ids']);
+}
+function plc_is_tech () {
+  global $plc;
+  return in_array( 40, $plc->person['role_ids']);
+}
+function plc_in_site ($site_id) {
+  global $plc;
+  return in_array( $site_id, $plc->person['site_ids']);
+}
+
+////////////////////////////////////////////////////////////  peer & peerscopes
+// when shortnames are needed on peers
+function plc_peer_get_hash ($api) {
+  $peer_columns=array('peer_id','shortname');
+  $peer_filter=array();
+  $peers = $api->GetPeers($peer_filter,$peer_columns);
+  
+  $peer_hash=array();
+  foreach ($peers as $peer) {
+    $peer_hash[$peer['peer_id']]=$peer;
+  }
+}
+
+function plc_peer_shortname ($peer_hash,$peer_id) {
+  if ( ! $peer_id ) {
+    return PLC_SHORTNAME;
+  } else {
+     return $peer_hash[$node['peer_id']]['shortname'];
+  }
+}
+
+// to set the background to grey on foreign objects
+function plc_peer_block_start ($peer_hash,$peer_id) {
+  if ( ! $peer_id ) {
+    print "<div>";
+  } else {
+    // set two classes, one eneraic to all foreign, and one based on the peer's shortname for finer grain tuning
+    printf ('<div class="plc-foreign plc-%s>"',strtolower(plc_peer_shortname($peer_hash,$peer_id)));
+  }
+}
+
+function plc_peer_block_end () {
+  print "</div>\n";
+}
+
+//// standard peerscope syntax
 function plc_peer_info ($api,$peerscope) {
   switch ($_GET['peerscope']) {
   case '':
@@ -119,26 +172,32 @@ function l_node_u ($node_id) { return "/db/nodes/node.php?id=" . $node_id; }
 function l_node ($node_id) { return href (l_node_u($node_id),$node_id); }
 function l_node2 ($node_id,$text) { return href (l_node_u($node_id),$text); }
 
+function l_interface_u ($interface_id) { return "/db/nodes/interfaces.php?id=" . $interface_id; }
+function l_interface_add_u($node_id) { return "/db/nodes/interfaces.php?node_id=" . $node_id; }
+function l_interface ($interface_id) { return href (l_interface_u($interface_id),$interface_id); }
+function l_interface2 ($interface_id,$text) { return href (l_interface_u($interface_id),$text); }
+
+function l_nodegroup_u ($nodegroup_id) { return "/db/nodes/node_groups.php?id=" . $nodegroup_id; }
+function l_nodegroup2 ($nodegroup_id,$text) { return href(l_nodegroup_u($nodegroup_id),$text); }
+
 function l_sites () { return "/db/sites/index.php"; }
 function l_site_u ($site_id) { return "/db/persons/index.php?id=" . $site_id; }
 function l_site ($site_id) { return href (l_site_u($site_id),$site_id); }
 function l_site2 ($site_id,$text) { return href (l_site_u($site_id),$text); }
 
 function l_slices () { return "/db/slices/index.php"; }
-function l_slice_u ($slice_id) { return "/db/persons/index.php?id=" . $slice_id; }
+function l_slice_u ($slice_id) { return "/db/slices/index.php?id=" . $slice_id; }
 function l_slice ($slice_id) { return href (l_slice_u($slice_id),$slice_id); }
 function l_slice2 ($slice_id,$text) { return href (l_slice_u($slice_id),$text); }
 
+function l_sliver_u ($node_id,$slice_id) { return "/db/nodes/slivers.php?node_id=" . $node_id. "&slice_id=" . $slice_id; }
+function l_sliver3 ($node_id,$slice_id,$text) { return href (l_sliver_u($node_id,$slice_id),$text) ; }
+
 function l_persons () { return "/db/persons/index.php"; }
 function l_person_u ($person_id) { return "/db/persons/index.php?id=" . $person_id; }
 function l_person ($person_id) { return href (l_person_u($person_id),$person_id); }
 function l_person2 ($person_id,$text) { return href (l_person_u($person_id),$text); }
 
-function l_interfaces () { return "/db/interfaces/index.php"; }
-function l_interface_u ($interface_id) { return "/db/interfaces/index.php?id=" . $interface_id; }
-function l_interface ($interface_id) { return href (l_interface_u($interface_id),$interface_id); }
-function l_interface2 ($interface_id,$text) { return href (l_interface_u($interface_id),$text); }
-
 function l_event ($type,$param,$id) { return '/db/events/index.php?type=' . $type . '&' . $param . '=' . $id; }
 function l_comon($id_name,$id_value) { return '/db/nodes/comon.php?' . $id_name . "=" . $id_value; }
 
index 2df465f..00cb870 100644 (file)
@@ -10,8 +10,10 @@ drupal_set_html_head('
 function plc_tabs($array) {
   print '<div id="minitabs_container">';
   print '<ul id="miniflex">';
+  print "\n";
   foreach ($array as $name=>$url) {
-    print "<li class='minitabs'><a href=\"" . $url . "\"title=\"\">" . $name . "</a></li>\n";
+    printf ('<li class="minitabs"><a href="%s" title="">%s</a></li>',$url,$name);
+    print "\n";
   }
   print '</ul>';
   print '</div>';
index afd008b..c0f9656 100644 (file)
@@ -8,7 +8,6 @@
 // To use, include this file and declare the global variable
 // $plc. This object contains the following members:
 //
-// admin: Admin API handle. Use cautiously.
 // person: If logged in, the user's GetPersons() details
 // api: If logged in, the user's API handle
 //
index 7bdcf51..7deb794 100644 (file)
@@ -126,6 +126,21 @@ Hold down the shift key to select multiple columns to sort
 EOF;
 }
 
+////////////////////////////////////////
+function plc_table_title ($text) {
+  print "<h2> $text </h2>\n";
+}
+
+function plc_table_row_start ($id="") {
+  if ( $id) {
+    printf ('<tr id="%s">',$id);
+  } else {
+    print '<tr>';
+  }
+}
+function plc_table_row_end () {
+  print "</tr>\n";
+}
 
 ?>
 
diff --git a/planetlab/nodes/all_hosts.php b/planetlab/nodes/all_hosts.php
deleted file mode 100644 (file)
index a838f14..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php 
-header("Content-type: text/plain");
-$which_node_list= "all_hosts";
-include('_gen_node_lists.php');
-?>
diff --git a/planetlab/nodes/all_ips.php b/planetlab/nodes/all_ips.php
deleted file mode 100644 (file)
index eeb5d7d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php 
-header("Content-type: text/plain");
-$which_node_list= "all_ips";
-@include('_gen_node_lists.php');
-?>
diff --git a/planetlab/nodes/alpha_hosts.php b/planetlab/nodes/alpha_hosts.php
deleted file mode 100644 (file)
index ee0f2eb..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php 
-header("Content-type: text/plain");
-$which_node_list= "alpha_hosts";
-include('_gen_node_lists.php');
-?>
diff --git a/planetlab/nodes/alpha_ips.php b/planetlab/nodes/alpha_ips.php
deleted file mode 100644 (file)
index c8e5b7f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php 
-header("Content-type: text/plain");
-$which_node_list= "alpha_ips";
-include('_gen_node_lists.php');
-?>
diff --git a/planetlab/nodes/beta_hosts.php b/planetlab/nodes/beta_hosts.php
deleted file mode 100644 (file)
index 6637731..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php 
-header("Content-type: text/plain");
-$which_node_list= "beta_hosts";
-include('_gen_node_lists.php');
-?>
diff --git a/planetlab/nodes/beta_ips.php b/planetlab/nodes/beta_ips.php
deleted file mode 100644 (file)
index 081ce1a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php 
-header("Content-type: text/plain");
-$which_node_list= "beta_ips";
-include('_gen_node_lists.php');
-?>
diff --git a/planetlab/nodes/etc_hosts.php b/planetlab/nodes/etc_hosts.php
deleted file mode 100644 (file)
index c3ee907..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php 
-header("Content-type: text/plain");
-$which_node_list= "etc_hosts";
-include('_gen_node_lists.php');
-?>
diff --git a/planetlab/nodes/node.php b/planetlab/nodes/node.php
new file mode 100644 (file)
index 0000000..78b3059
--- /dev/null
@@ -0,0 +1,324 @@
+<?php
+
+// $Id: index.php 11577 2009-01-16 06:29:51Z thierry $
+
+// Require login
+require_once 'plc_login.php';
+
+// Get session and API handles
+require_once 'plc_session.php';
+global $plc, $api;
+
+// Print header
+require_once 'plc_drupal.php';
+include 'plc_header.php';
+
+// Common functions
+require_once 'plc_functions.php';
+require_once 'plc_minitabs.php';
+require_once 'plc_tables.php';
+
+// tmp 
+//require_once 'plc_sorts.php';
+// find person roles
+$_person= $plc->person;
+$_roles= $_person['role_ids'];
+
+// -------------------- 
+// recognized URL arguments
+$node_id=intval($_GET['id']);
+if ( ! $node_id ) { plc_error('Malformed URL - id not set'); return; }
+
+////////////////////
+// Get all columns as we focus on only one entry
+$nodes= $api->GetNodes( array($node_id));
+
+if (empty($nodes)) {
+  drupal_set_message ("Node " . $node_id . " not found");
+ } else {
+  $node=$nodes[0];
+    // node info
+  $hostname= $node['hostname'];
+  $boot_state= $node['boot_state'];
+  $site_id= $node['site_id'];
+  $model= $node['model'];
+  $version= $node['version'];
+  $node_type = $node['node_type'];
+
+  // arrays of ids of node info
+  $slice_ids= $node['slice_ids'];
+  $conf_file_ids= $node['conf_file_ids'];
+  $interface_ids= $node['interface_ids'];
+  $nodegroup_ids= $node['nodegroup_ids'];
+  $pcu_ids= $node['pcu_ids'];
+
+  // get peer
+  $peer_id= $node['peer_id'];
+
+  // gets site info
+  $sites= $api->GetSites( array( $site_id ) );
+  $site=$sites[0];
+  $site_name= $site['name'];
+  $site_node_ids= $site['node_ids'];
+
+  $site_node_hash=array();
+  if( !empty( $site_node_ids ) ) {
+    // get site node info basics
+    $site_nodes= $api->GetNodes( $site_node_ids );
+    
+    foreach( $site_nodes as $site_node ) {
+      $site_node_hash[$site_node['node_id']]= $site_node['hostname'];
+    }
+  }
+  
+  // gets slice info for each slice
+  if( !empty( $slice_ids ) )
+    $slices= $api->GetSlices( $slice_ids, array( "slice_id", "name" , "peer_id" ) );
+
+  // gets conf file info
+  if( !empty( $conf_file_ids ) )
+    $conf_files= $api->GetConfFiles( $conf_file_ids );
+
+  // get interface info
+  if( !empty( $interface_ids ) )
+    $interfaces= $api->GetInterfaces( $interface_ids );
+
+  // gets nodegroup info
+  if( !empty( $nodegroup_ids ) )
+    $nodegroups= $api->GetNodeGroups( $nodegroup_ids, array("groupname","tag_type_id","value"));
+
+  // xxx Thierry : disabling call to GetEvents, that gets the session deleted in the DB
+  // needs being reworked
+
+  // gets pcu and port info key to both is $pcu_id
+  if( !empty( $pcu_ids ) )
+    $PCUs= $api->GetPCUs( $pcu_ids );
+
+
+  // display node info
+  plc_peer_block_start ($peer_hash,$peer_id);
+  
+  drupal_set_title("Details for node " . $hostname);
+  
+  // extra privileges to admins, and (pi||tech) on this site
+  $extra_privileges = plc_is_admin () || ( plc_in_site($site_id) && ( plc_is_pi() || plc_is_tech()));
+  
+  $tabs=array();
+  // available actions
+  if ( ! $peer_id  && $extra_privileges ) {
+    
+    $tabs["All nodes"]=l_nodes();
+    // xxx subject to roles
+    $tabs["Add Interface"]=l_interface_add_u($node_id);
+    $tabs["Comon"]=l_comon("node_id",$node_id);
+    if ($extra_privileges) {
+      $tabs["Events"]=l_event("Node","node",$node_id);
+    }
+    plc_tabs($tabs);
+
+    // the javascript callback we set on the form; this
+    // (*) checks whether we clicked on 'delete'
+    // (*) in this case performs a javascript 'confirm'
+    // (*) then, notice that if we select delete, then cancel, we can select back 'Choose action' 
+    //     so submit only when value is not empty
+    $change='if (document.actions.action.value=="delete") if (! confirm("Are you sure you want to delete ' . $hostname . ' ? ") ) return false; if (document.actions.action.value!="") submit();';
+    
+    echo "<table><tr><td>";
+    echo "</td><td>";
+    echo "<form name='actions' action='/db/nodes/node_actions.php' method='post'>\n";
+    echo "<input type=hidden name='node_id' value='$node_id'></input>\n";
+    echo "<select name='action' onChange='$change'>\n";
+    echo "<option value='' selected='selected'> Choose Action </option>\n";
+    echo "<option value='prompt-update'> Update $hostname </option>\n";
+    echo "<option value='delete'> Delete $hostname </option>\n";
+    echo "</select></form>\n";
+    
+    echo "</td></tr></table>";
+  }    
+  
+  echo "<hr />";
+  echo "<table><tbody>\n";
+  
+  echo "<tr><th>Hostname: </th><td> $hostname </td></tr>\n";
+  echo "<tr><th>Type: </th><td> $node_type</td></tr>\n";
+  echo "<tr><th>Model: </th><td> $model</td></tr>\n";
+  echo "<tr><th>Version: </th><td> $version</td></tr>\n";
+    
+  echo "<tr><th>Boot State: </th><td>";
+  if ($peer_id) {
+    echo $boot_state;
+  } else {
+    echo "<form name='bootstate' action='/db/nodes/node_actions.php' method=post>\n";
+    echo "<input type=hidden name='node_id' value='$node_id'>\n";
+    echo "<input type=hidden name='action' value='boot-state'>\n";
+    echo "<select name='boot_state' onChange=\"submit();\">\n";
+
+    $states= array( 'boot'=>'Boot', 'dbg'=>'Debug', 'inst'=>'Install', 'rins'=>'Reinstall', 'rcnf'=>'Reconfigure', 'new'=>'New' );
+
+    foreach( $states as $key => $val ) {
+      echo "<option value='$key'";
+      
+      if( $key == $boot_state )
+       echo " selected";
+      
+      echo ">$val</option>\n";
+      
+    }
+  
+    echo "</select></input></form>";
+  }
+  echo "</td></tr>\n";
+
+  if ( ! $peer_id  && $extra_privileges) {
+
+    echo "<tr><th>Download </th><td>";
+    echo "<form name='download' action='/db/nodes/node_actions.php' method='post'>\n";
+    echo "<input type=hidden name='node_id' value='$node_id'></input>\n";
+    echo "<select name='action' onChange='submit();'>\n";
+    echo "<option value='' selected='selected'> Download Mode </option>\n";
+    echo "<option value='' disabled='disabled'> -- All in one images -- </option>"; 
+    echo "<option value='download-node-iso' $new_api_only> Download ISO image for $hostname</option>\n";
+    echo "<option value='download-node-usb' $new_api_only> Download USB image for $hostname</option>\n";
+    echo "<option value='' disabled='disabled'> -- Floppy + generic image -- </option>"; 
+    echo "<option value='download-node-floppy'> Download Floppy file for $hostname</option>\n";
+    echo "<option value='download-generic-iso' $new_api_only> Download generic ISO image (requires floppy) </option>\n";
+    echo "<option value='download-generic-usb' $new_api_only> Download generic USB image (requires floppy) </option>\n";
+    echo "</select></form>";
+    echo "</td></tr>\n";
+
+  }
+
+  // site info and all site nodes
+  echo "<tr><td colspan=2>&nbsp;</td></tr>\n";
+  echo "<tr><th>Site: </th><td> <a href='/db/sites/index.php?id=$site_id'>$site_name</a></td></tr>\n";
+  echo "<tr><th>All site nodes: </th><td>";
+  if (empty($site_node_hash)) {
+    echo "<span class='plc-warning'>Site has no node</span>";
+  } else {
+    foreach( $site_node_hash as $key => $val ) {
+      echo "<a href=index.php?id=$key>$val</a><br />";
+    }
+  }
+  echo "</td></tr>\n";
+
+  echo "</tbody></table><br />\n";
+    
+  //////////////////////////////////////////////////////////// interfaces
+  if ( ! $peer_id ) {
+
+    // display interfaces
+    if( ! $interfaces ) {
+      echo "<p><span class='plc-warning'>No interface</span>.  Please add an interface to make this a usable PLC node</p>.\n";
+    } else {
+      $columns=array();
+      if ( $extra_privileges ) {
+       // a single symbol, marking 'p' for primary and a delete button for non-primary
+       $columns[' ']='string';
+      }
+        
+      $columns["IP"]="IPAddress";
+      $columns["Method"]="string";
+      $columns["Type"]="string";
+      $columns["MAC"]="string";
+      $columns["bw limit"]="FileSize";
+
+      print "<hr/>\n";
+      plc_table_title('Interfaces');
+      plc_table_start("interfaces",$columns,2,false);
+       
+      foreach ( $interfaces as $interface ) {
+       $interface_id= $interface['interface_id'];
+       $interface_ip= $interface['ip'];
+       $interface_broad= $interface['broadcast'];
+       $interface_primary= $interface['is_primary'];
+       $interface_network= $interface['network'];
+       $interface_dns1= $interface['dns1'];
+       $interface_dns2= $interface['dns2'];
+       $interface_hostname= $interface['hostname'];
+       $interface_netmaks= $interface['netmask'];
+       $interface_gatewary= $interface['gateway'];
+       $interface_mac= $interface['mac'];
+       $interface_bwlimit= $interface['bwlimit'];
+       $interface_type= $interface['type'];
+       $interface_method= $interface['method'];
+
+       plc_table_row_start($interface['ip']);
+       if ( $extra_privileges ) {
+         if (!$interface_primary) {
+           // xxx 
+           plc_table_cell (plc_delete_link_button ('interfaces.php?id=' . $interface_id . '&delete=1&submitted=1', 
+                                                   '\\nInterface ' . $interface_ip));
+         } else {
+           plc_table_cell('p');
+         }
+       }
+       plc_table_cell(l_interface2($interface_id,$interface_ip));
+       plc_table_cell($interface_method);
+       plc_table_cell($interface_type);
+       plc_table_cell($interface_mac);
+       plc_table_cell($interface_bwlimit);
+       plc_table_row_end();
+      }
+      plc_table_end();
+    }
+      
+  }
+
+  //////////////////////////////////////////////////////////// slices
+  // display slices
+  $peer_hash = plc_peer_get_hash ($api);
+
+  print "<hr/>\n";
+  plc_table_title ("Slices");
+  if ( ! $slices  ) {
+    echo "<p><span class='plc-warning'>This node is not associated to any slice.</span></p>\n";
+  } else {
+    $columns=array();
+    $columns['Peer']="string";
+    $columns['Name']="string";
+    $columns['Slivers']="string";
+    plc_table_start ("slivers",$columns,1);
+
+    foreach ($slices as $slice) {
+      plc_table_row_start($slice['name']);
+      plc_table_cell (plc_peer_shortname($peer_hash,$slice['peer_id']));
+      plc_table_cell (l_slice2 ($slice['slice_id'],$slice['name']));
+      plc_table_cell (l_sliver3 ($node_id,$slice['slice_id'],'view'));
+      plc_table_row_end();
+    }
+    plc_table_end();
+  }
+
+  //////////////////////////////////////////////////////////// nodegroups
+  // display node group info
+  if ( ! $nodegroups ) {
+    echo "<p><span class='plc-warning'>This node is not in any nodegroup.</span></p>\n";
+  } else {
+    $columns=array();
+    $columns['Name']="string";
+    $columns['Tag']="string";
+    $columns['Value']="string";
+      
+    print "<hr/>\n";
+    plc_table_title("Nodegroups");
+    plc_table_start("nodegroups",$columns,0,false);
+
+    foreach( $nodegroups as $nodegroup ) {
+      plc_table_row_start();
+      plc_table_cell(l_nodegroup2($nodegroup_id,$nodegroup['groupname']));
+      $tag_types=$api->GetTagTypes(array($nodegroup['tag_type_id']));
+      plc_table_cell($tag_types[0]['tagname']);
+      plc_table_cell($nodegroup['value']);
+      plc_table_row_end();
+    }
+    plc_table_end();
+  }    
+
+  ////////////////////////////////////////////////////////////
+  plc_peer_block_end();
+}
+
+// Print footer
+include 'plc_footer.php';
+
+?>
similarity index 87%
rename from planetlab/nodes/newindex.php
rename to planetlab/nodes/nodes.php
index ddbdda9..8e13d37 100644 (file)
@@ -38,7 +38,6 @@ $tabs=array("Old page"=>l_nodes(),
 $peer_filter=array();
 $node_filter=array();
 
-
 //////////////////
 // performs sanity check and summarize the result in a single column
 function node_status ($node) {
@@ -57,7 +56,7 @@ function node_status ($node) {
 
 
 // fetch nodes - set pattern in the url for server-side filtering
-$node_columns=array('hostname','site_id','node_id','boot_state','interface_ids','peer_id');
+$node_columns=array('hostname','node_type','site_id','node_id','boot_state','interface_ids','peer_id');
 if ($pattern) {
   $node_filter['hostname']=$pattern;
   $title .= " matching " . $pattern;
@@ -118,16 +117,6 @@ foreach ($sites as $site) {
     $site_hash[$site['site_id']]=$site;
 }
 
-// fetch peers
-$peer_columns=array('peer_id','shortname');
-$peer_filter=array();
-$peers = $api->GetPeers($peer_filter,$peer_columns);
-
-$peer_hash=array();
-foreach ($peers as $peer) {
-    $peer_hash[$peer['peer_id']]=$peer;
-}
-
 // --------------------
 drupal_set_title($title);
 
@@ -144,13 +133,15 @@ $columns = array ("Peer"=>"string",
                  "State"=>"string",
                  "Hostname"=>"string",
                  "IP"=>"IPAddress",
-                 "Load"=>"int",
-                 "Avg Load"=>"float",
-                 "Status"=>"string");
+                 "Type"=>"string",
+                 "?"=>"string",
+                 "Int"=>"int",
+                 "Float"=>"float");
 
 # initial sort on hostnames
 plc_table_start("nodes",$columns,4);
 
+$peer_hash = plc_peer_get_hash ($api);
 // write rows
 $fake1=1; $fake2=3.14; $fake_i=0;
 foreach ($nodes as $node) {
@@ -162,24 +153,21 @@ foreach ($nodes as $node) {
     $node_id=$node['node_id'];
     $ip=$interface_hash[$node['node_id']]['ip'];
     $interface_id=$interface_hash[$node['node_id']]['interface_id'];
-    if ( ! $node['peer_id'] ) {
-      $shortname=PLC_SHORTNAME;
-    } else {
-      $shortname=$peer_hash[$node['peer_id']]['shortname'];
-    }
-    printf ('<tr id="%s">',$hostname);
+    $shortname = plc_peer_shortname ($peer_hash,$node['peer_id']);
+    $node_type = $node['node_type'];
 
+    plc_table_row_start($hostname);
     plc_table_cell ($shortname);
     plc_table_cell (topdomain($hostname));
     plc_table_cell (l_site2($site_id,$login_base));
     plc_table_cell ($node['boot_state']);
     plc_table_cell (l_node2($node_id,$hostname));
     plc_table_cell (l_interface2($interface_id,$ip));
+    plc_table_cell ($node_type);
+    plc_table_cell (node_status($node));
     plc_table_cell ($fake1);
     plc_table_cell ($fake2);
-    plc_table_cell (node_status($node));
-
-    printf ( '</tr>');
+    plc_table_row_end();
                                 
     if ($fake_i % 5 == 0) $fake1 += 3; 
     if ($fake_i % 3 == 0) $fake2 +=5; else $fake2 -= $fake_i;
diff --git a/planetlab/nodes/production_hosts.php b/planetlab/nodes/production_hosts.php
deleted file mode 100644 (file)
index e384416..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php 
-header("Content-type: text/plain");
-$which_node_list= "production_hosts";
-include('_gen_node_lists.php');
-?>
diff --git a/planetlab/nodes/production_ips.php b/planetlab/nodes/production_ips.php
deleted file mode 100644 (file)
index e5ee49e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php 
-header("Content-type: text/plain");
-$which_node_list= "production_ips";
-include('_gen_node_lists.php');
-?>