<?php
require "../include/authentication.inc";
require '../include/db.inc';

session_start();

// Connect to a authenticated session or relocate to logout.php
sessionAuthenticate();

?>
<head>
  <title>Testbed Status</title>
  <font size=+1>Testbed Status</font>
</head>
<body>
<?
  // connect to mysql
  $db = onlconnect("onlnew");

  $cur_user = $_SESSION['loginUsername'];

  $query = "select tid,type,shortdesc from types where tid in (select tid from typepolicy where grp in (select grp from members where prime=1 and user='$cur_user'))";
  $result = onlquery($query,$db);
  while($row = mysql_fetch_assoc($result))
  {
    $types[$row['tid']] = $row['type'];
    $descs[$row['tid']] = $row['shortdesc'];
  }
  mysql_free_result($result);

  $query = "select cluster,tid,state from hwclusters order by tid,cluster";
  $result = onlquery($query,$db);
  while($row = mysql_fetch_assoc($result))
  {
    $clusters[$row['tid']][] = $row['cluster'];
    $states[$row['cluster']] = $row['state'];
  }
  mysql_free_result($result);
  
  $query = "select nodes.node,nodes.tid,nodes.state,hwclustercomps.cluster from nodes left join hwclustercomps using (node) order by tid desc,node";
  $result = onlquery($query,$db);
  while($row = mysql_fetch_assoc($result))
  {
    $states[$row['node']] = $row['state'];
    if(!is_null($row['cluster']))
    { 
      $clustercomps[$row['cluster']][] = $row['node'];
      $marked[$row['node']] = true;
    }
    else
    {
      $nodes[$row['tid']][] = $row['node'];
      $marked[$row['node']] = false;
    }
  }
  mysql_free_result($result);

  $query = "select user,rid from reservations where rid in (select rid from experiments where begin=end)";
  $result = onlquery($query,$db);
  while($row = mysql_fetch_assoc($result))
  {
    $user = $row['user'];
    $rid = $row['rid'];

    $exps[$user] = "";

    //$clusterq = "select cluster from hwclusterschedule where rid=$rid";
    $clusterq = "select distinct(hwclustercomps.cluster),nodes.state from hwclustercomps left join nodes using (node) where state!='free' and cluster in (select cluster from hwclusterschedule where rid=$rid)";
    $clusterres = onlquery($clusterq,$db);
    while($clusterrow = mysql_fetch_assoc($clusterres))
    {
      $cluster = $clusterrow['cluster'];
      $exps[$user] .= "$cluster,";
    }
    mysql_free_result($clusterres);

    $nodeq = "select nodes.node,nodes.state,hwclustercomps.cluster from nodes left join hwclustercomps using (node) where node in (select node from nodeschedule where rid=$rid)";
    $noderes = onlquery($nodeq,$db);
    while($noderow = mysql_fetch_assoc($noderes))
    {
      if(!is_null($noderow['cluster'])) continue;
      if($noderow['state'] != "free")
      {
        $node = $noderow['node'];
        $exps[$user] .= "$node,";
      }
    }
    mysql_free_result($noderes);
   
    $exps[$user] = rtrim($exps[$user],",");
  }
  mysql_free_result($result);

  // have a table that shows current experiments
  if(isset($exps))
  {
    echo "<br><br>Current Experiments<table frame=border rules=all cellpadding=2>\n";
    echo "<tr>";
    echo "<th>User</th><th>Nodes</th>";
    echo "</tr>\n";
    foreach($exps as $user => $nodelist)
    {
      echo "<tr>";
      echo "<td>$user</td><td>$nodelist</td>";
      echo "</tr>\n";
    }
    echo "</table>\n";
  }

  echo "<br><br>Current Node States<br><br>\n";


  foreach($types as $tid => $type)
  {
    if($type != "hwcluster") continue;
    if(!isset($clusters[$tid])) continue;
   
    echo "$descs[$tid]:<br>\n";
    foreach($clusters[$tid] as $cluster)
    {
      $cstate = $states[$cluster];
      echo "<div style=\"float: left; margin-right: 30px\">\n";
      echo "<table frame=border rules=all cellpadding=2>\n";
      echo "<tr><th colspan=2>$cluster</th></tr>\n";
      
      foreach($clustercomps[$cluster] as $node)
      {
        $nstate = $states[$node];
        echo "<tr><td>$node</td><td>$nstate</td></tr>\n";
      }
      echo "</table>\n";
      echo "<br>\n";
      echo "</div>\n";
    }
    echo "<br style=\"clear: left \"><br>\n";
  }

  foreach($types as $tid => $type)
  {
    if($type != "base") 
    {
      continue;
    }
    if(!isset($nodes[$tid])) 
    {
      continue;
    }

    echo "$descs[$tid]:<br>\n";
    echo "<div style=\"float: left; margin-right: 30px\">\n";
    echo "<table frame=border rules=all cellpadding=2>\n";
    $cnt = 0;
    foreach($nodes[$tid] as $node)
    {
      if($marked[$node]) continue;
      $nstate = $states[$node];
      echo "<tr><td>$node</td><td>$nstate</td></tr>\n";
      if($cnt % 15 == 14)
      {
        echo "</table>\n";
        echo "<br>\n";
        echo "</div>\n";
        echo "<div style=\"float: left; margin-right: 30px\">\n";
        echo "<table frame=border rules=all cellpadding=2>\n";
      }
      $cnt++;
    }
    echo "</table>\n";
    echo "<br>\n";
    echo "</div>\n";
    echo "<br style=\"clear: left \"><br>\n";
  }

  onlclose($db);
?>
</body>
