From: Thierry Parmentelat Date: Fri, 3 Sep 2010 14:02:58 +0000 (+0200) Subject: optimized api calls - enable profiling with $_GET[profiling] - abbreviates tag values... X-Git-Tag: plewww-4.3-49~2 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=e1d9d4cacba4aa044d9c7d6f53407e8e43964c74;p=plewww.git optimized api calls - enable profiling with $_GET[profiling] - abbreviates tag values over a threshold --- diff --git a/planetlab/slices/slice.php b/planetlab/slices/slice.php index c28eeac..74220e1 100644 --- a/planetlab/slices/slice.php +++ b/planetlab/slices/slice.php @@ -34,6 +34,11 @@ drupal_set_html_head(' // -------------------- admins potentially need to get full list of users ini_set('memory_limit','32M'); +$profiling=false; +if ($_GET['profiling']) $profiling=true; + +if ($profiling) plc_debug_prof_start(); + // -------------------- // recognized URL arguments $slice_id=intval($_GET['id']); @@ -52,6 +57,7 @@ if (empty($slices)) { $slice=$slices[0]; +if ($profiling) plc_debug_prof('2: slice',count($slices)); // pull all node info to vars $name= $slice['name']; $expires = date( "d/m/Y", $slice['expires'] ); @@ -64,12 +70,15 @@ $peer_id= $slice['peer_id']; $peers=new Peers ($api); $local_peer = ! $peer_id; +if ($profiling) plc_debug_prof('3: peers',count($peers)); + // gets site info $sites= $api->GetSites( array( $site_id ) ); $site=$sites[0]; $site_name= $site['name']; $max_slices = $site['max_slices']; +if ($profiling) plc_debug_prof('4: sites',count($sites)); //////////////////////////////////////// building blocks for the renew area // Constants global $DAY; $DAY = 24*60*60; @@ -193,7 +202,7 @@ $tags_privileges = $privileges || plc_is_admin(); $tabs=array(); $tabs [] = tab_nodes_slice($slice_id); -$tabs [] = tab_site($site_id); +$tabs [] = tab_site($site); // are these the right privileges for deletion ? if ($privileges) { @@ -284,6 +293,7 @@ $potential_persons= $person_columns); $count=count($persons); +if ($profiling) plc_debug_prof('4: persons',count($persons)); $toggle= new PlekitToggle ('my-slice-persons',"$count Users", array('bubble'=> @@ -401,18 +411,26 @@ $node_fixed_columns = array('hostname','node_id','peer_id','slice_ids_whitelist' $visibletags = new VisibleTags ($api, 'node'); $visiblecolumns = $visibletags->column_names(); $node_columns=array_merge($node_fixed_columns,$visiblecolumns); -$nodes=$api->GetNodes(array('node_id'=>$slice['node_ids']),$node_columns); -$potential_nodes=$api->GetNodes(array('~node_id'=>$slice['node_ids']),$node_columns); -// reservable nodes: display only the ones in the slice to avoid confusion - also avoid an extra API call -$reservable_nodes=array(); -foreach ($nodes as $node) { if ($node['node_type']=='reservable') $reservable_nodes[]=$node; } - -$reservable_mark="-R-"; -$reservable_legend="reservable nodes are marked with " . $reservable_mark; +// optimizing calls to GetNodes +$all_nodes=$api->GetNodes(NULL,$node_columns); +//$slice_nodes=$api->GetNodes(array('node_id'=>$slice['node_ids']),$node_columns); +//$potential_nodes=$api->GetNodes(array('~node_id'=>$slice['node_ids']),$node_columns); +$slice_nodes=array(); +$potential_nodes=array(); +$reservable_nodes=array(); +foreach ($all_nodes as $node) { + if (in_array($node['node_id'],$slice['node_ids'])) { + $slice_nodes[]=$node; + if ($node['node_type']=='reservable') $reservable_nodes[]=$node; + } else { + $potential_nodes[]=$node; + } +} +if ($profiling) plc_debug_prof('5: nodes',count($slice_nodes)); //////////////////// // outline the number of reservable nodes -$nodes_message=count_english($nodes,"node"); +$nodes_message=count_english($slice_nodes,"node"); if (count($reservable_nodes)) $nodes_message .= " (" . count($reservable_nodes) . " reservable)"; $toggle=new PlekitToggle ('my-slice-nodes',$nodes_message, array('bubble'=> @@ -422,7 +440,7 @@ $toggle->start(); //////////////////// nodes currently in $toggle_nodes=new PlekitToggle('my-slice-nodes-current', - count_english($nodes,"node") . " currently in $name", + count_english($slice_nodes,"node") . " currently in $name", array('visible'=>get_arg('show_nodes_current',!$privileges))); $toggle_nodes->start(); @@ -448,7 +466,7 @@ $table=new PlekitTable('nodes',$headers,'1',$table_options); $form=new PlekitForm(l_actions(),array('slice_id'=>$slice['slice_id'])); $form->start(); $table->start(); -if ($nodes) foreach ($nodes as $node) { +if ($slice_nodes) foreach ($slice_nodes as $node) { $table->row_start(); $peers->cell($table,$node['peer_id']); $table->cell(l_node_obj($node)); @@ -543,6 +561,7 @@ if ($count && $privileges) { array('visible'=>get_arg('show_nodes_resa',false))); $toggle_nodes->start(); $grain=$api->GetLeaseGranularity(); + 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; @@ -557,6 +576,7 @@ if ($count && $privileges) { $end=$rough_start+$duration; $lease_columns=array('lease_id','name','t_from','t_until','hostname','name'); $leases=$api->GetLeases(array(']t_until'=>$rough_start,'[t_from'=>$end,'-SORT'=>'t_from'),$lease_columns); + if ($profiling) plc_debug_prof('7 leases',count($leases)); // hash nodes -> leases $host_hash=array(); foreach ($leases as $lease) { @@ -626,9 +646,12 @@ EOF; } $toggle->end(); +// very wide values get abbreviated +$tag_value_threshold=24; //////////////////////////////////////////////////////////// Tags //if ( $local_peer ) { $tags=$api->GetSliceTags (array('slice_id'=>$slice_id)); + if ($profiling) plc_debug_prof('8 slice tags',count($tags)); function get_tagname ($tag) { return $tag['tagname'];} $tagnames = array_map ("get_tagname",$tags); @@ -654,23 +677,26 @@ $toggle->end(); foreach ($tags as $tag) { $node_name = "ALL"; if ($tag['node_id']) { - $nodes = $api->GetNodes(array('node_id'=>$tag['node_id'])); - if($nodes) { - $node = $nodes[0]; + $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']; } } $nodegroup_name="n/a"; if ($tag['nodegroup_id']) { - $nodegroup=$api->GetNodeGroups(array('nodegroup_id'=>$tag['nodegroup_id'])); + $nodegroups=$api->GetNodeGroups(array('nodegroup_id'=>$tag['nodegroup_id'])); + if ($profiling) plc_debug_prof('10 nodegroup for slice tag',$nodegroup); if ($nodegroup) { - $nodegroup = $nodegroup[0]; + $nodegroup = $nodegroups[0]; $nodegroup_name = $nodegroup['groupname']; } } $table->row_start(); $table->cell(l_tag_obj($tag)); - $table->cell($tag['value']); + // very wide values get abbreviated + $table->cell(truncate_and_popup($tag['value'],$tag_value_threshold)); $table->cell($node_name); $table->cell($nodegroup_name); if ($tags_privileges) $table->cell ($form->checkbox_html('slice_tag_ids[]',$tag['slice_tag_id'])); @@ -689,18 +715,19 @@ $toggle->end(); return array("display"=>$tag['tagname'],"value"=>$tag['tag_type_id']); } $all_tags= $api->GetTagTypes( array ("category"=>"slice*","-SORT"=>"+tagname"), array("tagname","tag_type_id")); + if ($profiling) plc_debug_prof('11 tagtypes',count($all_tags)); $selector_tag=array_map("tag_selector",$all_tags); function node_selector($node) { return array("display"=>$node["hostname"],"value"=>$node['node_id']); } - $all_nodes = $api->GetNodes( array ("node_id" => $slice['node_ids']), array("hostname","node_id")); - $selector_node=array_map("node_selector",$all_nodes); + $selector_node=array_map("node_selector",$slice_nodes); function nodegroup_selector($ng) { return array("display"=>$ng["groupname"],"value"=>$ng['nodegroup_id']); } $all_nodegroups = $api->GetNodeGroups( array("groupname"=>"*"), array("groupname","nodegroup_id")); + if ($profiling) plc_debug_prof('13 nodegroups',count($all_nodegroups)); $selector_nodegroup=array_map("nodegroup_selector",$all_nodegroups); $table->cell($form->select_html("tag_type_id",$selector_tag,array('label'=>"Choose Tag"))); @@ -724,6 +751,8 @@ if ($local_peer ) { $peers->block_end($peer_id); +if ($profiling) plc_debug_prof_end(); + // Print footer include 'plc_footer.php';