X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetlab%2Fnodes%2Fnodes.php;h=951e98508ab3a32093fedc6095b6687357e8e72e;hb=ab7d755720166fb4ce7acaf629463dc7f0a00ffe;hp=064d1a5179f868bd9d635f3363c8f71a0c5dd1be;hpb=2c8627fcd8092a56bbe341f4a6712917d85110ff;p=plewww.git diff --git a/planetlab/nodes/nodes.php b/planetlab/nodes/nodes.php index 064d1a5..951e985 100644 --- a/planetlab/nodes/nodes.php +++ b/planetlab/nodes/nodes.php @@ -15,8 +15,13 @@ include 'plc_header.php'; // Common functions require_once 'plc_functions.php'; -require_once 'plc_minitabs.php'; -require_once 'plc_tables.php'; +require_once 'plc_peers.php'; +require_once 'plc_visibletags.php'; +require_once 'linetabs.php'; +require_once 'table.php'; +require_once 'nifty.php'; + +ini_set("memory_limit","64M"); // -------------------- // recognized URL arguments @@ -24,37 +29,45 @@ $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(); -$mysite_id=plc_my_site_id(); -$tabs['My nodes'] = array('url'=>l_nodes(), - 'values'=>array('site_id'=>plc_my_site_id()), - 'bubble'=>'Lists nodes on site ' . $mysite_id); +$tabs []= tab_nodes(); +if (count (plc_my_site_ids()) == 1) { + $tabs []= tab_nodes_mysite(); +} else { + $tabs []= tab_nodes_all_mysite(); +} +$tabs []= tab_nodes_local(); + // -------------------- -$peer_filter=array(); $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'); +$node_fixed_columns=array('hostname','node_type','site_id','node_id','boot_state','run_level', + 'interface_ids','peer_id', 'slice_ids'); +$visibletags = new VisibleTags ($api, 'node'); +$visiblecolumns = $visibletags->column_names(); +$node_columns=array_merge($node_fixed_columns,$visiblecolumns); + // server-side filtering - set pattern in $_GET for filtering on hostname if ($pattern) { $node_filter['hostname']=$pattern; @@ -64,16 +77,17 @@ if ($pattern) { } // server-side selection on peerscope -list ( $peer_filter, $peer_label) = plc_peer_info($api,$_GET['peerscope']); -$node_filter=array_merge($node_filter,$peer_filter); +$peerscope=new PeerScope($api,$_GET['peerscope']); +$node_filter=array_merge($node_filter,$peerscope->filter()); +$title .= ' - ' . $peerscope->label(); if ($site_id) { - $sites=$api->GetSites(array($site_id),array("name","login_base")); + $sites=$api->GetSites(array($site_id)); $site=$sites[0]; $name=$site['name']; $login_base=$site['login_base']; $title .= t_site($site); - $tabs = array_merge($tabs,tabs_site($site)); + $tabs []= tab_site($site); $node_filter['site_id']=array($site_id); } @@ -81,10 +95,27 @@ if ($slice_id) { $slices=$api->GetSlices(array($slice_id),array('node_ids','name')); $slice=$slices[0]; $title .= t_slice($slice); - $tabs = array_merge($tabs,tabs_slice($slice)); + $tabs []= tab_slice($slice); $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); @@ -102,9 +133,7 @@ $interface_filter=array('is_primary'=>TRUE,'interface_id'=>$interface_ids); $interfaces=$api->GetInterfaces($interface_filter,$interface_columns); $interface_hash=array(); -foreach ($interfaces as $interface) { - $interface_hash[$interface['node_id']]=$interface; -} +foreach ($interfaces as $interface) $interface_hash[$interface['node_id']]=$interface; // fetch related sites $site_columns=array('site_id','login_base'); @@ -112,70 +141,88 @@ $site_filter=array('site_id'=>$site_ids); $sites=$api->GetSites($site_filter,$site_columns); $site_hash=array(); -foreach ($sites as $site) { - $site_hash[$site['site_id']]=$site; -} +foreach ($sites as $site) $site_hash[$site['site_id']]=$site; // -------------------- drupal_set_title($title); -plc_tabs($tabs); +plekit_linetabs($tabs); if ( ! $nodes ) { drupal_set_message ('No node found'); return; } -$columns = array ("Peer"=>"string", - "Region"=>"string", - "Site"=>"string", - "State"=>"string", - "Hostname"=>"string", - "IP"=>"IPAddress", - "Type"=>"string", - "?"=>"string", - "Int"=>"int", - "Float"=>"float"); +$nifty=new PlekitNifty ('','objects-list','big'); +$nifty->start(); +$headers = array (); $offset=0; +$notes=array(); + +// fixed columns +if (plc_is_admin()) { + $short="I"; $long="node_id"; $type='int'; + $headers[$short]=array('type'=>$type,'title'=>$long); $notes []= "$short = $long"; + $offset=1; + } +$short="P"; $long="Peer"; $type='string'; + $headers[$short]=array('type'=>$type,'title'=>$long); $notes []= "$short = $long"; +$short="D"; $long="toplevel domain name"; $type='string'; + $headers[$short]=array('type'=>$type,'title'=>$long); $notes []= "$short = $long"; +$headers["Site"]="string"; +$headers["State"]="string"; + $notes []= "state* = node doesn't have an observed state, preferred state is displayed"; +$headers["Hostname"]="string"; +$headers["Type"]="string"; +$short="IP"; $long="IP Address"; $type='sortIPAddress'; + $headers[$short]=array('type'=>$type,'title'=>$long); $notes []= "$short = $long"; +$short="SL"; $long="Number of slivers"; $type='int'; + $headers[$short]=array('type'=>$type,'title'=>$long); $notes []= "$short = $long"; + +$headers=array_merge($headers,$visibletags->headers()); +$notes=array_merge($notes,$visibletags->notes()); +$headers["?"]="string"; $notes []= "? = extra status info"; # initial sort on hostnames -plc_table_start("nodes",$columns,4); +$table=new PlekitTable ("nodes",$headers,4+$offset); +$table->start(); -$peer_hash = plc_peer_get_hash ($api); +$peers = new Peers ($api); // write rows -$fake1=1; $fake2=3.14; $fake_i=0; foreach ($nodes as $node) { - $hostname=$node['hostname']; - $node_id=$node['node_id']; - $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']; - $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_row_end(); - - if ($fake_i % 5 == 0) $fake1 += 3; - if ($fake_i % 3 == 0) $fake2 +=5; else $fake2 -= $fake_i; - $fake_i += 1; + $hostname=$node['hostname']; + $node_id=$node['node_id']; + $site_id=$node['site_id']; + $site=$site_hash[$site_id]; + $login_base = $site['login_base']; + $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)); + 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 ($node_type); + $table->cell (l_interface_t($interface_id,$ip),array('only-if'=> !$peer_id)); + $table->cell (count($node['slice_ids'])); + foreach ($visiblecolumns as $tagname) $table->cell($node[$tagname]); + $table->cell (node_status($node)); + $table->row_end(); + } -plc_table_end(); +$table->end(array('notes'=>$notes)); +$nifty->end(); -plc_table_notes(); +//plekit_linetabs ($tabs,"bottom"); // Print footer include 'plc_footer.php';