source: branches/1.0/web/addons/job_monarch/overview.php @ 830

Last change on this file since 830 was 828, checked in by ramonb, 11 years ago
  • removed pie chart
  • Property svn:keywords set to Id
File size: 28.6 KB
Line 
1<?php
2/*
3 *
4 * This file is part of Jobmonarch
5 *
6 * Copyright (C) 2006-2013  Ramon Bastiaans
7 *
8 * Jobmonarch is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * Jobmonarch is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21 *
22 * SVN $Id: overview.php 828 2013-04-12 13:46:51Z ramonb $
23 */
24
25global $GANGLIA_PATH, $clustername, $tpl_data, $filter, $cluster, $get_metric_string, $cluster_url, $sh;
26global $hosts_up, $m, $start, $end, $filterorder, $COLUMN_REQUESTED_MEMORY, $COLUMN_QUEUED, $COLUMN_NODES, $hostname, $piefilter;
27global $longtitle, $title, $range;
28
29include_once "./dwoo/dwooAutoload.php";
30
31global $dwoo;
32
33$tpl = new Dwoo_Template_File("templates/overview.tpl");
34$tpl_data = array();
35
36$tpl_data[ "clustername"]= $clustername ;
37
38if( $JOB_ARCHIVE )
39{
40    $tpl_data[ "cluster_url"]= rawurlencode($clustername) ;
41}
42
43$rjqj_start = null;
44$ds         = new DataSource();
45$myxml_data = $ds->getData();
46
47//print_r( $myxml_data );
48
49$data_gatherer = new DataGatherer( $clustername );
50$data_gatherer->parseXML( $myxml_data );
51
52$heartbeat = $data_gatherer->getHeartbeat();
53$jobs      = $data_gatherer->getJobs();
54$gnodes    = $data_gatherer->getNodes();
55$cpus      = $data_gatherer->getCpus();
56$use_fqdn  = $data_gatherer->getUsingFQDN();
57
58//print_r( $gnodes );
59
60function setupFilterSettings() 
61{
62
63    global $tpl_data, $filter, $clustername, $piefilter, $data_gatherer, $myxml_data, $filterorder, $_SESSION, $data_gatherer;
64    global $jobs, $gnodes;
65
66    $filter_image_url = "";
67
68    foreach( $filter as $filtername => $filtervalue ) 
69    {
70        $tpl_data[ $filtername ] = $filtervalue;
71
72        $filter_image_url    .= "&$filtername=$filtervalue";
73    }
74
75    session_start();
76
77    unset( $_SESSION["data"] );
78    $_SESSION["data"] = &$myxml_data;
79
80    $ic = new ClusterImage( $myxml_data, $clustername );
81
82    $ic->setJobs( $jobs );
83    $ic->setNodes( $gnodes );
84    $ic->setBig();
85    $ic->setNoimage();
86    $ic->draw();
87
88    $tpl_data[ "clusterimage"]= "./image.php?". session_name() . "=" . session_id() ."&c=".rawurlencode($clustername)."&j_view=big-clusterimage".$filter_image_url;
89
90    $tpl_data[ "node_clustermap"]= "yes";
91    $tpl_data[ "node_area_map"]= $ic->getImagemapArea();
92
93    $tpl_data[ "order"]= $filterorder;
94}
95
96function timeToEpoch( $time ) 
97{
98    $time_fields = explode( ':', $time );
99
100    if( count( $time_fields ) == 3 ) 
101    {
102        $hours   = $time_fields[0];
103        $minutes = $time_fields[1];
104        $seconds = $time_fields[2];
105
106    } 
107    else if( count( $time_fields ) == 2 ) 
108    {
109        $hours   = 0;
110        $minutes = $time_fields[0];
111        $seconds = $time_fields[1];
112
113    } 
114    else if( count( $time_fields ) == 1 ) 
115    {
116        $hours   = 0;
117        $minutes = 0;
118        $seconds = $time_fields[0];
119    }
120
121    $myepoch = intval( $seconds + (intval( $minutes * 60 )) + (intval( $hours * 3600 )) );
122
123    return $myepoch;
124}
125
126function colorRed( $color ) 
127{
128    return substr( $color, 0, 2 );
129}
130
131function colorGreen( $color ) 
132{
133    return substr( $color, 2, 2 );
134}
135
136function colorBlue( $color ) 
137{
138    return substr( $color, 4, 2 );
139}
140
141function colorDiffer( $first, $second ) 
142{
143    // Make sure these two colors differ atleast 50 R/G/B
144    $min_diff = 50;
145
146    $c1r   = hexDec( colorRed( $first ) );
147    $c1g   = hexDec( colorGreen( $first ) );
148    $c1b   = hexDec( colorBlue( $first ) );
149
150    $c2r   = hexDec( colorRed( $second ) );
151    $c2g   = hexDec( colorGreen( $second ) );
152    $c2b   = hexDec( colorBlue( $second ) );
153
154    $rdiff = ($c1r >= $c2r) ? $c1r - $c2r : $c2r - $c1r;
155    $gdiff = ($c1g >= $c2g) ? $c1g - $c2g : $c2g - $c1g;
156    $bdiff = ($c1b >= $c2b) ? $c1b - $c2b : $c2b - $c1b;
157
158    if( $rdiff >= $min_diff or $gdiff >= $min_diff or $bdiff >= $min_diff ) 
159    {
160        return TRUE;
161
162    } 
163    else 
164    {
165        return FALSE;
166    }
167}
168
169function randomColor( $known_colors ) 
170{
171    // White (000000) would be invisible
172    $start       = "004E00";
173   
174    $start_red   = colorRed( $start );
175    $start_green = colorGreen( $start );
176    $start_blue  = colorBlue( $start );
177   
178    $end         = "FFFFFF";
179
180    $end_red     = colorRed( $end );
181    $end_green   = colorGreen( $end );
182    $end_blue    = colorBlue( $end );
183
184    $change_color= TRUE;
185
186    while( $change_color ) 
187    {
188        $change_color= FALSE;
189
190        $new_red     = rand( hexDec( $start_red ), hexDec( $end_red ) );
191        $new_green   = rand( hexDec( $start_green ), hexDec( $end_green ) );
192        $new_blue    = rand( hexDec( $start_blue ), hexDec( $end_blue ) );
193
194        $new         = decHex( $new_red ) . decHex( $new_green ) . decHex( $new_blue );
195
196        foreach( $known_colors as $old )
197        {
198            if( !colorDiffer( $new, $old ) )
199            {
200                 $change_color = TRUE;
201            }
202        }
203    }
204
205    // Whoa! Actually found a good color ;)
206    return $new;
207}
208
209function sortJobs( $jobs, $sortby, $sortorder ) 
210{
211    $sorted    = array();
212
213    $cmp    = create_function( '$a, $b', 
214        "global \$sortby, \$sortorder;".
215
216        "if( \$a == \$b ) return 0;".
217
218        "if (\$sortorder==\"desc\")".
219            "return ( \$a > \$b ) ? 1 : -1;".
220        "else if (\$sortorder==\"asc\")".
221            "return ( \$a < \$b ) ? 1 : -1;" );
222
223    if( isset( $jobs ) && count( $jobs ) > 0 ) 
224    {
225        foreach( $jobs as $jobid => $jobattrs ) 
226        {
227                $state     = $jobattrs['status'];
228                $owner     = $jobattrs['owner'];
229                $queue     = $jobattrs['queue'];
230                $name      = $jobattrs['name'];
231                $req_cpu   = $jobattrs['requested_time'];
232                $req_memory= $jobattrs['requested_memory'];
233
234                if( $state == 'R' )
235                {
236                    $nodes = count( $jobattrs['nodes'] );
237                }
238                else
239                {
240                    $nodes = $jobattrs['nodes'];
241                }
242
243                $ppn         = (int) $jobattrs['ppn'] ? $jobattrs['ppn'] : 1;
244                $cpus        = $nodes * $ppn;
245                $queued_time = (int) $jobattrs['queued_timestamp'];
246                $start_time  = (int) $jobattrs['start_timestamp'];
247                $runningtime = $report_time - $start_time;
248
249                switch( $sortby ) 
250                {
251                    case "id":
252                        $sorted[$jobid] = $jobid;
253                        break;
254
255                    case "state":
256                        $sorted[$jobid] = $state;
257                        break;
258
259                    case "owner":
260                        $sorted[$jobid] = $owner;
261                        break;
262
263                    case "queue":
264                        $sorted[$jobid] = $queue;
265                        break;
266
267                    case "name":
268                        $sorted[$jobid] = $name;
269                        break;
270
271                    case "req_cpu":
272                        $sorted[$jobid] = timeToEpoch( $req_cpu );
273                        break;
274
275                    case "req_mem":
276                        $sorted[$jobid] = $req_memory;
277                        break;
278
279                    case "nodes":
280                        $sorted[$jobid] = $nodes;
281                        break;
282
283                    case "cpus":
284                        $sorted[$jobid] = $cpus;
285                        break;
286
287                    case "queued":
288                        $sorted[$jobid] = $queued_time;
289                        break;
290
291                    case "start":
292                        $sorted[$jobid] = $start_time;
293                        break;
294
295                    case "runningtime":
296                        $sorted[$jobid] = $runningtime;
297                        break;
298
299                    default:
300                        break;
301                }
302        }
303    }
304
305    if( $sortorder == "asc" )
306    {
307        asort( $sorted );
308    }
309    else if( $sortorder == "desc" )
310    {
311        arsort( $sorted );
312    }
313
314    return $sorted;
315}
316
317function makeOverview() 
318{
319    global $dwoo, $tpl, $tpl_data, $jobs, $nodes, $heartbeat, $clustername, $tpl_data;
320    global $sortorder, $sortby, $filter, $sh, $hc, $m, $range;
321    global $cluster_url, $get_metric_string, $host_url, $metrics;
322    global $start, $end, $reports, $gnodes, $default_showhosts;
323    global $COLUMN_QUEUED, $COLUMN_REQUESTED_MEMORY, $COLUMN_NODES, $hostname;
324    global $cluster, $use_fqdn, $myxml_data, $data_gatherer;
325
326    $metricname        = $m;
327    if( isset($conf['default_metric']) and ($metricname =='') )
328        $metricname = $conf['default_metric'];
329    else
330        if( isset( $m ) )
331            $metricname = $m;
332        else
333            $metricname = "load_one";
334
335    $tpl_data["sortorder"]= $sortorder;
336    $tpl_data["sortby"]= $sortby;
337
338    $sorted_jobs        = sortJobs( $jobs, $sortby, $sortorder );
339
340    $even               = 1;
341
342    $used_jobs          = 0;
343    $used_cpus          = 0;
344    $used_nodes         = 0;
345
346    $queued_jobs        = 0;
347    $queued_nodes       = 0;
348    $queued_cpus        = 0;
349
350    $total_nodes        = 0;
351    $total_cpus         = 0;
352    $total_jobs         = 0;
353
354    $all_used_nodes     = array();
355    $total_used_nodes   = array();
356
357    $running_name_nodes = array();
358
359    $running_nodes      = 0;
360    $running_jobs       = 0;
361    $running_cpus       = 0;
362
363    $avail_nodes        = count( $gnodes );
364    $avail_cpus         = cluster_sum("cpu_num", $metrics);
365
366    $view_cpus          = 0;
367    $view_jobs          = 0;
368    $view_nodes         = 0;
369
370    $all_nodes          = 0;
371    $all_jobs           = 0;
372    $all_cpus           = 0;
373
374    $view_name_nodes    = array();
375
376    // Is the "requested memory" column enabled in the config
377    //
378    if( $COLUMN_REQUESTED_MEMORY ) 
379    {
380        $tpl_data[ "column_header_req_mem"]= "yes";
381    }
382
383    // Is the "nodes hostnames" column enabled in the config
384    //
385    if( $COLUMN_NODES ) 
386    {
387        $tpl_data[ "column_header_nodes"]= "yes";
388    }
389
390    // Is the "queued time" column enabled in the config
391    //
392    if( $COLUMN_QUEUED ) 
393    {
394        $tpl_data[ "column_header_queued"]= "yes" ;
395    }
396
397    $last_displayed_job = null;
398
399    $rjqj_host = null;
400
401    $na_nodes  = 0;
402    $na_cpus   = 0;
403
404    foreach( $metrics as $bhost => $bmetric )
405    {
406        foreach( $bmetric as $mname => $mval )
407        {
408            if( ( $mname == 'zplugin_monarch_rj' ) || ($mname == 'zplugin_monarch_qj') )
409            {
410                $rjqj_host = $bhost;
411            }
412        }
413    }
414
415    foreach( $gnodes as $ghost => $gnode )
416    {
417        if( $gnode->isDown() || $gnode->isOffline() )
418        {
419            $na_nodes += 1;
420            $na_cpus  += $metrics[$ghost]['cpu_num']['VAL'];
421        }
422    }
423
424    $node_list = array();
425
426    foreach( $sorted_jobs as $jobid => $sortdec ) 
427    {
428        $report_time     = $jobs[$jobid]['reported'];
429
430        if( $jobs[$jobid]['status'] == 'R' )
431        {
432            $nodes = count( $jobs[$jobid]['nodes'] );
433        }
434        else if( $jobs[$jobid]['status'] == 'Q' )
435        {
436            $nodes = $jobs[$jobid]['nodes'];
437        }
438
439        $ppn  = isset( $jobs[$jobid]['ppn'] ) ? $jobs[$jobid]['ppn'] : 1;
440        $cpus = $nodes * $ppn;
441
442        if( $report_time == $heartbeat ) 
443        {
444            $display_job    = 1;
445
446            if( $jobs[$jobid]['status'] == 'R' ) 
447            {
448                foreach( $jobs[$jobid]['nodes'] as $tempnode ) 
449                {
450                    $all_used_nodes[] = $tempnode;
451                }
452            }
453
454            $used_cpus += $cpus;
455
456            if( $jobs[$jobid]['status'] == 'R' ) 
457            {
458                $running_cpus     += $cpus;
459
460                $running_jobs++;
461
462                $found_node_job    = 0;
463
464                foreach( $jobs[$jobid]['nodes'] as $tempnode ) 
465                {
466                    $running_name_nodes[] = $tempnode;
467
468                    if( isset( $hostname ) && $hostname != '' ) 
469                    {
470                        $domain_len     = 0 - strlen( $jobs[$jobid]['domain'] );
471                        $hostnode     = $tempnode;
472
473                        if( $use_fqdn == 1)
474                        {
475                            if( substr( $hostnode, $domain_len ) != $jobs[$jobid]['domain'] ) 
476                            {
477                                $hostnode = $hostnode. '.'. $jobs[$jobid]['domain'];
478                            }
479                        }
480
481                        if( $hostname == $hostnode ) 
482                        {
483                            $found_node_job = 1;
484                            $display_job = 1;
485                        } 
486                        else if( !$found_node_job ) 
487                        {
488                            $display_job = 0;
489                        }
490                    }
491                }
492            }
493
494            if( $jobs[$jobid]['status'] == 'Q' ) 
495            {
496                if( isset( $hostname ) && $hostname != '' )
497                {
498                    $display_job = 0;
499                }
500
501                $queued_cpus  += $cpus;
502                $queued_nodes += $nodes;
503
504                $queued_jobs++;
505            }
506
507            foreach( $filter as $filtername=>$filtervalue ) 
508            {
509                if( $filtername == 'id' && $jobid != $filtervalue )
510                {
511                    $display_job = 0;
512                }
513                else if( $filtername == 'state' && $jobs[$jobid]['status'] != $filtervalue )
514                {
515                    $display_job = 0;
516                }
517                else if( $filtername == 'queue' && $jobs[$jobid]['queue'] != $filtervalue )
518                {
519                    $display_job = 0;
520                }
521                else if( $filtername == 'owner' && $jobs[$jobid]['owner'] != $filtervalue )
522                {
523                    $display_job = 0;
524                }
525            }
526
527
528            if( $display_job ) 
529            {
530                unset( $job_loop );
531                $job_loop = array();
532                $job_loop["clustername"] = $clustername;
533
534                $job_loop["id"] = $jobid;
535
536                $last_displayed_job     = $jobid;
537
538                $job_loop["state"] = $jobs[$jobid]['status'];
539
540                $fullstate         = '';
541
542                if( $jobs[$jobid]['status'] == 'R' ) 
543                {
544                    $fullstate     = "Running";
545                } 
546                else if( $jobs[$jobid]['status'] == 'Q' ) 
547                {
548                    $fullstate     = "Queued";
549                }
550
551                $job_loop["fullstate"] = $fullstate;
552               
553                $job_loop["owner"] = $jobs[$jobid]['owner'];
554                $job_loop["queue"] = $jobs[$jobid]['queue'];
555
556                $fulljobname         = $jobs[$jobid]['name'];
557                $shortjobname        = '';
558
559                $job_loop["fulljobname"] = $fulljobname;
560
561                $fulljobname_fields    = explode( ' ', $fulljobname );
562
563                $capjobname        = 0;
564
565                if( strlen( $fulljobname_fields[0] ) > 10 )
566                {
567                    $capjobname    = 1;
568                }
569
570                if( $capjobname ) 
571                {
572                    $job_loop[ "jobname_hint_start" ] = "yes";
573
574                    $shortjobname     = substr( $fulljobname, 0, 10 ) . '..';
575                } 
576                else 
577                {
578                    $shortjobname     = $fulljobname;
579                }
580               
581                $job_loop["name"] = $shortjobname;
582
583                if( $capjobname ) 
584                {
585                    $job_loop[ "jobname_hint_end" ] = "yes";
586                }
587
588                $domain         = $jobs[$jobid]['domain'];
589
590                $job_loop["req_cpu"] = makeTime( timeToEpoch( $jobs[$jobid]['requested_time'] ) );
591
592                if( $COLUMN_REQUESTED_MEMORY ) 
593                {
594                    $job_loop[ "column_req_mem" ] = "yes";
595                    $job_loop["req_memory"] = $jobs[$jobid]['requested_memory'];
596                }
597
598
599                if( $COLUMN_QUEUED ) 
600                {
601                    $job_loop[ "column_queued" ] = "yes";
602                    $job_loop["queued"] = makeDate( $jobs[$jobid]['queued_timestamp'] );
603                }
604                if( $COLUMN_NODES ) 
605                {
606                    $job_loop[ "column_nodes" ] = "yes";
607                    //echo "colum nodes";
608                }
609
610                $ppn       = isset( $jobs[$jobid]['ppn'] ) ? $jobs[$jobid]['ppn'] : 1;
611                $cpus      = $nodes * $ppn;
612
613                $job_loop["nodes"] = $nodes;
614                $job_loop["cpus"] = $cpus;
615
616                $start_time= (int) $jobs[$jobid]['start_timestamp'];
617                $job_start = $start_time;
618
619
620                $view_cpus += $cpus;
621
622                $view_jobs++;
623
624                if( $jobs[$jobid]['status'] == 'R' ) 
625                {
626                    $job_runningtime    = $heartbeat - $start_time;
627                    if( $rjqj_start == null ) 
628                    {
629                        $rjqj_start = intval( $start_time - (intval( $job_runningtime * 0.10 ) ) );
630                    }
631                    else if( $start_time < $rjqj_start )
632                    {
633                        $rjqj_start = intval( $start_time - (intval( $job_runningtime * 0.10 ) ) );
634                    }
635
636                    foreach( $jobs[$jobid]['nodes'] as $tempnode )
637                    {
638                        $view_name_nodes[]     = $tempnode;
639                    }
640
641                    if( $COLUMN_NODES ) 
642                    {
643                        $job_loop[ "column_nodes" ] = "yes";
644
645                        $mynodehosts         = array();
646
647                        foreach( $jobs[$jobid]['nodes'] as $shortnode ) 
648                        {
649                            if( $use_fqdn == 1)
650                            {
651                                $mynode     = $shortnode.".".$jobs[$jobid]['domain'];
652                            }
653                            $myhost_href    = "./?c=".$clustername."&h=".$mynode;
654                            $mynodehosts[]  = "<A HREF=\"".$myhost_href."\">".$shortnode."</A>";
655                        }
656
657                        $nodes_hostnames    = implode( " ", $mynodehosts );
658
659                        $job_loop["nodes_hostnames"] = $nodes_hostnames;
660                    }
661                } 
662                else if( $jobs[$jobid]['status'] == 'Q' ) 
663                {
664                    $view_nodes     += (int) $jobs[$jobid]['nodes'];
665                }
666
667                if( $even ) 
668                {
669                    $job_loop["nodeclass"] = "even";
670
671                    $even         = 0;
672                } 
673                else 
674                {
675                    $job_loop["nodeclass"] = "odd";
676
677                    $even         = 1;
678                }
679
680                if( $start_time ) 
681                {
682                    $runningtime        = makeTime( $report_time - $start_time );
683                    $job_runningtime    = $heartbeat - $start_time;
684
685                    $job_loop["started"] = makeDate( $start_time );
686                    $job_loop["runningtime"] = $runningtime;
687                }
688                $node_list[] = &$job_loop;
689            }
690            $tpl_data["node_list"]= &$node_list ;
691        }
692    }
693    if( intval($view_jobs) == 1 and $start_time )
694    {
695        if( $last_displayed_job != null )
696        {
697            $filter['id'] = $last_displayed_job;
698        }
699    }
700    // Running / queued amount jobs graph
701    //
702    if( $rjqj_host != null )
703    {
704        $rjqj_graphargs = "?z=overview-medium&c=$clustername&h=$rjqj_host&g=job_report&r=$range";
705        if( $range == 'job' )
706        {
707            $rjqj_end = time();
708
709            if( $rjqj_start == null ) 
710            { // probably no running jobs in this view: only queued
711                $rjqj_start = $rjqj_end - (24 * 3600); // default to 1 day
712            }
713            $rjqj_title = rawurlencode( makeTime( ($rjqj_end - $rjqj_start) ) );
714            $rjqj_graphargs .= "&period_start=$rjqj_start&period_stop=$rjqj_end&t=$rjqj_title";
715        }
716        else
717        {
718            $rjqj_graphargs .= "&st=$cluster[LOCALTIME]";
719        }
720        if( intval($view_jobs) == 1 and $start_time )
721        {
722            $job_start     = $jobs[$last_displayed_job]['start_timestamp'];
723            $rjqj_graphargs .= "&job_start=$start_time";
724        }
725
726        $rjqj_str  = "<A HREF=\"./graph.php$rjqj_graphargs\">";
727        $rjqj_str .= "<IMG BORDER=0 SRC=\"./graph.php$rjqj_graphargs\">";
728        $rjqj_str .= "</A>";
729
730        $tpl_data[ "rjqj_graph"]= $rjqj_str ;
731    }
732
733    $all_used_nodes     = array_unique( $all_used_nodes );
734    $view_name_nodes    = array_unique( $view_name_nodes );
735    $running_name_nodes = array_unique( $running_name_nodes );
736
737    $used_nodes         = count( $all_used_nodes );
738    $view_nodes        += count( $view_name_nodes );
739    $running_nodes     += count( $running_name_nodes );
740
741    $total_nodes        = $queued_nodes + $running_nodes;
742    $total_cpus         = $queued_cpus + $running_cpus;
743    $total_jobs         = $queued_jobs + $running_jobs;
744
745    $free_nodes         = $avail_nodes - $running_nodes - $na_nodes;
746    $free_nodes         = ( $free_nodes >= 0 ) ? $free_nodes : 0;
747    $free_cpus          = $avail_cpus - $running_cpus - $na_cpus;
748    $free_cpus          = ( $free_cpus >= 0 ) ? $free_cpus : 0;
749
750    $tpl_data[ "avail_nodes"]= $avail_nodes ;
751    $tpl_data[ "avail_cpus"]= $avail_cpus ;
752
753    $tpl_data[ "queued_nodes"]= $queued_nodes ;
754    $tpl_data[ "queued_jobs"]= $queued_jobs ;
755    $tpl_data[ "queued_cpus"]= $queued_cpus ;
756
757    // Only display "Unavailable" in count overview there are any
758    //
759    if( $na_nodes > 0 )
760    {
761        $tpl_data[ "na_nodes"]= "yes";
762
763        $tpl_data[ "na_nodes"]= $na_nodes ;
764        $tpl_data[ "na_cpus"]= $na_cpus ;
765    }
766
767    $tpl_data[ "total_nodes"]= $total_nodes ;
768    $tpl_data[ "total_jobs"]= $total_jobs ;
769    $tpl_data[ "total_cpus"]= $total_cpus ;
770
771    $tpl_data[ "running_nodes"]= $running_nodes ;
772    $tpl_data[ "running_jobs"]= $running_jobs ;
773    $tpl_data[ "running_cpus"]= $running_cpus ;
774
775    $tpl_data[ "used_nodes"]= $used_nodes ;
776    $tpl_data[ "used_jobs"]= $used_jobs ;
777    $tpl_data[ "used_cpus"]= $used_cpus ;
778
779    $tpl_data[ "free_nodes"]= $free_nodes ;
780    $tpl_data[ "free_cpus"]= $free_cpus ;
781
782    $tpl_data[ "view_nodes"]= $view_nodes ;
783    $tpl_data[ "view_jobs"]= $view_jobs ;
784    $tpl_data[ "view_cpus"]= $view_cpus ;
785
786    $tpl_data[ "report_time"]= makeDate( $heartbeat);
787
788
789    global $longtitle, $title;
790
791    $longtitle = "Batch Report :: Powered by Job Monarch!";
792    $title = "Batch Report";
793
794    makeHeader( 'overview', $title, $longtitle );
795
796    setupFilterSettings();
797
798    if( intval($view_jobs) == 1 and $start_time )
799    {
800        $tpl_data[ "showhosts"]= "yes" ;
801
802        $showhosts     = isset($sh) ? $sh : $default_showhosts;
803
804        $tpl_data[ "checked$showhosts"]= "checked" ;
805
806        $sorted_list = array();
807
808        if( $showhosts )
809        {
810            if( !isset( $start ) )
811            {
812                $start    ="jobstart";
813            }
814            if( !isset( $stop ) )
815            {
816                $stop    ="now";
817            }
818
819            $sorted_hosts = array();
820            $hosts_up     = $jobs[$filter['id']]['nodes'];
821
822            $r            = intval($job_runningtime * 1.2);
823
824            $jobrange     = -$r ;
825            $jobstart     = $start_time;
826
827            if ( $reports[$metricname] )
828            {
829                $metricval     = "g";
830            }
831            else
832            {
833                $metricval    = "m";
834            }
835               
836            foreach ( $hosts_up as $host )
837            {
838                $domain_len         = 0 - strlen( $domain );
839
840                if( $use_fqdn )
841                {
842                    if( substr( $host, $domain_len ) != $domain )
843                    {
844                        $host         = $host . '.' . $domain;
845                    }
846                }
847                $cpus             = 0;
848
849                $cpus             = $metrics[$host]["cpu_num"]["VAL"];
850
851                if( $cpus == 0 )
852                {
853                    $cpus        = 1;
854                }
855
856                $load_one         = $metrics[$host]["load_one"]['VAL'];
857                $load             = ((float) $load_one) / $cpus;
858                $host_load[$host] = $load;
859
860                $percent_hosts[load_color($load)] ++;
861
862                if ($metricname=="load_one")
863                {
864                    $sorted_hosts[$host]     = $load;
865                }
866                else
867                {
868                    $sorted_hosts[$host]     = $metrics[$host][$metricname]['VAL'];
869                }
870            }
871
872            switch ( $sort )
873            {
874                case "descending":
875                    arsort( $sorted_hosts );
876                    break;
877
878                case "by hostname":
879                    ksort( $sorted_hosts );
880                    break;
881
882                case "ascending":
883                    asort( $sorted_hosts );
884                    break;
885
886                default:
887                    break;
888            }
889
890            // First pass to find the max value in all graphs for this
891            // metric. The $start,$end variables comes from get_context.php,
892            // included in index.php.
893            //
894            list($min, $max) = find_limits($sorted_hosts, $metricname);
895
896            // Second pass to output the graphs or metrics.
897            $i = 1;
898
899            $metric_loop = array();
900            foreach ( $sorted_hosts as $host=>$value  )
901            {
902                $host_url    = rawurlencode( $host );
903                $cluster_url = rawurlencode( $clustername );
904
905                $textval     = "";
906
907                $val         = $metrics[$host][$metricname];
908                $class       = "metric";
909
910                if ( $val["TYPE"] == "timestamp" || $always_timestamp[$metricname] )
911                {
912                    $textval     = date( "r", $val["VAL"] );
913                }
914                elseif ( $val["TYPE"] == "string" || $val["SLOPE"] == "zero" || $always_constant[$metricname] || ($max_graphs > 0 and $i > $max_graphs ))
915                {
916                    $textval     = $val["VAL"] . " " . $val["UNITS"];
917                }
918                else
919                {
920                    $job_start     = $jobs[$last_displayed_job]['start_timestamp'];
921                    $period_end    = $cluster['LOCALTIME'];
922                    $runningtime   = intval( $period_end ) - intval( $job_start );
923                    $load_color    = load_color($host_load[$host]);
924                    $period_start  = intval( $job_start - (intval( $runningtime * 0.10 ) ) );
925                    //printf("last job %s job start %s runningtime %s period start %s", $last_displayed_job, $jobstart, $job_runningtime, $period_start);
926                    $graphargs     = ($reports[$metricname]) ? "g=$metricname&" : "m=$metricname&";
927                    $graphargs    .= "z=overview-medium&c=$cluster_url&r=$range&h=$host_url&l=$load_color&v=".$val['VAL']."&job_start=$job_start&vl=".$val['UNITS'];
928                    $host_link     = "?j_view=overview-host&c=$cluster_url&r=$range&h=$host_url&job_start=$jobstart";
929
930                    if( $range == 'job' )
931                    {
932                        $graphargs     .= "&period_start=$period_start&period_stop=$period_end";
933                        $host_link     .= "&period_start=$period_start&period_stop=$period_end";
934                    }
935                    else
936                    {
937                        $graphargs     .= "&st=$period_end";
938                        $host_link     .= "&st=$period_end";
939                    }
940                    if( $max > 0 )
941                    {
942                        $graphargs    .= "&x=$max&n=$min";
943                    }
944                }
945                if ($textval)
946                {
947                    $cell    = "<td class=$class>".  "<b><a href=$host_link>$host</a></b><br>".  "<i>$metricname:</i> <b>$textval</b></td>";
948                } else {
949                    $cell    = "<A HREF=\"$host_link\">" . "<IMG SRC=\"./graph.php?$graphargs\" " . "ALT=\"$host\" BORDER=0></A>";
950                }
951
952                $metric_loop["metric_image"] = $cell;
953
954                //if(! ($i++ % $hostcols) )
955                //{
956                //     $metric_loop["br"] = "</tr><tr>";
957                //}
958                $sorted_list[] = $metric_loop;
959            }
960            $tpl_data["sorted_list"]= $sorted_list ;
961        }
962    }
963    $dwoo->output($tpl, $tpl_data);
964}
965
966?>
Note: See TracBrowser for help on using the repository browser.