This is probably better suited to the pnp4nagios users list, but I thought I&#39;d post here as well.<br><br>I recently set out to do the exact same.  Jorge was kind enough to help me along.  The pnp4nagios &quot;special&quot; template (note: requires pnp4nagios 0.6.5+) below creates a stacked graph showing &quot;messages per hour&quot; on a number of ironport MTAs and at the bottom of the graph, shows the total of all messages for all ironports.<br>

<br>
The magic variables $rpn_stack and $counter are where the good stuff happens.<br>

<br>
&lt;?php<br>
#<br>
$this-&gt;MACRO[&#39;TITLE&#39;]   = &quot;messages per hour&quot;;<br>
$this-&gt;MACRO[&#39;COMMENT&#39;] = &quot;messages per hour&quot;;<br>
#<br>
# Get a List of Services by regex<br>
# Option 1 = &#39;Host Regex&#39;<br>
# Option 2 = &#39;Service Regex&#39;<br>
#<br>
$services = $this-&gt;tplGetServices(&quot;ironport&quot;,&quot;messages_per_hour&quot;);<br>
#<br>
# The Datasource Name for Graph 0<br>
$ds_name[0] = &quot;total messages&quot;;<br>
$opt[0]     = &quot;--title \&quot;messages per hour\&quot;&quot;;<br>
$opt[0]    .= &quot; --watermark=\&quot;ironport_messages_per_hour\&quot; &quot;;<br>
$def[0]     = &quot;&quot;;<br>
<br>
#  THESE ARE THE MAGIC VARIABLES HERE:<br>
$rpn_stack = &quot;&quot;; # empty RPN string<br>
$counter = -1; # loop counter starting by -1<br>
#<br>
# Iterate through the list of hosts<br>
foreach($services as $key=&gt;$val){<br>
   #<br>
   # get the data for a given Host/Service<br>
   $a = $this-&gt;tplGetData($val[&#39;host&#39;],$val[&#39;service&#39;]);<br>
   #<br>
   # Throw an exception to debug the content of $a<br>
   # Just to get Infos about the Array Structure<br>
   #<br>
   #throw new Kohana_exception(print_r($a,TRUE));<br>
   $def[0]    .= rrd::def(&quot;a$key&quot; ,$a[&#39;DS&#39;][0][&#39;RRDFILE&#39;], 
$a[&#39;DS&#39;][0][&#39;DS&#39;], &quot;AVERAGE&quot;);<br>
   $def[0]    .= rrd::area(&quot;a$key&quot;, rrd::color($key), 
$a[&#39;MACRO&#39;][&#39;HOSTNAME&#39;], &quot;STACK&quot;);<br>
   $def[0]    .= rrd::gprint(&quot;a$key&quot;, array(&quot;MIN&quot;, &quot;MAX&quot;, &quot;LAST&quot;, 
&quot;AVERAGE&quot;), &quot;%3.0lf %s&quot;);<br>
# THIS IS WHERE THE MAGIC VARIABLES GET USED:<br>
   $rpn_stack .= &quot;a$key,&quot;; # add the current key to the stack<br>
   $counter++;             # counter +1<br>
}<br>
# AFTER THE FOREACH LOOP, CREATE THE RPN STACK, then use it in a CDEF.<br>
$rpn_stack .= str_repeat(&quot;+,&quot;, $counter);   # build the rpn stack for 
rrdtool &quot;a0,a1,+,&quot;<br>
$rpn_stack = substr($rpn_stack, 0, -1);     # strip the last comma to 
avoid rpn underflow<br>
$def[0] .= rrd::cdef(&quot;totals&quot;, $rpn_stack); # build a cdef using out rpn
 expression<br>
$def[0] .= 
rrd::comment(&quot;-------------------------------------------------------\\n&quot;);<br>
$def[0] .= rrd::comment(&quot;Totals\:\t &quot;);<br>
$def[0] .= rrd::gprint(&quot;totals&quot;, array(&quot;MIN&quot;, &quot;MAX&quot;, &quot;LAST&quot;, &quot;AVERAGE&quot;) 
,&quot;%3.2lf %s&quot;);<br>
$def[0] .= rrd::comment(&quot; \\n&quot;);<br>
<br>cheers,<br><br>J<br>
<br><br><br><div class="gmail_quote">On Mon, Sep 20, 2010 at 9:24 AM,  <span dir="ltr">&lt;<a href="mailto:Matt.Garrett@shell.com">Matt.Garrett@shell.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">










<div link="blue" vlink="purple" lang="EN-US">

<div>

<p class="MsoNormal">Folks</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">A little off topic but maybe someone can help.</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">Using pnp4nagios php template to loop through all rrds of a
certain type, which works fine.</p>

<p class="MsoNormal">However I would like to get the Grand Total of all rrds</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">I know CDEF is the answer and can do this using php hard coding
but just cannot find out how to get this to work inside a php foreach loop</p>

<p class="MsoNormal">e.g</p>

<p class="MsoNormal">CDEF:total=var1,var2,+,var3,+</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">The php code I have been using is:</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">foreach($services as $key=&gt;$val){</p>

<p class="MsoNormal">    #</p>

<p class="MsoNormal">    # get the data for a given Host/Service</p>

<p class="MsoNormal">    $data =
$this-&gt;tplGetData($val[&#39;host&#39;],$val[&#39;service&#39;]);</p>

<p class="MsoNormal">     #</p>

<p class="MsoNormal">        $hostname  
= rrd::cut($data[&#39;MACRO&#39;][&#39;HOSTNAME&#39;]);</p>

<p class="MsoNormal">    $def[0]    .=
rrd::def(&quot;var$key&quot; , $data[&#39;DS&#39;][0][&#39;RRDFILE&#39;], $data[&#39;DS&#39;][0][&#39;DS&#39;]
);</p>

<p class="MsoNormal">    $def[0]    .=
rrd::line1(&quot;var$key&quot;, rrd::color($key), $hostname);</p>

<p class="MsoNormal">    $def[0]    .=
rrd::gprint(&quot;var$key&quot;, array(&quot;LAST&quot;, &quot;MAX&quot;));</p>

<p class="MsoNormal">}</p>

<p class="MsoNormal">?&gt;</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">Matthew<span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"></span></p>

<p class="MsoNormal"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;"> </span></p>

</div>

</div>


<br>_______________________________________________<br>
rrd-users mailing list<br>
<a href="mailto:rrd-users@lists.oetiker.ch">rrd-users@lists.oetiker.ch</a><br>
<a href="https://lists.oetiker.ch/cgi-bin/listinfo/rrd-users" target="_blank">https://lists.oetiker.ch/cgi-bin/listinfo/rrd-users</a><br>
<br></blockquote></div><br>