<?php

/**
 * Observium
 *
 *   This file is part of Observium.
 *
 * @package    observium
 * @subpackage graphs
 * @copyright  (C) 2006-2014 Adam Armstrong
 *
 */

$scale_min = 0;
//$scale_max = median*{2|3}; - TO BE DONE TO EXCLUDE SPIKES FROM DRAWING - NO INTEREST TO WATCH IT
$scale_rigid = TRUE;

include_once($config['html_dir']."/includes/graphs/common.inc.php");
include("smokeping_common.inc.php");

$i = 0;
//IN FUTURE PING COUNT NEEDS TO BE READ FROM THE: 1) CONFIG PER DEVICE OR 2) FROM THE RRD FILE ITSELF (BETTER)
$pings = 20;
$iter = 0;
$colourset = "mixed";

if($width > "500")
{
  $descr_len = 25;
} else {
  $descr_len = 12 + round(($width - 275) / 8);
}

// FIXME str_pad really needs a "limit to length" so we can rid of all the substrs all over the code to limit the length as below...
if($width > "500")
{
  $rrd_options .= " COMMENT:'".substr(str_pad($unit_text, $descr_len+5),0,$descr_len+5)." Average      Min    Max   Last\l'";
} else {
  $rrd_options .= " COMMENT:'".substr(str_pad($unit_text, $descr_len+5),0,$descr_len+5)." Average      Min    Max   Last\l'";
}

foreach ($smokeping_files[$direction][$device['hostname']] as $source => $filename)
{

  if (!isset($config['graph_colours'][$colourset][$iter])) { $iter = 0; }
  $colour = $config['graph_colours'][$colourset][$iter];
  $iter++;

  $descr = rrdtool_escape($source, $descr_len);
  
  $rrd_options .= " DEF:median=".$filename.":median:AVERAGE ";
  $rrd_options .= " DEF:loss=".$filename.":loss:AVERAGE ";  
  $rrd_options .= " CDEF:loss_rnd=loss,CEIL "; //NOT ALWAYS LOST PACKETS COUNT IS INTEGER... HI TOBI :)
  $rrd_options .= " CDEF:ploss=loss_rnd,".$pings.",/,100,* ";
  
  foreach (range(1, $pings) as $p)
  {
    $rrd_options .= " DEF:ping".$p."=".$filename.":ping".$p.":AVERAGE ";
    $rrd_options .= " CDEF:smoke".$p."=ping".$p.",median,- ";
    $rrd_options .= " LINE2:median#FFFFFF00:'' AREA:smoke".$p."#00000025:'':STACK ";
  }
  foreach (range(0, $pings) as $p)
  {
    $rrd_options .= " CDEF:loss".$p."=loss_rnd,".$p.",EQ,median,UNKN,IF ";
    $rrd_options .= " CDEF:loss".$p."_1=COUNT,2,%,0,EQ,loss".$p.",UNKN,IF ";
    $rrd_options .= " CDEF:loss".$p."_2=COUNT,2,%,1,EQ,loss".$p.",UNKN,IF ";
  }
  
  $rrd_options .= " COMMENT:'Median RTT\: ' ";
  $rrd_options .= " GPRINT:median:AVERAGE:%6.2lf%ss ";
  $rrd_options .= " GPRINT:median:MIN:%6.2lf%ss ";
  $rrd_options .= " GPRINT:median:MAX:%6.2lf%ss ";
  $rrd_options .= " GPRINT:median:LAST:%6.2lf%ss\\l ";
  
  $rrd_options .= " COMMENT:'Packet loss\: ' ";
  $rrd_options .= " GPRINT:loss_rnd:AVERAGE:%5.1lf%% ";
  $rrd_options .= " GPRINT:loss_rnd:MIN:%5.1lf%% "; 
  $rrd_options .= " GPRINT:loss_rnd:MAX:%5.1lf%% ";
  $rrd_options .= " GPRINT:loss_rnd:LAST:%5.1lf%%\\l ";
  
  $rrd_options .= " COMMENT:'Loss color\: ' ";
  
  $m = 0; //TO OPTIMIZE SEARCH OF COLORS - E.G. DON'T TRY TO EVALUATE IF PACKETLOSS OF 0% COMES AFTER 10%
  $legended = array_fill(0, 12, 0);
  foreach (range(0, $pings) as $p)
  {
    $ploss = ($p/$pings)*100;
    $line_text = "";
    foreach (range($m, count($config['smokeping']['loss_color'])) as $k)
    {
      if ($ploss <= $config['smokeping']['loss_value'][$k])
      {
        $line_color = $config['smokeping']['loss_color'][$k];
        if ($legended[$k] == 0)
        {
          if ($ploss > 0)
          {
            $line_text = ($config['smokeping']['loss_value'][$k-1] + 1)."..".$config['smokeping']['loss_value'][$k]."%";
          } else {
            $line_text = "0%";  
          }
          $legended[$k] = 1;
        }
        $rrd_options .= " LINE2:loss".$p."_1#".$line_color.":'".$line_text."' LINE2:loss".$p."_2#".$line_color.":'' ";
        $m = $k;
        break;
      }        
    }  
  }
}

//EOF
  

  