showexp_list.php3 20 KB
Newer Older
1
<?php
Leigh B. Stoller's avatar
Leigh B. Stoller committed
2
3
#
# EMULAB-COPYRIGHT
4
# Copyright (c) 2000-2003 University of Utah and the Flux Group.
Leigh B. Stoller's avatar
Leigh B. Stoller committed
5
6
# All rights reserved.
#
7
8
9
10
11
include("defs.php3");

#
# Standard Testbed Header
#
12
PAGEHEADER("Experiment Information Listing");
13
14
15
16
17
18
19

#
# Only known and logged in users can end experiments.
#
$uid = GETLOGIN();
LOGGEDINORDIE($uid);

20
$isadmin     = ISADMIN($uid);
21
22
$clause      = 0;
$having      = "";
Mac Newbold's avatar
Mac Newbold committed
23
24
$active      = 0;
$idle        = 0;
25

Leigh B. Stoller's avatar
Leigh B. Stoller committed
26
27
if (! isset($showtype))
    $showtype="active";
28
29
if (! isset($sortby))
    $sortby = "normal";
Chad Barb's avatar
   
Chad Barb committed
30
31
if (! isset($thumb)) 
    $thumb = 0;
32
33
if (! isset($noignore)) 
    $noignore = 0;
34

Chad Barb's avatar
   
Chad Barb committed
35
echo "<b>Show: ";
36

Chad Barb's avatar
   
Chad Barb committed
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
if ($showtype != "active") {
    echo "<a class='static' href='showexp_list.php3?showtype=active&sortby=$sortby&thumb=$thumb'>Active</a>, ";
} else {
    echo "Active, ";
}

if ($showtype != "batch") {
    echo "<a class='static' href='showexp_list.php3?showtype=batch&sortby=$sortby&thumb=$thumb'>Batch</a>, ";
} else {
    echo "Batch, ";
}

if ($isadmin) {
    if ($showtype != "idle") {
	echo "<a class='static' href='showexp_list.php3?showtype=idle&sortby=$sortby&thumb=$thumb'>Idle</a>, ";
    } else {
	echo "Idle, ";
    }
}

if ($showtype != "all") {
    echo "<a class='static' href='showexp_list.php3?showtype=all&sortby=$sortby&thumb=$thumb'>All</a>";
} else {
    echo "All";
}

echo "</b><br />\n";

#echo "<b>Show:
#         <a class='static' href='showexp_list.php3?showtype=active&sortby=$sortby&thumb=$thumb'>active</a>,
#         <a class='static' href='showexp_list.php3?showtype=batch&sortby=$sortby&thumb=$thumb'>batch</a>,";
#if ($isadmin) 
#     echo "\n<a class='static' href='showexp_list.php3?showtype=idle&sortby=$sortby&thumb=$thumb'".
#       ">idle</a>,";
#
#echo "\n       <a class='static' href='showexp_list.php3?showtype=all&sortby=$sortby&thumb=$thumb'>all</a>.
#      </b><br />\n";
Chad Barb's avatar
   
Chad Barb committed
74

75
76
77
78
79
# Default value for showlastlogin is 1 for admins
$showlastlogin = $isadmin;
# Note: setting this to 1 for non-admins still doesn't make the column
# show properly... it just shows the header in the table, over the
# wrong column. 
Leigh B. Stoller's avatar
Leigh B. Stoller committed
80

81
82
# How many hours is considered idle...
$idlehours = TBGetSiteVar("idle/threshold");
83

