currentusage.php3 5.14 KB
Newer Older
1 2 3 4 5 6 7 8
<?php
#
# EMULAB-COPYRIGHT
# Copyright (c) 2000-2005 University of Utah and the Flux Group.
# All rights reserved.
#
require("defs.php3");

9 10 11 12
#
# Get current user.
# 
$uid = GETLOGIN();
13

14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
#
# For anonymous users, show experiment stats.
#
function SHOWSTATS()
{
    $query_result =
	DBQueryFatal("select count(*) from experiments as e " .
	     "left join experiment_stats as s on s.exptidx=e.idx " .
	     "left join experiment_resources as rs on rs.idx=s.rsrcidx ".
	     "where state='active' and rs.pnodes>0 and " .
		     "      e.pid!='emulab-ops' and ".
		     "      not (e.pid='ron' and e.eid='all')");
    
    if (mysql_num_rows($query_result) != 1) {
	$active_expts = "ERR";
    }
    else {
	$row = mysql_fetch_array($query_result);
	$active_expts = $row[0];
    }

    $query_result =
	DBQueryFatal("select count(*) from experiments where ".
		     "state='swapped' and pid!='emulab-ops' and ".
		     "pid!='testbed'");
    if (mysql_num_rows($query_result) != 1) {
	$swapped_expts = "ERR";
    }
    else {
	$row = mysql_fetch_array($query_result);
	$swapped_expts = $row[0];
    }

    $query_result =
	DBQueryFatal("select count(*) from experiments where ".
		     "swap_requests > 0 and idle_ignore=0 ".
		     "and pid!='emulab-ops' and pid!='testbed'");
    if (mysql_num_rows($query_result) != 1) {
	$idle_expts = "ERR";
    }
    else {
	$row = mysql_fetch_array($query_result);
	$idle_expts = $row[0];
    }
    $freepcs = TBFreePCs();
59

60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
    PAGEBEGINNING("Current Usage", 1, 1);
    ?>
     <table valign=top align=center width=100% height=100% border=1>
     <tr><td nowrap colspan=2 class="contentheader"
	     bgcolor="#E1EAEA" align="center">
	   <font size=-1>Current Experiments</font></td></tr>
     <tr><td class="menuoptusage" align=right>
          <?php echo $active_expts ?></td> 
         <td align="left" class="menuoptusage">
             <a target=_parent href=explist.php3#active>Active</a>
          </td></tr>
     <tr><td align="right" class="menuoptusage"><?php echo $idle_expts ?></td>
         <td align="left" class="menuoptusage">Idle</td></tr>
     <tr><td align="right" class="menuoptusage">
	     <?php echo $swapped_expts ?></td>
         <td align="left" class="menuoptusage">
            <a target=_parent href=explist.php3#swapped>Swapped</a>
          </td></tr>
     <tr><td align="right" class="menuoptusage">
	     <b><?php echo $freepcs ?></b></td>
         <td align="left" class="menuoptusage"><b>Free PCs</b></td>
     </tr>
     </table>
   <?php
84 85
}

86 87 88 89 90
#
# Logged in users, show free node counts.
#
function SHOWFREENODES()
{
91 92 93 94 95 96 97 98 99 100
    # Get typelist and set freecounts to zero.
    $query_result =
	DBQueryFatal("select n.type from nodes as n ".
		     "left join node_types as nt on n.type=nt.type ".
		     "where (role='testnode') and class='pc' ");
    while ($row = mysql_fetch_array($query_result)) {
	$type              = $row[0];
	$freecounts[$type] = 0;
    }
    
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
    # Get free totals by type.
    $query_result =
	DBQueryFatal("select n.eventstate,n.type,count(*) from nodes as n ".
		     "left join node_types as nt on n.type=nt.type ".
		     "left join reserved as r on r.node_id=n.node_id ".
		     "where (role='testnode') and class='pc' ".
		     "      and r.pid is null ".
		     "group BY n.eventstate,n.type");

    while ($row = mysql_fetch_array($query_result)) {
	$type  = $row[1];
	$count = $row[2];
        # XXX Yeah, I'm a doofus and can't figure out how to do this in SQL.
	if (($row[0] == TBDB_NODESTATE_ISUP) ||
	    ($row[0] == TBDB_NODESTATE_PXEWAIT) ||
	    ($row[0] == TBDB_NODESTATE_ALWAYSUP) ||
	    ($row[0] == TBDB_NODESTATE_POWEROFF)) {
	    $freecounts[$type] = $count;
	}
    }
    PAGEBEGINNING("Free Node Summary", 1, 1);

123 124 125
    $freepcs   = TBFreePCs();
    $reloading = TBReloadingPCs();

126
    echo "<table valign=top align=center width=100% height=100% border=1>
127
          <tr><td nowrap colspan=4 class=menuoptusage align=center>
128
 	       <font size=+1>$freepcs Free PCs</font></td></tr>\n";
129

130 131
    $pccount = count($freecounts);
    $newrow  = 1;
132 133 134
    foreach($freecounts as $key => $value) {
	$freecount = $freecounts[$key];

135
	if ($newrow || $pccount <= 3) 
136 137 138 139 140 141 142 143
	    echo "<tr>\n";
	$newrow = ($newrow ? 0 : 1);
	
	echo "<td class=menuoptusage align=right>
                  <a target=_parent href=shownodetype.php3?node_type=$key>
                      $key</a></td>
              <td class=menuoptusage align=left>${freecount}</td>\n";

144
	if ($newrow || $pccount <= 3) {
145 146 147
	    echo "</tr>\n";
	}
    }
148
    if (! $newrow && $pccount > 3) {
149 150
	echo "<td></td><td></td></tr>\n";
    }
151 152 153 154 155 156 157
    # Fill in up to 3 rows.
    if ($pccount < 3) {
	for ($i = $pccount + 1; $i <= 3; $i++) {
	    echo "<tr><td class=menuoptusage>&nbsp</td>
                      <td class=menuoptusage>&nbsp</td></tr>\n";
	}
    }
158

159 160
    echo "<tr>
          <td class=menuoptusage colspan=4 align=center>
161
               <b>$reloading PCs reloading</b></td>
162 163 164 165 166
          </tr>\n";
    echo "</table>";
}
     
#
167
# If user is anonymous, show experiment stats, otherwise useful info.
168
# 
169 170 171 172 173 174 175
if ($uid) {
    #
    # Auto refresh, but only for an hour of idle time.
    #
    if ($CHECKLOGIN_IDLETIME < (60 * 60)) {
	$autorefresh = 90;
    }
176 177 178 179
    SHOWFREENODES();
}
else {
    SHOWSTATS();
180 181
}

182
echo "</body></html>";
183