#!/bin/sh
#
# Plugin to monitor the Py-transport memory usage
#
# Requirements:
# proc filesystem support
# munin <http://munin.projects.linpro.no> 
#
# Usage: Link or copy into /etc/munin/plugins/
# Example: memory_pyicqt for PyICQt monitoring
#
# Magic markers (optional - only used by munin-config and some
# installation scripts):
#
#%# family=auto
#%# capabilities=autoconf

TRANSPORT=`basename $0 | sed 's/^memory_//g' | tr '_' '.'`

# used by munin-config
if [ "$1" = "autoconf" ]; then
	echo yes
	exit 0
fi

if [ "$1" = "config" ]; then
	echo "graph_title $TRANSPORT memory"
	echo 'graph_order memory data code stack shared'
	echo "graph_info This graph shows $TRANSPORT memory usage"
	echo 'graph_category processes'
	echo 'graph_period minute'
	echo 'memory.label memory'
	echo 'memory.info Virtual memory size'
	echo 'peak.label peak'
	echo 'peak.info Peak virtual memory size'
	echo 'data.label data'
	echo 'data.info Size of data segment'
	echo 'code.label code'
	echo 'code.info Size of code segment'
	echo 'stack.label stack'
	echo 'stack.info Size of stack segment'
	echo 'shared.label shared'
	echo 'shared.info Size of shared libraries'
	echo 'rss.label rss'
	echo 'rss.info Size of resident memory'

	exit 0
fi

if [ ! -r /var/run/$TRANSPORT/$TRANSPORT.pid ] ; then
     echo Cannot read /var/run/$TRANSPORT/$TRANSPORT.pid >&2
     exit -1
fi 

pid=`cat /var/run/$TRANSPORT/$TRANSPORT.pid`

vmsize=`cat /proc/$pid/status | grep VmSize`
vmsize_kb=`echo $vmsize | cut -f2 -d ' '`
echo -n 'memory.value '
echo `expr $vmsize_kb '*' 1024` # virtual memory size

vmpeak=`cat /proc/$pid/status | grep VmPeak`
vmpeak_kb=`echo $vmpeak | cut -f2 -d ' '`
echo -n 'peak.value '
echo `expr $vmpeak_kb '*' 1024` # peak virtual memory size

vmdata=`cat /proc/$pid/status | grep VmData`
vmdata_kb=`echo $vmdata | cut -f2 -d ' '`
echo -n 'data.value '
echo `expr $vmdata_kb '*' 1024` # size of data segment

vmexe=`cat /proc/$pid/status | grep VmExe`
vmexe_kb=`echo $vmexe | cut -f2 -d ' '`
echo -n 'code.value '
echo `expr $vmexe_kb '*' 1024` # size of text segment

vmstk=`cat /proc/$pid/status | grep VmStk`
vmstk_kb=`echo $vmstk | cut -f2 -d ' '`
echo -n 'stack.value '
echo `expr $vmstk_kb '*' 1024` # size of stack segment

vmlib=`cat /proc/$pid/status | grep VmLib`
vmlib_kb=`echo $vmlib | cut -f2 -d ' '`
echo -n 'shared.value '
echo `expr $vmlib_kb '*' 1024` # size of shared libraries

rss=`cat /proc/$pid/status | grep VmRSS`
rss_kb=`echo $rss | cut -f2 -d ' '`
echo -n 'rss.value '
echo `expr $rss_kb '*' 1024` # resident memory size

