, 10/2012.
#
# Define some colors ..
#
if ( !defined("_WARNRULE") ) {
define("_WARNRULE", '#FFFF00');
}
if ( !defined("_CRITRULE") ) {
define("_CRITRULE", '#FF0000');
}
if ( !defined("_THRESHRULE") ) {
define("_THRESHRULE", '#3399FF96');
}
if ( !defined("_AREA1") ) {
define("_AREA1", '#00CC00');
}
if ( !defined("_LINE1") ) {
define("_LINE1", '#3300FF');
}
if ( !defined("_LINE") ) {
define("_LINE", '#00FF00');
}
# Set this value IF you want your headroom calc's to be based on a value independant of
# your critical or max values. The headroom data is based on one of the following values
# in this order:
# 1. THRESH (local variable)
# 2. Critical value (from Nagios plugin)
# 3. Maximum value (from Nagios plugin)
$threshold = "";
# Watermark String
$wm = "Network Headroom Status";
$ts = date("D m/d/Y h:i:s a");
# Loop through each DS
#foreach ($DS as $i) {
# Set initial values
$warningIN = "";
$warningOUT = "";
$criticalIN = "";
$criticalOUT = "";
$minimum = "";
$lower = "";
$maximum = "";
$upper = "";
$vlabel = "";
if ($WARN[1] != "") {
$warningIN = $WARN[1];
}
if ($WARN[2] != "") {
$warningOUT = $WARN[2];
}
if ($CRIT[1] != "") {
$criticalIN = $CRIT[1];
}
if ($CRIT[2] != "") {
$criticalOUT = $CRIT[2];
}
if ($threshold != "") {
$threshold = $threshold;
} elseif ($CRIT[1] != "") {
$threshold = $CRIT[1];
} elseif ($MAX[1] != "") {
$threshold = $MAX[1];
}
if ($MIN[1] != "") {
$lower = " --lower=" . $MIN[1];
$minimum = $MIN[1];
}
if ($MAX[1] != "") {
$upper = " --upper=" . $MAX[1];
$maximum = $MAX[1];
}
if ($UNIT[1] == "") {
$vlabel = "%";
} else {
$vlabel = $UNIT[1];
}
# Set rrdtool options
$opt[1] = '--vertical-label "' . $vlabel . '" --title "' . $hostname . ' / ' . $servicedesc . '"' . $lower . ' --pango-markup --watermark ' . '"' . $wm . ' - "' . '"' . $ts . '"';
# Define graph items
# Set Data Sources to use
#IN
$def[1] = "DEF:usageIN=$rrdfile:$DS[1]:AVERAGE ";
$def[1] .= "DEF:maxIN=$rrdfile:$DS[1]:MAX ";
$def[1] .= "DEF:bytesIN=$rrdfile:$DS[5]:AVERAGE ";
#OUT
$def[1] .= "DEF:usageOUT=$rrdfile:$DS[2]:AVERAGE ";
$def[1] .= "DEF:maxOUT=$rrdfile:$DS[2]:MAX ";
$def[1] .= "DEF:bytesOUT=$rrdfile:$DS[6]:AVERAGE ";
# Convert "bytes" counter to
$def[1] .= "CDEF:bitsIN=bytesIN,8,*,1000000,/ ";
$def[1] .= "CDEF:bitsOUT=bytesOUT,8,*,1000000,/ ";
# Determine time increments used in graph
$def[1] .= "CDEF:time=PREV(usageIN),POP,TIME ";
$def[1] .= "CDEF:prevtime=PREV(time) ";
$def[1] .= "CDEF:difftime=time,prevtime,-,60,/ ";
$def[1] .= "VDEF:difftime1=difftime,LAST ";
# Find Peak and it's time
#IN
$def[1] .= "VDEF:peakIN=maxIN,MAXIMUM ";
#OUT
$def[1] .= "VDEF:peakOUT=maxOUT,MAXIMUM ";
# Count times (Cross Over) at or above Peak for graphing
#IN
$def[1] .= "CDEF:coIN=maxIN,$threshold,GE,INF,UNKN,IF ";
#OUT
$def[1] .= "CDEF:coOUT=maxOUT,$threshold,GE,INF,UNKN,IF ";
# Count times above peak (Cross Overs) for Capacity Data calculations
#IN
$def[1] .= "CDEF:cocountIN=maxIN,$threshold,GE,1,UNKN,IF ";
$def[1] .= "VDEF:cocountIN1=cocountIN,TOTAL ";
#OUT
$def[1] .= "CDEF:cocountOUT=maxOUT,$threshold,GE,1,UNKN,IF ";
$def[1] .= "VDEF:cocountOUT1=cocountOUT,TOTAL ";
# Set unknown crossover values to zero '0'
#IN
$def[1] .= "CDEF:cocountIN2=usageIN,POP,cocountIN1,UN,0,cocountIN1,IF ";
$def[1] .= "VDEF:cocountIN3=cocountIN2,MAXIMUM ";
#OUT
$def[1] .= "CDEF:cocountOUT2=usageOUT,POP,cocountOUT1,UN,0,cocountOUT1,IF ";
$def[1] .= "VDEF:cocountOUT3=cocountOUT2,MAXIMUM ";
# Determine timespan of each PDP
#IN
$def[1] .= "CDEF:timespanIN1=maxIN,$threshold,GE,difftime1,0,IF, ";
$def[1] .= "VDEF:timespanIN2=timespanIN1,TOTAL ";
$def[1] .= "CDEF:timespanIN3=usageIN,POP,cocountIN3,difftime1,60,*,/ ";
$def[1] .= "VDEF:timespanIN4=timespanIN3,MAXIMUM ";
#OUT
$def[1] .= "CDEF:timespanOUT1=maxOUT,$threshold,GE,difftime1,0,IF, ";
$def[1] .= "VDEF:timespanOUT2=timespanOUT1,TOTAL ";
$def[1] .= "CDEF:timespanOUT3=usageOUT,POP,cocountOUT3,difftime1,60,*,/ ";
$def[1] .= "VDEF:timespanOUT4=timespanOUT3,MAXIMUM ";
# Format time for display
#IN
$def[1] .= "CDEF:tottimeIN=usageIN,POP,timespanIN4,difftime1,* ";
$def[1] .= "VDEF:tottimeIN1=tottimeIN,MAXIMUM ";
#IOUT
$def[1] .= "CDEF:tottimeOUT=usageOUT,POP,timespanOUT4,difftime1,* ";
$def[1] .= "VDEF:tottimeOUT1=tottimeOUT,MAXIMUM ";
#days
#IN
$def[1] .= "CDEF:daysIN=usageIN,POP,tottimeIN1,60,/,24,/,FLOOR ";
$def[1] .= "VDEF:daysIN1=daysIN,MAXIMUM ";
#OUT
$def[1] .= "CDEF:daysOUT=usageOUT,POP,tottimeOUT1,60,/,24,/,FLOOR ";
$def[1] .= "VDEF:daysOUT1=daysOUT,MAXIMUM ";
# Hours
#IN
$def[1] .= "CDEF:hoursIN=usageIN,POP,tottimeIN1,daysIN1,24,60,*,*,-,60,/,FLOOR ";
$def[1] .= "VDEF:hoursIN1=hoursIN,MAXIMUM ";
#OUT
$def[1] .= "CDEF:hoursOUT=usageOUT,POP,tottimeOUT1,daysOUT1,24,60,*,*,-,60,/,FLOOR ";
$def[1] .= "VDEF:hoursOUT1=hoursOUT,MAXIMUM ";
# Minutes
#IN
$def[1] .= "CDEF:minutesIN=usageIN,POP,tottimeIN1,60,%,FLOOR ";
$def[1] .= "VDEF:minutesIN1=minutesIN,MAXIMUM ";
#OUT
$def[1] .= "CDEF:minutesOUT=usageOUT,POP,tottimeOUT1,60,%,FLOOR ";
$def[1] .= "VDEF:minutesOUT1=minutesOUT,MAXIMUM ";
# Calculate Remaining Peak capacity
#IN
$def[1] .= "CDEF:hrIN=$threshold,maxIN,- ";
$def[1] .= "VDEF:hrIN1=hrIN,MINIMUM ";
$def[1] .= "CDEF:hrIN2=maxIN,POP,hrIN1,$threshold,/,100,* ";
$def[1] .= "VDEF:hrIN3=hrIN2,MAXIMUM ";
#OUT
$def[1] .= "CDEF:hrOUT=$threshold,maxOUT,- ";
$def[1] .= "VDEF:hrOUT1=hrOUT,MINIMUM ";
$def[1] .= "CDEF:hrOUT2=maxOUT,POP,hrOUT1,$threshold,/,100,* ";
$def[1] .= "VDEF:hrOUT3=hrOUT2,MAXIMUM ";
# Calculate Remaining Average capacity
#IN
$def[1] .= "VDEF:usageINave=usageIN,AVERAGE ";
$def[1] .= "CDEF:hrINave=usageIN,POP,$threshold,usageINave,- ";
$def[1] .= "VDEF:hrINave1=hrINave,MINIMUM ";
$def[1] .= "CDEF:hrINave2=usageIN,POP,hrINave1,$threshold,/,100,* ";
$def[1] .= "VDEF:hrINave3=hrINave2,MAXIMUM ";
#OUT
$def[1] .= "VDEF:usageOUTave=usageOUT,AVERAGE ";
$def[1] .= "CDEF:hrOUTave=usageOUT,POP,$threshold,usageOUTave,- ";
$def[1] .= "VDEF:hrOUTave1=hrOUTave,MINIMUM ";
$def[1] .= "CDEF:hrOUTave2=usageOUT,POP,hrOUTave1,$threshold,/,100,* ";
$def[1] .= "VDEF:hrOUTave3=hrOUTave2,MAXIMUM ";
# Calculate total bytes transfered
#IN
$def[1] .= "VDEF:totalIN=bytesIN,TOTAL ";
#OUT
$def[1] .= "VDEF:totalOUT=bytesOUT,TOTAL ";
# Draw Graph elements
#IN
$def[1] .= "AREA:usageIN" . _AREA1 . ":\"$NAME[1] \" ";
$def[1] .= "LINE1:usageIN" . _LINE . ":\"\" ";
$def[1] .= "GPRINT:usageIN:LAST:\"%3.2lf $UNIT[1]\" ";
$def[1] .= "GPRINT:bitsIN:LAST:\"(%3.2lfMb) LAST\" ";
$def[1] .= "GPRINT:usageIN:AVERAGE:\"%3.2lf $UNIT[1]\" ";
$def[1] .= "GPRINT:bitsIN:AVERAGE:\"(%3.2lfMb) AVERAGE\\n\" ";
#OUT
$def[1] .= "LINE1:usageOUT" . _LINE1 . ":\"$NAME[2] \" ";
$def[1] .= "GPRINT:usageOUT:LAST:\"%3.2lf $UNIT[2]\" ";
$def[1] .= "GPRINT:bitsOUT:LAST:\"(%3.2lfMb) LAST\" ";
$def[1] .= "GPRINT:usageOUT:AVERAGE:\"%3.2lf $UNIT[2]\" ";
$def[1] .= "GPRINT:bitsOUT:AVERAGE:\"(%3.2lfMb) AVERAGE\\n\" ";
$def[1] .= 'COMMENT:\s ';
$def[1] .= 'COMMENT:\s ';
if ($warningIN != "") {
$def[1] .= "HRULE:" . $warningIN . _WARNRULE . ':"Warning on ' . $warningIN . '" ';
}
if ($criticalIN != "") {
$def[1] .= "HRULE:" . $criticalIN . _CRITRULE . ':"Critical on ' . $criticalIN . '" ';
}
if ($threshold !="") {
$def[1] .= "AREA:coIN" . _THRESHRULE . ':"Over Threshold (' . $threshold . ')" ';
$def[1] .= "AREA:coOUT" . _THRESHRULE . ':"" ';
}
$def[1] .= 'COMMENT:\s ';
$def[1] .= 'COMMENT:\s ';
# Capacity data header
$def[1] .= 'COMMENT:\s ';
# Capacity data
$def[1] .= "COMMENT:\"\t\t\t\t\tIN\t\t\t \t\t OUT\t\t \\n\" ";
$def[1] .= "COMMENT:\"Threshold\:\t\t $threshold%\t\t\t\t $threshold%\\n\" ";
$def[1] .= "GPRINT:peakIN:\"Peak\:\t\t\t %6.2lf$UNIT[1]\" ";
$def[1] .= "GPRINT:peakIN:\"(%m/%d/%Y %H\:%M)\":strftime ";
$def[1] .= "GPRINT:peakOUT:\" %6.2lf$UNIT[1]\" ";
$def[1] .= "GPRINT:peakOUT:\"(%m/%d/%Y %H\:%M)\\n\":strftime ";
$def[1] .= "GPRINT:hrIN1:\"Rem Peak Cap\:\t %6.2lf\" ";
$def[1] .= "GPRINT:hrIN3:\" (%.2lf%% of Cap)\" ";
$def[1] .= "GPRINT:hrOUT1:\" %6.2lf\" ";
$def[1] .= "GPRINT:hrOUT3:\" (%.2lf%% of Cap)\\n\" ";
$def[1] .= "GPRINT:usageIN:AVERAGE:\"Average\:\t\t %6.2lf$UNIT[1]\" ";
$def[1] .= "GPRINT:usageOUT:AVERAGE:\"\t\t\t %6.2lf$UNIT[1]\\n\" ";
$def[1] .= "GPRINT:hrINave1:\"Rem Ave Cap\:\t\t %6.2lf\" ";
$def[1] .= "GPRINT:hrINave3:\" (%.2lf%% of Cap)\" ";
$def[1] .= "GPRINT:hrOUTave1:\" %6.2lf\" ";
$def[1] .= "GPRINT:hrOUTave3:\" (%.2lf%% of Cap)\\n\" ";
$def[1] .= "GPRINT:totalIN:\"Total Bytes\:\t\t %6.2lf%s\" ";
$def[1] .= "GPRINT:totalOUT:\"\t\t\t %6.2lf%s\\n\" ";
$def[1] .= "COMMENT:\"\s\" ";
$def[1] .= "GPRINT:tottimeIN1:\"Min over Thresh\: %6.0lf\" ";
$def[1] .= "GPRINT:daysIN1:\" (%.lfd\" ";
$def[1] .= "GPRINT:hoursIN1:\"%.lfh\" ";
$def[1] .= "GPRINT:minutesIN1:\"%.lfm)\" ";
$def[1] .= "GPRINT:tottimeOUT1:\" %3.0lf\" ";
$def[1] .= "GPRINT:daysOUT1:\"(%.lfd\" ";
$def[1] .= "GPRINT:hoursOUT1:\"%.lfh\" ";
$def[1] .= "GPRINT:minutesOUT1:\"%.lfm)\\n\" ";
$def[1] .= "GPRINT:timespanIN4:\"Times over Thresh\: %5.lf\" ";
$def[1] .= "GPRINT:timespanOUT4:\"\t\t\t %5.lf\\n\" ";
$def[1] .= "COMMENT:\"\s\" ";
?>