From: Panos Date: Mon, 14 Mar 2011 19:47:54 +0000 (+0100) Subject: Added proper css-based html code, took into account failure of X-Git-Tag: plewww-4.3-62~12 X-Git-Url: http://git.onelab.eu/?p=plewww.git;a=commitdiff_plain;h=d694eb9fdfe0a7bcb9d8fc7b571751475f4227be Added proper css-based html code, took into account failure of communication with external APIs, and included code for pairwise columns (but the addition of the corresponding columns is currently commented out) --- diff --git a/planetlab/css/my_slice.css b/planetlab/css/my_slice.css index ecb684a..3acc5c1 100644 --- a/planetlab/css/my_slice.css +++ b/planetlab/css/my_slice.css @@ -59,23 +59,74 @@ div.in{background-color:#CAE8EA; color:#4f6b72} div.selected{background-color:gray; color:black} div.invisible{display:none} -.myslice { - font: 11px Arial, Helvetica, sans-serif; - color: gray; +div.note-div { + padding: 4px; + background-color: #cae8ea; + width: 700px; } -.myslice .title { - font: 11px; +div#scrolldiv { + border : solid 2px grey; + padding:4px; + width:300px; + height:180px; + overflow:auto; +} + +th,td.top { + vertical-align: top; + text-align: left; + padding:10px; +} + +td.smallright { + text-align: right; + width:20px; +} + +table.center { + margin-left:auto; + margin-right:auto; +} + +table.columnlist { + width:280px; +} + +td.header { + background-color: #CAE8EA; + text-align: center; + width:30px; +} + +span.header { + font-weight: bold; + color: #3399CC; +} + +a.source-url{ font-weight: bold; } -.myslice .desc { - font: 11px; - font-style: italic; +span.gray{ + color: #555555; +} + +span.short { + height:10px; +} + +span.column-title { + font-size: 15px; + font-weight: bold; } -.myslice .subtitle{ - color: #bb9c61; +span.column-detail { + font-size: 11px; + font-style: italic; } + + + diff --git a/planetlab/nodes/nodes.php b/planetlab/nodes/nodes.php index a3121a7..5d9b61e 100644 --- a/planetlab/nodes/nodes.php +++ b/planetlab/nodes/nodes.php @@ -31,6 +31,7 @@ drupal_set_html_head(' ini_set("memory_limit","64M"); +//error_reporting(0); // -------------------- // recognized URL arguments @@ -182,7 +183,18 @@ $extra_columns[]=array('tagname'=>'numslices', 'header'=>'SM', 'source'=>'comon' $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); +$extra_columns[]=array('tagname'=>'asn', 'header'=>'AS', 'source'=>'tophat', 'type'=>'string', 'title'=>'AS Number', 'fetched'=>false); +$extra_columns[]=array('tagname'=>'city', 'header'=>'LCY', 'source'=>'tophat', 'type'=>'string', 'title'=>'City', 'fetched'=>false); +$extra_columns[]=array('tagname'=>'region', 'header'=>'LRN', 'source'=>'tophat', 'type'=>'string', 'title'=>'Region', 'fetched'=>false); +$extra_columns[]=array('tagname'=>'country', 'header'=>'LCN', 'source'=>'tophat', 'type'=>'string', 'title'=>'Country', 'fetched'=>false); +$extra_columns[]=array('tagname'=>'continent', 'header'=>'LCT', 'source'=>'tophat', 'type'=>'string', 'title'=>'Continent', 'fetched'=>false); +$extra_columns[]=array('tagname'=>'hopcount', 'header'=>'HC', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Hop count from reference node', 'fetched'=>false); +//$extra_columns[]=array('tagname'=>'rtt', 'header'=>'RTT', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Round trip time from reference node', 'fetched'=>false); +//$extra_columns[]=array('tagname'=>'agents', 'header'=>'MA', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located measurement agents', 'fetched'=>true); +//$extra_columns[]=array('tagname'=>'agents_sonoma', 'header'=>'MAS', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located SONoMA agents', 'fetched'=>true); +//$extra_columns[]=array('tagname'=>'agents_etomic', 'header'=>'MAE', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located ETOMIC agents', 'fetched'=>true); +//$extra_columns[]=array('tagname'=>'agents_tdmi', 'header'=>'MAT', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located TDMI agents', 'fetched'=>true); +//$extra_columns[]=array('tagname'=>'agents_dimes', 'header'=>'MAD', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located DIMES agents', 'fetched'=>true); $ConfigureColumns =new PlekitColumns($full_configuration, $fix_columns, $tag_columns, $extra_columns); @@ -364,10 +376,10 @@ $note_display = ""; print << -
+
+
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 support@myslice.info. You can find more information about the MySlice project at http://trac.myslice.info. -hide message permanently +hide message permanently
EOF; @@ -389,6 +401,7 @@ $peers = new Peers ($api); // write rows foreach ($nodes as $node) { //$node_obj = new Node ($node); + $hostname=$node['hostname']; $node_id=$node['node_id']; $site_id=$node['site_id']; @@ -426,6 +439,7 @@ foreach ($nodes as $node) { $table->end(); $nifty->end(); + //plekit_linetabs ($tabs,"bottom"); // Print footer diff --git a/planetlab/slices/slice.php b/planetlab/slices/slice.php index 744a718..62041aa 100644 --- a/planetlab/slices/slice.php +++ b/planetlab/slices/slice.php @@ -32,6 +32,7 @@ drupal_set_html_head(' // -------------------- admins potentially need to get full list of users ini_set('memory_limit','32M'); +//error_reporting(0); $profiling=false; if ($_GET['profiling']) $profiling=true; @@ -451,8 +452,20 @@ $extra_columns[]=array('tagname'=>'numslices', 'header'=>'SM', 'source'=>'comon' $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'=>'asn', 'header'=>'AS', 'source'=>'tophat', 'type'=>'string', 'title'=>'AS Number', 'fetched'=>false); +$extra_columns[]=array('tagname'=>'city', 'header'=>'LCY', 'source'=>'tophat', 'type'=>'string', 'title'=>'City', 'fetched'=>false); +$extra_columns[]=array('tagname'=>'region', 'header'=>'LRN', 'source'=>'tophat', 'type'=>'string', 'title'=>'Region', 'fetched'=>false); +$extra_columns[]=array('tagname'=>'country', 'header'=>'LCN', 'source'=>'tophat', 'type'=>'string', 'title'=>'Country', 'fetched'=>false); +$extra_columns[]=array('tagname'=>'continent', 'header'=>'LCT', 'source'=>'tophat', 'type'=>'string', 'title'=>'Continent', 'fetched'=>false); //$extra_columns[]=array('tagname'=>'hopcount', 'header'=>'HC', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Hop count from reference node', 'fetched'=>false); - +//$extra_columns[]=array('tagname'=>'rtt', 'header'=>'RTT', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Round trip time from reference node', 'fetched'=>false); +////$extra_columns[]=array('tagname'=>'agents', 'header'=>'MA', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located measurement agents', 'fetched'=>true); +////$extra_columns[]=array('tagname'=>'agents_sonoma', 'header'=>'MAS', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located SONoMA agents', 'fetched'=>true); +////$extra_columns[]=array('tagname'=>'agents_etomic', 'header'=>'MAE', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located ETOMIC agents', 'fetched'=>true); +////$extra_columns[]=array('tagname'=>'agents_tdmi', 'header'=>'MAT', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located TDMI agents', 'fetched'=>true); +////$extra_columns[]=array('tagname'=>'agents_dimes', 'header'=>'MAD', 'source'=>'tophat', 'type'=>'sortAlphaNumericTop', 'title'=>'Co-located DIMES agents', 'fetched'=>true); +// +// //Get user's column configuration @@ -663,10 +676,10 @@ else $note_display = ""; print << -
+
+
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 support@myslice.info. You can find more information about the MySlice project at http://trac.myslice.info. -hide message permanently +hide message permanently
EOF; diff --git a/plekit/php/columns.php b/plekit/php/columns.php index 0ef58a9..ffc41ce 100644 --- a/plekit/php/columns.php +++ b/plekit/php/columns.php @@ -9,7 +9,7 @@ drupal_set_html_head(' class PlekitColumns { var $column_configuration = ""; -var $reference_node = ""; +var $reference_nodes = array(); var $first_time = false; var $all_headers = array(); @@ -22,42 +22,34 @@ var $extra_columns = array(); var $comon_live_data = ""; var $tophat_live_data = ""; -var $live_data = array(); +var $ComonData = array(); +var $TopHatData = array(); +var $TopHatAgents = array(); var $table_ids; var $HopCount = array(); +var $RTT = array(); - function PlekitColumns ($column_configuration, $fix_columns, $tag_columns, $extra_columns=NULL, $this_table_headers=NULL) { +function PlekitColumns ($column_configuration, $fix_columns, $tag_columns, $extra_columns=NULL, $this_table_headers=NULL) { if ($column_configuration != NULL) { $this->fix_columns = $fix_columns; $this->tag_columns = $tag_columns; $this->extra_columns = $extra_columns; - //print("

FIX

"); - //print_r($this->fix_columns); - //print("

TAG

"); - //print_r($this->tag_columns); - //print("

EXTRA

"); - //print_r($this->extra_columns); - $this->prepare_headers(); $this->parse_configuration($column_configuration); $this->visible_headers = $this->get_visible(); } - - //print("

VISIBLE

"); - //print_r($this->visible_headers); - } /* -INFO +INFO/HEADERS */ @@ -180,10 +172,6 @@ CONFIGURATION function parse_configuration($column_configuration) { $this->column_configuration = $column_configuration; - //$this->default_configuration = $default_configuration; - - //print($this->print_headers()); - $columns_conf = explode("|", $column_configuration); @@ -204,24 +192,23 @@ function parse_configuration($column_configuration) { if ($this->all_headers[$conf[0]]['source'] == "tophat") { - $this->reference_node = $conf[1]; - print ("ref node in configuration = ".$conf[1]); - $this->reference_node = "planetlab-europe-07.ipv6.lip6.fr"; - $this->all_headers[$conf[0]]['refnode']=$this->reference_node; + if ($this->all_headers[$conf[0]]['tagname'] == 'hopcount') + { + $this->reference_nodes['hopcount'] = $conf[1]; + //print ("ref node in configuration = ".$conf[1]); + $this->all_headers[$conf[0]]['refnode']=$this->reference_nodes['hopcount']; + } + else if (strpos($this->all_headers[$conf[0]]['tagname'],"agents") === false) + $this->tophat_live_data.=",".$this->all_headers[$conf[0]]['tagname']; //$threshold = explode(",",$conf[1]); //$this->all_headers[$conf[0]]['threshold']=$threshold; } - //print("

-".$conf[0]."-should be visible now - ".$this->all_headers[$conf[0]]['visible']); //print_r($this->all_headers[$conf[0]]); /* - if ($conf[1] == "f") - continue; - else if ($this->inTypeC($conf[0])) { - $this->all_headers[$conf[0]]['duration']= substr($conf[0], strlen($conf[0])-1, strlen($conf[0])); $threshold = explode(",",$conf[1]); $this->all_headers[$conf[0]]['threshold']=$threshold; } @@ -230,11 +217,6 @@ function parse_configuration($column_configuration) { $exclude_list = explode(",",$conf[1]); $this->all_headers[$conf[0]]['exclude_list']=$exclude_list; } - else - { - $threshold = explode(",",$conf[1]); - $this->all_headers[$conf[0]]['threshold']=$threshold; - } */ } @@ -252,6 +234,8 @@ CELLS function convert_data($value, $data_type) { + //print "converting ".$value." as ".$data_type; + if ($value == "" || $value == null || $value == "n/a" || $value == "None") return "n/a"; @@ -263,38 +247,145 @@ function convert_data($value, $data_type) { if ($data_type == "uptime") return (int)((int) $value / 86400); + + if (is_numeric($value)) + return ((int) ($value * 10))/10; + + return $value; + +} + +function getTopHatAgents() { + + $tophat_auth = array( 'AuthMethod' => 'password', 'Username' => 'guest@top-hat.info', 'AuthString' => 'guest'); + $tophat_api = new TopHatAPI($tophat_auth); + + //print ("Requesting tophat agents..."); + //print_r($r); + + $values = $tophat_api->Get('agents', 'latest', array('colocated.platform_name' => array('SONoMA', 'DIMES', 'ETOMIC', 'TDMI'), 'platform_name'=> 'TDMI'), array('hostname', 'colocated.peer_name', 'colocated.platform_name')); + + $result = array(); + + if ($values) foreach ($values as $t) { + //print_r($t); + //print("


"); + $result[$t['hostname']] = ""; + foreach ($t['colocated'] as $ll) { + + if (strpos($result[$t['hostname']]['all'],$ll['platform_name']) === false) { + if ($result[$t['hostname']]['all'] != "") + $result[$t['hostname']]['all'] .= ","; + $result[$t['hostname']]['all'] .= $ll['platform_name']; + } + + if ($ll['platform_name'] == 'SONoMA') { + if (strpos($result[$t['hostname']]['sonoma'],$ll['peer_name']) === false) { + if ($result[$t['hostname']]['sonoma'] != "") + $result[$t['hostname']]['sonoma'] .= ","; + $result[$t['hostname']]['sonoma'] .= $ll['peer_name']; + } + } + + if ($ll['platform_name'] == 'TDMI') { + if (strpos($result[$t['hostname']]['tdmi'],$ll['peer_name']) === false) { + if ($result[$t['hostname']]['tdmi'] != "") + $result[$t['hostname']]['tdmi'] .= ","; + $result[$t['hostname']]['tdmi'] .= $ll['peer_name']; + } + } + } + } + + $this->TopHatAgents = $result; + + //print_r($this->TopHatAgents); + + return $result; +} + +function getTopHatData($data, $planetlab_nodes) { + + $tophat_auth = array( 'AuthMethod' => 'password', 'Username' => 'guest@top-hat.info', 'AuthString' => 'guest'); + $tophat_api = new TopHatAPI($tophat_auth); + + $requested_data = explode(",", $data); + + $r = array ('hostname'); - return ((int) ($value * 10))/10; + foreach ($requested_data as $rd) + if ($rd) $r[] = $rd; + + //print ("Requesting data from TopHat ..."); + //print_r($r); + + $values = $tophat_api->Get('ips', 'latest', array('hostname' => $planetlab_nodes), $r ); + + $result = array(); + + if ($values) foreach ($values as $t) + foreach ($requested_data as $rd) + if ($rd) $result[$t['hostname']][$rd] = $t[$rd]; + + //print_r($result); + + return $result; +} + +function getTopHatRefNodes() { + + $tophat_auth = array( 'AuthMethod' => 'password', 'Username' => 'guest@top-hat.info', 'AuthString' => 'guest'); + $tophat_api = new TopHatAPI($tophat_auth); + + //print "calling tophat for agents"; + + $agents = $tophat_api->Get('agents', 'latest', array('peer_name'=>array('PLC', 'PLE'), 'agent_status'=> 'OK'), array('hostname')); + + //print_r($agents); + + return $agents; } -function getHopCount($ref_node, $planetlab_nodes) { +function getPairwise($ref_node, $planetlab_nodes, $command, $data) { - $tophat_auth = array( 'AuthMethod' => 'password', 'Username' => 'guest', 'AuthString' => 'guest'); + $tophat_auth = array( 'AuthMethod' => 'password', 'Username' => 'guest@top-hat.info', 'AuthString' => 'guest'); $tophat_api = new TopHatAPI($tophat_auth); - $traceroute = $tophat_api->Get('traceroute', 'latest', array('src_hostname' => $ref_node, 'dst_hostname' => $planetlab_nodes), array('dst_hostname', 'hop_count') ); + $traceroute = $tophat_api->Get($command, 'latest', array('src_hostname' => $ref_node, 'dst_hostname' => $planetlab_nodes), array('dst_hostname', $data) ); + + print "Got result: ".$traceroute; $hopcount = array(); - if ($traceroute) foreach ($traceroute as $t) - $hopcount[$t['dst_hostname']]=$t['hop_count']; + if ($traceroute) + { + foreach ($traceroute as $t) + { + $hopcount[$t['dst_hostname']]=$t[$data]; + //print " current: ".$t['dst_hostname'].":".$t['hop_count']; + } - return $hopcount; + return $hopcount; + } + else + return ""; } function comon_query_nodes($requested_data) { - //$base_url = 'http://comon.cs.princeton.edu/status/tabulator.cgi?forma=nameonly&'; + $base_url = "http://comon.cs.princeton.edu/status/tabulator.cgi?table=table_nodeviewshort&format=formatcsv&dumpcols='name"; $url = $base_url.$requested_data."'"; - //print ("retriecing comon data for url ".$url); + //print ("Retrieving comon data for url ".$url); $sPattern = '\', \''; $sReplace = '|'; - if( false == ($str=file_get_contents($url))) + $str=file_get_contents($url); + + if ($str === false) return ''; $result=preg_replace( $sPattern, $sReplace, $str ); @@ -334,25 +425,55 @@ function fetch_live_data($all_nodes) { if ($this->comon_live_data != "") { //print ("live data to be fetched =".$this->comon_live_data); - $this->live_data = $this->comon_query_nodes($this->comon_live_data); - //print_r($this->live_data); + $this->ComonData= $this->comon_query_nodes($this->comon_live_data); + //print_r($this->ComonData); } +//TopHat per_node data + if ($this->tophat_live_data != "") + { + $dd = array(); + + if ($all_nodes) foreach ($all_nodes as $n) + $dd[] = $n['hostname']; + + //print("Calling tophat api for ".$this->tophat_live_data); + $st = time() + microtime(); + $this->TopHatData = $this->getTopHatData($this->tophat_live_data, $dd); + //printf(" (%.2f ms)
", (time() + microtime()-$st)*100); + //print_r($this->TopHatData); + } //TopHat pairwise data - //if ($this->tophat_live_data != "") - if ($this->reference_node != "") + + $this->HopCount = ""; + $this->RTT = ""; + + if ($this->reference_nodes != "") { + //print_r($this->reference_nodes); + $dd = array(); if ($all_nodes) foreach ($all_nodes as $n) $dd[] = $n['hostname']; - print("Calling tophat api for reference node = ".$this->reference_node); $st = time() + microtime(); - $HopCount = $this->getHopCount($this->reference_node, $dd); - printf(" (%.2f ms)
", (time() + microtime()-$st)*100); - print_r($HopCount); + if ($this->headerIsVisible("HC")) + { + print("[NEW] Calling tophat api for HopCount with reference node = ".$this->reference_nodes['hopcount']); + $this->HopCount = $this->getPairwise($this->reference_nodes['hopcount'], $dd, 'traceroute', 'hop_count'); + } + else + + if ($this->headerIsVisible("RTT")) + { + print("[NEW] Calling tophat api for RTT with reference node = ".$this->reference_nodes['rtt']); + $this->RTT = $this->getPairwise($this->reference_nodes['rtt'], $dd, 'rtt','rtt'); + } + + //printf(" (%.2f ms)
", (time() + microtime()-$st)*100); + print_r($this->HopCount); } } @@ -389,33 +510,21 @@ function checkThreshold($value, $threshold, $hh) { function cells($table, $node) { -foreach ($this->all_headers as $h) -{ +//$node_string = ""; + +foreach ($this->all_headers as $h) { + if (!$h['fixed']) { -if ($h['visible'] != "") -{ +if ($h['visible'] != "") { /* -if ($this->inTypeC($h['header'])) -{ - $tagname = $h['tagname']; - $value = $node[$tagname]; - $v = $this->checkThreshold($value, $h['threshold'], $h['header']); - $table->cell($v[0],$v[1]); -} -else if ($this->inTypeB($h['header'])) +if ($this->inTypeB($h['header'])) { $value = $node[$h['tagname']]; $v = $this->checkThreshold($value, $h['threshold'], $h['header']); $table->cell($v[0],$v[1]); } -else if ($this->inTypeD($h['header'])) -{ - $value = $this->HopCount[$node['hostname']]; - $v = $this->excludeItems($value, $h['threshold'], $h['header']); - $table->cell($v[0],$v[1]); -} else if ($this->inTypeA($h['header'])) { $value = $node[$h['tagname']]; @@ -423,23 +532,86 @@ else if ($this->inTypeA($h['header'])) $table->cell($v[0],$v[1]); } */ -if ($h['type'] == "date") +if ($h['source'] == "comon") { - $value = $this->convert_data($node[$h['tagname']], $h['type']); + //print("
Searching for ".$h['tagname']."at ".$node); + if ($this->ComonData != "") + $value = $this->convert_data($this->ComonData[$node['hostname']][$h['tagname']], $h['tagname']); + else + $value = "n/a"; + $table->cell($value,array('name'=>$h['header'], 'display'=>'table-cell')); + //$node_string.= "\"".$value."\","; } -else if ($h['source'] == "comon") +else if ($h['source'] == "tophat") { //print("
Searching for ".$h['tagname']."at ".$node); - $value = $this->convert_data($this->live_data[$node['hostname']][$h['tagname']], $h['tagname']); + if ($h['tagname'] == "hopcount") + { + //print "value = ".$this->HopCount[$node['hostname']]; + //$value = "hc"; + if ($this->HopCount != "") + $value = $this->HopCount[$node['hostname']]; + else + $value = "n/a"; + } + else if ($h['tagname'] == "rtt") + { + if ($this->RTT != "") + if ($this->RTT[$node['hostname']] != "") + $value = $this->RTT[$node['hostname']]; + else + $value = "n/a"; + else + $value = "n/a"; + } + else if ($h['tagname'] == "agents") + { + if ($this->TopHatAgents != "") + if ($this->TopHatAgents[$node['hostname']] != "") + $value = $this->TopHatAgents[$node['hostname']]['all']; + else + $value = "n/a"; + else + $value = "n/a"; + } + else if ($h['tagname'] == "agents_tdmi") + { + if ($this->TopHatAgents != "") + if ($this->TopHatAgents[$node['hostname']] != "") + $value = $this->TopHatAgents[$node['hostname']]['tdmi']; + else + $value = "n/a"; + else + $value = "n/a"; + } + else if ($h['tagname'] == "agents_sonoma") + { + if ($this->TopHatAgents != "") + if ($this->TopHatAgents[$node['hostname']] != "") + $value = $this->TopHatAgents[$node['hostname']]['sonoma']; + else + $value = "n/a"; + else + $value = "n/a"; + } + else + { + if ($this->TopHatData != "") + $value = $this->convert_data($this->TopHatData[$node['hostname']][$h['tagname']], $h['type']); + else + $value = "n/a"; + } $table->cell($value,array('name'=>$h['header'], 'display'=>'table-cell')); + //$node_string.= "\"".$value."\","; } else { //$value = $node[$h['tagname']]; $value = $this->convert_data($node[$h['tagname']], $h['type']); $table->cell($value,array('name'=>$h['header'], 'display'=>'table-cell')); + //$node_string.= "\"".$value."\","; } } else @@ -449,13 +621,12 @@ else $table->cell($value, array('name'=>$h['header'], 'display'=>'none')); } else - if ($node[$h['fetched']]) - $table->cell("n/a", array('name'=>$h['header'], 'display'=>'none')); - else - $table->cell("??", array('name'=>$h['header'], 'display'=>'none')); + $table->cell("n/a", array('name'=>$h['header'], 'display'=>'none')); } } +//return $node_string; + } @@ -468,22 +639,32 @@ HTML function javascript_init() { -print(""); +$refnodes = $this->getTopHatRefNodes(); +//$tophat_agents = $this->getTopHatAgents(); +$ref_nodes = ""; +foreach ($refnodes as $r) +{ + if ($r['hostname'] == $this->reference_nodes['hopcount']) + $selected = "selected=selected"; + else + $selected = ""; + + $ref_nodes = $ref_nodes.""; +} + +print(""); print(""); } function quickselect_html() { -//return '

This link uses the onclick event handler.
Open popup

'; - - $quickselection = ""; $prev_label=""; $optionclass = "out"; foreach ($this->all_headers as $h) @@ -497,27 +678,19 @@ foreach ($this->all_headers as $h) $disabled = ""; if ($this->headerIsVisible($h['label'])) - { $optionclass = "in"; - //$selected = "selected=selected"; - } else - { $optionclass = "out"; - //$selected = ""; - } if ($prev_label == $h['label']) continue; $prev_label = $h['label']; + $quickselection.=""; -//$quickselection.=""; -$quickselection.=""; } - $quickselection.=""; return $quickselection; @@ -532,15 +705,15 @@ if ($showDescription) else $table_width = 350; -print(""); -print(""); +print("
Add/remove columns
"); +print(""); if ($showDescription) - print(""); + print(""); -print(""); } @@ -596,8 +769,8 @@ print ("
Add/remove columnsColumn description and configurationColumn description and configuration
"); +print("
"); - print('
'); + print('
'); print (""); $prev_label=""; $optionclass = "out"; @@ -584,11 +757,11 @@ print ("
");
-
- - - - +
".$h['label']." ".$h['title']."   
+ + + +
".$h['label']." ".$h['title']."   
"); if ($showDescription) { - print(""); + print(""); } print(""); diff --git a/plekit/php/updateColumn.php b/plekit/php/updateColumn.php index de0c605..153b655 100644 --- a/plekit/php/updateColumn.php +++ b/plekit/php/updateColumn.php @@ -22,55 +22,83 @@ $tagN=$_GET["tagName"]; $data_source=$_GET["data_source"]; $data_type=$_GET["data_type"]; - +//print "getting column data for ".$slice_id." with ".$tagN." - ".$data_source." - ".$data_type; $nodetags = array('node_id'); $extratags = explode("|", $tagN); + if ($slice_id == "nodes") { if ($data_source == "comon") { -$comontags = $extratags; -$extratags = array ('hostname'); -$nodes=$api->GetNodes(NULL, array_merge($nodetags, $extratags)); -$ColumnsConfigure = new PlekitColumns(NULL, NULL, NULL); -$comon_data = $ColumnsConfigure->comon_query_nodes(",".$tagN); - -//print ("comon tags = ".$comontags); - -echo "---attached---"; -if ($nodes) foreach ($nodes as $node) { - echo "|".$node['node_id']; - foreach ($comontags as $t) - echo ":".$ColumnsConfigure->convert_data($comon_data[$node['hostname']][$t], $data_type); -} + $comontags = $extratags; + $extratags = array ('hostname'); + $nodes=$api->GetNodes(NULL, array_merge($nodetags, $extratags)); + $ColumnsConfigure = new PlekitColumns(NULL, NULL, NULL); + $comon_data = $ColumnsConfigure->comon_query_nodes(",".$tagN); + + //print ("comon tags = ".$comontags); + + if ($comon_data != "") + { + echo "---attached---"; + if ($nodes) foreach ($nodes as $node) { + echo "|".$node['node_id']; + foreach ($comontags as $t) + echo ":".$ColumnsConfigure->convert_data($comon_data[$node['hostname']][$t], $data_type); + } + } } else if ($data_source == "tophat") { -$extratags = array ('hostname'); -$nodes=$api->GetNodes(NULL, array_merge($nodetags, $extratags)); -echo "---attached---"; -if ($nodes) foreach ($nodes as $node) { - echo "|".$node['node_id']; - echo ":n/a"; -} + + $ColumnsConfigure = new PlekitColumns(NULL, NULL, NULL); + + $extratags = array ('hostname'); + $nodes=$api->GetNodes(NULL, array_merge($nodetags, $extratags)); + + $dd = array(); + if ($nodes) foreach ($nodes as $n) + $dd[] = $n['hostname']; + + if ($tagN == "hopcount") + { + $ref_node=$_GET["ref_node"]; + //print("getting hop count with ref node = ".$ref_node); + $tophat_data = $ColumnsConfigure->getPairwise($ref_node, $dd, "traceroute", "hop_count"); + } + else + $tophat_data = $ColumnsConfigure->getTopHatData($tagN, $dd); + + //print_r($tophat_data); + + if ($tophat_data != "") { + echo "---attached---"; + if ($nodes) foreach ($nodes as $node) { + echo "|".$node['node_id']; + echo ":".$ColumnsConfigure->convert_data($tophat_data[$node['hostname']][$tagN], $data_type); + } + } } -else +else //MyPLC API { -echo "---attached---"; -$nodes=$api->GetNodes(NULL, array_merge($nodetags, $extratags)); -//echo $nodes; + $nodes=$api->GetNodes(NULL, array_merge($nodetags, $extratags)); -if ($nodes) foreach ($nodes as $node) { - echo "|".$node['node_id']; - foreach ($extratags as $t) - echo ":".$node[$t]; -} + if ($nodes) { + echo "---attached---"; + + foreach ($nodes as $node) { + echo "|".$node['node_id']; + foreach ($extratags as $t) + echo ":".$node[$t]; + } + } } } +// in slices view else { @@ -83,63 +111,91 @@ $slice=$slices[0]; if ($data_source == "comon") { -$comontags = $extratags; -$extratags = array ('hostname'); + $comontags = $extratags; + $extratags = array ('hostname'); -$nodes=$api->GetNodes(array('node_id'=>$slice['node_ids']),array_merge($nodetags, $extratags)); -$potential_nodes=$api->GetNodes(array('~node_id'=>$slice['node_ids']),array_merge($nodetags, $extratags)); + $nodes=$api->GetNodes(array('node_id'=>$slice['node_ids']),array_merge($nodetags, $extratags)); + $potential_nodes=$api->GetNodes(array('~node_id'=>$slice['node_ids']),array_merge($nodetags, $extratags)); -$ColumnsConfigure = new PlekitColumns(NULL, NULL, NULL); -$comon_data = $ColumnsConfigure->comon_query_nodes(",".$tagN); + $ColumnsConfigure = new PlekitColumns(NULL, NULL, NULL); + $comon_data = $ColumnsConfigure->comon_query_nodes(",".$tagN); -//print ("comon tags = ".$comontags); + //print ("comon tags = ".$comontags); -echo "---attached---"; -if ($nodes) foreach ($nodes as $node) { - echo "|".$node['node_id']; - foreach ($comontags as $t) - echo ":".$ColumnsConfigure->convert_data($comon_data[$node['hostname']][$t], $data_type); -} -echo "|---potential---"; -if ($potential_nodes) foreach ($potential_nodes as $potential_node) { - echo "|".$potential_node['node_id']; - foreach ($comontags as $t) - echo ":".$ColumnsConfigure->convert_data($comon_data[$potential_node['hostname']][$t], $data_type); -} + if ($comon_data != "") { + echo "---attached---"; + if ($nodes) foreach ($nodes as $node) { + echo "|".$node['node_id']; + foreach ($comontags as $t) + echo ":".$ColumnsConfigure->convert_data($comon_data[$node['hostname']][$t], $data_type); + } + echo "|---potential---"; + if ($potential_nodes) foreach ($potential_nodes as $potential_node) { + echo "|".$potential_node['node_id']; + foreach ($comontags as $t) + echo ":".$ColumnsConfigure->convert_data($comon_data[$potential_node['hostname']][$t], $data_type); + } + } } else if ($data_source == "tophat") { -$extratags = array ('hostname'); -$nodes=$api->GetNodes(array('node_id'=>$slice['node_ids']),array_merge($nodetags, $extratags)); -$potential_nodes=$api->GetNodes(array('~node_id'=>$slice['node_ids']),array_merge($nodetags, $extratags)); -echo "---attached---"; -if ($nodes) foreach ($nodes as $node) { - echo "|".$node['node_id']; - echo ":n/a"; -} -echo "|---potential---"; -if ($potential_nodes) foreach ($potential_nodes as $potential_node) { - echo "|".$potential_node['node_id']; - echo ":n/a"; -} -} -else -{ -$nodes=$api->GetNodes(array('node_id'=>$slice['node_ids']),array_merge($nodetags, $extratags)); -$potential_nodes=$api->GetNodes(array('~node_id'=>$slice['node_ids']),array_merge($nodetags, $extratags)); + $ColumnsConfigure = new PlekitColumns(NULL, NULL, NULL); + + $extratags = array ('hostname'); + $nodes=$api->GetNodes(array('node_id'=>$slice['node_ids']),array_merge($nodetags, $extratags)); + $potential_nodes=$api->GetNodes(array('~node_id'=>$slice['node_ids']),array_merge($nodetags, $extratags)); + + $dd = array(); + if ($nodes) foreach ($nodes as $n) + $dd[] = $n['hostname']; + if ($potential_nodes) foreach ($potential_nodes as $n) + $dd[] = $n['hostname']; + + if ($tagN == "hopcount") + { + $ref_node=$_GET["ref_node"]; + print("getting hop count with ref node = ".$ref_node); + $tophat_data = $ColumnsConfigure->getPairwise($ref_node, $dd, "hop_count"); + } + else + $tophat_data = $ColumnsConfigure->getTopHatData($tagN, $dd); + + if ($tophat_data != "") { + echo "---attached---"; + if ($nodes) foreach ($nodes as $node) { + echo "|".$node['node_id']; + echo ":".$ColumnsConfigure->convert_data($tophat_data[$node['hostname']][$tagN], $data_type); + } + + echo "|---potential---"; + if ($potential_nodes) foreach ($potential_nodes as $potential_node) { + echo "|".$potential_node['node_id']; + echo ":".$ColumnsConfigure->convert_data($tophat_data[$potential_node['hostname']][$tagN], $data_type); + } + } +} +else //MyPLC API +{ -echo "---attached---"; -if ($nodes) foreach ($nodes as $node) { - echo "|".$node['node_id']; - foreach ($extratags as $t) - echo ":".$node[$t]; -} -echo "|---potential---"; -if ($potential_nodes) foreach ($potential_nodes as $potential_node) { - echo "|".$potential_node['node_id']; - foreach ($extratags as $t) - echo ":".$potential_node[$t]; -} + $nodes=$api->GetNodes(array('node_id'=>$slice['node_ids']),array_merge($nodetags, $extratags)); + $potential_nodes=$api->GetNodes(array('~node_id'=>$slice['node_ids']),array_merge($nodetags, $extratags)); + + if ($nodes) { + echo "---attached---"; + foreach ($nodes as $node) { + echo "|".$node['node_id']; + foreach ($extratags as $t) + echo ":".$node[$t]; + } + } + if ($potential_nodes) { + echo "|---potential---"; + foreach ($potential_nodes as $potential_node) { + echo "|".$potential_node['node_id']; + foreach ($extratags as $t) + echo ":".$potential_node[$t]; + } + } } } ?> diff --git a/plekit/table/columns.js b/plekit/table/columns.js index db6b727..32dbbf3 100644 --- a/plekit/table/columns.js +++ b/plekit/table/columns.js @@ -6,288 +6,299 @@ var normal_color = "black"; //Descriptions overriding the default ones set in Accessors_site.py and configuration -var sourceComon = 'CoMon'; -var sourceTophat = 'TopHat'; -var sourceTophatAPI = 'TopHat API'; -var sourceMySlice = 'MySlice'; -var sourceCymru = 'Team Cymru'; -var sourceMyPLC = 'MyPLC API'; -var sourceManiacs = 'MANIACS'; -var sourceMaxmind = 'MaxMind'; -var sourceMonitor = 'Monitor'; -var hardwareReqs = 'current PlanetLab hardware requirement'; -var selectReferenceNode ='Select reference node: '; -//var addButton = ''; -//var deleteButton = ''; +var sourceComon = 'CoMon'; +var sourceTophat = 'TopHat'; +var sourceTophatAPI = 'TopHat API'; +var sourceMySlice = 'MySlice'; +var sourceCymru = 'Team Cymru'; +var sourceSonoma = 'SONoMA'; +var sourceMyPLC = 'MyPLC API'; +var sourceManiacs = 'MANIACS'; +var sourceMaxmind = 'MaxMind'; +var sourceMonitor = 'Monitor'; +var hardwareReqs = 'current PlanetLab hardware requirement'; +var selectReferenceNode ='
'; +var selectReferenceNodeRTT ='
'; var descHOSTNAME = "test"; - var titleAU = 'Authority'; -var detailAU = 'The authority of the global PlanetLab federation that the site of the node belongs to.'; -var valuesAU = 'Values: PLC (PlanetLab Central), PLE (PlanetLab Europe)'; +var detailAU = 'The authority of the global PlanetLab federation that the site of the node belongs to.'; +var valuesAU = 'PLC (PlanetLab Central), PLE (PlanetLab Europe)'; var sourceAU = 'Source: '+sourceMyPLC; -var descAU = ''+titleAU+'

'+detailAU+'

'+valuesAU+'

'+sourceAU; +var descAU = ''+titleAU+'

'+detailAU+'

Values: '+valuesAU+'

Source: '+sourceMyPLC+'

'; var titleST = 'Status'; var sourceST = 'Source: '+sourceMonitor; -var valuesST = 'Values: online (up and running), good (up and running recently), offline (unreachable today), down (node unreachable for more than one day), failboot (reachable, but only by administrators for debugging purposes).'; -var descST = ''+titleST+'

'+valuesST+'

'+sourceST; +var valuesST = 'Values: online (up and running), good (up and running recently), offline (unreachable today), down (node unreachable for more than one day), failboot (reachable, but only by administrators for debugging purposes).'; +var descST = ''+titleST+'

'+valuesST+'

'+sourceST+'

'; var titleA = 'Architecture name'; -var detailA = 'The node architecture.'; +var detailA = 'The node architecture.'; var sourceA = 'Source: '+sourceMyPLC; -var valuesA = 'Values: x86_64, i386, n/a'; -var descA = ''+titleA+'

'+detailA+'

'+valuesA+'

'+sourceA; +var valuesA = 'x86_64, i386, n/a'; +var descA = ''+titleA+'

'+detailA+'

Values: '+valuesA+'

'+sourceA+'

'; var titleAS = 'Autonomous system ID'; var sourceAS = 'Source: '+sourceCymru+' (via '+sourceTophat+')'; -var valuesAS = 'Values: Integer between 0 and 65535, n/a'; -var descAS = ''+titleAS+'

'+valuesAS+'

' + sourceAS; +var valuesAS = 'Values: Integer between 0 and 65535, n/a'; +var descAS = ''+titleAS+'

'+valuesAS+'

' + sourceAS+'

'; var titleAST = 'Autonomous system type'; var sourceAST = 'Source: '+sourceManiacs; -var valuesAST = 'Values: t1 (tier-1), t2 (tier-2), edu (university), comp (company), nic (network information centre -- old name for a domain name registry operator), ix (IXP), n/a'; -var descAST = ''+titleAST+'

'+valuesAST+'

'+sourceAST; +var valuesAST = 'Values: t1 (tier-1), t2 (tier-2), edu (university), comp (company), nic (network information centre -- old name for a domain name registry operator), ix (IXP), n/a'; +var descAST = ''+titleAST+'

'+valuesAST+'

'+sourceAST+'

'; var titleASN = 'Autonomous system name'; var sourceASN = 'Source: '+sourceTophat; -var descASN = ''+titleASN+'

'+sourceASN; +var descASN = ''+titleASN+'

'+sourceASN+'

'; var selectPeriodBU = 'Select period: '; var titleBU = 'Bandwidth utilization '; var sourceBU = 'Source: '+sourceComon+' (via '+sourceMySlice+')'; -var valuesBU ='Unit: Kbps'; -var detailBU = 'The average transmited bandwidh over the selected period. The period is the most recent for which data is available, with CoMon data being collected by MySlice daily.' -var descBU = ''+titleBU+'

'+detailBU+'

'+selectPeriodBU+'

'+valuesBU+'

'+sourceBU; +var valuesBU ='Unit: Kbps'; +var detailBU = 'The average transmited bandwidh over the selected period. The period is the most recent for which data is available, with CoMon data being collected by MySlice daily.' +var descBU = ''+titleBU+'

'+detailBU+'

'+selectPeriodBU+'

'+valuesBU+'

'+sourceBU+'

'; var titleBW= 'Bandwidth limit'; var sourceBW = 'Source: '+sourceComon; -var valuesBW = 'Unit: Kbps'; -var detailBW = 'The bandwidth limit is a cap on the total outbound bandwidth usage of a node. It is set by the site administrator (PI). For more details see Bandwidth Limits (planet-lab.org).'; -var descBW = ''+titleBW+'

'+detailBW+'

'+valuesBW+'

'+sourceBW; +var valuesBW = 'Unit: Kbps'; +var detailBW = 'The bandwidth limit is a cap on the total outbound bandwidth usage of a node. It is set by the site administrator (PI). For more details see Bandwidth Limits (planet-lab.org).'; +var descBW = ''+titleBW+'

'+detailBW+'

'+valuesBW+'

'+sourceBW+'

'; var titleCC = 'Number of CPU cores'; var sourceCC = 'Source: '+sourceComon; -var valuesCC = 'The number of CPU cores on the node. For reference, the '+hardwareReqs+' is 4 cores min.
(Older nodes may have fewer cores)
.'; -var descCC = ''+titleCC+'

'+valuesCC+'

'+sourceCC; +var detailCC = 'The number of CPU cores on the node. For reference, the '+hardwareReqs+' is 4 cores min. (Older nodes may have fewer cores).'; +var descCC = ''+titleCC+'

'+detailCC+'

'+sourceCC+'

'; var titleCN = 'Number of CPUs'; var sourceCN = 'Source: '+sourceComon; -var valuesCN = 'The number of CPUs on the node. For reference, the '+hardwareReqs+' is 1 (if quad core) or 2 (if dual core).'; -var descCN = ''+titleCN+'

'+valuesCN+'

'+sourceCN; +var detailCN = 'The number of CPUs on the node. For reference, the '+hardwareReqs+' is 1 (if quad core) or 2 (if dual core).'; +var descCN = ''+titleCN+'

'+detailCN+'

'+sourceCN+'

'; var titleCPC = 'Number of cores per CPU'; var sourceCPC = 'Source: '+sourceComon; -var valuesCPC = 'The number of cores per CPU on the node.'; -var descCPC = ''+titleCPC+'

'+valuesCPC+'

'+sourceCPC; +var detailCPC = 'The number of cores per CPU on the node.'; +var descCPC = ''+titleCPC+'

'+detailCPC+'

'+sourceCPC+'

'; var titleCR = 'CPU clock rate'; -var detailCR = 'The clock rate for the CPUs on the node. For reference, the '+hardwareReqs+' is 2.4 GHz.'; +var detailCR = 'The clock rate for the CPUs on the node. For reference, the '+hardwareReqs+' is 2.4 GHz.'; var sourceCR = 'Source: '+sourceComon; -var valuesCR = 'Unit: GHz'; -var descCR = ''+titleCR+'

'+detailCR+'

'+valuesCR+'

'+sourceCR; +var valuesCR = 'Unit: GHz'; +var descCR = ''+titleCR+'

'+detailCR+'

'+valuesCR+'

'+sourceCR+'

'; var selectPeriodCF = 'Select period: '; var titleCF = 'Free CPU'; var sourceCF = 'Source: '+sourceComon+' (via '+sourceMySlice+')'; -var valuesCF = 'Unit: %'; -var detailCF = ' The average CPU percentage that gets allocated to a test slice named burb that is periodically run by CoMon.'; -var descCF = ''+titleCF+'

'+detailCF+'

'+selectPeriodCF+'

'+valuesCF+'

'+sourceCF; +var valuesCF = 'Unit: %'; +var detailCF = 'The average CPU percentage that gets allocated to a test slice named burb that is periodically run by CoMon.'; +var descCF = ''+titleCF+'

'+detailCF+'

'+selectPeriodCF+'

'+valuesCF+'

'+sourceCF+'

'; var titleDN = 'Toplevel domain name'; var sourceDN = 'Source: '+sourceMyPLC; -var descDN = ''+titleDN+'

'+sourceDN; +var descDN = ''+titleDN+'

'+sourceDN+'

'; var titleDA = 'Date added'; var sourceDA = 'Source: '+sourceMyPLC; -var detailDA = ' The date that the noded was added to PlanetLab.'; -var descDA = ''+titleDA+'

'+detailDA+'

'+sourceDA; +var detailDA = 'The date that the node was added to PlanetLab.'; +var descDA = ''+titleDA+'

'+detailDA+'

'+sourceDA+'

'; var titleDL = 'Deployment'; -var detailDL = 'The deployment status.'; -var valuesDL = 'Values: alpha, beta, production, n/a'; +var detailDL = 'The deployment status.'; +var valuesDL = 'Values: alpha, beta, production, n/a'; var sourceDL = 'Source: '+sourceMyPLC; -var descDL = ''+titleDL+'

'+detailDL+'

'+valuesDL+'

'+sourceDL; +var descDL = ''+titleDL+'

'+detailDL+'

'+valuesDL+'

'+sourceDL+'

'; var titleDS = 'Disk size'; -var detailDS = 'The size of the hard disk available on the node. For reference, the '+hardwareReqs+' is 500 GB.'; +var detailDS = 'The size of the hard disk available on the node. For reference, the '+hardwareReqs+' is 500 GB.'; var sourceDS = 'Source: '+sourceComon; -var valuesDS = 'Unit: GB'; -var descDS = ''+titleDS+'

'+detailDS+'

'+valuesDS+'

'+sourceDS; +var valuesDS = 'Unit: GB'; +var descDS = ''+titleDS+'

'+detailDS+'

'+valuesDS+'

'+sourceDS+'

'; var titleDU = 'Current disk utilization'; var sourceDU = 'Source: '+sourceComon; -var valuesDU = 'Unit: GB'; -var detailDU = ' The amount of disk space currently consumed.'; -var descDU = ''+titleDU+'

'+detailDU+'

'+valuesDU+'

'+sourceDU; +var valuesDU = 'Unit: GB'; +var detailDU = 'The amount of disk space currently consumed.'; +var descDU = ''+titleDU+'

'+detailDU+'

'+valuesDU+'

'+sourceDU+'

'; var titleDF = 'Disk space free'; var sourceDF = 'Source: '+sourceComon; -var valuesDF = 'Unit: GB.'; -var detailDF = ' The amount of disk space currently available.'; -var descDF = ''+titleDF+'

'+detailDF+'

'+valuesDF+'

'+sourceDF; +var valuesDF = 'Unit: GB.'; +var detailDF = 'The amount of disk space currently available.'; +var descDF = ''+titleDF+'

'+detailDF+'

'+valuesDF+'

'+sourceDF+'

'; var titleHC = 'Hop count (pairwise)'; var sourceHC = 'Source: '+sourceTophat; -var detailHC = 'TopHat conducts traceroutes every five minutes in a full mesh between all PlanetLab nodes. The hop count is the length of the traceroute from the node to the reference node, based upon the most recently reported traceroute.'; -var descHC = ''+titleHC+'

'+detailHC+'

'+selectReferenceNode+'

'+sourceHC; +var detailHC = 'TopHat conducts traceroutes every five minutes in a full mesh between all PlanetLab nodes. The hop count is the length of the traceroute from the node to the reference node, based upon the most recently reported traceroute.'; +var descHC = ''+titleHC+'

'+detailHC+'

'+selectReferenceNode+'

'+sourceHC+'

'; var titleIP = 'IP address'; var sourceIP = 'Source: '+sourceMyPLC; -var descIP = ''+titleIP+'

'+sourceIP; +var descIP = ''+titleIP+'

'+sourceIP+'

'; var selectPeriodL = 'Select period: '; var titleL= 'Load '; var sourceL = 'Source: '+sourceComon; -var valuesL = 'Unit: 5-minute load'; -var detailL = 'The average 5-minute load (as reported by the Unix uptime command) over the selected period.'; -var descL = ''+titleL+'

'+detailL+'

'+selectPeriodL+'

'+valuesL+'

'+sourceL; +var valuesL = 'Unit: 5-minute load'; +var detailL = 'The average 5-minute load (as reported by the Unix uptime command) over the selected period.'; +var descL = ''+titleL+'

'+detailL+'

'+selectPeriodL+'

'+valuesL+'

'+sourceL+'

'; var titleLON= 'Longitude'; var sourceLON = 'Source: '+sourceTophat; -var descLON = ''+titleLON+'

'+sourceLON; +var descLON = ''+titleLON+'

'+sourceLON+'

'; var titleLAT= 'Latitude'; var sourceLAT = 'Source: '+sourceTophat; -var descLAT = ''+titleLAT+'

'+sourceLAT; +var descLAT = ''+titleLAT+'

'+sourceLAT+'

'; var titleLCN= 'Location (Country)'; var sourceLCN = 'Source: '+sourceMaxmind+' (via '+sourceTophat+')'; -var detailLCN = 'Based on the latitude and longitude information.'; -var descLCN = ''+titleLCN+'

'+detailLCN+'

'+sourceLCN; +var detailLCN = 'Based on the latitude and longitude information.'; +var descLCN = ''+titleLCN+'

'+detailLCN+'

'+sourceLCN+'

'; var titleLCT= 'Location (Continent)'; var sourceLCT = 'Source: '+sourceMaxmind+' (via '+sourceTophat+')'; -var detailLCT = 'Based on the latitude and longitude information.'; -var descLCT = ''+titleLCT+'

'+detailLCT+'

'+sourceLCT; +var detailLCT = 'Based on the latitude and longitude information.'; +var descLCT = ''+titleLCT+'

'+detailLCT+'

'+sourceLCT+'

'; var titleLCY= 'Location (City)'; var sourceLCY = 'Source: '+sourceMaxmind+' (via '+sourceTophat+')'; -var detailLCY = 'Based on the latitude and longitude information.'; -var descLCY = ''+titleLCY+'

'+detailLCY+'

'+sourceLCY; +var detailLCY = 'Based on the latitude and longitude information.'; +var descLCY = ''+titleLCY+'

'+detailLCY+'

'+sourceLCY+'

'; var titleLPR= 'Location precision radius'; var sourceLPR = 'Source: '+sourceTophat; -var valuesLPR = 'Unit: float.'; -var detailLPR = 'The radius of the circle corresponding to the error in precision of the geolocalization estimate.'; -var descLPR = ''+titleLPR+'

'+detailLPR+'

'+valuesLPR+'

'+sourceLPR; +var valuesLPR = 'Unit: float.'; +var detailLPR = 'The radius of the circle corresponding to the error in precision of the geolocalization estimate.'; +var descLPR = ''+titleLPR+'

'+detailLPR+'

'+valuesLPR+'

'+sourceLPR+'

'; var titleLRN= 'Location (Region)'; var sourceLRN = 'Source: '+sourceMaxmind+' (via '+sourceTophat+')'; -var detailLRN = 'Based on the latitude and longitude information.'; -var descLRN = ''+titleLRN+'

'+detailLRN+'

'+sourceLRN; +var detailLRN = 'Based on the latitude and longitude information.'; +var descLRN = ''+titleLRN+'

'+detailLRN+'

'+sourceLRN+'

'; var titleMS= 'Memory size'; -var detailMS = 'The memory size (RAM) available on the node. For reference, the '+hardwareReqs+' is 4 GB.'; +var detailMS = 'The memory size (RAM) available on the node. For reference, the '+hardwareReqs+' is 4 GB.'; var sourceMS = 'Source: '+sourceComon; -var valuesMS = 'Unit: GB.'; -var descMS = ''+titleMS+'

'+detailMS+'

'+valuesMS+'

'+sourceMS; +var valuesMS = 'Unit: GB.'; +var descMS = ''+titleMS+'

'+detailMS+'

'+valuesMS+'

'+sourceMS+'

'; var selectPeriodMU = 'Select period: '; var titleMU = 'Memory utilization'; var sourceMU = 'Source: '+sourceComon; -var valuesMU = '

Unit: %'; -var detailMU = 'The average active memory utilization as reported by CoMon.'; -var descMU = ''+titleMU+'

'+detailMU+'

'+selectPeriodMU+'

'+valuesMU+'

'+sourceMU; - -var titleNEC= 'Network information (ETOMIC)'; -var sourceNEC = 'Source: '+sourceTophat; -var valuesNEC = 'Values: yes/no'; -var detailNEC = 'The existence of a colocated ETOMIC box. When an ETOMIC box is present, you have the possibility to conduct high-precision measurements through the '+sourceTophatAPI+'.'; -var descNEC = ''+titleNEC+'

'+detailNEC+'

'+valuesNEC+'

'+sourceNEC; - -var titleNSN= 'Network information (SONoMA)'; -var sourceNSN = 'Source: '+sourceTophat; -var valuesNSN = 'Values: yes/no'; -var detailNSN = 'The existence of a SONoMA agent. When an SONoMA is present, you have the possibility to have access to high-precision measurements through the '+sourceTophatAPI+'.'; -var descNSN = ''+titleNSN+'

'+detailNSN+'

'+valuesNSN+'

'+sourceNSN; - -var titleNTH= 'Network information (TopHat)'; -var sourceNTH = 'Source: '+sourceTophat; -var valuesNTH = 'Values: yes/no'; -var detailNTH = 'The existence of a colocated TDMI (TopHat Dedicated Measurement Infrastructure) agent. When a TDMI agent is present, you have access to a wide variety of network topology measurements through the '+sourceTophatAPI+'.'; -var descNTH = ''+titleNTH+'

'+detailNTH+'

'+valuesNTH+'

'+sourceNTH; - -var titleNDS= 'Network information (DIMES)'; -var sourceNDS = 'Source: '+sourceTophat; -var valuesNDS = 'Values: yes/no'; -var detailNDS = 'The existence of a colocated DIMES agent. When a DIMES agent is present, you have access to DIMES measurements through the '+sourceTophatAPI+'.'; -var descNDS = ''+titleNDS+'

'+detailNDS+'

'+valuesNDS+'

'+sourceNDS; +var valuesMU = 'Unit: %'; +var detailMU = 'The average active memory utilization as reported by CoMon.'; +var descMU = ''+titleMU+'

'+detailMU+'

'+selectPeriodMU+'

'+valuesMU+'

'+sourceMU+'

'; + +var titleMA= 'Measurement agents'; +var sourceMA = 'Source: '+sourceTophat; +var valuesMA = 'Values: ETOMIC, SONoMA, TDMI, DIMES.'; +var detailMA = 'Co-located measurement agents.'; +var descMA = ''+titleMA+'

'+detailMA+'

'+valuesMA+'

'+sourceMA+'

'; + +var titleMAS= 'Measurement agent SONoMA'; +var sourceMAS = 'Source: '+sourceTophat; +var valuesMAS = 'Values: Node type (e.g., PLE, APE)'; +var detailMAS = 'The existence of a SONoMA agent. When an SONoMA is present, you have the possibility to have access to high-precision measurements through the '+sourceTophatAPI+'.'; +var descMAS = ''+titleMAS+'

'+detailMAS+'

'+valuesMAS+'

'+sourceMAS+'

'; + +var titleMAE= 'Measurement agent ETOMIC'; +var sourceMAE = 'Source: '+sourceTophat; +var valuesMAE = 'Values: yes/no'; +var detailMAE = 'The existence of a colocated ETOMIC box. When an ETOMIC box is present, you have the possibility to conduct high-precision measurements through the '+sourceTophatAPI+'.'; +var descMAE = ''+titleMAE+'

'+detailMAE+'

'+valuesMAE+'

'+sourceMAE+'

'; + +var titleMAT= 'Measurement agent TDMI'; +var sourceMAT = 'Source: '+sourceTophat; +var valuesMAT = 'Values: yes/no'; +var detailMAT = 'The existence of a colocated TDMI (TopHat Dedicated Measurement Infrastructure) agent. When a TDMI agent is present, you have access to a wide variety of network topology measurements through the '+sourceTophatAPI+'.'; +var descMAT = ''+titleMAT+'

'+detailMAT+'

'+valuesMAT+'

'+sourceMAT+'

'; + +var titleMAD= 'Measurement agent DIMES'; +var sourceMAD = 'Source: '+sourceTophat; +var valuesMAD = 'Values: yes/no'; +var detailMAD = 'The existence of a colocated DIMES agent. When a DIMES agent is present, you have access to DIMES measurements through the '+sourceTophatAPI+'.'; +var descMAD = ''+titleMAD+'

'+detailMAD+'

'+valuesMAD+'

'+sourceMAD+'

'; var titleNSF= 'Network information (spoof)'; var sourceNSF = 'Source: '+sourceTophat; -var valuesNSF = '

Values: yes/no'; -var detailNSF = ' Whether the node can send packets successfully (or not) with a spoofed IP source address.'; -var descNSF = ''+titleNSF+'

'+detailNSF+'

'+valuesNSF+'

'+sourceNSF; +var valuesNSF = 'Values: yes/no'; +var detailNSF = 'Whether the node can send packets successfully (or not) with a spoofed IP source address.'; +var descNSF = ''+titleNSF+'

'+detailNSF+'

'+valuesNSF+'

'+sourceNSF+'

'; var titleNSR= 'Network information (source route)'; var sourceNSR = 'Source: '+sourceTophat; -var valuesNSR = '

Values: yes/no'; -var detailNSR = ' Whether the node can send packets packets using the IP source route option. See herefor more info.'; -var descNSR = ''+titleNSR+'

'+detailNSR+'

'+valuesNSR+'

'+sourceNSR; +var valuesNSR = 'Values: yes/no'; +var detailNSR = 'Whether the node can send packets packets using the IP source route option. See herefor more info.'; +var descNSR = ''+titleNSR+'

'+detailNSR+'

'+valuesNSR+'

'+sourceNSR+'

'; var titleNTP= 'Network information (timestamp)'; var sourceNTP = 'Source: '+sourceTophat; -var valuesNTP = '

Values: yes/no'; -var detailNTP = ' Whether the node can send packets packets using the IP timestamp option. See herefor more info.'; -var descNTP = ''+titleNTP+'

'+detailNTP+'

'+valuesNTP+'

'+sourceNTP; +var valuesNTP = 'Values: yes/no'; +var detailNTP = 'Whether the node can send packets packets using the IP timestamp option. See herefor more info.'; +var descNTP = ''+titleNTP+'

'+detailNTP+'

'+valuesNTP+'

'+sourceNTP+'

'; var titleNRR= 'Network information (record route)'; var sourceNRR = 'Source: '+sourceTophat; -var valuesNRR = '

Values: yes/no'; -var detailNRR = ' Whether the node can send packets packets using the IP record route option. See herefor more info.'; -var descNRR = ''+titleNRR+'

'+detailNRR+'

'+valuesNRR+'

'+sourceNRR; +var valuesNRR = 'Values: yes/no'; +var detailNRR = 'Whether the node can send packets packets using the IP record route option. See herefor more info.'; +var descNRR = ''+titleNRR+'

'+detailNRR+'

'+valuesNRR+'

'+sourceNRR+'

'; var titleOS = 'Operating system'; -var detailOS = 'Fedora or CentOS distribution to use for node or slivers.'; +var detailOS = 'Fedora or CentOS distribution to use for node or slivers.'; var sourceOS = 'Source: '+sourceMyPLC; -var valuesOS = 'Values: f8, f12, Cent/OS, other, n/a'; -var descOS = ''+titleOS+'

'+valuesOS+'

'+sourceOS; +var valuesOS = 'Values: f8, f12, Cent/OS, other, n/a'; +var descOS = ''+titleOS+'

'+detailOS+'

'+valuesOS+'

'+sourceOS+'

'; + +var titleRTT = 'Round Trip Time (pairwise)'; +var detailRTT = 'The round trip time between a selected SONoMA agent and PlanetLab nodes.'; +var sourceRTT = 'Source: '+sourceSonoma+' (via '+sourceTophat+ ')'; +var descRTT = ''+titleRTT+'

'+detailRTT+'

'+selectReferenceNodeRTT+'

'+sourceRTT+'

'; var selectPeriodR = 'Select period: '; var titleR = 'Reliability'; var sourceR = 'Source: '+sourceComon+' (via '+sourceMySlice+')'; -var detailR = 'CoMon queries nodes every 5 minutes, for 255 queries per day. The average reliability is the percentage of queries over the selected period for which CoMon reports a value. The period is the most recent for which data is available, with CoMon data being collected by MySlice daily.'; -var valuesR = 'Unit: %'; -var descR = ''+titleR+'

'+detailR+'

'+selectPeriodR+'

'+valuesR+'

'+sourceR; +var detailR = 'CoMon queries nodes every 5 minutes, for 255 queries per day. The average reliability is the percentage of queries over the selected period for which CoMon reports a value. The period is the most recent for which data is available, with CoMon data being collected by MySlice daily.'; +var valuesR = 'Unit: %'; +var descR = ''+titleR+'

'+detailR+'

'+selectPeriodR+'

'+valuesR+'

'+sourceR+'

'; var titleRES = 'Reservation capabilities'; var sourceRES = 'Source: '+sourceMyPLC; -//var valuesRES = 'Values: yes/no'; -var valuesRES = 'Values: -R- (if yes)'; -var detailRES = ' Whether the node can be reserved for a certain duration.
Your slivers will be available only during timeslots where you have obtained leases (see tab above)
.

Please note that as of August 2010 this feature is experimental. Feedback is appreciated at devel@planet-lab.org'; -var descRES = ''+titleRES+'

'+detailRES+'

'+valuesRES+'

'+sourceRES; +//var valuesRES = 'Values: yes/no'; +var valuesRES = 'Values: -R- (if yes)'; +var detailRES = 'Whether the node can be reserved for a certain duration. Your slivers will be available only during timeslots where you have obtained leases (see tab above).

Please note that as of August 2010 this feature is experimental. Feedback is appreciated at devel@planet-lab.org

'; +var descRES = ''+titleRES+'

'+detailRES+'

'+valuesRES+'

'+sourceRES+'

'; var selectPeriodS = 'Select period: '; var titleS = 'Active slices'; var sourceS = 'Source: '+sourceComon+' (via '+sourceMySlice+')'; -var valuesS = 'Unit: %'; -var detailS = 'Average number of active slices over the selected period for which CoMon reports a value. The period is the most recent for which data is available, with CoMon data being collected by MySlice daily.'; -var descS = ''+titleS+'

'+detailS+'

'+selectPeriodS+'

'+valuesS+'

'+sourceS; +var valuesS = 'Unit: %'; +var detailS = 'Average number of active slices over the selected period for which CoMon reports a value. The period is the most recent for which data is available, with CoMon data being collected by MySlice daily.'; +var descS = ''+titleS+'

'+detailS+'

'+selectPeriodS+'

'+valuesS+'

'+sourceS+'

'; var titleSM= 'Slices in memory'; -var detailSM = 'The total number of slices in memory (both active and inactive).'; +var detailSM = 'The total number of slices in memory (both active and inactive).'; var sourceSM = 'Source: '+sourceComon; -var descSM = ''+titleSM+'

'+detailSM+'

'+sourceSM; +var descSM = ''+titleSM+'

'+detailSM+'

'+sourceSM+'

'; var titleSN = 'Site name'; var sourceSN = 'Source: '+sourceMyPLC; -var descSN = ''+titleSN+'

'+sourceSN; +var descSN = ''+titleSN+'

'+sourceSN+'

'; var selectPeriodSSH = 'Select period: '; var titleSSH = 'Average SSH response delay'; -var valuesSSH = 'Unit: %'; -var detailSSH = 'The average response delay of the node to SSH logins over the selected period for which CoMon reports a value. The period is the most recent for which data is available, with CoMon data being collected by MySlice daily.'; +var valuesSSH = 'Unit: msecs'; +var detailSSH = 'The average response delay of the node to SSH logins over the selected period for which CoMon reports a value. The period is the most recent for which data is available, with CoMon data being collected by MySlice daily.'; var sourceSSH ='Source: '+sourceComon+' (via '+sourceMySlice+')'; -var descSSH = ''+titleSSH+'

'+detailSSH+'

'+selectPeriodSSH+'

'+valuesSSH+'

'+sourceSSH; +var descSSH = ''+titleSSH+'

'+detailSSH+'

'+selectPeriodSSH+'

'+valuesSSH+'

'+sourceSSH+'

'; var titleUT = 'Uptime'; var sourceUT = 'Source: '+sourceComon; -var valuesUT = 'Unit: days'; +var valuesUT = 'Unit: days'; var detailUT = 'The continuous uptime until the moment that the page is loaded, as reported by the CoMon html query API.'; -var descUT = ''+titleUT+'

'+detailUT+'

'+valuesUT+'

'+sourceUT; +var descUT = ''+titleUT+'

'+detailUT+'

'+valuesUT+'

'+sourceUT+'

'; + //Categorization of columns in different types, useful for filtering @@ -324,8 +335,6 @@ function debugfilter(s) { function highlightOption(divid) { - //debugfilter("highlighting option "+divid); - var columns = document.getElementsByName('columnlist'); for(var j = 0; j < columns.length; j++) columns[j].className = 'out'; @@ -345,19 +354,20 @@ function highlightOption(divid) { function showDescription(h) { - //debugfilter("showing description "+h); - -//Checks if the detailed description div exists if (document.getElementById('selectdescr')) { //Checks if there is a detailed description defined if (window['desc'+h]) document.getElementById('selectdescr').innerHTML = ""+window['desc'+h]; - //else if (document.getElementById('fdesc'+h)) - //document.getElementById('selectdescr').innerHTML = document.getElementById('fdesc'+h).value; else document.getElementById('selectdescr').innerHTML = "No detailed description provided"; } + + if (document.getElementById('refnodes_div')) + document.getElementById('refnodes_div').innerHTML = ref_nodes_select; + + if (document.getElementById('refnodes_rtt_div')) + document.getElementById('refnodes_rtt_div').innerHTML = ref_nodes_select_rtt; } @@ -373,6 +383,8 @@ function overrideTitles() { if (window['title'+kk]) document.getElementById('htitle'+kk).innerHTML = window['title'+kk]; } + + } //When the checkbox is clicked. Adds/removes column respectively @@ -421,19 +433,27 @@ function changeSelectStatus(column) { } } -function updateReferenceNode(new_ref_node) { +function updateReferenceNode(select_id, new_ref_node) { - var old_ref_node = document.getElementById('selected_reference_node').value; - document.getElementById('selected_reference_node').value=new_ref_node; + var old_ref_node = document.getElementById(select_id).value; + document.getElementById(select_id).value=new_ref_node; - //debugfilter("changed "+old_ref_node+" with "+new_ref_node); + //debugfilter("changed "+old_ref_node+" with "+new_ref_node+" and column is "+document.getElementById('checkHC').checked); - if (document.getElementById('checkHC').checked) + if (select_id == 'refnodeHC' && document.getElementById('checkHC').checked) { + document.getElementById('fetchedHC').value = "false"; addColumnAjax('HC', 'HC'); //debugfilter("replacing "+old_ref_node+" with "+new_ref_node); replaceColumnConfiguration('HC:'+old_ref_node,'HC:'+new_ref_node); } + else if (select_id == 'refnodeRTT' && document.getElementById('checkRTT').checked) + { + document.getElementById('fetchedRTT').value = "false"; + addColumnAjax('RTT', 'RTT'); + //debugfilter("replacing "+old_ref_node+" with "+new_ref_node); + replaceColumnConfiguration('RTT:'+old_ref_node,'RTT:'+new_ref_node); + } } @@ -458,6 +478,7 @@ function updatePeriod(h, new_period) { /* RESET/SAVE CONFIGURATION + */ function getHTTPObject() @@ -683,7 +704,6 @@ ADD/REMOVE COLUMNS */ - function convert_data(value, data_source, data_type, tagname) { //debugfilter("v["+tagname+"]="+value+"-"); @@ -739,12 +759,11 @@ var data_table = data.split("|"); //debugfilter("

data[2] = "+data_table[2]); //debugfilter("data = "+data + " with type "+data_type + " and source "+data_source); +//debugfilter("

data table length = "+data_table.length); -if (data != "") +if (data_table.length > 1) { -//debugfilter("GOT SOME DATA"); - var node_data; var table_id1 = 'nodes'; @@ -790,6 +809,7 @@ if (data != "") } } + //debugfilter("Reset sorting ....."); //tablePaginater.init(table_id1); fdTableSort.init(table_id1); @@ -842,10 +862,10 @@ if (data_table[node_index] == '---potential---') //fdTableSort.removeTableCache(table_id2); //document.getElementById('loading'+column).innerHTML = ""; - //debugfilter("Reset sorting ....."); } + document.getElementById('loading'+column).innerHTML = ""; } @@ -875,13 +895,12 @@ function addColumnAjax(column, header) { var slice_id = document.getElementById('slice_id').value; var selectedperiod = document.getElementById('period'+column).value; - var fetched = document.getElementById('fetched'+column).value; var data_source = document.getElementById('source'+column).value; var data_type = document.getElementById('type'+column).value; var to_load = false; - //debugfilter("
adding "+column+","+header+','+fetched+','+t); + //debugfilter("
adding "+column+","+header+','+fetched+','+t+','+data_source+','+data_type); if (fetched.indexOf("false")!=-1) { @@ -896,8 +915,12 @@ function addColumnAjax(column, header) { if (to_load) { + //debugfilter("ready to load ... "); document.getElementById('loading'+column).innerHTML = ""; var url = "/plekit/php/updateColumn.php?slice_id="+slice_id+"&tagName="+t+"&data_type="+data_type+"&data_source="+data_source; + if (t == "hopcount") + url = url+"&ref_node="+document.getElementById('selected_reference_node').value; + //debugfilter("calling "+url); load_data(column, header, url, data_source, data_type, t); } } @@ -921,8 +944,10 @@ function addColumn(column, fetch) { if (inTypeD(column)!=-1) { - conf = header+":"+document.getElementById('reference_node').value; - document.getElementById('selected_reference_node').value=document.getElementById('reference_node').value; + //conf = header+":"+document.getElementById('reference_node').value; + //document.getElementById('selected_reference_node').value=document.getElementById('reference_node').value; + conf = header+":"+document.getElementById('refnodeHC').value; + document.getElementById('selected_reference_node').value=document.getElementById('refnodeHC').value; } else conf = header; @@ -963,8 +988,8 @@ function deleteColumn(column) { } -/* +/* EXTRA

"); - print("
            
"); + print("