source: branches/0.4/web/addons/job_monarch/graph.php @ 803

Last change on this file since 803 was 803, checked in by ramonb, 9 years ago
  • added values to legend for load_report
  • Property svn:keywords set to Id
File size: 29.8 KB
Line 
1<?php
2/*
3 *
4 * This file is part of Jobmonarch
5 *
6 * Copyright (C) 2006  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: graph.php 803 2013-04-06 21:46:35Z ramonb $
23 */
24
25global $rrds, $start, $r, $conf, $m;
26
27include "./libtoga.php";
28
29# Graph specific variables
30$size = escapeshellcmd( rawurldecode( $_GET["z"] ));
31$graph = escapeshellcmd( rawurldecode( $_GET["g"] ));
32$grid = escapeshellcmd( rawurldecode( $_GET["G"] ));
33$self = escapeshellcmd( rawurldecode( $_GET["me"] ));
34$max = escapeshellcmd( rawurldecode( $_GET["x"] ));
35$min = escapeshellcmd( rawurldecode( $_GET["n"] ));
36$value = escapeshellcmd( rawurldecode( $_GET["v"] ));
37$load_color = escapeshellcmd( rawurldecode( $_GET["l"] ));
38$vlabel = escapeshellcmd( rawurldecode( $_GET["vl"] ));
39$j_title = escapeshellcmd( rawurldecode( $_GET["t"] ));
40$hostname = escapeshellcmd( rawurldecode( $_GET["h"] ));
41$range = escapeshellcmd( rawurldecode( $_GET["r"] ));
42
43if( strpos( $size, 'overview' ) )
44{
45    $my_dir = getcwd();
46
47    global $context;
48
49    $context = 'host';
50
51    chdir( $GANGLIA_PATH );
52
53    include "./ganglia.php";
54    include "./get_ganglia.php";
55
56    chdir( $my_dir );
57}
58
59if ( !empty( $_GET ) ) 
60{
61        extract( $_GET );
62}
63
64$sourcetime = $st;
65
66
67$cluster = $c;
68$metricname = ($g) ? $g : $m;
69
70# Assumes we have a $start variable (set in get_context.php).
71if ($size == "small") 
72{
73    $height = 40;
74    $width = 130;
75} 
76else if ($size == "medium") 
77{
78    $height = 75;
79    $width = 300;
80} 
81else if ($size == "overview-medium") 
82{
83    $height = 75;
84    $width = 300;
85} 
86else 
87{
88    $height = 100;
89    $width = 400;
90}
91
92// RB: Perform some formatting/spacing magic.. tinkered to fit
93//
94if ($size == 'small') {
95   $eol1 = '\\l';
96   $space1 = ' ';
97   $space2 = '         ';
98} else if ($size == 'medium') {
99   $eol1 = '';
100   $space1 = '';
101   $space2 = '';
102   $extras = ' --font LEGEND:7 ';
103} else if ($size == 'overview-medium') {
104   $eol1   = '';
105   $space1 = '';
106   $space2 = '';
107   $extras = ' --font LEGEND:7 ';
108} else if ($size == 'large') {
109   $eol1 = '';
110   $space1 = '       ';
111   $space2 = '       ';
112} else if ($size == 'xlarge') {
113   $eol1 = '';
114   $space1 = '             ';
115   $space2 = '             ';
116} else if ($size == 'mobile') {
117   $eol1 = '';
118   $space1 = ' ';
119   $space2 = '';
120}
121
122$jobstart_color = "3AE302";
123$jobstop_color = "F5164A";
124
125if($command) 
126{
127      $command = '';
128}
129
130$graph = $metricname;
131
132$rrd_dirs = Array();
133
134if (isset($graph)) 
135{
136    $series = '';
137    if( $size == 'overview-medium' )
138    {
139        $rrd_dirs[] = $conf['rrds'] . '/' . $cluster .'/'. $hostname;
140    }
141    else
142    {
143        $trd = new TarchRrdGraph( $cluster, $hostname );
144        $rrd_dirs = $trd->getRrdDirs( $period_start, $period_stop );
145
146    }
147
148    if($graph == "cpu_report") 
149    {
150
151        $style = "CPU";
152
153        $upper_limit = "--upper-limit 100 --rigid";
154        $lower_limit = "--lower-limit 0";
155
156        $vertical_label = "--vertical-label Percent ";
157
158        $def_nr = 0;
159
160        foreach( $rrd_dirs as $rrd_dir ) 
161        {
162
163            $series .= "DEF:'cpu_user${def_nr}'='${rrd_dir}/cpu_user.rrd':'sum':AVERAGE "
164                ."DEF:'cpu_nice${def_nr}'='${rrd_dir}/cpu_nice.rrd':'sum':AVERAGE "
165                ."DEF:'cpu_system${def_nr}'='${rrd_dir}/cpu_system.rrd':'sum':AVERAGE "
166                ."DEF:'cpu_idle${def_nr}'='${rrd_dir}/cpu_idle.rrd':'sum':AVERAGE "
167                ."DEF:'cpu_wio${def_nr}'='${rrd_dir}/cpu_wio.rrd':'sum':AVERAGE ";
168
169            if( $conf['graphreport_stats'] )
170            {
171                $series .= "CDEF:cpu_user${def_nr}_nonans=cpu_user${def_nr},UN,0,cpu_user${def_nr},IF ";
172                $series .= "CDEF:cpu_nice${def_nr}_nonans=cpu_nice${def_nr},UN,0,cpu_nice${def_nr},IF ";
173                $series .= "CDEF:cpu_system${def_nr}_nonans=cpu_system${def_nr},UN,0,cpu_system${def_nr},IF ";
174                $series .= "CDEF:cpu_wio${def_nr}_nonans=cpu_wio${def_nr},UN,0,cpu_wio${def_nr},IF ";
175                $series .= "CDEF:cpu_idle${def_nr}_nonans=cpu_idle${def_nr},UN,0,cpu_idle${def_nr},IF ";
176            }
177
178            $def_nr++;
179        }
180
181
182        if( $conf['graphreport_stats'] )
183        {
184            $s_last     = $def_nr - 1;
185            $user_sum   = "CDEF:cpu_user=cpu_user0_nonans";
186            $nice_sum   = "CDEF:cpu_nice=cpu_nice0_nonans";
187            $system_sum = "CDEF:cpu_system=cpu_system0_nonans";
188            $wio_sum    = "CDEF:cpu_wio=cpu_wio0_nonans";
189            $idle_sum   = "CDEF:cpu_idle=cpu_idle0_nonans";
190
191            if( $s_last > 1 )
192            {
193                foreach (range(1, ($s_last)) as $print_nr ) 
194                {
195                    $user_sum   .= ",cpu_user{$print_nr}_nonans,+";
196                    $nice_sum   .= ",cpu_nice{$print_nr}_nonans,+";
197                    $system_sum .= ",cpu_system{$print_nr}_nonans,+";
198                    $wio_sum    .= ",cpu_wio{$print_nr}_nonans,+";
199                    $idle_sum   .= ",cpu_idle{$print_nr}_nonans,+";
200                }
201            }
202
203            $user_sum .= " ";
204            $nice_sum .= " ";
205            $system_sum .= " ";
206            $wio_sum .= " ";
207            $idle_sum .= " ";
208
209            $series .= $user_sum . $nice_sum . $system_sum . $wio_sum . $idle_sum;
210
211            $report_names = array( "user", "nice", "system", "wio", "idle" );
212
213            $r_count = 0;
214
215            foreach( $report_names as $r )
216            {
217                $legend_str = ucfirst( $r );
218
219                if( $r_count == 0 )
220                {
221                    $graph_str = "AREA";
222                }
223                else
224                {
225                    $graph_str = "STACK";
226                }
227                foreach (range(0, ($s_last)) as $print_nr ) 
228                {
229
230                    $series .= "${graph_str}:'cpu_${r}${print_nr}'#".$conf['cpu_'.${r}.'_color'].":'${legend_str}\g' ";
231                    $legend_str = '';
232                }
233
234                $series .= "VDEF:'${r}_last'=cpu_${r},LAST ";
235                $series .= "VDEF:'${r}_min'=cpu_${r},MINIMUM ";
236                $series .= "VDEF:'${r}_avg'=cpu_${r},AVERAGE ";
237                $series .= "VDEF:'${r}_max'=cpu_${r},MAXIMUM ";
238
239                $spacefill = '';
240
241                $spacesize = 6-strlen($r);
242                foreach ( range( 0, $spacesize ) as $whatever )
243                {
244                    $spacefill .= ' ';
245                }
246
247                $series .= "GPRINT:'${r}_last':'${spacefill}Now\:%6.1lf%%' "
248                        . "GPRINT:'${r}_min':'${space1}Min\:%6.1lf%%${eol1}' "
249                        . "GPRINT:'${r}_avg':'${space2}Avg\:%6.1lf%%' "
250                        . "GPRINT:'${r}_max':'${space1}Max\:%6.1lf%%\\l' ";
251                       
252                $r_count = $r_count + 1;
253            }
254        }
255        else
256        {
257            $series .= "AREA:'cpu_user${def_nr}'#".$conf['cpu_user_color']."${user_str} "
258                    ."STACK:'cpu_nice${def_nr}'#".$conf['cpu_nice_color']."${nice_str} "
259                    ."STACK:'cpu_system${def_nr}'#".$conf['cpu_system_color']."${system_str} "
260                    ."STACK:'cpu_wio${def_nr}'#".$conf['cpu_wio_color']."${wio_str} "
261                    ."STACK:'cpu_idle${def_nr}'#".$conf['cpu_idle_color']."${idle_str} ";
262        }
263
264    } 
265    else if ($graph == "job_report") 
266    {
267        $style = "Jobs";
268
269        $lower_limit = "--lower-limit 0 --rigid";
270        $vertical_label = "--vertical-label Jobs";
271
272        $def_nr = 0;
273
274        $rrd_dir = $conf['rrds'] . "/$clustername/$hostname/";
275
276        $rj_rrd    = $rrd_dir . "zplugin_monarch_rj.rrd";
277        $qj_rrd    = $rrd_dir . "zplugin_monarch_qj.rrd";
278
279        $sorted_hosts    = array();
280        $sorted_hosts[]  = $rjqj_host;
281
282        $rj_str = ":'Running Jobs'";
283        $qj_str = ":'Queued Jobs'";
284
285        $series .= "DEF:'running_jobs'='${rj_rrd}':'sum':AVERAGE "
286            ."DEF:'queued_jobs'='${qj_rrd}':'sum':AVERAGE ";
287
288       
289        $series .= "LINE3:'running_jobs'#ff0000${rj_str} ";
290
291        if ( $conf['graphreport_stats'] ) 
292        {
293            $series .= "CDEF:running_pos=running_jobs,0,INF,LIMIT "
294                    . "VDEF:running_last=running_pos,LAST "
295                    . "VDEF:running_min=running_pos,MINIMUM "
296                    . "VDEF:running_avg=running_pos,AVERAGE "
297                    . "VDEF:running_max=running_pos,MAXIMUM "
298                    . "GPRINT:'running_last':' ${space1}Now\:%5.0lf' "
299                    . "GPRINT:'running_min':'${space1}Min\:%5.0lf${eol1}' "
300                    . "GPRINT:'running_avg':'${space2}Avg\:%5.0lf' "
301                    . "GPRINT:'running_max':'${space1}Max\:%5.0lf\\l' ";
302        }
303
304        $series .= "LINE3:'queued_jobs'#999999${qj_str} ";
305
306        if ( $conf['graphreport_stats'] ) 
307        {
308            $series .= "CDEF:queued_pos=queued_jobs,0,INF,LIMIT "
309                    . "VDEF:queued_last=queued_pos,LAST "
310                    . "VDEF:queued_min=queued_pos,MINIMUM "
311                    . "VDEF:queued_avg=queued_pos,AVERAGE "
312                    . "VDEF:queued_max=queued_pos,MAXIMUM "
313                    . "GPRINT:'queued_last':'  ${space1}Now\:%5.0lf' "
314                    . "GPRINT:'queued_min':'${space1}Min\:%5.0lf${eol1}' "
315                    . "GPRINT:'queued_avg':'${space2}Avg\:%5.0lf' "
316                    . "GPRINT:'queued_max':'${space1}Max\:%5.0lf\\l' ";
317        }
318    } 
319    else if ($graph == "mem_report") 
320    {
321        $style = "Memory";
322
323        $lower_limit = "--lower-limit 0 --rigid";
324        $extras .= "--base 1024";
325        $vertical_label = "--vertical-label Bytes";
326
327        $def_nr = 0;
328
329        foreach( $rrd_dirs as $rrd_dir ) 
330        {
331            $series .= "DEF:'mem_total${def_nr}'='${rrd_dir}/mem_total.rrd':'sum':AVERAGE "
332                ."CDEF:'bmem_total${def_nr}'=mem_total${def_nr},1024,* "
333                ."DEF:'mem_shared${def_nr}'='${rrd_dir}/mem_shared.rrd':'sum':AVERAGE "
334                ."CDEF:'bmem_shared${def_nr}'=mem_shared${def_nr},1024,* "
335                ."DEF:'mem_free${def_nr}'='${rrd_dir}/mem_free.rrd':'sum':AVERAGE "
336                ."CDEF:'bmem_free${def_nr}'=mem_free${def_nr},1024,* "
337                ."DEF:'mem_cached${def_nr}'='${rrd_dir}/mem_cached.rrd':'sum':AVERAGE "
338                ."CDEF:'bmem_cached${def_nr}'=mem_cached${def_nr},1024,* "
339                ."DEF:'mem_buffer${def_nr}'='${rrd_dir}/mem_buffers.rrd':'sum':AVERAGE "
340                ."CDEF:'bmem_buffer${def_nr}'=mem_buffer${def_nr},1024,* "
341                ."CDEF:'bmem_used${def_nr}'='bmem_total${def_nr}','bmem_shared${def_nr}',-,'bmem_free${def_nr}',-,'bmem_cached${def_nr}',-,'bmem_buffer${def_nr}',- "
342                ."DEF:'swap_total${def_nr}'='${rrd_dir}/swap_total.rrd':'sum':AVERAGE "
343                ."DEF:'swap_free${def_nr}'='${rrd_dir}/swap_free.rrd':'sum':AVERAGE "
344                ."CDEF:'bmem_swap${def_nr}'='swap_total${def_nr}','swap_free${def_nr}',-,1024,* ";
345
346            $report_names = array( "used", "shared", "cached", "buffer", "swap", "total" );
347
348            if( $conf['graphreport_stats'] )
349            {
350                foreach( $report_names as $r )
351                {
352                    $series .= "CDEF:bmem_${r}${def_nr}_nonans=bmem_${r}${def_nr},UN,0,bmem_${r}${def_nr},IF ";
353                }
354            }
355
356            $def_nr++;
357        }
358
359        if( $conf['graphreport_stats'] )
360        {
361            $s_last     = $def_nr - 1;
362
363            foreach( $report_names as $r )
364            {
365                $cdef_sum   = "CDEF:bmem_${r}=bmem_${r}0_nonans";
366
367                if( $s_last > 1 )
368                {
369                    foreach (range(1, ($s_last)) as $print_nr ) 
370                    {
371                        $user_sum   .= ",bmem_${r}{$print_nr}_nonans,+";
372                    }
373                }
374                $cdef_sum .= " ";
375
376                $series   .= $cdef_sum;
377            }
378
379            $r_count = 0;
380
381            $conf['mem_buffer_color'] = $conf['mem_buffered_color'];
382            $conf['mem_swap_color']   = $conf['mem_swapped_color'];
383            $conf['mem_total_color']  = $conf['cpu_num_color'];
384
385            foreach( $report_names as $r )
386            {
387                $legend_str = ucfirst( $r );
388
389                if( $r == "total" )
390                {
391                    $graph_str  = "LINE2";
392                }
393                else if( $r_count == 0 )
394                {
395                    $graph_str  = "AREA";
396                }
397                else
398                {
399                    $graph_str  = "STACK";
400                }
401                foreach (range(0, ($s_last)) as $print_nr ) 
402                {
403                    $series .= "${graph_str}:'bmem_${r}${print_nr}'#".$conf['mem_'.${r}.'_color'].":'${legend_str}\g' ";
404                    $legend_str = '';
405                }
406
407                $series .= "VDEF:'${r}_last'=bmem_${r},LAST ";
408                $series .= "VDEF:'${r}_min'=bmem_${r},MINIMUM ";
409                $series .= "VDEF:'${r}_avg'=bmem_${r},AVERAGE ";
410                $series .= "VDEF:'${r}_max'=bmem_${r},MAXIMUM ";
411
412                $spacefill = '';
413
414                $spacesize = 6-strlen($r); // max length 'swapped' = 7
415                foreach ( range( 0, $spacesize ) as $whatever )
416                {
417                    $spacefill .= ' ';
418                }
419                $series .= "GPRINT:'${r}_last':'${spacefill}Now\:%6.1lf%s' "
420                        . "GPRINT:'${r}_min':'${space1}Min\:%6.1lf%s${eol1}' "
421                        . "GPRINT:'${r}_avg':'${space2}Avg\:%6.1lf%s' "
422                        . "GPRINT:'${r}_max':'${space1}Max\:%6.1lf%s\\l' ";
423
424            }
425        }
426        $r_count = $r_count + 1;
427
428    } 
429    else if ($graph == "load_report") 
430    {
431        $style = "Load";
432
433        $lower_limit = "--lower-limit 0 --rigid";
434        $vertical_label = "--vertical-label 'Load/Procs'";
435
436        $def_nr = 0;
437
438        foreach( $rrd_dirs as $rrd_dir ) 
439        {
440
441            if( $def_nr == 0 ) 
442            {
443
444                $load_str = ":'1-min Load'";
445                $cpu_str = ":'CPUs'";
446                $run_str = ":'Running Processes'";
447            } 
448            else 
449            {
450                $load_str = "";
451                $cpu_str = "";
452                $run_str = "";
453            }
454
455            $series .= "DEF:'load_load${def_nr}'='${rrd_dir}/load_one.rrd':'sum':AVERAGE "
456                ."DEF:'load_procs${def_nr}'='${rrd_dir}/proc_run.rrd':'sum':AVERAGE "
457                ."DEF:'load_cpus${def_nr}'='${rrd_dir}/cpu_num.rrd':'sum':AVERAGE ";
458
459            $report_names = array( "load", "procs", "cpus" );
460
461            if( $conf['graphreport_stats'] )
462            {
463                foreach( $report_names as $r )
464                {
465                    $series .= "CDEF:load_${r}${def_nr}_nonans=load_${r}${def_nr},UN,0,load_${r}${def_nr},IF ";
466                }
467            }
468
469            $def_nr++;
470        }
471
472        if( $conf['graphreport_stats'] )
473        {
474            $s_last     = $def_nr - 1;
475
476            foreach( $report_names as $r )
477            {
478                $cdef_sum   = "CDEF:load_${r}=load_${r}0_nonans";
479
480                if( $s_last > 1 )
481                {
482                    foreach (range(1, ($s_last)) as $print_nr ) 
483                    {
484                        $user_sum   .= ",load_${r}{$print_nr}_nonans,+";
485                    }
486                }
487                $cdef_sum .= " ";
488
489                $series   .= $cdef_sum;
490            }
491
492            $conf['load_load_color']  = $conf['load_one_color'];
493            $conf['load_procs_color'] = $conf['proc_run_color'];
494            $conf['load_cpus_color']  = $conf['cpu_num_color'];
495
496            foreach( $report_names as $r )
497            {
498                $legend_str = ucfirst( $r );
499
500                if( $r == 'load' )
501                {
502                    $graph_str  = "AREA";
503                }
504                else
505                {
506                    $graph_str  = "LINE2";
507                }
508                foreach (range(0, ($s_last)) as $print_nr ) 
509                {
510                    $series .= "${graph_str}:'load_${r}${print_nr}'#".$conf['load_'.${r}.'_color'].":'${legend_str}\g' ";
511                    $legend_str = '';
512                }
513
514                $series .= "VDEF:'${r}_last'=load_${r},LAST ";
515                $series .= "VDEF:'${r}_min'=load_${r},MINIMUM ";
516                $series .= "VDEF:'${r}_avg'=load_${r},AVERAGE ";
517                $series .= "VDEF:'${r}_max'=load_${r},MAXIMUM ";
518
519                $spacefill = '';
520
521                $spacesize = 6-strlen($r); // max length 'swapped' = 7
522                foreach ( range( 0, $spacesize ) as $whatever )
523                {
524                    $spacefill .= ' ';
525                }
526                $series .= "GPRINT:'${r}_last':'${spacefill}Now\:%6.1lf%s' "
527                        . "GPRINT:'${r}_min':'${space1}Min\:%6.1lf%s${eol1}' "
528                        . "GPRINT:'${r}_avg':'${space2}Avg\:%6.1lf%s' "
529                        . "GPRINT:'${r}_max':'${space1}Max\:%6.1lf%s\\l' ";
530            }
531        }
532        else
533        {
534            $series .="AREA:'load_one${def_nr}'#".$conf['load_one_color']."${load_str} ";
535            $series .="LINE2:'cpu_num${def_nr}'#".$conf['cpu_num_color']."${cpu_str} ";
536            $series .="LINE2:'proc_run${def_nr}'#".$conf['proc_run_color']."${run_str} ";
537        }
538    } 
539    else if ($graph == "network_report") 
540    {
541        $style = "Network";
542
543        $lower_limit = "--lower-limit 0 --rigid";
544        $extras .= "--base 1024";
545        $vertical_label = "--vertical-label 'Bytes/sec'";
546
547        $def_nr = 0;
548
549        foreach( $rrd_dirs as $rrd_dir ) 
550        {
551            $series .= "DEF:'bytes_in${def_nr}'='${rrd_dir}/bytes_in.rrd':'sum':AVERAGE "
552                    ."DEF:'bytes_out${def_nr}'='${rrd_dir}/bytes_out.rrd':'sum':AVERAGE ";
553
554            $report_names = array( "in", "out" );
555
556            if( $conf['graphreport_stats'] )
557            {
558                foreach( $report_names as $r )
559                {
560                    $series .= "CDEF:bytes_${r}${def_nr}_nonans=bytes_${r}${def_nr},UN,0,bytes_${r}${def_nr},IF ";
561                }
562            }
563
564            $def_nr++;
565        }
566
567        if( $conf['graphreport_stats'] )
568        {
569            $s_last     = $def_nr - 1;
570
571            foreach( $report_names as $r )
572            {
573                $cdef_sum   = "CDEF:bytes_${r}=bytes_${r}0_nonans";
574
575                if( $s_last > 1 )
576                {
577                    foreach (range(1, ($s_last)) as $print_nr ) 
578                    {
579                        $user_sum   .= ",bytes_${r}{$print_nr}_nonans,+";
580                    }
581                }
582                $cdef_sum .= " ";
583
584                $series   .= $cdef_sum;
585            }
586
587            $r_count = 0;
588
589            $conf['bytes_out_color'] = $conf['mem_used_color'];
590            $conf['bytes_in_color']  = $conf['mem_cached_color'];
591
592            foreach( $report_names as $r )
593            {
594                $legend_str = ucfirst( $r );
595
596                $graph_str  = "LINE2";
597
598                foreach (range(0, ($s_last)) as $print_nr ) 
599                {
600                    $series .= "${graph_str}:'bytes_${r}${print_nr}'#".$conf['bytes_'.${r}.'_color'].":'${legend_str}\g' ";
601                    $legend_str = '';
602                }
603
604                $series .= "VDEF:'${r}_last'=bytes_${r},LAST ";
605                $series .= "VDEF:'${r}_min'=bytes_${r},MINIMUM ";
606                $series .= "VDEF:'${r}_avg'=bytes_${r},AVERAGE ";
607                $series .= "VDEF:'${r}_max'=bytes_${r},MAXIMUM ";
608
609                $spacefill = '';
610
611                $spacesize = 6-strlen($r); // max length 'swapped' = 7
612                foreach ( range( 0, $spacesize ) as $whatever )
613                {
614                    $spacefill .= ' ';
615                }
616                $series .= "GPRINT:'${r}_last':'${spacefill}Now\:%6.1lf%s' "
617                        . "GPRINT:'${r}_min':'${space1}Min\:%6.1lf%s${eol1}' "
618                        . "GPRINT:'${r}_avg':'${space2}Avg\:%6.1lf%s' "
619                        . "GPRINT:'${r}_max':'${space1}Max\:%6.1lf%s\\l' ";
620
621            }
622        }
623        else
624        {
625                $series .= "LINE2:'bytes_in${def_nr}'#".$conf['mem_cached_color']."'Bytes In' "
626                        ."LINE2:'bytes_out${def_nr}'#".$conf['mem_used_color']."'Bytes Out' ";
627        }
628
629    } 
630    else if ($graph == "packet_report") 
631    {
632        $style = "Packets";
633
634        $lower_limit = "--lower-limit 0 --rigid";
635        $extras .= "--base 1024";
636        $vertical_label = "--vertical-label 'Packets/sec'";
637
638        $def_nr = 0;
639
640        foreach( $rrd_dirs as $rrd_dir ) 
641        {
642
643            $series .= "DEF:'pkts_in${def_nr}'='${rrd_dir}/pkts_in.rrd':'sum':AVERAGE "
644                    ."DEF:'pkts_out${def_nr}'='${rrd_dir}/pkts_out.rrd':'sum':AVERAGE ";
645
646            $report_names = array( "in", "out" );
647
648            if( $conf['graphreport_stats'] )
649            {
650                foreach( $report_names as $r )
651                {
652                    $series .= "CDEF:pkts_${r}${def_nr}_nonans=pkts_${r}${def_nr},UN,0,pkts_${r}${def_nr},IF ";
653                }
654            }
655
656            $def_nr++;
657        }
658
659        if( $conf['graphreport_stats'] )
660        {
661            $s_last     = $def_nr - 1;
662
663            foreach( $report_names as $r )
664            {
665                $cdef_sum   = "CDEF:pkts_${r}=pkts_${r}0_nonans";
666
667                if( $s_last > 1 )
668                {
669                    foreach (range(1, ($s_last)) as $print_nr ) 
670                    {
671                        $user_sum   .= ",pkts_${r}{$print_nr}_nonans,+";
672                    }
673                }
674                $cdef_sum .= " ";
675
676                $series   .= $cdef_sum;
677            }
678
679            $r_count = 0;
680
681            $conf['pkts_out_color'] = $conf['mem_used_color'];
682            $conf['pkts_in_color']  = $conf['mem_cached_color'];
683
684            foreach( $report_names as $r )
685            {
686                $legend_str = ucfirst( $r );
687
688                $graph_str  = "LINE2";
689
690                foreach (range(0, ($s_last)) as $print_nr ) 
691                {
692                    $series .= "${graph_str}:'pkts_${r}${print_nr}'#".$conf['pkts_'.${r}.'_color'].":'${legend_str}\g' ";
693                    $legend_str = '';
694                }
695
696                $series .= "VDEF:'${r}_last'=pkts_${r},LAST ";
697                $series .= "VDEF:'${r}_min'=pkts_${r},MINIMUM ";
698                $series .= "VDEF:'${r}_avg'=pkts_${r},AVERAGE ";
699                $series .= "VDEF:'${r}_max'=pkts_${r},MAXIMUM ";
700
701                $spacefill = '';
702
703                $spacesize = 6-strlen($r); // max length 'swapped' = 7
704                foreach ( range( 0, $spacesize ) as $whatever )
705                {
706                    $spacefill .= ' ';
707                }
708                $series .= "GPRINT:'${r}_last':'${spacefill}Now\:%6.1lf%s' "
709                        . "GPRINT:'${r}_min':'${space1}Min\:%6.1lf%s${eol1}' "
710                        . "GPRINT:'${r}_avg':'${space2}Avg\:%6.1lf%s' "
711                        . "GPRINT:'${r}_max':'${space1}Max\:%6.1lf%s\\l' ";
712
713            }
714        }
715        else
716        {
717                $series .= "LINE2:'pkts_in${def_nr}'#".$conf['mem_cached_color']."'Packets In' "
718                        ."LINE2:'pkts_out${def_nr}'#".$conf['mem_used_color']."'Packets Out' ";
719        }
720
721    } 
722    else 
723    {
724        /* Custom graph */
725        $style = "";
726
727        $subtitle = $metricname;
728        if($context == "host")
729        {
730            if ($size == "small")
731                $prefix = $metricname;
732            else
733                $prefix = $hostname;
734
735            $value = $value>1000 ? number_format($value) : number_format($value, 2);
736        }
737
738        if (is_numeric($max))
739            $upper_limit = "--upper-limit '$max' ";
740        if (is_numeric($min))
741            $lower_limit ="--lower-limit '$min' ";
742
743        if ($vlabel)
744        {
745            $vertical_label = "--vertical-label '$vlabel'";
746        }
747        else 
748        {
749            if ($upper_limit or $lower_limit) 
750            {
751                $max = $max>1000 ? number_format($max) : number_format($max, 2);
752                $min = $min>0 ? number_format($min,2) : $min;
753
754                $vertical_label ="--vertical-label '$min - $max' ";
755            }
756        }
757
758        $def_nr = 0;
759
760
761        foreach( $rrd_dirs as $rrd_dir ) 
762        {
763
764            if( $def_nr == 0 ) 
765            {
766                $title_str = ":'${subtitle}'";
767            } 
768            else 
769            {
770                $title_str = "";
771            }
772
773            $rrd_file = "$rrd_dir/$metricname.rrd";
774            $series .= "DEF:'sum${def_nr}'='$rrd_file':'sum':AVERAGE "
775                ."AREA:'sum${def_nr}'#".$conf['default_metric_color']."${title_str} ";
776
777            if( $conf['graphreport_stats'] )
778            {
779                $series .= "CDEF:sum${def_nr}_nonans=sum${def_nr},UN,0,sum${def_nr},IF ";
780            }
781
782            $def_nr++;
783        }
784
785        if( $conf['graphreport_stats'] )
786        {
787            $s_last         = $def_nr - 1;
788            $series_sum     = "CDEF:sum=sum0_nonans";
789
790            if( $def_nr > 1 )
791            {
792                foreach (range(1, ($s_last)) as $print_nr ) 
793                {
794                    $series_sum     .= ",sum{$print_nr}_nonans,+";
795                }
796            }
797
798            $series_sum .= " ";
799
800            $series_last    = "VDEF:'sum_last'=sum,LAST ";
801            $series_minimum = "VDEF:'sum_min'=sum,MINIMUM ";
802            $series_average = "VDEF:'sum_avg'=sum,AVERAGE ";
803            $series_maximum = "VDEF:'sum_max'=sum,MAXIMUM ";
804
805            $series .= $series_sum . $series_last . $series_minimum . $series_average . $series_maximum;
806
807            $series .= "COMMENT:\"\\n\" ";
808            $series .= "GPRINT:'sum_last':'${space1}Now\:%6.1lf%s' "
809                    . "GPRINT:'sum_min':'${space1}Min\:%6.1lf%s${eol1}' "
810                    . "GPRINT:'sum_avg':'${space2}Avg\:%6.1lf%s' "
811                    . "GPRINT:'sum_max':'${space1}Max\:%6.1lf%s\\l' ";
812        }
813    }
814}
815if( $series != '' ) 
816{
817    if ($job_start)
818    {
819        $series .= "VRULE:${job_start}#${jobstart_color}:'job start':dashes=4,2 ";
820    }
821    if ($job_stop)
822    {
823        $series .= "VRULE:${job_stop}#${jobstop_color}:'job stop':dashes=4,2 ";
824    }
825}
826
827if($graph == "job_report")
828{
829    if($range == 'job' )
830    {
831        $title = "Last: $j_title";
832    }
833    else
834    {
835        $title = "Last: $range";
836    }
837}
838else
839{
840    $title = "$hostname";
841}
842
843function determineXGrid( $p_start, $p_stop ) 
844{
845
846    $period = intval( $p_stop - $p_start );
847
848    // Syntax: <minor_grid_lines_time_declr>:<major_grid_lines_time_declr>:<labels_time_declr>:<offset>:<format>
849    //
850    // Where each <*time_declr*> = <time_type>:<time_interval>
851
852    //$my_lines1 = intval( $period / 3.0 );
853    //$my_lines2 = intval( $period / 6.0 );
854
855    //$my_grid = "SECOND:$my_lines2:SECOND:$my_lines1:SECOND:$my_lines1:0:%R";
856
857    //return "--x-grid $my_grid";
858
859    // Less than 1 minute
860    if( $period < 60 ) 
861    {
862
863        $tm_formt = "%X";
864        $my_grid = "SECOND:15:SECOND:30:SECOND:30:0:$tm_formt";
865
866    // Less than 10 minutes
867    } 
868    else if( $period < 600 ) 
869    {
870
871        $tm_formt = "%R";
872        $my_grid = "MINUTE:1:MINUTE:3:MINUTE:3:0:$tm_formt";
873
874    // Less than 1 hour
875    } 
876    else if( $period < 3600 ) 
877    {
878
879        $tm_formt = "%R";
880        $my_grid = "MINUTE:5:MINUTE:15:MINUTE:15:0:$tm_formt";
881
882    // Less than 15 hour
883    } 
884    else if( $period < 3600 ) 
885    {
886
887        $tm_formt = "%R";
888        $my_grid = "HOUR:1:HOUR:2:HOUR:2:0:$tm_formt";
889
890    // Less than 1 day
891    //
892    } 
893    else if( $period < 86400 ) 
894    {
895
896        $tm_formt = "%R";
897        $my_grid = "HOUR:2:HOUR:5:HOUR:5:0:$tm_formt";
898
899    // Less than 15 days
900    //
901    } 
902    else if( $period < 1296000 ) 
903    {
904
905        $tm_formt = "%e-%m";
906        $my_grid = "HOUR:1:DAY:3:DAY:3:0:'$tm_formt'";
907       
908    // Less than 30 days (a month)
909    //
910    } 
911    else if( $period < 2592000 ) 
912    {
913
914        $tm_formt = "%e-%m";
915        $my_grid = "DAY:5:DAY:10:DAY:10:0:'$tm_formt'";
916    }
917
918    if( isset( $my_grid ) ) 
919    {
920
921        $ret_str = "--x-grid $my_grid";
922        return array($ret_str,$tm_formt);
923
924    } 
925    else 
926    {
927        return array( "", "" );
928    }
929}
930
931$lower_limit = "--lower-limit 0";
932
933if( !isset( $load_color ) or ( $load_color == '') )
934{
935    $load_color = 'FFFFFF';
936}
937
938# Calculate time range.
939if ( isset($sourcetime) )
940{
941    $end = $sourcetime;
942    # Get_context makes start negative.
943    $start = $sourcetime + $start;
944
945    # Fix from Phil Radden, but step is not always 15 anymore.
946    if ($range=="month")
947    {
948        $end = floor($end / 672) * 672;
949    }
950        $command = $conf['rrdtool']. " graph - --start $start --end $end ".
951                "--width $width --height $height $lower_limit $vertical_label ".
952                "--title '$title' $extras $background ".
953                $series;
954}
955else
956{
957    $command = $conf['rrdtool'] . " graph - --start $period_start --end $period_stop ".
958               "--width $width --height $height $lower_limit --color BACK#$load_color $vertical_label ".
959               "--title '$title' $extras $background ".
960               $series;
961}
962
963$debug=0;
964
965
966# Did we generate a command?   Run it.
967if($command) 
968{
969    /*Make sure the image is not cached*/
970    header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");   // Date in the past
971    header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
972    header ("Cache-Control: no-cache, must-revalidate");   // HTTP/1.1
973    header ("Pragma: no-cache");                     // HTTP/1.0
974    if ($debug) 
975    {
976        header ("Content-type: text/html");
977        print "$command\n\n\n\n\n";
978    } 
979    else 
980    {
981        header ("Content-type: image/gif");
982        passthru($command);
983    }
984}
985?>
Note: See TracBrowser for help on using the repository browser.