<?php
/*****************************************************************************
*
* std_bar.php - Sample gadget for NagVis
*
* Copyright (c) 2004-2015 NagVis Project (Contact: info@nagvis.org)
*
* License:
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*****************************************************************************
*
* This is a simple gadget for NagVis. A gadget is a script which generates a
* dynamic image for visualizing things as graphs in NagVis.
* This one was inspired by "fs_usage_bar" (Copyright Richard Leitner)
* http://exchange.nagvis.org/exchange/Gadgets/Filesystem-Usage-Bar/
*
* The gadget gets its data from the NagVis frontend by parameters. This
* gadget only needs the "perfdata" parameter
* The values are accessible using the array aPerfdata. The structure is
* shown in gadgets_core.php.
* The behaviour of the gadget can be influenced by two directives in the
* service definition of the map config file:
* gadget_scale=n (n being the size of the graph(s) in percent, default = 100)
* gadget_opts=option=value (multiple options are separated by spaces)
* option is one of the following:
* columns=n
* number of columns of graphs (if applicable), default is 3
* string=s
* s is a string the perfdata label has to contain
* current=<0|1>
* 1 = show the current value along with the label (default)
* label=<0|1>
* 1 = show host name/performance label in the last line of the graph
* (1 is default)
* NagVis also passes the following parameters to the gadget using the array
* $aOpts:
* - name1: Hostname
* - name2: Service description
* - state: Current state
* - stateType: Current state type (soft/hard)
* This value is ignored as the performance data might contain
* several values
* - scale: Scale of the gadget in percent
* This value is ignored in favour of gadget_scale
*
*****************************************************************************/
/**
* Dummy perfdata for WUI
*
* This string needs to be set in every gadget to have some sample data in the
* WUI to be able to place the gadget easily on the map
* It has to be set BEFORE including gadgets_core.php
******************************************************************************/
$sDummyPerfdata = 'config=20%;80;90;0;100';
/**
* Needs to be configured to tell gadgets_core.php how to handle the outputs
* e.g. in case of error messages. This defaults to 'img'.
*/
$_MODE = 'html';
// Include the gadgets core. Also handle OMD default and local paths
if(substr($_SERVER["SCRIPT_FILENAME"], 0, 4) == '/omd') {
$core = dirname($_SERVER["SCRIPT_FILENAME"]) . '/gadgets_core.php';
if(file_exists($core))
require($core);
else
require(str_replace('local/share/', 'share/', $core));
} else {
require('./gadgets_core.php');
}
/*******************************************************************************
* Start gadget main code
******************************************************************************/
header("Content-type: image/png");
//=====================
// Set image parameters
//=====================
$ratio = $aOpts['scale'] / 100;
$fontDir = '/usr/share/fonts/truetype'; // openSuSE, SLES
// $fontDir = '/usr/share/fonts/truetype/ttf-dejavu'; // Debian, Ubuntu
// $fontDir = '/usr/share/fonts/dejavu-lgc'; // CentOS
// $fontDir = '/usr/share/fonts/dejavu'; // Fedora
$fontName = 'DejaVuSans-Bold.ttf';
$imgwidth = 400 * $ratio;
$imgheight = 50 * $ratio;
/**
* Don't change anything below (unless you know what you do)
*/
$font = "$fontDir/$fontName";
//==========================================
// Set Minimum, Default, and Maximum values.
//==========================================
$min = 0;
$max = -1;
$default = 0;
$pdc = count($aPerfdata); // performance data count
$string = ''; // string in perfdata label
$current = 1; // show current value
$label = 1; // show host/service label
$cols = 3; // no. of columns with graphs
$threshold = 'pct'; // threshold values in percent
$sect1 = intval($imgheight / 5);
$sect2 = intval($imgheight / 2);
$sect3 = intval($imgheight / 5)*3;
$chrSize = $ratio * 5;
if ($chrSize < 1) { $chrSize = 1; }
//==================
// scan gadget_opts
//==================
if (isset($aOpts['opts']) && ($aOpts['opts'] != '')){
preg_match_all ('/(\w+)=(\w+)/',$aOpts['opts'],$matches,PREG_SET_ORDER);
for ($i = 0; $i < count($matches); $i++){
if ($matches[$i][1] == 'columns') { $cols = $matches[$i][2]; }
if ($matches[$i][1] == 'string') { $string = $matches[$i][2]; }
if ($matches[$i][1] == 'current') { $current = $matches[$i][2]; }
if ($matches[$i][1] == 'label') { $label = $matches[$i][2]; }
if ($matches[$i][1] == 'threshold') { $threshold = $matches[$i][2]; }
}
}
$rows = ceil($pdc / $cols); // max. no. of rows with graphs
//====================
// Create image
//====================
$img=imagecreatetruecolor($imgwidth*$cols, $imgheight*$rows);
$oBackground = imagecolorallocate($img, 122, 23, 211);
$oBlack = imagecolorallocate($img, 0, 0, 0);
$oGreen = imagecolorallocate($img, 0, 255, 0);
$oYellow = imagecolorallocate($img, 255, 255, 0);
$oYellowAck = imagecolorallocate($img, 200, 255, 0);
$oRed = imagecolorallocate($img, 255, 0, 0);
$oRedAck = imagecolorallocate($img, 200, 0, 0);
$oBlue = imagecolorallocate($img, 0, 0, 255);
imagefill($img, 0, 0, $oBackground);
imagecolortransparent($img, $oBackground);
$offG = 0; // current graph
for ($i=0; $i < $pdc; $i++){
$desc = preg_replace('(.*::)','',$aPerfdata[$i]['label']); // omit
check_multi description
if (preg_match("/$string/",$desc)) {
$colour = '';
$value = $aPerfdata[$i]['value'];
$warn = $aPerfdata[$i]['warning'];
$warn = preg_replace ('(:.*)','',$warn); // ignore range settings
$crit = $aPerfdata[$i]['critical'];
$crit = preg_replace ('(:.*)','',$crit); // ignore range settings
$min = $aPerfdata[$i]['min'];
$max = $aPerfdata[$i]['max'];
$uom = $aPerfdata[$i]['uom'];
$ack = $aPerfdata[$i]['ack'];
$downtime = $aPerfdata[$i]['downtime'];
$offX = ($offG % $cols) * $imgwidth; // calculate left x-axis
position
$offY = floor($offG / $cols) * $imgheight; // calculate upper y-axis
position
$maxX = $imgwidth-15;
$maxY = $imgheight-5;
// determine the upper limit
$limit = $max;
if ($limit < $crit) {
$limit = $crit;
}
if (($warn > $crit) && ($limit < $warn)) {
$limit = $warn;
}
if ($value > $limit) {
$limit = $value;
}
if ($limit < 1) {
$limit = 1;
}
if ($uom == '%') {
$limit = 100;
}
if (isset($warn) && isset($crit)) {
if ($warn < $crit) {
if ($value >= $warn) { $colour = ($ack) ? $oYellowAck : $oYellow; };
if ($value >= $crit) { $colour = ($ack) ? $oRedAck : $oRed; };
} else {
if ($value <= $warn) { $colour = ($ack) ? $oYellowAck : $oYellow; };
if ($value <= $crit) { $colour = ($ack) ? $oRedAck : $oRed; };
}
}
// create box
imagefilledrectangle ($img, $offX, $offY+1, $offX+$maxX, $offY+$maxY,
$oGreen);
imageRectangle($img, $offX, $offY, $offX+$maxX, $offY+$maxY, $oBlack);
$maxX--;
$maxY--;
// "highlight" graph if non-ok value
if ($colour != '') {
imagefilledrectangle ($img, $offX+1, $offY+$sect3+1, $offX+$maxX,
$offY+$maxY, $colour);
}
//================
// Normalize / Fix value and max
//================
if($value == null) {
$value = $default;
} else {
if($max != '' && $value < $min) {
$value = $min;
} elseif($max != '' && $max != -1 && $value > $max) {
$value = $max;
}
}
// If there is no max value given set it using the critical value
if(intval($max) == 0 || $max == '') {
$max = $crit + 1;
}
//================
// Calculate value, warn, critical percentages/values
//================
$p = 100 / $limit * $value;
$warnp = round(100 / $limit * $warn,0);
$critp = round(100 / $limit * $crit,0);
$valuev = ($maxX / 100 * $p);
$warnv = intval($maxX / 100 * $warnp);
$critv = intval($maxX / 100 * $critp);
$warnt = ($threshold == 'pct') ? $warnp : $warn;
$critt = ($threshold == 'pct') ? $critp : $crit;
//===================
// create warning/critical areas, current value
//===================
// Warning
if($warn) {
if ($warn < $crit) {
imageFilledRectangle($img, $offX+$warnv+1, $offY+1, $offX+$maxX,
$offY+$sect1, $oYellow);
} else {
imageFilledRectangle($img, $offX+1, $offY+1, $offX+$warnv-1, $offY+
$sect1, $oYellow);
}
if (file_exists ("$font")) {
ImageTTFText($img, $chrSize*2, 0, $offX+$warnv+1, $offY+$sect1,
$oBlack, $font, intval($warnt));
} else {
imagestring($img, $chrSize, $offX+$warnv+1, $offY-2, intval($warnt),
$oBlack);
}
}
// Critical
if($crit) {
if ($warn < $crit) {
imageFilledRectangle($img, $offX+$critv+1, $offY+1, $offX+$maxX,
$offY+$sect1, $oRed);
} else {
imageFilledRectangle($img, $offX+1, $offY+1, $offX+$critv-1, $offY+
$sect1, $oRed);
}
if (file_exists ("$font")) {
ImageTTFText($img, $chrSize*2, 0, $offX+$critv+1, $offY+$sect1,
$oBlack, $font, intval($critt));
} else {
imagestring($img, $chrSize, $offX+$critv+1, $offY-2, intval($critt),
$oBlack);
}
}
imagefilledRectangle($img, $offX+1, $offY+$sect1+1, $offX+$valuev+1,
$offY+$sect3, $oBlue);
//===================
// Labels
//===================
if ($current == 1) {
$maxv = "";
if (isset($aPerfdata[$i]['max'])) { $maxv = " of ".$aPerfdata[$i]
['max']; }
if ($down) { $maxv = " [down]"; }
if (file_exists ("$font")) {
ImageTTFText($img, $chrSize*3.5, 0, $offX+5, $offY+$sect3-1,
$oBlack, $font, $desc . ':' . $value . $uom . $maxv);
} else {
imagestring($img, $chrSize, $offX+3, $offY+$sect1+2, $desc.': '.
$value . $uom . $maxv, $oBlack);
}
if ($label == 1) {
$hostname = (strlen($aOpts['name1']) > 15) ? substr($aOpts
['name1'],0,14)."..." : $aOpts['name1'];
$svcdesc = (strlen($aOpts['name2']) > 15) ? substr($aOpts
['name2'],0,14)."..." : $aOpts['name2'];
if (strlen($desc) > 15) {
$desc = substr($desc,0,14)."...";
}
if (file_exists ("$font")) {
ImageTTFText($img, $chrSize*2.5, 0, $offX+3, $offY+$maxY-1, $oBlack,
$font, $hostname);
ImageTTFText($img, $chrSize*2.5, 0, $offX+$imgwidth/2, $offY+$maxY-
1, $oBlack, $font, $svcdesc);
// ImageTTFText($img, $chrSize*2.5, 0, $offX+$imgwidth/2, $offY+$maxY-
1, $oBlack, $font, $desc);
} else {
imagestring($img, $chrSize, $offX+3, $offY+$sect3, $hostname,
$oBlack);
imagestring($img, $chrSize, $offX+$imgwidth/2, $offY+$sect3,
$svcdesc, $oBlack);
// imagestring($img, $chrSize, $offX+$imgwidth/2, $offY+$sect3, $desc,
$oBlack); // perf label
}
}
}
$offG++;
}
}
//==============
// Output image.
//==============
if(function_exists('imageantialias')) {
imageantialias($img, true);
}
imagepng($img);
imagedestroy($img);
?>
define service {
host_name=uxze01
service_description=root-volume
x=50
y=50
view_type=gadget
gadget_url=estd_bar.php
gadget_scale=100
}
- Output for 5.4.0 - 5.4.42, 5.5.24 - 5.5.26, 5.6.7 - 5.6.10
- Parse error: syntax error, unexpected 'description' (T_STRING) in /in/attvh on line 174
Process exited with code 255. - Output for 4.4.2 - 4.4.9, 5.1.0 - 5.1.6, 5.2.0 - 5.2.17, 5.3.0 - 5.3.29
- Parse error: syntax error, unexpected T_STRING in /in/attvh on line 174
Process exited with code 255. - Output for 4.3.0 - 4.3.1, 4.3.5 - 4.3.11, 4.4.0 - 4.4.1, 5.0.0 - 5.0.5
- Parse error: parse error, unexpected T_STRING in /in/attvh on line 174
Process exited with code 255. - Output for 4.3.2 - 4.3.4
- Parse error: parse error in /in/attvh on line 174
Process exited with code 255.
preferences:
237.41 ms | 1395 KiB | 139 Q