Leigh B. Stoller's avatar
Leigh B. Stoller committed
84
85
86
87
88
89
90
#
# Handle showtype
# 
if (! strcmp($showtype, "all")) {
    $title  = "All";
}
elseif (! strcmp($showtype, "active")) {
91
92
    # Active is now defined as "having nodes reserved" - we just depend on
    # the fact that we skip expts with no nodes further down...
93
94
95
    # But for speed, explicitly exclude expts that say they are "swapped"
    # (leave in activating, swapping, etc.)
    $clause = "e.state !='$TB_EXPTSTATE_SWAPPED'";
Leigh B. Stoller's avatar
Leigh B. Stoller committed
96
    $title  = "Active";
97
    $having = "having (ncount>0)";
98
    $active = 1;
Leigh B. Stoller's avatar
Leigh B. Stoller committed
99
100
101
102
}
elseif (! strcmp($showtype, "batch")) {
    $clause = "e.batchmode=1";
    $title  = "Batch";
103
}
104
elseif ((!strcmp($showtype, "idle")) && $isadmin ) {
105
    # Do not put active in the clause for same reason as active
106
107
    # However, it takes a long time with so many swapped expts
    $clause = "e.state !='$TB_EXPTSTATE_SWAPPED'";
108
    $title  = "Idle";
109
110
    #$having = "having (lastswap>=1)"; # At least one day since swapin
    $having = "having (lastswap>=0)";
111
    $idle = 1;
112
    $showlastlogin = 0; # don't show a lastlogin column
113
}
114
else {
115
    # See active above
Leigh B. Stoller's avatar
Leigh B. Stoller committed
116
    $title  = "Active";
117
    $having = "having (ncount>0)";
118
    $active = 1;
119
}
120

Chad Barb's avatar
   
Chad Barb committed
121
122
123


if (!$idle) {
Chad Barb's avatar
   
Chad Barb committed
124
125
126
    echo "<b>View: ";

    if ($thumb != 0) {
Chad Barb's avatar
   
Chad Barb committed
127
	echo "<a class='static' href='showexp_list.php3?showtype=$showtype&sortby=$sortby&thumb=0'>";
Chad Barb's avatar
   
Chad Barb committed
128
129
130
131
132
133
134
135
	echo "List";
        echo "</a>";
    } else {
        echo "List";
    }
    echo ", ";

    if ($thumb != 1) {
Chad Barb's avatar
   
Chad Barb committed
136
	echo "<a class='static' href='showexp_list.php3?showtype=$showtype&sortby=$sortby&thumb=1'>";
Chad Barb's avatar
   
Chad Barb committed
137
138
	echo "Detailed Thumbnails";
        echo "</a>";
Chad Barb's avatar
   
Chad Barb committed
139
    } else {
Chad Barb's avatar
   
Chad Barb committed
140
        echo "Detailed Thumbnails";
Chad Barb's avatar
   
Chad Barb committed
141
    }
Chad Barb's avatar
   
Chad Barb committed
142
143
144
    echo ", ";

    if ($thumb != 2) {
Chad Barb's avatar
   
Chad Barb committed
145
	echo "<a class='static' href='showexp_list.php3?showtype=$showtype&sortby=$sortby&thumb=2'>";
Chad Barb's avatar
   
Chad Barb committed
146
147
148
149
150
151
	echo "Brief Thumbnails";
        echo "</a>";
    } else {
        echo "Brief Thumbnails";
    }
    echo "</b><br />\n";
Chad Barb's avatar
   
Chad Barb committed
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192

if ($thumb && !$idle) {
    echo "<b>Sort by: ";
    if (isset($sortby) && $sortby != "normal" && $sortby != "pid") {
	echo "<a class='static' href='showexp_list.php3?showtype=$showtype&sortby=pid&thumb=$thumb'>";
	echo "Project";
        echo "</a>, ";
    } else {
        echo "Project, ";
    }	
    if ($sortby != "eid") {
	echo "<a class='static' href='showexp_list.php3?showtype=$showtype&sortby=eid&thumb=$thumb'>";
	echo "Experiment ID";
        echo "</a>, ";
    } else {
        echo "Experiment ID, ";
    }
    if ($sortby != "pcs") {
	echo "<a class='static' href='showexp_list.php3?showtype=$showtype&sortby=pcs&thumb=$thumb'>";
	echo "Node Usage";
        echo "</a>, ";
    } else {
        echo "Node Usage, ";
    }	
    if ($sortby != "name") {
	echo "<a class='static' href='showexp_list.php3?showtype=$showtype&sortby=name&thumb=$thumb'>";
	echo "Experiment Description";
        echo "</a>, ";
    } else {
        echo "Experiment Description, ";
    }	
    if ($sortby != "uid") {
	echo "<a class='static' href='showexp_list.php3?showtype=$showtype&sortby=uid&thumb=$thumb'>";
	echo "Creator";
        echo "</a>";
    } else {
        echo "Creator";
    }

    echo "</b><br />\n";
}
Chad Barb's avatar
   
Chad Barb committed
193
194
 
#    if (!$thumb) {
Chad Barb's avatar
   
Chad Barb committed
195
#	echo "<b><a class='static' href='showexp_list.php3?showtype=$showtype&sortby=$sortby&thumb=1'>".
Chad Barb's avatar
   
Chad Barb committed
196
197
198
#             "Switch to Thumbnail view".
#	     "</a></b><br />";
#    } else {
Chad Barb's avatar
   
Chad Barb committed
199
#	echo "<b><a class='static' href='showexp_list.php3?showtype=$showtype&sortby=$sortby&thumb=0'>".
Chad Barb's avatar
   
Chad Barb committed
200
201
202
#             "Switch to List view".
#	     "</a></b><br />";
#    }
Chad Barb's avatar
   
Chad Barb committed
203
204
205
206
}

