#!/bin/sh
# -*- sh -*-

: << =cut

=head1 NAME

nfs_client - Plugin to monitor NFS client traffic

=head1 CONFIGURATION

No configuration

=head1 AUTHOR

Unknown author

=head1 LICENSE

GPLv2

=head1 MAGIC MARKERS

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

=cut

NFS=/proc/net/rpc/nfs

proc="getattr setattr lookup access readlink read write create mkdir symlink mknod remove rmdir rename link readdir readdirplus fsstat fsinfo pathconf commit"

if [ "$1" = "autoconf" ]; then
	if [ -r "$NFS" ]; then
		echo yes
		exit 0
	else
		echo no
		exit 0
	fi
fi

if [ "$1" = "config" ]; then

	echo 'graph_title NFS Client'
	echo 'graph_args --base 1000 -l 0'
	echo 'graph_vlabel requests / ${graph_period}'
	echo 'graph_total total'
	echo 'graph_category NFS'
	for a in $proc ; do echo "$a.label $a" ; echo "$a.type DERIVE"; echo "$a.min 0"; done
	exit 0
fi

awk '/proc2/ {
	nfs_getattr+=$4
	nfs_setattr+=$5
	nfs_lookup+=$6
	nfs_readlink+=$7
	nfs_read+=$8
	nfs_write+=$9
	nfs_create+=$10
	nfs_mkdir+=$11
	nfs_symlink+=$12
	nfs_remove+=$13
	nfs_rmdir+=$14
	nfs_rename+=$15
	nfs_link+=$16
	nfs_readdir+=$17
	nfs_fsstat+=$18
}
/proc[34]/ {
	nfs_getattr+=$4
	nfs_setattr+=$5
	nfs_lookup+=$6
	nfs_access+=$7
	nfs_readlink+=$8
	nfs_read+=$9
	nfs_write+=$10
	nfs_create+=$11
	nfs_mkdir+=$12
	nfs_symlink+=$13
	nfs_mknod+=$14
	nfs_remove+=$15
	nfs_rmdir+=$16
	nfs_rename+=$17
	nfs_link+=$18
	nfs_readdir+=$19
	nfs_readdirplus+=$20
	nfs_fsstat+=$21
	nfs_fsinfo+=$22
	nfs_pathconf+=$23
	nfs_commit+=$24
}
END {
	print "getattr.value " nfs_getattr
	print "setattr.value " nfs_setattr
	print "lookup.value " nfs_lookup
	print "access.value " nfs_access
	print "readlink.value " nfs_readlink
	print "read.value " nfs_read
	print "write.value " nfs_write
	print "create.value " nfs_create
	print "mkdir.value " nfs_mkdir
	print "symlink.value " nfs_symlink
	print "mknod.value " nfs_mknod
	print "remove.value " nfs_remove
	print "rmdir.value " nfs_rmdir
	print "rename.value " nfs_rename
	print "link.value " nfs_link
	print "readdir.value " nfs_readdir
	print "readdirplus.value " nfs_readdirplus
	print "fsstat.value " nfs_fsstat
	print "fsinfo.value " nfs_fsinfo
	print "pathconf.value " nfs_pathconf
	print "commit.value " nfs_commit
}' $NFS
