X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetlab%2Fnodes%2Fnodes.php;h=ebe80797571a5ff6585fc0ccddf0de52a9dfde86;hb=2b7b30c9a62caef1af45e1ff11a88a72fac4adef;hp=43b994f9a7234d877e1070e91aa8528d4bb41ca9;hpb=232e3e3ce1e8f07de912ba0d5302b03bfe71f283;p=plewww.git diff --git a/planetlab/nodes/nodes.php b/planetlab/nodes/nodes.php index 43b994f..ebe8079 100644 --- a/planetlab/nodes/nodes.php +++ b/planetlab/nodes/nodes.php @@ -20,7 +20,7 @@ require_once 'linetabs.php'; require_once 'table.php'; require_once 'nifty.php'; -ini_set("memory_limit","48M"); +ini_set("memory_limit","64M"); // -------------------- // recognized URL arguments @@ -28,11 +28,17 @@ $peerscope=$_GET['peerscope']; $pattern=$_GET['pattern']; $site_id=intval($_GET['site_id']); $slice_id=intval($_GET['slice_id']); +$person_id=intval($_GET['person_id']); // --- decoration $title="Nodes"; $tabs=array(); -$tabs []= tab_nodes_mysite(); +$tabs []= tab_nodes(); +if (count (plc_my_site_ids()) == 1) { + $tabs []= tab_nodes_mysite(); +} else { + $tabs []= tab_nodes_all_mysite(); +} $tabs []= tab_nodes_local(); // -------------------- @@ -42,21 +48,20 @@ $node_filter=array(); // performs sanity check and summarize the result in a single column function node_status ($node) { - $messages=array(); - // do all this stuff on local nodes only - if ( ! $node['peer_id'] ) { - // check that the node has keys - if (count($node['interface_ids']) == 0) { - $messages [] = "No interface"; - } + if ( $node['peer_id'] ) + return "n/a"; + + $messages=array(); + // check that the node has interfaces + if (count($node['interface_ids']) == 0) { + $messages [] = "No interface"; } return plc_vertical_table($messages,'plc-warning'); } - // fetch nodes -$node_columns=array('hostname','node_type','site_id','node_id','boot_state','interface_ids','peer_id', 'arch','slice_ids'); +$node_columns=array('hostname','node_type','site_id','node_id','boot_state','run_level','interface_ids','peer_id', 'arch','slice_ids'); // server-side filtering - set pattern in $_GET for filtering on hostname if ($pattern) { $node_filter['hostname']=$pattern; @@ -88,6 +93,23 @@ if ($slice_id) { $node_filter['node_id'] = $slice['node_ids']; } +// person_id is set : this is mostly oriented towards people managing several sites +if ($person_id) { + // avoid doing a useless call to GetPersons if the person_id is already known though $plc, + // as this is mostly done for the 'all my sites nodes' link + if ($person_id == plc_my_person_id()) { + $person=plc_my_person(); + $site_ids = plc_my_site_ids(); + } else { + // fetch the person's site_ids + $persons = $api->GetPersons(array('person_id'=>$person_id),array('person_id','email','site_ids')); + $person=$persons[0]; + $site_ids=$person['site_ids']; + } + $title .= t_person($person); + $node_filter['site_id']=$site_ids; + } + // go $nodes=$api->GetNodes($node_filter,$node_columns); @@ -127,20 +149,21 @@ if ( ! $nodes ) { $nifty=new PlekitNifty ('','objects-list','big'); $nifty->start(); -$headers = array ("P"=>"string", - "Region"=>"string", - "Site"=>"string", - "State"=>"string", - "Hostname"=>"string", - "IP"=>"IPAddress", - "Type"=>"string", - "Arch"=>"string", - "S"=>'int', - "?"=>"string", - ); +$headers = array (); $offset=0; +if (plc_is_admin()) { $headers["I"]="int"; $offset=1; } +$headers["P"]="string"; +$headers["R"]="string"; +$headers["Site"]="string"; +$headers["State"]="string"; +$headers["Hostname"]="string"; +$headers["Type"]="string"; +$headers["IP"]="sortIPAddress"; +$headers["A"]="string"; +$headers["S"]='int'; +$headers["?"]="string"; # initial sort on hostnames -$table=new PlekitTable ("nodes",$headers,4); +$table=new PlekitTable ("nodes",$headers,4+$offset); $table->start(); $peers = new Peers ($api); @@ -151,28 +174,38 @@ foreach ($nodes as $node) { $site_id=$node['site_id']; $site=$site_hash[$site_id]; $login_base = $site['login_base']; - $node_id=$node['node_id']; $ip=$interface_hash[$node['node_id']]['ip']; $interface_id=$interface_hash[$node['node_id']]['interface_id']; $peer_id=$node['peer_id']; $node_type = $node['node_type']; $table->row_start(); + if (plc_is_admin()) $table->cell(l_node_t($node_id,$node_id)); $peers->cell ($table,$peer_id); $table->cell (topdomain($hostname)); $table->cell (l_site_t($site_id,$login_base)); - $table->cell ($node['boot_state']); + if ($node['run_level']) { + $table->cell($node['run_level']); + } else { + $table->cell ($node['boot_state'] . '*'); + } $table->cell (l_node_t($node_id,$hostname)); - $table->cell (l_interface_t($interface_id,$ip)); $table->cell ($node_type); - $table->cell ($node['arch']); + $table->cell (l_interface_t($interface_id,$ip),array('only-if'=> !$peer_id)); + $table->cell ($node['arch'],array('only-if'=> !$peer_id)); $table->cell (count($node['slice_ids'])); $table->cell (node_status($node)); $table->row_end(); } -$notes=array("S = number of slivers"); +$notes=array(); +if (plc_is_admin()) $notes []= "I = node_id"; +$notes []= "R = region"; +$notes []= "A = arch"; +$notes []= "S = number of slivers"; +$notes []= "? = status"; +$notes []= "status* = node doesn't have an observed state, preferred state is displayed"; $table->end(array('notes'=>$notes)); $nifty->end();