<?php
#
# Author George Hansper george@hansper.id.au
# Plugin: check_memcached
#
#
#
#
# Set $memcached_graph_composite = 0 to plot 4 graphs:
#   1st graph: gets and hits
#   2nd graph: sets and misses
#   3rd graph: hit/miss ratio
#   4th graph: evictions
#$memcached_graph_composite = 0;

# Set $memcached_graph_composite = 1 to plot 2 graphs:
#   1st graph: has gets and hits in the positive direction, and sets, misses and evictions in the negative direction
#   2nd graph: is hit/miss ratio on it's own
$memcached_graph_composite = 1;

if ( $memcached_graph_composite == 0 ) {
	$def[1]=""; $opt[1]=""; $ds_name[1]="";
	$def[2]=""; $opt[2]=""; $ds_name[2]="";
	$def[3]=""; $opt[3]=""; $ds_name[3]="";
	$def[4]=""; $opt[4]=""; $ds_name[4]="";
} else {
	$def[1]=""; $opt[1]=""; $ds_name[1]="";
	$def[3]=""; $opt[3]=""; $ds_name[3]="";
}

$ds_name[1] = "Gets and hits";
$opt[1] = "--vertical-label ops/minute -l0  --title \"Memcached Gets and Hits for $hostname / $servicedesc\" ";
$ds_name[3] = "Hit/Miss Ratio";
$opt[3] = "--vertical-label hits/misses -l0  --title \"Memcached Hit/Miss ratio for $hostname / $servicedesc\" ";

if ( $memcached_graph_composite == 0 ) {
	# Sets and misses
	$sm=2;
	$ds_name[2] = "Sets and Misses";
	$opt[2] = "--vertical-label \"ops/minute\" -l0  --title \"Memcached Sets and Misses for $hostname / $servicedesc\" ";
	# Evictions
	$ev=4;
	$ds_name[4] = "Evictions/minute";
	$opt[4] = "--vertical-label evictions/min -l0  --title \"Evictions/minute for $hostname / $servicedesc\" ";
} else {
	# For the composite graph, plot sets, misses and evictions as negative numbers
	# Sets and misses
	$sm=1;
	# Evictions
	$ev=1;
}
$def[1]  .= rrd::def("gets",           $RRDFILE[1], $DS[1], "AVERAGE");
$def[$sm].= rrd::def("sets",           $RRDFILE[2], $DS[2], "AVERAGE");
$def[1]  .= rrd::def("hits",           $RRDFILE[3], $DS[3], "AVERAGE");
$def[$sm].= rrd::def("misses",         $RRDFILE[4], $DS[4], "AVERAGE");
$def[$ev].= rrd::def("evictions",      $RRDFILE[5], $DS[5], "AVERAGE");
$def[3]  .= rrd::def("hit_miss_ratio", $RRDFILE[6], $DS[6], "AVERAGE");


if ($WARN[6] != "") {
    $def[3] .= "HRULE:$WARN[1]#FFFF00 ";
}
if ($CRIT[6] != "") {
    $def[3] .= "HRULE:$CRIT[1]#FF0000 ";       
}
if ($WARN[5] != "") {
    $def[$ev] .= "HRULE:$WARN[1]#FFFF00 ";
}
if ($CRIT[5] != "") {
    $def[$ev] .= "HRULE:$CRIT[1]#FF0000 ";       
}
# Gets and Hits
$def[1] .= rrd::area("gets", "#c0c0ff");
$def[1] .= rrd::area("hits", "#c0ffc0");
# Draw a line for emphasis
$def[1] .= rrd::line1("gets", "#0000c0","$NAME[1]\t");
$def[1] .= rrd::gprint("gets", array("LAST", "AVERAGE", "MAX"), "%6.2lf");
$def[1] .= rrd::line1("hits", "#00c000","$NAME[3]\t");
$def[1] .= rrd::gprint("hits", array("LAST", "AVERAGE", "MAX"), "%6.2lf");

if ( $memcached_graph_composite == 0 ) {
	# Sets and misses
	$def[$sm] .= rrd::area("misses", "#e0e080");
	$def[$sm] .= rrd::area("sets", "#808080");
	## Draw a line for emphasis
	$def[$sm] .= rrd::line1("misses", "#c08000","$NAME[4]\t");
	$def[$sm] .= rrd::gprint("misses", array("LAST", "AVERAGE", "MAX"), "%6.2lf");
	$def[$sm] .= rrd::line1("sets", "#404040", "$NAME[2]\t");
	$def[$sm] .= rrd::gprint("sets", array("LAST", "AVERAGE", "MAX"), "%6.2lf");
} else {
	$def[$sm] .= rrd::cdef("neg_sets","sets,-1,*"); 
	$def[$sm] .= rrd::cdef("neg_misses","misses,-1,*"); 
	# Sets and misses
	$def[$sm] .= rrd::area("neg_misses", "#e0e080");
	$def[$sm] .= rrd::area("neg_sets", "#808080");
	## Draw a line for emphasis
	$def[$sm] .= rrd::line1("neg_misses", "#c08000","$NAME[4]\t");
	$def[$sm] .= rrd::gprint("misses", array("LAST", "AVERAGE", "MAX"), "%6.2lf");
	$def[$sm] .= rrd::line1("neg_sets", "#404040", "$NAME[2]\t");
	$def[$sm] .= rrd::gprint("sets", array("LAST", "AVERAGE", "MAX"), "%6.2lf");
}

# X-axis
if ( $memcached_graph_composite != 0 ) {
	$def[1] .= "HRULE:0#000000 ";       
}

# Hit/Miss ratio
$def[3] .= rrd::area("hit_miss_ratio", "#80FF80");
$def[3] .= rrd::line1("hit_miss_ratio", "#008000", "$NAME[6]\t");
$def[3] .= rrd::gprint("hit_miss_ratio", array("LAST", "AVERAGE", "MAX"), "%6.2lf");

# Evictions
if ( $memcached_graph_composite == 0 ) {
	$def[$ev] .= rrd::area("evictions", "#FF8080");
	$def[$ev] .= rrd::line1("evictions", "#c00000", "$NAME[5]\t");
} else {
	$def[$sm] .= rrd::cdef("neg_evictions","evictions,-1,*"); 
	$def[$ev] .= rrd::area("neg_evictions", "#FF8080");
	$def[$ev] .= rrd::line1("neg_evictions", "#c00000", "$NAME[5]\t");
}
$def[$ev] .= rrd::gprint("evictions", array("LAST", "AVERAGE", "MAX"), "%6.3lf");
#error_log($def[2]);
#error_log($def[3]);
#error_log($def[4]);
?>
