1<?php 2 3use LibreNMS\Config; 4 5$dest = device_by_id_cache($_GET['dest']); 6 7// This is my translation of Smokeping's graphing. 8// Thanks to Bill Fenner for Perl->Human translation:> 9$scale_min = 0; 10$scale_rigid = true; 11 12require 'includes/html/graphs/common.inc.php'; 13require 'includes/html/graphs/device/smokeping_common.inc.php'; 14 15$i = 0; 16$pings = Config::get('smokeping.pings'); 17$iter = 0; 18$colourset = 'mixed'; 19 20if ($width > '500') { 21 $descr_len = 18; 22} else { 23 $descr_len = (12 + round(($width - 275) / 8)); 24} 25 26if ($width > '500') { 27 $rrd_options .= " COMMENT:'" . substr(str_pad($unit_text, ($descr_len + 5)), 0, ($descr_len + 5)) . " RTT Loss SDev RTT\:SDev \l'"; 28} else { 29 $rrd_options .= " COMMENT:'" . substr(str_pad($unit_text, ($descr_len + 5)), 0, ($descr_len + 5)) . " RTT Loss SDev RTT\:SDev \l'"; 30} 31 32$filename_dir = generate_smokeping_file($device); 33if ($device['hostname'] == Config::get('own_hostname')) { 34 $filename = $filename_dir . $dest['hostname'] . '.rrd'; 35 if (! Rrd::checkRrdExists($filename)) { 36 // Try with dots in hostname replaced by underscores 37 $filename = $filename_dir . str_replace('.', '_', $dest['hostname']) . '.rrd'; 38 } 39} else { 40 $filename = $filename_dir . $dest['hostname'] . '~' . $device['hostname'] . '.rrd'; 41 if (! Rrd::checkRrdExists($filename)) { 42 // Try with dots in hostname replaced by underscores 43 $filename = $filename_dir . str_replace('.', '_', $dest['hostname']) . '~' . $device['hostname'] . '.rrd'; 44 } 45} 46 47if (! Config::has("graph_colours.$colourset.$iter")) { 48 $iter = 0; 49} 50 51$colour = Config::get("graph_colours.$colourset.$iter"); 52 $iter++; 53 54 $descr = \LibreNMS\Data\Store\Rrd::fixedSafeDescr($source, $descr_len); 55 56 $rrd_options .= " DEF:median$i=" . $filename . ':median:AVERAGE '; 57 $rrd_options .= " DEF:loss$i=" . $filename . ':loss:AVERAGE'; 58 $rrd_options .= " CDEF:ploss$i=loss$i,$pings,/,100,*"; 59 $rrd_options .= " CDEF:dm$i=median$i"; 60// $rrd_options .= " CDEF:dm$i=median$i,0,".$max->{$start}.",LIMIT"; 61 // start emulate Smokeping::calc_stddev 62foreach (range(1, $pings) as $p) { 63 $rrd_options .= ' DEF:pin' . $i . 'p' . $p . '=' . $filename . ':ping' . $p . ':AVERAGE'; 64 $rrd_options .= ' CDEF:p' . $i . 'p' . $p . '=pin' . $i . 'p' . $p . ',UN,0,pin' . $i . 'p' . $p . ',IF'; 65} 66 67 unset($pings_options, $m_options, $sdev_options); 68 69foreach (range(2, $pings) as $p) { 70 $pings_options .= ',p' . $i . 'p' . $p . ',UN,+'; 71 $m_options .= ',p' . $i . 'p' . $p . ',+'; 72 $sdev_options .= ',p' . $i . 'p' . $p . ',m' . $i . ',-,DUP,*,+'; 73} 74 75 $rrd_options .= ' CDEF:pings' . $i . '=' . $pings . ',p' . $i . 'p1,UN' . $pings_options . ',-'; 76 $rrd_options .= ' CDEF:m' . $i . '=p' . $i . 'p1' . $m_options . ',pings' . $i . ',/'; 77 $rrd_options .= ' CDEF:sdev' . $i . '=p' . $i . 'p1,m' . $i . ',-,DUP,*' . $sdev_options . ',pings' . $i . ',/,SQRT'; 78 // end emulate Smokeping::calc_stddev 79 $rrd_options .= " CDEF:dmlow$i=dm$i,sdev$i,2,/,-"; 80 $rrd_options .= " CDEF:s2d$i=sdev$i"; 81 $rrd_options .= " AREA:dmlow$i"; 82 $rrd_options .= " AREA:s2d$i#" . $colour . '30::STACK'; 83 $rrd_options .= " LINE1:dm$i#" . $colour . ":'$descr'"; 84 85// $rrd_options .= " LINE1:sdev$i#000000:$descr"; 86 $rrd_options .= " VDEF:avmed$i=median$i,AVERAGE"; 87 $rrd_options .= " VDEF:avsd$i=sdev$i,AVERAGE"; 88 $rrd_options .= " CDEF:msr$i=median$i,POP,avmed$i,avsd$i,/"; 89 $rrd_options .= " VDEF:avmsr$i=msr$i,AVERAGE"; 90 91 $rrd_options .= " GPRINT:avmed$i:'%5.1lf%ss'"; 92 $rrd_options .= " GPRINT:ploss$i:AVERAGE:'%5.1lf%%'"; 93 94 $rrd_options .= " GPRINT:avsd$i:'%5.1lf%Ss'"; 95 $rrd_options .= " GPRINT:avmsr$i:'%5.1lf%s\\l'"; 96 97 $i++; 98