Hi Sebastien: First of all, thanks for the patch!
I just have a quick question for you right now -- is your patch against a particular version of Ganglia or is it against the code in trunk? Thanks! Bernard On Tue, Dec 15, 2009 at 5:32 AM, Sebastien Termeau <[email protected]> wrote: > 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 > [email protected] > https://lists.sourceforge.net/lists/listinfo/ganglia-developers > > ------------------------------------------------------------------------------ This SF.Net email is sponsored by the Verizon Developer Community Take advantage of Verizon's best-in-class app development support A streamlined, 14 day to market process makes app distribution fast and easy Join now and get one step closer to millions of Verizon customers http://p.sf.net/sfu/verizon-dev2dev _______________________________________________ Ganglia-developers mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ganglia-developers
