// Common functions
require_once 'plc_functions.php';
+require_once 'plc_objects.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","48M");
+ini_set("memory_limit","64M");
// --------------------
// recognized URL arguments
$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();
// --------------------
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['node_type'] != 'regular')
+ $messages []= $node['node_type'];
+
+ // checks on local nodes only
+ if ( ( ! $node['peer_id']) ) {
+ // has it got 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_fixed_columns=array('hostname','node_type','site_id','node_id','boot_state','run_level','last_contact',
+ '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;
$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);
$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;
+$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["Hostname"]="string";
+$short="IP"; $long="IP Address"; $type='sortIPAddress';
+ $headers[$short]=array('type'=>$type,'title'=>$long); $notes []= "$short = $long";
+$short="ST"; $long=Node::status_footnote(); $type='string';
+ $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());
+$short="?"; $long="extra status info"; $type='string';
+ $headers[$short]=array('type'=>$type,'title'=>$long); $notes []= "$short = $long";
# initial sort on hostnames
-$table=new PlekitTable ("nodes",$headers,4);
+$table=new PlekitTable ("nodes",$headers,3+$offset);
$table->start();
$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'];
$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']);
$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));
+ list($label,$class) = Node::status_label_class_($node);
+ $table->cell ($label,array('class'=>$class));
$table->cell (count($node['slice_ids']));
+ foreach ($visiblecolumns as $tagname) $table->cell($node[$tagname]);
$table->cell (node_status($node));
$table->row_end();
}
-$notes=array("S = number of slivers");
$table->end(array('notes'=>$notes));
$nifty->end();