Dear Ganglia Developers,

Please find below a patch that brings trends to Ganglia.
It uses RRD's LSLSLOPE, LSLINT and PREDICT (requires RRD >= 1.4.0 ) to
provide two kinds of trends.
Trends can be disabled by modifying conf.php ($with_trends).
I also modified the host_view template to use tables instead of sending a
<BR> after "n" metrics.
Using PREDICT with linear datas does not give a really good result. Maybe it
is related to the parameters I am using.
This patch also requires 2 new pictures to be put in
templates/default/images/ but I don't think I can attach them to this email.
Your remarks and suggestions are most welcome.
Best regards

-----------
diff -ur ganglia.ori/conf.php ganglia/conf.php
--- ganglia.ori/conf.php    2009-12-14 15:19:23.000000000 +0100
+++ ganglia/conf.php    2009-12-15 12:05:49.000000000 +0100
@@ -64,6 +64,18 @@
 #
 $show_meta_snapshot = "yes";

+#
+# Show trends icons next to each single metric graph
+#
+$with_trends = "yes";
+
+#
+# Parameters used for prediction trends
+#
+# shift_divisions must be > 1
+$shift_divisions="5";
+$sigma_multiplier="5";
+
 #
 # The default refresh frequency on pages.
 #
diff -ur ganglia.ori/graph.php ganglia/graph.php
--- ganglia.ori/graph.php    2009-12-14 15:19:23.000000000 +0100
+++ ganglia/graph.php    2009-12-15 14:17:54.000000000 +0100
@@ -1,6 +1,7 @@
 <?php
 /* $Id: graph.php 1816 2008-09-17 09:42:40Z carenas $ */
 include_once "./conf.php";
+include_once "./ganglia.php";
 include_once "./get_context.php";
 include_once "./functions.php";

@@ -29,6 +30,7 @@

 $summary    = isset( $_GET["su"] )    ? 1 : 0;
 $debug      = isset( $_GET['debug'] ) ? clean_number ( sanitize(
$_GET["debug"] ) ) : 0;
+$trend_type = isset($_GET["tr"]) ?  sanitize ( $_GET["tr"] )  : '';
 $command    = '';

 # Assumes we have a $start variable (set in get_context.php).
@@ -140,6 +142,12 @@
       # Get_context makes start negative.
       $start = $sourcetime + $start;
    }
+
+# For trends, we double the time range
+if ($trend_type != ''){
+  $rrdtool_graph['end']=$end + ($end-$start);
+}
+
 # Fix from Phil Radden, but step is not always 15 anymore.
 if ($range=="month")
    $rrdtool_graph['end'] = floor($rrdtool_graph['end'] / 672) * 672;
@@ -209,6 +217,18 @@
 $command .= array_key_exists('extras', $rrdtool_graph) ? '
'.$rrdtool_graph['extras'].' ' : '';
 $command .= " $rrdtool_graph[series]";

+
+if ($trend_type == 'linear'){
+  $command .= " VDEF:D=sum,LSLSLOPE VDEF:H=sum,LSLINT
CDEF:projection=sum,POP,D,COUNT,*,H,+ LINE1:projection#00ff00:'Projection'";
+}
+elseif ($trend_type == 'predict'){
+  $shift=abs($rrdtool_graph['start']/$shift_divisions);
+  $command .= "
CDEF:predict=".$shift.",".-1*$shift_divisions.",".abs($rrdtool_graph['start']).",sum,PREDICT";
+  $command .= "
CDEF:sigma=".$shift.",".-1*$shift_divisions.",".abs($rrdtool_graph['start']).",sum,PREDICTSIGMA";
+  $command .= " CDEF:upper=predict,sigma,".$sigma_multiplier.",*,+
CDEF:lower=predict,sigma,".$sigma_multiplier.",*,-";
+  $command .= " LINE1:predict#00ff00:prediction  LINE1:upper#ff0000:upper
LINE1:lower#0000ff:lower";
+}
+
 //error_log("Final command:  $command");

 # Did we generate a command?   Run it.
diff -ur ganglia.ori/host_view.php ganglia/host_view.php
--- ganglia.ori/host_view.php    2009-12-14 15:19:23.000000000 +0100
+++ ganglia/host_view.php    2009-12-15 14:16:46.000000000 +0100
@@ -161,10 +161,26 @@
                      $tpl->newBlock("vol_metric_info");
                      $tpl->assign("graphargs", $v['graph']);
                      $tpl->assign("alt", "$hostname $name");
+
                      if (isset($v['description']))
                        $tpl->assign("desc", $v['description']);
-                     if ( !(++$i % $metriccols) )
-                        $tpl->assign("br", "<BR>");
+             # PREDICT supported in 1.4.0
+               if ($with_trends == 'yes'){
+             if( version_compare($version["rrdtool"], '1.4.5') >= 0) {
+               $tpl->newBlock("trend_predict");
+               $tpl->assign("graphargs", $v['graph']);
+               $tpl->assign("images","./templates/$template_name/images");
+             }
+             else {
+               $tpl->newBlock("trend");
+               $tpl->assign("graphargs", $v['graph']);
+               $tpl->assign("images","./templates/$template_name/images");
+             }
+               }
+                     if ( !(++$i % $metriccols) ){
+               $tpl->gotoBlock ("vol_metric_info");
+                        $tpl->assign("new_row", "</TR><TR>");
+             }
                   }
                }
          }
Only in ganglia: prediction.png
diff -ur ganglia.ori/templates/default/host_view.tpl
ganglia/templates/default/host_view.tpl
--- ganglia.ori/templates/default/host_view.tpl    2009-12-14
15:19:23.000000000 +0100
+++ ganglia/templates/default/host_view.tpl    2009-12-15 14:15:33.000000000
+0100
@@ -117,11 +117,24 @@
 </TABLE>
 </A>
 <DIV ID="{group}">
+<table><tr>
 <!-- START BLOCK : vol_metric_info -->
-<A HREF="./graph.php?&{graphargs}&z=large">
-<IMG BORDER=0 ALT="{alt}" SRC="./graph.php?{graphargs}" TITLE="{desc}">{br}
-</A>
+<TD><A HREF="./graph.php?&{graphargs}&z=large"><IMG BORDER=0 ALT="{alt}"
SRC="./graph.php?{graphargs}" TITLE="{desc}"></A></TD>
+<!-- START BLOCK : trend -->
+<TD>
+<A HREF="./graph.php?&{graphargs}&z=large&tr=linear"><IMG
SRC="{images}/trend_linear.gif" BORDER="0"/></A>
+</TD>
+<!-- END BLOCK : trend -->
+<!-- START BLOCK : trend_predict -->
+<TD>
+<TABLE><TR><TD><A HREF="./graph.php?&{graphargs}&z=large&tr=linear"><IMG
SRC="{images}/trend_linear.gif" BORDER="0"/></A><TD></TR>
+<TD><A HREF="./graph.php?&{graphargs}&z=large&tr=predict"><IMG
SRC="{images}/trend_predict.gif" BORDER="0"/></A></TD></TR></TABLE>
+</TD>
+<!-- END BLOCK : trend_predict -->
+{new_row}
 <!-- END BLOCK : vol_metric_info -->
+</tr>
+</table>
 </DIV>
 <!-- END BLOCK : vol_group_info -->
------------------------------------------------------------------------------
Return on Information:
Google Enterprise Search pays you back
Get the facts.
http://p.sf.net/sfu/google-dev2dev
_______________________________________________
Ganglia-developers mailing list
Ganglia-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ganglia-developers

Reply via email to