echo "<br />\n";

Leigh B. Stoller's avatar
Leigh B. Stoller committed
207
208
209
#
# Handle sortby.
# 
210
211
212
213
214
215
216
217
218
if (! strcmp($sortby, "normal") ||
    ! strcmp($sortby, "pid"))
    $order = "e.pid,e.eid";
elseif (! strcmp($sortby, "eid"))
    $order = "e.eid,e.expt_head_uid";
elseif (! strcmp($sortby, "uid"))
    $order = "e.expt_head_uid,e.pid,e.eid";
elseif (! strcmp($sortby, "name"))
    $order = "e.expt_name";
219
elseif (! strcmp($sortby, "pcs"))
Chad Barb's avatar
   
Chad Barb committed
220
    $order = "ncount DESC,e.pid,e.eid";
221
222
223
else 
    $order = "e.pid,e.eid";

224
225
226
227
#
# Show a menu of all experiments for all projects that this uid
# is a member of. Or, if an admin type person, show them all!
#
228
229
230
231
232
233
if ($clause) {
    $clause = "and ($clause)";
} else {
    $clause = "";
}
    
234
if ($isadmin) {
Leigh B. Stoller's avatar
Leigh B. Stoller committed
235
    $experiments_result =
236
	DBQueryFatal("select e.*,".
237
		     "date_format(expt_swapped,\"%Y-%m-%d\") as d, ".
238
                     "date_format(expt_swapped,'%c/%e') as dshort, ".
239
		     "(to_days(now())-to_days(expt_swapped)) as lastswap, ".
240
                     "count(r.node_id) as ncount, swap_requests, ".
241
		     "round((unix_timestamp(now()) - ".
242
243
		     "unix_timestamp(last_swap_req))/3600,1) as lastreq, ".
		     "ve.thumb_hash as thumb_hash ".
244
		     "from experiments as e ".
245
246
		     "left join vis_experiments as ve on ".
		     "ve.pid=e.pid and ve.eid=e.eid ".
247
248
249
250
251
                     "left join reserved as r on e.pid=r.pid and e.eid=r.eid ".
                     "left join nodes as n on r.node_id=n.node_id ".
                     "where (n.type!='dnard' or n.type is null) $clause ".
                     "group by e.pid,e.eid ".
		     "$having ".
252
		     "order by $order");
253
254
}
else {
Leigh B. Stoller's avatar
Leigh B. Stoller committed
255
    $experiments_result =
256
257
	DBQueryFatal("select distinct e.*, ".
                     "date_format(expt_swapped,'%Y-%m-%d') as d, ".
258
                     "date_format(expt_swapped,'%c/%e') as dshort, ".
259
260
                     "count(r.node_id) as ncount, ".
		     "ve.thumb_hash as thumb_hash ".
261
262
263
                     "from group_membership as g ".
                     "left join experiments as e on ".
                     "  g.pid=e.pid and g.pid=g.gid ".
264
265
		     "left join vis_experiments as ve on ".
		     "ve.pid=e.pid and ve.eid=e.eid ".
266
267
268
                     "left join reserved as r on e.pid=r.pid and e.eid=r.eid ".
                     "left join nodes as n on r.node_id=n.node_id ".
                     "where (n.type!='dnard' or n.type is null) and ".
269
270
                     " g.uid='$uid' and e.pid is not null ".
		     "and e.eid is not null $clause ".
271
272
                     "group by e.pid,e.eid ".
		     "$having ".
273
                     "order by $order");    
274
}
275
if (! mysql_num_rows($experiments_result)) {
276
277
    USERERROR("There are no experiments running in any of the projects ".
              "you are a member of.", 1);
278
279
}

