#! /usr/bin/perl
# Show FreeBSD swap meta memory usage
# If you experience "swap zone exhausted, increase kern.maxswzone", you may
# want to use this plugin
#
# anders@fupp.net, 2009-09-07

$ENV{PATH} = "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin";

sub getvalues {
	foreach $line (`vmstat -z`) {
		if ($line =~ /^SWAPMETA:\s+\d+,\s+(\d+),\s+(\d+)/) {
			$swmlimit = $1;
			$swmused = $2;
			last;
		}
	}
#	print "swmlimit=$swmlimit swmused=$swmused\n";
}

sub printconfig {
	print "graph_title Swap meta\n";
	print "graph_args -l 0\n";
	print "graph_vlabel swapmeta usage\n";
	print "graph_category system\n";
	print "graph_info This graph shows the swapmeta (memory used to handle swap) memory usage in FreeBSD.\n";
	print "graph_order swmused swmfree\n";
	print "graph_scale yes\n";

	print "swmused.label used\n";
	print "swmused.type GAUGE\n";
	print "swmused.graph yes\n";
	print "swmused.min 0\n";
	print "swmused.draw AREA\n";

	print "swmfree.label free\n";
	print "swmfree.type GAUGE\n";
	print "swmfree.graph yes\n";
	print "swmfree.min 0\n";
	print "swmfree.draw STACK\n";
}

sub printvalues {
	print "swmused.value $swmused\n";
	print "swmfree.value " . ($swmlimit-$swmused) . "\n";
}

if ($ARGV[0] eq "autoconf") {
	print "yes\n";
} elsif ($ARGV[0] eq "config") {
	printconfig;
} else {
	getvalues;
	printvalues;
}
