#!/bin/sh
#
# Plugin to monitor CPU usage, for a selected set of processes. Tested on FreeBSD.
#
# Author: Erik Cederstrand
# Based on http://waste.mandragor.org/munin_tutorial/cpubyuser
# Thanks to Yann Hamon.
#
# Usage: Place in /usr/local/etc/munin/plugins/ (or link it there  using ln -s)
#        Add this to your /ur/local/etc/munin/plugin-conf.d/plugins.conf:
#       [cpubyproc]
#       env.procs httpd java
#
#    httpd and java being a list of the processes to monitor.

#
# Parameters understood:
#
#       config   (required)
#       autoconf (optional - used by munin-config)
#

#%# family=auto
#%# capabilities=autoconf



if [ "$1" = "autoconf" ] ; then 
	if [ -n "$procs" ] ; then
		echo "yes"
	else
		echo "\$procs not defined."
	fi
	exit
fi

if [ "$1" = "config" ] ; then
	echo "graph_args --base 1000 -r --lower-limit 0";
	echo "graph_title CPU usage, by process";
	echo "graph_category system";
	echo "graph_info This graph shows CPU usage, for monitored processes.";
	echo 'graph_vlabel %'
	echo 'graph_scale no'
	echo 'graph_period second'

	iprocs=`echo $procs | tr '-' '_'`
	echo "graph_order $iprocs"

	FIRSTPROC=1;
	for proc in $procs; do  
		iproc=`echo $proc | tr '-' '_'`
		echo "${iproc}.label $proc"
		echo "${iproc}.info CPU used by process $proc"
		echo "${iproc}.type GAUGE"
		if [ $FIRSTPROC -eq 1 ] ; then
			echo "${iproc}.draw AREA"
			export FIRSTPROC=0;
		else	
			echo "${iproc}.draw STACK"
		fi
	done ;
	exit
fi

#TOPOUT=`top -b -d5 -n2`
TOPOUT=`ps -axo pcpu,comm`

for proc in $procs ; do {

	iproc=`echo $proc | tr '-' '_'`

#	top -b -d 0.2 -n 5 | grep "${proc}\$" |
	echo "$TOPOUT" | grep -F "${proc}" |
	awk '
	BEGIN {
		FS=" "
		CPU_PROC=0
	}

	{
		CPU_PROC+=$1
	}

	END { 
	CPU_PROC=CPU_PROC/2
	print  "'$iproc'.value "CPU_PROC
	}'

}

done;
