<?php $scale_min = '0'; $scale_max = '100'; $ds = 'usage'; // FIXME: As far as I can tell, $descr is never mentioned in includes/graphs/generic_simplex.inc.php -- PDG 2015-11-14 $descr = rrdtool_escape(short_hrDeviceDescr($proc['processor_descr']), 28); $colour_line = 'cc0000'; $colour_area = 'FFBBBB'; $colour_minmax = 'c5c5c5'; $graph_max = 1; $unit_text = 'Usage'; require 'includes/graphs/generic_simplex.inc.php';
<?php $scale_min = '0'; $scale_max = '10'; require 'includes/graphs/common.inc.php'; $rrd_options .= " COMMENT:' Min Max Last\\n'"; $rrd_options .= " DEF:sensor={$rrd_filename}:sensor:AVERAGE"; $rrd_options .= " LINE1.5:sensor#cc0000:'" . rrdtool_escape($sensor['sensor_descr'], 21) . "'"; $rrd_options .= ' GPRINT:sensor:MIN:%4.1lf'; $rrd_options .= ' GPRINT:sensor:MAX:%4.1lf'; $rrd_options .= ' GPRINT:sensor:LAST:%4.1lf\\\\l'; if (is_numeric($sensor['sensor_limit'])) { $rrd_options .= ' HRULE:' . $sensor['sensor_limit'] . '#999999::dashes'; } if (is_numeric($sensor['sensor_limit_low'])) { $rrd_options .= ' HRULE:' . $sensor['sensor_limit_low'] . '#999999::dashes'; }
<?php /** * Observium * * This file is part of Observium. * * @package observium * @subpackage graphs * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2016 Observium Limited * */ $scale_min = "0"; $scale_max = "100"; $ds = "usage"; $descr = rrdtool_escape(rewrite_hrDevice($proc['processor_descr']), 28); $colour_line = "cc0000"; $colour_area = "FFBBBB"; $colour_minmax = "c5c5c5"; $graph_max = 1; $unit_text = "Usage"; include $config['html_dir'] . "/includes/graphs/generic_simplex.inc.php"; // EOF
<?php // Draw generic bits graph // args: ds_in, ds_out, rrd_filename, bg, legend, from, to, width, height, inverse, previous include "includes/graphs/common.inc.php"; if ($format == "octets" || $format == "bytes") { $units = "Bps"; $format = "bytes"; $units_descr = "Bytes/s"; } else { $units = "bps"; $format = "bits"; $units_descr = "Bits/s"; } $i = 0; $units_descr = rrdtool_escape($units_descr, 9); if (!$noheader) { $rrd_options .= " COMMENT:'{$units_descr} Now Ave Max 95th \\n'"; } if ($rrd_filename) { $rrd_filename_out = $rrd_filename; $rrd_filename_in = $rrd_filename; } if ($inverse) { $in = 'out'; $out = 'in'; } else { $in = 'in'; $out = 'out'; } if ($multiplier) {
$rrd_options .= " COMMENT:'\\l'"; } $colour_iter = 0; foreach ($rrd_list as $i => $rrd) { if ($rrd['colour']) { $colour = $rrd['colour']; } else { if (!$config['graph_colours'][$colours][$colour_iter]) { $colour_iter = 0; } $colour = $config['graph_colours'][$colours][$colour_iter]; $colour_iter++; } $ds = $rrd['ds']; $filename = $rrd['filename']; $descr = rrdtool_escape($rrd['descr'], $descr_len); $id = "ds" . $i; $rrd_options .= " DEF:" . $id . "={$filename}:{$ds}:AVERAGE"; if ($simple_rrd) { $rrd_options .= " CDEF:" . $id . "min=" . $id . " "; $rrd_options .= " CDEF:" . $id . "max=" . $id . " "; } else { $rrd_options .= " DEF:" . $id . "min={$filename}:{$ds}:MIN"; $rrd_options .= " DEF:" . $id . "max={$filename}:{$ds}:MAX"; } if ($rrd['invert']) { $rrd_options .= " CDEF:" . $id . "i=" . $id . ",-1,*"; $rrd_optionsb .= " LINE1.25:" . $id . "i#" . $colour . ":'{$descr}'"; if (!empty($rrd['areacolour'])) { $rrd_optionsb .= " AREA:" . $id . "i#" . $rrd['areacolour']; }
<?php /** * Observium * * This file is part of Observium. * * @package observium * @subpackage graphs * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2016 Observium Limited * */ $ds = "sensor"; $line_text = rrdtool_escape($sensor['sensor_descr'], 22); $colour_line = "cc0000"; $colour_area = "FFFF99"; $colour_minmax = "c5c5c5"; $scale_min = 0; $graph_max = 1; $unit_text = "lux"; $print_min = 1; include $config['html_dir'] . "/includes/graphs/generic_simplex.inc.php"; if (is_numeric($sensor['sensor_limit'])) { $rrd_options .= " HRULE:" . $sensor['sensor_limit'] . "#999999::dashes"; } if (is_numeric($sensor['sensor_limit_low'])) { $rrd_options .= " HRULE:" . $sensor['sensor_limit_low'] . "#999999::dashes"; } $graph_return['descr'] = 'Illuminance sensor measured in lux.'; // EOF
<?php include "includes/graphs/common.inc.php"; $sla = dbFetchRow("SELECT * FROM `slas` WHERE `sla_id` = ?", array($vars['id'])); $device = device_by_id_cache($sla['device_id']); #if ($_GET['width'] >= "450") { $descr_len = "48"; } else { $descr_len = "21"; } $descr_len = intval($_GET['width'] / 8) * 0.8; $unit_long = 'milliseconds'; $unit = 'ms'; $rrd_options .= " -l 0 -E "; $rrd_options .= " COMMENT:'" . str_pad($unit_long, $descr_len) . " Cur Min Max\\n'"; #$descr = ""; $descr = $sla['sla_nr'] . " "; if ($sla['tag']) { $descr .= $sla['tag']; } if ($sla['owner']) { $descr .= " (Owner: " . $sla['owner'] . ")"; } $rrd_file = $config['rrd_dir'] . "/" . $device['hostname'] . "/" . safename("sla-" . $sla['sla_nr'] . ".rrd"); $rrd_options .= " DEF:rtt={$rrd_file}:rtt:AVERAGE "; $rrd_options .= " VDEF:avg=rtt,AVERAGE "; $rrd_options .= " LINE1:avg#CCCCFF:'" . str_pad('Average', $descr_len - 3) . "':dashes"; $rrd_options .= " GPRINT:rtt:AVERAGE:%4.1lf" . $unit . "\\\\l "; $rrd_options .= " LINE1:rtt#CC0000:'" . rrdtool_escape($descr) . "'"; $rrd_options .= " GPRINT:rtt:LAST:%4.1lf" . $unit . " "; $rrd_options .= " GPRINT:rtt:MIN:%4.1lf" . $unit . " "; $rrd_options .= " GPRINT:rtt:MAX:%4.1lf" . $unit . "\\\\l ";
$pings_options .= ",p" . $i . "p" . $p . ",UN,+"; $m_options .= ",p" . $i . "p" . $p . ",+"; $sdev_options .= ",p" . $i . "p" . $p . ",m" . $i . ",-,DUP,*,+"; } $rrd_options .= " CDEF:pings" . $i . "=" . $pings . ",p" . $i . "p1,UN" . $pings_options . ",-"; $rrd_options .= " CDEF:m" . $i . "=p" . $i . "p1" . $m_options . ",pings" . $i . ",/"; $rrd_options .= " CDEF:sdev" . $i . "=p" . $i . "p1,m" . $i . ",-,DUP,*" . $sdev_options . ",pings" . $i . ",/,SQRT"; // end emulate Smokeping::calc_stddev $rrd_options .= " CDEF:dmlow{$i}=dm{$i},sdev{$i},2,/,-"; $rrd_options .= " CDEF:s2d{$i}=sdev{$i}"; $dm_list .= ",dm{$i},+"; $sd_list .= ",s2d{$i},+"; $ploss_list .= ",ploss{$i},+"; $i++; } $descr = rrdtool_escape("Average", $descr_len); $rrd_options .= " CDEF:ploss_all=0" . $ploss_list . ",{$i},/"; $rrd_options .= " CDEF:dm_all=0" . $dm_list . ",{$i},/"; # $rrd_options .= " CDEF:dm_all_clean=dm_all,UN,NaN,dm_all,IF"; $rrd_options .= " CDEF:sd_all=0" . $sd_list . ",{$i},/"; $rrd_options .= " CDEF:dmlow_all=dm_all,sd_all,2,/,-"; $rrd_options .= " AREA:dmlow_all"; $rrd_options .= " AREA:sd_all#AAAAAA::STACK"; $rrd_options .= " LINE1:dm_all#CC0000:'{$descr}'"; $rrd_options .= " VDEF:avmed=dm_all,AVERAGE"; $rrd_options .= " VDEF:avsd=sd_all,AVERAGE"; $rrd_options .= " CDEF:msr=dm_all,POP,avmed,avsd,/"; $rrd_options .= " VDEF:avmsr=msr,AVERAGE"; $rrd_options .= " GPRINT:avmed:'%5.1lf%ss'"; $rrd_options .= " GPRINT:ploss_all:AVERAGE:'%5.1lf%%'"; $rrd_options .= " GPRINT:avsd:'%5.1lf%Ss'";
} elseif (is_numeric($divider)) { $g_defname = $rrd['ds'] . "_cdef"; $rrd_options .= " CDEF:" . $g_defname . $i . "=" . $rrd['ds'] . $i . "," . $divider . ",/"; $rrd_options .= " CDEF:" . $g_defname . $i . "min=" . $rrd['ds'] . $i . "min," . $divider . ",/"; $rrd_options .= " CDEF:" . $g_defname . $i . "max=" . $rrd['ds'] . $i . "max," . $divider . ",/"; } // Are our text values related to the multiplier/divisor or not? if (isset($text_orig) && $text_orig) { $t_defname = $rrd['ds']; } else { $t_defname = $g_defname; } $rrd_options .= " AREA:" . $g_defname . $i . "#" . $colour . ":'" . rrdtool_escape($rrd['descr'], $descr_len) . "':{$stack}"; $rrd_options .= " GPRINT:" . $t_defname . $i . ":LAST:%5.1lf%s GPRINT:" . $t_defname . $i . "min:MIN:%5.1lf%s"; $rrd_options .= " GPRINT:" . $t_defname . $i . "max:MAX:%5.1lf%s GPRINT:" . $t_defname . $i . ":AVERAGE:%5.1lf%s"; if (!$nototal) { $rrd_options .= " GPRINT:tot" . $rrd['ds'] . $i . ":%5.2lf%s" . rrdtool_escape($total_units) . ""; } $rrd_options .= "'\\n' COMMENT:'\\n'"; } if ($_GET['previous'] == "yes") { if (is_numeric($multiplier)) { $rrd_options .= " CDEF:X=" . $thingX . $plusesX . "," . $multiplier . ",*"; } elseif (is_numeric($divider)) { $rrd_options .= " CDEF:X=" . $thingX . $plusesX . "," . $divider . ",/"; } else { $rrd_options .= " CDEF:X=" . $thingX . $plusesX; } $rrd_options .= " AREA:X#99999999:"; $rrd_options .= " LINE1.25:X#666666:"; }
$m_options .= ',p' . $i . 'p' . $p . ',+'; $sdev_options .= ',p' . $i . 'p' . $p . ',m' . $i . ',-,DUP,*,+'; } $rrd_options .= ' CDEF:pings' . $i . '=' . $pings . ',p' . $i . 'p1,UN' . $pings_options . ',-'; $rrd_options .= ' CDEF:m' . $i . '=p' . $i . 'p1' . $m_options . ',pings' . $i . ',/'; $rrd_options .= ' CDEF:sdev' . $i . '=p' . $i . 'p1,m' . $i . ',-,DUP,*' . $sdev_options . ',pings' . $i . ',/,SQRT'; // end emulate Smokeping::calc_stddev $rrd_options .= " CDEF:dmlow{$i}=dm{$i},sdev{$i},2,/,-"; $rrd_options .= " CDEF:s2d{$i}=sdev{$i}"; $dm_list .= ",dm{$i},+"; $sd_list .= ",s2d{$i},+"; $ploss_list .= ",ploss{$i},+"; $i++; } //end foreach $descr = rrdtool_escape('Average', $descr_len); $rrd_options .= ' CDEF:ploss_all=0' . $ploss_list . ",{$i},/"; $rrd_options .= ' CDEF:dm_all=0' . $dm_list . ",{$i},/"; // $rrd_options .= " CDEF:dm_all_clean=dm_all,UN,NaN,dm_all,IF"; $rrd_options .= ' CDEF:sd_all=0' . $sd_list . ",{$i},/"; $rrd_options .= ' CDEF:dmlow_all=dm_all,sd_all,2,/,-'; $rrd_options .= ' AREA:dmlow_all'; $rrd_options .= ' AREA:sd_all#AAAAAA::STACK'; $rrd_options .= " LINE1:dm_all#CC0000:'{$descr}'"; $rrd_options .= ' VDEF:avmed=dm_all,AVERAGE'; $rrd_options .= ' VDEF:avsd=sd_all,AVERAGE'; $rrd_options .= ' CDEF:msr=dm_all,POP,avmed,avsd,/'; $rrd_options .= ' VDEF:avmsr=msr,AVERAGE'; $rrd_options .= " GPRINT:avmed:'%5.1lf%ss'"; $rrd_options .= " GPRINT:ploss_all:AVERAGE:'%5.1lf%%'"; $rrd_options .= " GPRINT:avsd:'%5.1lf%Ss'";
$rrd_options .= " DEF:used={$rrd_filename}:used:AVERAGE"; $rrd_options .= " DEF:free={$rrd_filename}:free:AVERAGE"; $rrd_options .= " CDEF:size=used,free,+"; $rrd_options .= " CDEF:perc=used,size,/,100,*"; $rrd_options .= " AREA:perc#" . $background['right'] . ":"; $rrd_options .= " LINE1.25:perc#" . $background['left'] . ":'{$descr}'"; $rrd_options .= " GPRINT:size:LAST:%6.2lf%sB"; $rrd_options .= " GPRINT:free:LAST:%6.2lf%sB"; $rrd_options .= " GPRINT:perc:LAST:%5.2lf%%\\n"; if ($_GET['trend']) { $rrd_options .= " VDEF:slope=perc,LSLSLOPE "; $rrd_options .= " VDEF:cons=perc,LSLINT "; $rrd_options .= " CDEF:lsl2=perc,POP,slope,COUNT,*,cons,+ "; $rrd_options .= ' LINE1.25:lsl2#ff0000::dashes=2'; } if ($_GET['previous']) { $descr = rrdtool_escape("Prev " . $storage['storage_descr'], 12); $colour = "99999999"; $colour_area = "66666666"; $rrd_options .= " DEF:usedX={$rrd_filename}:used:AVERAGE:start=" . $prev_from . ":end=" . $from; $rrd_options .= " DEF:freeX={$rrd_filename}:free:AVERAGE:start=" . $prev_from . ":end=" . $from; $rrd_options .= " SHIFT:usedX:{$period}"; $rrd_options .= " SHIFT:freeX:{$period}"; $rrd_options .= " CDEF:sizeX=usedX,freeX,+"; $rrd_options .= " CDEF:percX=usedX,sizeX,/,100,*"; $rrd_options .= " AREA:percX#" . $colour_area . ":"; $rrd_options .= " LINE1.25:percX#" . $colour . ":'{$descr}'"; $rrd_options .= " GPRINT:sizeX:LAST:%6.2lf%sB"; $rrd_options .= " GPRINT:freeX:LAST:%6.2lf%sB"; $rrd_options .= " GPRINT:percX:LAST:%5.2lf%%\\n"; }
<?php include_once $config['html_dir'] . "/includes/graphs/common.inc.php"; $colour = "CC0000"; $colour_area = "ffaaaa"; $sql = "SELECT * FROM `applications-state` WHERE `application_id` = ?"; $app_state = dbFetchRow($sql, array($app['app_id'])); $app_data = unserialize($app_state['app_state']); $descr = rrdtool_escape($app['app_instance'], $descr_len); $rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/wmi-app-mssql_" . $app['app_instance'] . "-cpu.rrd"; $rrd_options .= " -u 100 -l 0 "; $rrd_options .= " COMMENT:'Usage Current Average Maximum\\n'"; $rrd_options .= " DEF:proc=" . $rrd_filename . ":percproctime:LAST "; $rrd_options .= " DEF:lastpoll=" . $rrd_filename . ":lastpoll:LAST "; $rrd_options .= " CDEF:usage=proc,lastpoll,/,100,* "; $rrd_options .= " 'AREA:usage#ea8f00: '"; $rrd_options .= " GPRINT:usage:LAST:' %5.2lf%%'"; $rrd_options .= " GPRINT:usage:AVERAGE:' %5.2lf%%'"; $rrd_options .= " GPRINT:usage:MAX:' %5.2lf%%\\n'"; // EOF
function graph_from_definition($vars, $type, $subtype, $device) { global $config, $graph_defs; $graph_def = $graph_defs[$type][$subtype]; include_once $config['html_dir'] . "/includes/graphs/common.inc.php"; // Here we scale the number of numerical columns shown to make sure we keep the text. if ($width > 600) { $data_show = array('lst', 'avg', 'min', 'max', 'tot'); } elseif ($width > 400) { $data_show = array('lst', 'avg', 'max', 'tot'); } elseif ($width > 300) { $data_show = array('lst', 'avg', 'max', 'tot'); } else { $data_show = array('lst', 'avg', 'max'); } // Drop total from view if requested not to show if ($args['nototal'] || $nototal) { if (($key = array_search('tot', $data_show)) !== FALSE) { unset($data_show[$key]); } } $data_len = count($data_show) * 8; // Here we scale the length of the description to make sure we keep the numbers if ($width > 600) { $descr_len = 40; } elseif ($width > 300) { $descr_len = floor(($width + 42) / 8) - $data_len; } else { $descr_len = floor(($width + 42) / 7) - $data_len; } // Build the legend headers using the length values previously calculated if (!isset($unit_text)) { if ($format == "octets" || $format == "bytes") { $units = "Bps"; $format = "bytes"; $unit_text = "Bytes/s"; } else { $units = "bps"; $format = "bits"; $unit_text = "Bits/s"; } } if ($legend != 'no') { $rrd_options .= " COMMENT:'" . rrdtool_escape($unit_text, $descr_len) . "'"; if (in_array("lst", $data_show)) { $rrd_options .= " COMMENT:' Now'"; } if (in_array("avg", $data_show)) { $rrd_options .= " COMMENT:' Avg'"; } if (in_array("min", $data_show)) { $rrd_options .= " COMMENT:' Min'"; } if (in_array("max", $data_show)) { $rrd_options .= " COMMENT:' Max'"; } if (in_array("tot", $data_show)) { $rrd_options .= " COMMENT:' Total'"; } $rrd_options .= " COMMENT:'\\l'"; } foreach ($graph_def['ds'] as $ds_name => $ds) { if (!isset($ds['file'])) { $ds['file'] = $graph_def['file']; } if (!isset($ds['draw'])) { $ds['draw'] = "LINE1.5"; } $ds['file'] = get_rrd_path($device, $ds['file']); $cmd_def .= " DEF:" . $ds_name . "=" . $ds['file'] . ":" . $ds_name . ":AVERAGE"; $cmd_def .= " DEF:" . $ds_name . "_min=" . $ds['file'] . ":" . $ds_name . ":MIN"; $cmd_def .= " DEF:" . $ds_name . "_max=" . $ds['file'] . ":" . $ds_name . ":MAX"; if (!empty($ds['cdef'])) { $ds_name = $ds_name . "_c"; $cmd_cdef .= " CDEF:" . $ds_name . "=" . $ds['cdef'] . ""; $cmd_cdef .= " CDEF:" . $ds_name . "_min=" . $ds['cdef'] . ""; $cmd_cdef .= " CDEF:" . $ds_name . "_max=" . $ds['cdef'] . ""; } if ($ds['ds_graph'] != "yes") { if (empty($ds['colour'])) { if (!$config['graph_colours'][$graph_def['colours']][$c_i]) { $c_i = 0; } $colour = $config['graph_colours'][$graph_def['colours']][$c_i]; $c_i++; } else { $colour = $ds['colour']; } $descr = rrdtool_escape($ds['label'], $descr_len); if ($ds['draw'] == "AREASTACK") { if ($i == 0) { $ds['ds_draw'] = "AREA"; } else { $ds['ds_draw'] = "STACK"; } } elseif (preg_match("/^LINESTACK([0-9\\.]*)/", $ds['ds_draw'], $m)) { if ($i == 0) { $data['ds_draw'] = "LINE{$m['1']}"; } else { $ds['draw'] = "STACK"; } } $cmd_graph .= ' ' . $ds['draw'] . ':' . $ds_name . '#' . $colour . ':"' . $descr . '"'; $cmd_graph .= ' GPRINT:' . $ds_name . ':LAST:"%6.2lf%s"'; $cmd_graph .= ' GPRINT:' . $ds_name . ':AVERAGE:"%6.2lf%s"'; $cmd_graph .= ' GPRINT:' . $ds_name . ':MAX:"%6.2lf%s\\n"'; } } $rrd_options = $cmd_def . $cmd_cdef . $cmd_graph; return $rrd_options; }
$iter = "1"; $colour = "CC0000"; $colour_area = "ffaaaa"; if ($width > "500") { $descr_len = 13; } else { $descr_len = 8; $descr_len += round(($width - 250) / 8); } if ($width > "500") { $rrd_options .= " COMMENT:'" . substr(str_pad($unit_text, $descr_len + 5), 0, $descr_len + 5) . "Total Used Free( Min Max Avg)'"; $rrd_options .= " COMMENT:'\\l'"; } else { $rrd_options .= " COMMENT:'" . substr(str_pad($unit_text, $descr_len + 5), 0, $descr_len + 5) . "Total Used Free\\l'"; } $descr = rrdtool_escape(rewrite_hrDevice($mempool['mempool_descr']), $descr_len); $perc = round($mempool['mempool_perc'], 0); $background = get_percentage_colours($perc); $rrd_options .= " DEF:" . $mempool['mempool_id'] . "used={$rrd_filename}:used:AVERAGE"; $rrd_options .= " DEF:" . $mempool['mempool_id'] . "free={$rrd_filename}:free:AVERAGE"; $rrd_options .= " CDEF:" . $mempool['mempool_id'] . "size=" . $mempool['mempool_id'] . "used," . $mempool['mempool_id'] . "free,+"; $rrd_options .= " CDEF:" . $mempool['mempool_id'] . "perc=" . $mempool['mempool_id'] . "used," . $mempool['mempool_id'] . "size,/,100,*"; $rrd_options .= " CDEF:" . $mempool['mempool_id'] . "percx=100," . $mempool['mempool_id'] . "perc,-"; $rrd_options .= " AREA:" . $mempool['mempool_id'] . "perc#" . $background['right'] . ":"; if ($width > "500") { $rrd_options .= " LINE1.25:" . $mempool['mempool_id'] . "perc#" . $background['left'] . ":'{$descr}'"; $rrd_options .= " GPRINT:" . $mempool['mempool_id'] . "size:LAST:%6.2lf%sB"; $rrd_options .= " GPRINT:" . $mempool['mempool_id'] . "used:LAST:%6.2lf%sB"; $rrd_options .= " GPRINT:" . $mempool['mempool_id'] . "free:LAST:%6.2lf%sB"; $rrd_options .= " GPRINT:" . $mempool['mempool_id'] . "free:MIN:%5.2lf%sB"; $rrd_options .= " GPRINT:" . $mempool['mempool_id'] . "free:MAX:%5.2lf%sB";
<?php include "includes/graphs/common.inc.php"; $rrd_options .= " -l 0 -E "; $iter = "1"; $rrd_options .= " COMMENT:'Imaging Drum level Cur Min Max\\n'"; $drums = array('Cyan' => 'c', 'Magenta' => 'm', 'Yellow' => 'y', 'Black' => 'k'); foreach ($drums as $drum => $letter) { $descr = rrdtool_escape("{$drum} Drum", 16); $colour = toner2colour($descr); $hostname = gethostbyid($device['device_id']); $rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/" . safename("drum-{$letter}.rrd"); $rrd_options .= " DEF:drum{$iter}={$rrd_filename}:drum:AVERAGE"; $rrd_options .= " LINE2:drum{$iter}#" . $colour['left'] . ":'" . $descr . "'"; $rrd_options .= " GPRINT:drum{$iter}:LAST:'%5.0lf%%'"; $rrd_options .= " GPRINT:drum{$iter}:MIN:'%5.0lf%%'"; $rrd_options .= " GPRINT:drum{$iter}:MAX:%5.0lf%%\\\\l"; $iter++; }
case "3": $colour['left'] = "4096EE"; break; case "4": $colour['left'] = "73880A"; break; case "5": $colour['left'] = "D01F3C"; break; case "6": $colour['left'] = "36393D"; break; case "7": default: $colour['left'] = "FF0000"; unset($iter); break; } } $hostname = gethostbyid($toner['device_id']); $descr = rrdtool_escape($toner['toner_descr'], 16); $rrd_filename = get_rrd_path($device, "toner-" . $toner['toner_index'] . ".rrd"); $toner_id = $toner['toner_id']; $rrd_options .= " DEF:toner{$toner_id}={$rrd_filename}:toner:AVERAGE"; $rrd_options .= " LINE2:toner{$toner_id}#" . $colour['left'] . ":'" . $descr . "'"; $rrd_options .= " GPRINT:toner{$toner_id}:LAST:'%5.0lf%%'"; $rrd_options .= " GPRINT:toner{$toner_id}:MIN:'%5.0lf%%'"; $rrd_options .= " GPRINT:toner{$toner_id}:MAX:%5.0lf%%\\\\l"; $iter++; } // EOF
// Try with dots in hostname replaced by underscores $filename = $config['smokeping']['dir'] . str_replace('.', '_', $device['hostname']) . '.rrd'; } } else { $filename = $config['smokeping']['dir'] . $device['hostname'] . '~' . $src['hostname'] . '.rrd'; if (!file_exists($filename)) { // Try with dots in hostname replaced by underscores $filename = $config['smokeping']['dir'] . str_replace('.', '-', $device['hostname']) . '~' . $src['hostname'] . '.rrd'; } } 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{$i}=" . $filename . ':median:AVERAGE '; $rrd_options .= " DEF:loss{$i}=" . $filename . ':loss:AVERAGE'; $rrd_options .= " CDEF:ploss{$i}=loss{$i},{$pings},/,100,*"; $rrd_options .= " CDEF:dm{$i}=median{$i}"; // $rrd_options .= " CDEF:dm$i=median$i,0,".$max->{$start}.",LIMIT"; // start emulate Smokeping::calc_stddev foreach (range(1, $pings) as $p) { $rrd_options .= ' DEF:pin' . $i . 'p' . $p . '=' . $filename . ':ping' . $p . ':AVERAGE'; $rrd_options .= ' CDEF:p' . $i . 'p' . $p . '=pin' . $i . 'p' . $p . ',UN,0,pin' . $i . 'p' . $p . ',IF'; } unset($pings_options, $m_options, $sdev_options); foreach (range(2, $pings) as $p) { $pings_options .= ',p' . $i . 'p' . $p . ',UN,+'; $m_options .= ',p' . $i . 'p' . $p . ',+'; $sdev_options .= ',p' . $i . 'p' . $p . ',m' . $i . ',-,DUP,*,+';
if ($peer_info) { $asn = 'AS' . $peer_info['bgpPeerRemoteAs']; $astext = $peer_info['astext']; } else { unset($as); unset($astext); unset($asn); } } //end if $this_id = str_replace('.', '', $acc['mac']); if (!$config['graph_colours'][$colours][$iter]) { $iter = 0; } $colour = $config['graph_colours'][$colours][$iter]; $descr = rrdtool_escape($name, 36); $rrd_options .= ' DEF:in' . $this_id . "={$this_rrd}:" . $prefix . 'IN:AVERAGE '; $rrd_options .= ' DEF:out' . $this_id . "temp={$this_rrd}:" . $prefix . 'OUT:AVERAGE '; $rrd_options .= ' CDEF:inB' . $this_id . '=in' . $this_id . ",{$multiplier},* "; $rrd_options .= ' CDEF:outB' . $this_id . 'temp=out' . $this_id . "temp,{$multiplier},*"; $rrd_options .= ' CDEF:outB' . $this_id . '=outB' . $this_id . 'temp,-1,*'; $rrd_options .= ' CDEF:octets' . $this_id . '=inB' . $this_id . ',outB' . $this_id . 'temp,+'; $rrd_options .= ' VDEF:totin' . $this_id . '=inB' . $this_id . ',TOTAL'; $rrd_options .= ' VDEF:totout' . $this_id . '=outB' . $this_id . 'temp,TOTAL'; $rrd_options .= ' VDEF:tot' . $this_id . '=octets' . $this_id . ',TOTAL'; $rrd_options .= ' AREA:inB' . $this_id . '#' . $colour . ":'" . $descr . "':STACK"; if ($rrd_optionsb) { $stack = 'STACK'; } $rrd_optionsb .= ' AREA:outB' . $this_id . '#' . $colour . "::{$stack}"; $rrd_options .= ' GPRINT:inB' . $this_id . ":LAST:%6.2lf%s{$units}";
include_once $config['html_dir'] . "/includes/graphs/common.inc.php"; if ($width > 500) { $descr_len = 22; } else { $descr_len = 12; } $descr_len += round(($width - 250) / 8); $iter = 0; $colours = 'mixed'; $rrd_options .= " COMMENT:'" . str_pad('Size Used %used', $descr_len + 31, ' ', STR_PAD_LEFT) . "\\l'"; //$rrd_options .= " COMMENT:' Size Used %age\\l'"; foreach (dbFetchRows("SELECT * FROM storage where device_id = ?", array($device['device_id'])) as $storage) { if (!$config['graph_colours'][$colours][$iter]) { $iter = 0; } $colour = $config['graph_colours'][$colours][$iter]; $descr = rrdtool_escape($storage['storage_descr'], $descr_len); $rrd = get_rrd_path($device, "storage-" . $storage['storage_mib'] . "-" . $storage['storage_descr'] . ".rrd"); if (is_file($rrd)) { $rrd_options .= " DEF:" . $storage['storage_id'] . "used={$rrd}:used:AVERAGE"; $rrd_options .= " DEF:" . $storage['storage_id'] . "free={$rrd}:free:AVERAGE"; $rrd_options .= " CDEF:" . $storage['storage_id'] . "size=" . $storage['storage_id'] . "used," . $storage['storage_id'] . "free,+"; $rrd_options .= " CDEF:" . $storage['storage_id'] . "perc=" . $storage['storage_id'] . "used," . $storage['storage_id'] . "size,/,100,*"; $rrd_options .= " LINE1.25:" . $storage['storage_id'] . "perc#" . $colour . ":'{$descr}'"; $rrd_options .= " GPRINT:" . $storage['storage_id'] . "size:LAST:%6.2lf%sB"; $rrd_options .= " GPRINT:" . $storage['storage_id'] . "used:LAST:%6.2lf%sB"; $rrd_options .= " GPRINT:" . $storage['storage_id'] . "perc:LAST:%5.2lf%%\\\\l"; $iter++; } } // EOF
$colour = 'CC0000'; } elseif ($iter == '2') { $colour = '008C00'; } elseif ($iter == '3') { $colour = '4096EE'; } elseif ($iter == '4') { $colour = '73880A'; } elseif ($iter == '5') { $colour = 'D01F3C'; } elseif ($iter == '6') { $colour = '36393D'; } elseif ($iter == '7') { $colour = 'FF0084'; unset($iter); } $descr = rrdtool_escape(short_hrDeviceDescr($mempool['mempool_descr']), 22); $rrd_filename = rrd_name($device['hostname'], array('mempool', $mempool['mempool_type'], $mempool['mempool_index'])); if (rrdtool_check_rrd_exists($rrd_filename)) { $rrd_options .= " DEF:mempoolfree{$i}={$rrd_filename}:free:AVERAGE "; $rrd_options .= " DEF:mempoolused{$i}={$rrd_filename}:used:AVERAGE "; $rrd_options .= " CDEF:mempooltotal{$i}=mempoolused{$i},mempoolused{$i},mempoolfree{$i},+,/,100,* "; $rrd_options .= " AREA:mempooltotal{$i}#" . $colour . '10'; $rrd_optionsb .= " LINE1:mempooltotal{$i}#" . $colour . ":'" . $descr . "' "; $rrd_optionsb .= " GPRINT:mempooltotal{$i}:MIN:%3.0lf%%"; $rrd_optionsb .= " GPRINT:mempooltotal{$i}:LAST:%3.0lf%%"; $rrd_optionsb .= " GPRINT:mempooltotal{$i}:MAX:%3.0lf%%\\l "; $iter++; $i++; } } //end foreach
$rrd_options .= ' GPRINT:unique' . $x . ':LAST:"%6.2lf%s"'; $rrd_options .= ' GPRINT:avg' . $x . ':"%6.2lf"'; $rrd_options .= ' GPRINT:peak' . $x . ':LAST:"%6.2lf"'; $rrd_options .= " COMMENT:\"\\n\""; if ($x) { $totcur .= ',cur' . $x . ',+'; $totpeak .= ',peak' . $x . ',+'; $totunique .= ',unique' . $x . ',+'; } $x = $x < count($config['graph_colours'][$colours]) - 1 ? $x + 1 : 0; // $x++; } //end foreach if (!$nototal) { $strlen = strlen($total_text) < $descr_len ? $descr_len - strlen($total_text) : '0'; $descr = isset($total_text) ? rrdtool_escape($total_text, $desc_len + $strlen) : 'Total'; $colour = $config['graph_colours'][$colours][$x]; for ($z = 0; $z < $strlen; $z++) { $descr .= ' '; } $rrd_options .= ' CDEF:totcur=cur0' . $totcur; $rrd_options .= ' CDEF:totunique=unique0' . $totunique; $rrd_options .= ' CDEF:totpeak=peak0' . $totpeak; $rrd_options .= ' VDEF:totavg=totcur,AVERAGE'; $rrd_options .= ' LINE2:totcur#' . $colour . ':"' . $descr . '"'; $rrd_options .= ' GPRINT:totcur:LAST:"%6.2lf"'; $rrd_options .= ' GPRINT:totunique:LAST:"%6.2lf%s"'; $rrd_options .= ' GPRINT:totavg:"%6.2lf"'; $rrd_options .= ' GPRINT:totpeak:LAST:"%6.2lf"'; $rrd_options .= " COMMENT:\"\\n\""; }
$rrd_options .= " COMMENT:'" . substr(str_pad($mplug['mplug_vlabel'], $descr_len), 0, $descr_len) . " Current Average Maximum\\l'"; } $c_i = 0; $dbq = dbFetchRows('SELECT * FROM `munin_plugins_ds` WHERE `mplug_id` = ?', array($mplug['mplug_id'])); foreach ($dbq as $ds) { $ds_filename = $plugfile . '_' . $ds['ds_name'] . '.rrd'; $ds_name = $ds['ds_name']; $cmd_def .= ' DEF:' . $ds['ds_name'] . '=' . $ds_filename . ':val:AVERAGE'; if (!empty($ds['ds_cdef'])) { $cmd_cdef .= ''; $ds_name = $ds['ds_name'] . '_cdef'; } if ($ds['ds_graph'] == 'yes') { if (empty($ds['colour'])) { if (!$config['graph_colours']['mixed'][$c_i]) { $c_i = 0; } $colour = $config['graph_colours']['mixed'][$c_i]; $c_i++; } else { $colour = $ds['colour']; } $descr = rrdtool_escape($ds['ds_label'], $descr_len); $cmd_graph .= ' ' . $ds['ds_draw'] . ':' . $ds_name . '#' . $colour . ':"' . $descr . '"'; $cmd_graph .= ' GPRINT:' . $ds_name . ':LAST:"%6.2lf%s"'; $cmd_graph .= ' GPRINT:' . $ds_name . ':AVERAGE:"%6.2lf%s"'; $cmd_graph .= ' GPRINT:' . $ds_name . ':MAX:"%6.2lf%s\\n"'; } } //end foreach $rrd_options .= $cmd_def . $cmd_cdef . $cmd_graph;
$rrd_options .= ' CDEF:' . $g_defname . $i . 'max=' . $rrd['ds'] . $i . 'max,' . $divider . ',/'; } } if (isset($text_orig) && $text_orig) { $t_defname = $rrd['ds']; } else { $t_defname = $g_defname; } if ($i && $dostack === 1) { $stack = ':STACK'; } $rrd_options .= ' LINE2:' . $g_defname . $i . '#' . $colour . ":'" . $descr . "'{$stack}"; $rrd_options .= ' GPRINT:' . $t_defname . $i . ':LAST:%8.0lf%s GPRINT:' . $t_defname . $i . 'min:MIN:%8.0lf%s'; $rrd_options .= ' GPRINT:' . $t_defname . $i . 'max:MAX:%8.0lf%s GPRINT:' . $t_defname . $i . ":AVERAGE:'%8.0lf%s\\n'"; if ($printtotal === 1) { $rrd_options .= ' GPRINT:tot' . $rrd['ds'] . $i . ":%6.2lf%s'" . rrdtool_escape($total_units) . "'"; } $rrd_options .= " COMMENT:'\\n'"; } //end foreach if ($_GET['previous'] == 'yes') { if (is_numeric($multiplier)) { $rrd_options .= ' CDEF:X=' . $thingX . $plusesX . ',' . $multiplier . ',*'; } else { if (is_numeric($divider)) { $rrd_options .= ' CDEF:X=' . $thingX . $plusesX . ',' . $divider . ',/'; } else { $rrd_options .= ' CDEF:X=' . $thingX . $plusesX; } } $rrd_options .= ' HRULE:0#555555';
$plusX = ',+'; } if (!$args['nototal']) { $in_thing .= $seperator . 'inB' . $i . ',UN,0,' . 'inB' . $i . ',IF'; $out_thing .= $seperator . 'outB' . $i . ',UN,0,' . 'outB' . $i . ',IF'; $pluses .= $plus; $seperator = ','; $plus = ',+'; $rrd_options .= ' VDEF:totinB' . $i . '=inB' . $i . ',TOTAL'; $rrd_options .= ' VDEF:totoutB' . $i . '=outB' . $i . ',TOTAL'; $rrd_options .= ' VDEF:tot' . $i . '=octets' . $i . ',TOTAL'; } if ($i) { $stack = 'STACK'; } $rrd_options .= ' AREA:inbits' . $i . '#' . $colour_in . ":'" . rrdtool_escape($rrd['descr'], 9) . "In '{$stack}"; $rrd_options .= ' GPRINT:inbits' . $i . ':LAST:%6.2lf%s'; $rrd_options .= ' GPRINT:inbits' . $i . ':AVERAGE:%6.2lf%s'; $rrd_options .= ' GPRINT:inbits' . $i . ':MAX:%6.2lf%s'; if (!$nototal) { $rrd_options .= ' GPRINT:totinB' . $i . ":%6.2lf%s{$total_units}"; } $rrd_options .= " COMMENT:'\\n'"; $rrd_optionsb .= ' AREA:outbits' . $i . '_neg#' . $colour_out . ":{$stack}"; $rrd_options .= ' HRULE:999999999999999#' . $colour_out . ":'" . str_pad('', 10) . "Out'"; $rrd_options .= ' GPRINT:outbits' . $i . ':LAST:%6.2lf%s'; $rrd_options .= ' GPRINT:outbits' . $i . ':AVERAGE:%6.2lf%s'; $rrd_options .= ' GPRINT:outbits' . $i . ':MAX:%6.2lf%s'; if (!$nototal) { $rrd_options .= ' GPRINT:totoutB' . $i . ":%6.2lf%s{$total_units}"; }
$descr_len = floor(($width + 42) / 7) - $data_len; } // Build the legend headers using the length values previously calculated if (!isset($unit_text)) { if ($format == "octets" || $format == "bytes") { $units = "Bps"; $format = "bytes"; $unit_text = "Bytes/s"; } else { $units = "bps"; $format = "bits"; $unit_text = "Bits/s"; } } if ($legend != 'no') { $rrd_options .= " COMMENT:'" . rrdtool_escape($unit_text, $descr_len) . "'"; if (in_array("lst", $data_show)) { $rrd_options .= " COMMENT:' Now'"; } if (in_array("avg", $data_show)) { $rrd_options .= " COMMENT:' Avg'"; } if (in_array("min", $data_show)) { $rrd_options .= " COMMENT:' Min'"; } if (in_array("max", $data_show)) { $rrd_options .= " COMMENT:' Max'"; } if (in_array("tot", $data_show)) { $rrd_options .= " COMMENT:' Total'"; }
$rrd_optionsb .= "'\\n' COMMENT:'\\n'"; } } if ($vars['previous'] == "yes") { $thingX = implode(',', $rrd_multi['thingX']); $plusesX = str_repeat(',+', count($rrd_multi['thingX']) - 1); if (is_numeric($multiplier)) { $rrd_options .= " CDEF:X=" . $thingX . $plusesX . "," . $multiplier . ",*"; } else { if (is_numeric($divider)) { $rrd_options .= " CDEF:X=" . $thingX . $plusesX . "," . $divider . ",/"; } else { $rrd_options .= " CDEF:X=" . $thingX . $plusesX; } } $rrd_options .= " AREA:X#99999999:"; $rrd_options .= " LINE1.25:X#666666:"; } $rrd_options .= $rrd_optionsb; if ($show_aggregate == TRUE) { $rrd_options .= " CDEF:aggregate=" . implode(',', $rrd_multi['aggregate']) . str_repeat(',+', count($rrd_multi['aggregate']) - 1); $rrd_options .= " LINE1.5:aggregate#000000:'" . rrdtool_escape("Aggregate", $descr_len) . "'"; $rrd_options .= " GPRINT:aggregate:LAST:%5.1lf%s GPRINT:aggregate:MIN:%5.1lf%s"; $rrd_options .= " GPRINT:aggregate:MAX:%5.1lf%s GPRINT:aggregate:AVERAGE:%5.1lf%s"; $rrd_options .= "'\\n' COMMENT:'\\n'"; } $rrd_options .= " HRULE:0#555555"; $rrd_options .= $rrd_optionsc; // Clean unset($rrd_multi, $thingX, $plusesX, $cstack, $bstack); // EOF
$scale_min = "0"; $scale_max = "60"; include "includes/graphs/common.inc.php"; $rrd_options .= " COMMENT:' Min Last Max\\n'"; $rrd_options .= " DEF:sensor={$rrd_filename}:sensor:AVERAGE"; $rrd_options .= " DEF:sensor_max={$rrd_filename}:sensor:MAX"; $rrd_options .= " DEF:sensor_min={$rrd_filename}:sensor:MIN"; $rrd_options .= " CDEF:sensor_diff=sensor_max,sensor_min,-"; $rrd_options .= " AREA:sensor_min"; $rrd_options .= " AREA:sensor_diff#c5c5c5::STACK"; $rrd_options .= " LINE1.5:sensor#cc0000:'" . rrdtool_escape($sensor['sensor_descr'], 21) . "'"; $rrd_options .= " GPRINT:sensor_min:MIN:%4.1lfC"; $rrd_options .= " GPRINT:sensor:LAST:%4.1lfC"; $rrd_options .= " GPRINT:sensor_max:MAX:%4.1lfC\\\\l"; if (is_numeric($sensor['sensor_limit'])) { $rrd_options .= " HRULE:" . $sensor['sensor_limit'] . "#999999::dashes"; } if (is_numeric($sensor['sensor_limit_low'])) { $rrd_options .= " HRULE:" . $sensor['sensor_limit_low'] . "#999999::dashes"; } #wtfbroken code. if ($_GET['previous'] == 'yes') { $rrd_options .= " DEF:sensorX={$rrd_filename}:sensor:AVERAGE:start=" . $prev_from . ":end=" . $from; $rrd_options .= " LINE1.5:sensorX#0000cc:'Prev " . rrdtool_escape($sensor['sensor_descr'], 18) . "'"; $rrd_options .= " SHIFT:sensorX:{$period}"; $rrd_options .= " GPRINT:sensorX{$current_id}:MIN:%5.2lfA"; $rrd_options .= " GPRINT:sensorX:LAST:%5.2lfA"; $rrd_options .= " GPRINT:sensorX:MAX:%5.2lfA\\\\l"; } $graph_return = array('rrds' => array($rrd_filename), 'descr' => 'Temperature sensor measured in celsius.', 'valid_options');
} if (!isset($multiplier)) { $multiplier = "8"; } foreach ($rrd_list as $rrd) { if (!$config['graph_colours'][$colours_in][$iter] || !$config['graph_colours'][$colours_out][$iter]) { $iter = 0; } $colour_in = $config['graph_colours'][$colours_in][$iter]; $colour_out = $config['graph_colours'][$colours_out][$iter]; if (isset($rrd['descr_in'])) { $descr = rrdtool_escape($rrd['descr_in'], $descr_len) . " In"; } else { $descr = rrdtool_escape($rrd['descr'], $descr_len) . " In"; } $descr_out = rrdtool_escape($rrd['descr_out'], $descr_len) . " Out"; $descr = str_replace("'", "", $descr); // FIXME does this mean ' should be filtered in rrdtool_escape? probably... $descr_out = str_replace("'", "", $descr_out); $rrd_options .= " DEF:" . $in . $i . "=" . $rrd['filename'] . ":" . $ds_in . ":AVERAGE "; $rrd_options .= " DEF:" . $out . $i . "=" . $rrd['filename'] . ":" . $ds_out . ":AVERAGE "; $rrd_options .= " CDEF:inB" . $i . "=in" . $i . ",{$multiplier},* "; $rrd_options .= " CDEF:outB" . $i . "=out" . $i . ",{$multiplier},*"; $rrd_options .= " CDEF:outB" . $i . "_neg=outB" . $i . ",-1,*"; $rrd_options .= " CDEF:octets" . $i . "=inB" . $i . ",outB" . $i . ",+"; if (!$args['nototal']) { $in_thing .= $seperator . $in . $i . ",UN,0," . $in . $i . ",IF"; $out_thing .= $seperator . $out . $i . ",UN,0," . $out . $i . ",IF"; $pluses .= $plus; $seperator = ","; $plus = ",+";
} else { $rows = dbFetchRows("SELECT * FROM `printersupplies` where `device_id` = ?", array($device['device_id'])); } foreach ($rows as $supply) { // If colour was supplied by the device, pass it to the function, otherwise pass the description // and have the function try and figure it out from there. if ($supply['supply_colour'] != '') { $colour = toner_to_colour($supply['supply_colour'], $perc); } else { $colour = toner_to_colour($supply['supply_descr'], $perc); } // If no colour found by the toner to colour function, get one from the configured palette. if (!$colour['found']) { if (!$config['graph_colours'][$colours][$iter]) { $iter = 0; } $colour['left'] = $config['graph_colours'][$colours][$iter]; } $hostname = get_device_by_device_id($supply['device_id']); $descr = rrdtool_escape($supply['supply_descr'], 16); $rrd_filename = get_rrd_path($device, "toner-" . $supply['supply_index'] . ".rrd"); $supply_id = $supply['supply_id']; $rrd_options .= " DEF:level{$supply_id}={$rrd_filename}:level:AVERAGE"; $rrd_options .= " LINE2:level{$supply_id}#" . $colour['left'] . ":'" . $descr . "'"; $rrd_options .= " GPRINT:level{$supply_id}:LAST:'%5.0lf%%'"; $rrd_options .= " GPRINT:level{$supply_id}:MIN:'%5.0lf%%'"; $rrd_options .= " GPRINT:level{$supply_id}:MAX:%5.0lf%%\\l"; $iter++; $colour['left'] = NULL; } // EOF
$hostname = gethostbyid($storage['device_id']); $colour = 'CC0000'; $colour_area = 'ffaaaa'; $descr = rrdtool_escape($storage['storage_descr'], 12); $percentage = round($storage['storage_perc'], 0); $background = get_percentage_colours($percentage); $rrd_options .= " DEF:used={$rrd_filename}:used:AVERAGE"; $rrd_options .= " DEF:free={$rrd_filename}:free:AVERAGE"; $rrd_options .= ' CDEF:size=used,free,+'; $rrd_options .= ' CDEF:perc=used,size,/,100,*'; $rrd_options .= ' AREA:perc#' . $background['right'] . ':'; $rrd_options .= ' LINE1.25:perc#' . $background['left'] . ":'{$descr}'"; $rrd_options .= ' GPRINT:size:LAST:%6.2lf%sB'; $rrd_options .= ' GPRINT:free:LAST:%6.2lf%sB'; $rrd_options .= " GPRINT:perc:LAST:%5.2lf%%\\\\n"; if ($_GET['previous']) { $descr = rrdtool_escape('Prev ' . $storage['storage_descr'], 12); $colour = '99999999'; $colour_area = '66666666'; $rrd_options .= " DEF:usedX={$rrd_filename}:used:AVERAGE:start=" . $prev_from . ':end=' . $from; $rrd_options .= " DEF:freeX={$rrd_filename}:free:AVERAGE:start=" . $prev_from . ':end=' . $from; $rrd_options .= " SHIFT:usedX:{$period}"; $rrd_options .= " SHIFT:freeX:{$period}"; $rrd_options .= ' CDEF:sizeX=usedX,freeX,+'; $rrd_options .= ' CDEF:percX=usedX,sizeX,/,100,*'; $rrd_options .= ' AREA:percX#' . $colour_area . ':'; $rrd_options .= ' LINE1.25:percX#' . $colour . ":'{$descr}'"; $rrd_options .= ' GPRINT:sizeX:LAST:%6.2lf%sB'; $rrd_options .= ' GPRINT:freeX:LAST:%6.2lf%sB'; $rrd_options .= " GPRINT:percX:LAST:%5.2lf%%\\\\n"; }