280
281
if (mysql_num_rows($experiments_result)) {
    echo "<center>
Leigh B. Stoller's avatar
Leigh B. Stoller committed
282
           <h2>$title Experiments</h2>
283
          </center>\n";
284

Mac Newbold's avatar
Mac Newbold committed
285
    if ($idle) {
286
287
288
289
      echo "<p><center><b>Experiments that have been idle at least 
$idlehours hours</b><br><a class='static' 
href='showexp_list.php3?showtype=idle&sortby=$sortby&thumb=$thumb&noignore=1'>
Include idle-ignore experiments</a></center></p><br />\n";
Mac Newbold's avatar
Mac Newbold committed
290
    }
291
    
292
    $idlemark = "<b>*</b>";
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
    #
    # Okay, I decided to do this as one big query instead of a zillion
    # per-exp queries in the loop below. No real reason, except my personal
    # desire not to churn the DB.
    # 
    $total_usage  = array();
    $perexp_usage = array();

    #
    # Geta all the classes of nodes each experiment is using, and create
    # a two-D array with their counts.
    # 
    $usage_query =
	DBQueryFatal("select r.pid,r.eid,nt.class, ".
		     "  count(nt.class) as ncount ".
		     "from reserved as r ".
		     "left join nodes as n on r.node_id=n.node_id ".
		     "left join node_types as nt on n.type=nt.type ".
		     "where n.type!='dnard' ".
		     "group by r.pid,r.eid,nt.class");

    while ($row = mysql_fetch_array($usage_query)) {
	$pid   = $row[0];
	$eid   = $row[1];
	$class = $row[2];
	$count = $row[3];
	
	$perexp_usage["$pid:$eid"][$class] = $count;
    }
322
323
324
325

    #
    # Now shove out the column headers.
    #
Chad Barb's avatar
   
Chad Barb committed
326
if ($thumb && !$idle) {
Chad Barb's avatar
   
Chad Barb committed
327
328
329
330
331
    if ($thumb == 2) {
	echo "<table border=2 cols=4 cellpadding=2 cellspacing=2 align=center><tr>";
    } else {
	echo "<table border=2 cols=2 cellpadding=2 cellspacing=2 align=center><tr>";
    }
Chad Barb's avatar
   
Chad Barb committed
332
333
334
335
336
337
338
    $thumbCount = 0;
 
    while ($row = mysql_fetch_array($experiments_result)) {	
	$pid  = $row["pid"];
	$eid  = $row["eid"]; 
	$huid = $row["expt_head_uid"];
	$name = stripslashes($row["expt_name"]);
339
	$date = $row["dshort"];
340
	$thumb_hash = $row["thumb_hash"];
Chad Barb's avatar
   
Chad Barb committed
341
342
	
	if ($idle && ($str=="&nbsp;" || !$pcs)) { continue; }
Chad Barb's avatar
   
Chad Barb committed
343
344
345
346
347
348
349
350
351
352
353
354
355

	if ($TBMAINSITE) {
	    # if image is not in thumbs dir, render it!
	    if ($thumb_hash && !file_exists ($TBDIR . "www/thumbs/tn$thumb_hash.png")) {
		# we'll be paranoid, and escape pid and eid.
		$prerender_cmd = $TBDIR . "libexec/vis/prerender -t " . 
		                 escapeshellcmd($pid) . " " . escapeshellcmd($eid) .
				 " > /dev/null";
		#echo "<!-- rerendered $pid $eid -->";
		system( $prerender_cmd );
	    }
	}

Chad Barb's avatar
   
Chad Barb committed
356
357
358
359
360
#	echo "<table style=\"float: none;\" width=256 height=192><tr><td>".
#	echo "And<table align=left width=256 height=192><tr width=256><td height=192>".
#	echo "<table width=256 height=192><tr><td>".
#	echo "<td width=50%>".
#	echo "<tr
Chad Barb's avatar
   
Chad Barb committed
361

Chad Barb's avatar
   
Chad Barb committed
362
363
364
365
366
367
368
369
370
371
372
373
	if ($thumb == 2) {
	    if ($pid != "emulab-ops") {
		echo "<td align=center>".
		     "<a href='shownsfile.php3?pid=$pid&eid=$eid'>".
		     "<img border=1 width=128 height=128 class='stealth' ".
		     " src='thumbs/tn$thumb_hash.png' />".
		     "<br />\n".
		     "<b>".
		     "<a href='showproject.php3?pid=$pid'>$pid</a>/<br />".
		     "<a href='showexp.php3?pid=$pid&eid=$eid'>$eid</a>".
		     "</b>".
		     "</td>";
Chad Barb's avatar
Chad Barb committed
374
375
376

		$thumbcount++;
		if (($thumbcount % 4) == 0) { echo "</tr><tr>\n"; }
Chad Barb's avatar
   
Chad Barb committed
377
378
379
380
381
382
383
384
385
	    }
	} else {

	    echo "<td>".
		 "<table border=0 cellpadding=4 cellspacing=0>".
		 "<tr>".
		 "<td width=128 align=center>".
	         "<a href='shownsfile.php3?pid=$pid&eid=$eid'>".
		 "<img border=1 width=128 height=128 class='stealth' ".
386
387
#	     " src='top2image.php3?pid=$pid&eid=$eid&thumb=128' />".
#	     " src='thumbs/$pid.$eid.png' />".
Chad Barb's avatar
   
Chad Barb committed
388
389
390
391
392
393
394
395
396
397
398
		 " src='thumbs/tn$thumb_hash.png' />".
	         "</a>".
                 "</td>".
	         "<td align=left class='paddedcell'>".
	         "<b>".
 	         "<a href='showproject.php3?pid=$pid'>$pid</a>/".
                 "<a href='showexp.php3?pid=$pid&eid=$eid'>$eid</a>".
	         "</b>".
	         "<br />\n".
	         "<b><font size=-1>$name</font></b>".
                 "<br />\n";
Chad Barb's avatar
   
Chad Barb committed
399
400


Chad Barb's avatar
   
Chad Barb committed
401
402
403
404
405
406
407
408
409
	    if ($isadmin) {
		$swappable= $row["swappable"];
		$swapreq=$row["swap_requests"];
		$lastswapreq=$row["lastreq"];
		$lastlogin = "";
		if ($lastexpnodelogins = TBExpUidLastLogins($pid, $eid)) {
		    $daysidle=$lastexpnodelogins["daysidle"];
		    #if ($idle && $daysidle < 1)
		    #  continue;
410
		    $lastlogin .= $lastexpnodelogins["shortdate"] . " " .
Chad Barb's avatar
   
Chad Barb committed
411
412
413
			"(" . $lastexpnodelogins["uid"] . ")";
		} elseif ($state=="active") {
		    $daysidle=$row["lastswap"];
414
		    $lastlogin .= "$date swapin";
Chad Barb's avatar
   
Chad Barb committed
415
416
417
418
419
420
		}
		# if ($lastlogin=="") { $lastlogin="<td>&nbsp;</td>\n"; }
		if ($lastlogin != "") {
		    echo "<font size=-2><b>Last Login:</b> $lastlogin</font><br />\n";
		}
	    }	
Chad Barb's avatar
   
Chad Barb committed
421

Chad Barb's avatar
   
Chad Barb committed
422
423
424
	    echo "<font size=-2><b>Created by:</b> ".
		 "<a href='showuser.php3?target_uid=$huid'>$huid</a>".
		 "</font><br />\n";
Chad Barb's avatar
   
Chad Barb committed
425

Chad Barb's avatar
   
Chad Barb committed
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
	    $special = 0;
	    $pcs     = 0;
	    reset($perexp_usage);
	    if (isset($perexp_usage["$pid:$eid"])) {
		while (list ($class, $count) = each($perexp_usage["$pid:$eid"])) {
		    if (strcmp($class, "pc")) {
			$special += $count;
		    } else {
			$pcs += $count;
		    }
		}
	    }

	    if ($pcs) {
		if ($pcs == 1) { $plural = ""; } else { $plural = "s"; }  
		echo "<font size=-1><b>Using <font color=red>$pcs PC</font> Node$plural</b></font><br />\n";
	    }
	    if ($special) {
		if ($special == 1) { $plural = ""; } else { $plural = "s"; }  
		echo "<font size=-1><b>Using <font color=red>$special Special</font> Node$plural</b></font><br />\n";
	    }

Chad Barb's avatar
   
Chad Barb committed
448
449
	    echo "</td></tr></table> \n";
	    echo "</td>";
Chad Barb's avatar
   
Chad Barb committed
450

Chad Barb's avatar
Chad Barb committed
451
	    $thumbcount++;
Chad Barb's avatar
   
Chad Barb committed
452
453
	    if (($thumbcount % 2) == 0) { echo "</tr><tr>\n"; }
	}
Chad Barb's avatar
   
Chad Barb committed
454
455
456
457
    }

    echo "</tr></table>";
} else {
458
459
460
    echo "<table border=2 cols=0
                 cellpadding=0 cellspacing=2 align=center>
            <tr>
Chad Barb's avatar
   
Chad Barb committed
461
              <th width=8%>
Chad Barb's avatar
   
Chad Barb committed
462
               <a class='static' href='showexp_list.php3?showtype=$showtype&sortby=pid'>
Chad Barb's avatar
   
Chad Barb committed
463
                  PID</a></th>
Chad Barb's avatar
   
Chad Barb committed
464
              <th width=8%>
Chad Barb's avatar
   
Chad Barb committed
465
               <a class='static' href='showexp_list.php3?showtype=$showtype&sortby=eid'>
Chad Barb's avatar
   
Chad Barb committed
466
                  EID</a></th>
Chad Barb's avatar
   
Chad Barb committed
467
              <th align=center width=3%>
Chad Barb's avatar
   
Chad Barb committed
468
               <a class='static' href='showexp_list.php3?showtype=$showtype&sortby=pcs'>
469
470
471
                  PCs</a><br>[<b>1</b>]</th>
              <th align=center width=3%>
               Hours Idle</th>\n";
472
    
473
    if ($showlastlogin)
Chad Barb's avatar
   
Chad Barb committed
474
        echo "<th width=17% align=center>Last Login</th>\n";
475
    if ($idle) {
Chad Barb's avatar
   
Chad Barb committed
476
        #      "<th width=4% align=center>Days Idle</th>\n";
477
478
	echo "<th width=4% align=center colspan=2>Swap Request</th>\n";
    }
479

Chad Barb's avatar
   
Chad Barb committed
480
    echo "    <th width=60%>
Chad Barb's avatar
   
Chad Barb committed
481
               <a class='static' href='showexp_list.php3?showtype=$showtype&sortby=name'>
Chad Barb's avatar
   
Chad Barb committed
482
                  Name</a></th>
Chad Barb's avatar
   
Chad Barb committed
483
              <th width=4%>
Chad Barb's avatar
   
Chad Barb committed
484
               <a class='static' href='showexp_list.php3?showtype=$showtype&sortby=uid'>
Chad Barb's avatar
   
Chad Barb committed
485
                  Head UID</a></th>
486
487
            </tr>\n";

488
    while ($row = mysql_fetch_array($experiments_result)) {
489
490
491
	$pid  = $row["pid"];
	$eid  = $row["eid"]; 
	$huid = $row["expt_head_uid"];
Leigh B. Stoller's avatar
Leigh B. Stoller committed
492
	$name = stripslashes($row["expt_name"]);
493
	$date = $row["dshort"];
494
	$state= $row["state"];
495
	$isidle = $row["swap_requests"];
496
	$daysidle=0;
497
498
	$idletime = round(TBGetExptIdleTime($pid,$eid),1);

499
500
501
502
503
504
505
506
	$inactive = $idletime >= $idlehours;
	if ($isidle && !$inactive) {
	    $isidle = "";
	    mysql_query("update experiments set swap_requests='' ".
			"where pid='$pid' and eid='$eid'");
	}

	
507
	if ($isadmin) {
508
509
510
	    $swappable= $row["swappable"];
	    $swapreq=$row["swap_requests"];
	    $lastswapreq=$row["lastreq"];
511
512
513
514
515
516
	    if ($lastswapreq > $idletime) {
		# My last request was from _before_ it was idle this time
		mysql_query("update experiments set swap_requests='' ".
			    "where pid='$pid' and eid='$eid'");
		$swapreq=0;
	    }
517
518
	    $idlemailinterval = TBGetSiteVar("idle/mailinterval");
	    # Is it toosoon to send another mail?
519
	    $toosoon = ($swapreq>0 && ($lastswapreq < $idlemailinterval));
520
	    $lastlogin = "<td>";
521
	    if ($lastexpnodelogins = TBExpUidLastLogins($pid, $eid)) {
522
	        $daysidle=$lastexpnodelogins["daysidle"];
523
524
	        #if ($idle && $daysidle < 1)
		#  continue;
525
		$lastlogin .= $lastexpnodelogins["shortdate"] . " " .
526
		 "(" . $lastexpnodelogins["uid"] . ")";
527
	    } elseif ($state=="active") {
528
	        $daysidle=$row["lastswap"];
529
	        $lastlogin .= "$date swapin";
530
	    }
531
532
	    $lastlogin.="</td>\n";
	    if ($lastlogin=="<td></td>\n") { $lastlogin="<td>&nbsp;</td>\n"; }
533
534
	}

535
	if ($idle) {
536
537
	    $stale = TBGetExptIdleStale($pid,$eid);
	    $ignore = TBGetExptIdleIgnore($pid,$eid);
538
	    # If it is ignored, skip it now.
539
	    if ($ignore && !$noignore) { continue; }
540
	    #$lastlogin .= "<td align=center>$daysidle</td>\n";
541
542
543
544
	    if (isset($perexp_usage["$pid:$eid"]) &&
		isset($perexp_usage["$pid:$eid"]["pc"])) {
	      $pcs = $perexp_usage["$pid:$eid"]["pc"];
	    } else { $pcs=0; }
545
	    $foo = "<td align=center valign=center>\n";
546
547
548
549
550
	    $label = "";
	    if ($stale) { $label .= "stale "; }
	    if ($ignore) { $label .= "ignore "; }
	    if (!$swappable) { $label .= "unswap. "; }
	    if ($label == "") { $label = "&nbsp;"; }
551
 	    if ($inactive && !$stale && !$ignore && !$toosoon && $pcs) {
552
553
		$fooswap = "<td><a ".
		    "href=\"request_swapexp.php3?pid=$pid&eid=$eid\">".
554
		    "<img border=0 src=\"redball.gif\"></a> $label</td>\n" ;
555
	    } else {
556
557
558
		$fooswap = "<td>$label</td>";
		if (!$pcs) { $foo .= "(no PCs)\n"; }
		else { $foo .="&nbsp;"; }
559
560
	    }
	    if ($swapreq > 0) {
Chad Barb's avatar
   
Chad Barb committed
561
	      $foo .= "&nbsp;$swapreq&nbsp;sent<br />".
562
	              "<font size=-2>(${lastswapreq}&nbsp;hrs&nbsp;ago)</font>\n";
563
	    }
Chad Barb's avatar
   
Chad Barb committed
564
	    $foo .= "</td>" . $fooswap . "\n"; 
565
	}
566

567
	if ($idle && ($str=="&nbsp;" || !$pcs || !$inactive)) { continue; }
568

569
570
	$nodes   = 0;
	$special = 0;
571
572
573
574
	reset($perexp_usage);
	if (isset($perexp_usage["$pid:$eid"])) {
	    while (list ($class, $count) = each($perexp_usage["$pid:$eid"])) {
		$nodes += $count;
575
		if (strcmp($class, "pc")) {
576
		    $special = 1;
577
578
579
580
		} else {
		    $pcs = $count;
		}

581
582
583
584
585
586
587

		# Summary counts for just the experiments in the projects
		# the user is a member of.
		if (!isset($total_usage[$class]))
		    $total_usage[$class] = 0;
			
		$total_usage[$class] += $count;
588
	    }
589
	}
590
591
592

	# in idle or active, skip experiments with no nodes.
	if (($idle || $active) && $nodes == 0) { continue; }
593
594
	if ($nodes==0) { $nodes = "&nbsp;"; }
	
595
596
	echo "<tr>
                <td><A href='showproject.php3?pid=$pid'>$pid</A></td>
Leigh B. Stoller's avatar
Leigh B. Stoller committed
597
                <td><A href='showexp.php3?pid=$pid&eid=$eid'>
598
                       $eid</A></td>\n";
599
600
	
	if ($isidle) { $nodes = $nodes.$idlemark; }
601
602
603
604
605
	# If multiple classes, then hightlight the number.
	if ($special)
            echo "<td><font color=red>$nodes</font></td>\n";
	else
            echo "<td>$nodes</td>\n";
606

Chad Barb's avatar
   
Chad Barb committed
607
608
609
610
611
	if ($idletime == -1) {
	    echo "<td>&nbsp;</td>\n";
	} else {
	    echo "<td>$idletime</td>\n";
	}
612
613
	
	if ($showlastlogin) echo "$lastlogin\n";
614
	if ($idle) echo "$foo\n";
615
616

        echo "<td>$name</td>
617
618
                <td><A href='showuser.php3?target_uid=$huid'>
                       $huid</A></td>
619
620
621
               </tr>\n";
    }
    echo "</table>\n";
622
623
624

    echo "<ol>
             <li><font color=red>Red</font> indicates nodes other than PCs.
625
626
                 A $idlemark mark by the node count indicates that the
                 experiment is currently considered idle.
627
628
629
          </ol>\n";
    
    echo "<center><b>Node Totals</b></center>\n";
630
631
632
    echo "<table border=0
                 cellpadding=1 cellspacing=1 align=center>\n";
    $total = 0;
633
    ksort($total_usage);
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
    while (list($type, $count) = each($total_usage)) {
	    $total += $count;
	    echo "<tr>
                    <td align=right>${type}:</td>
                    <td>&nbsp &nbsp &nbsp &nbsp</td>
                    <td align=center>$count</td>
                  </tr>\n";
    }
    echo "<tr>
             <td align=right><hr></td>
             <td>&nbsp &nbsp &nbsp &nbsp</td>
             <td align=center><hr></td>
          </tr>\n";
    echo "<tr>
             <td align=right><b>Total</b>:</td>
             <td>&nbsp &nbsp &nbsp &nbsp</td>
             <td align=center>$total</td>
          </tr>\n";
    
    echo "</table>\n";
Chad Barb's avatar
   
Chad Barb committed
654
655
} # if ($thumb && !$idle)
} # if (mysql_num_rows($experiments_result))
656
657
658
659
660
661

#
# Standard Testbed Footer
# 
PAGEFOOTER();
?>