Repository
Munin (contrib)
Last change
2017-02-24
Graph Categories
Family
auto
Capabilities
Keywords
Language
Perl
License
GPL-2.0-only

dar_memusage

Name

dar_mumusage - Munin plugin to monitor darwin physical memory usage.

Applicable Systems

Should work on any darwin (Mac OS X) system with the ‘top’ command.

Configuration

None needed

Interpretation

The plugin runs the top command and shows the physical memory for the machine.

Bugs

The stats are a snapshot at the time of the command - a 5 minute average would be better.

Magic Markers

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

Version

v.0.0.1

Author

Copyright (C) 2010.

Original version by J.T.Sage (at) gmail (dot) com.

License

GPLv2

#!/usr/bin/perl -w
# -*- perl -*-

=head1 NAME

dar_mumusage - Munin plugin to monitor darwin physical memory usage.

=head1 APPLICABLE SYSTEMS

Should work on any darwin (Mac OS X) system with the 'top' command.

=head1 CONFIGURATION

None needed

=head1 INTERPRETATION

The plugin runs the top command and shows the physical memory for the machine.

=head1 BUGS

The stats are a snapshot at the time of the command - a 5 minute average would
be better.

=head1 MAGIC MARKERS

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

=head1 VERSION

  v.0.0.1

=head1 AUTHOR

Copyright (C) 2010.

Original version by J.T.Sage (at) gmail (dot) com.

=head1 LICENSE

GPLv2

=cut

use Munin::Plugin;

if ( defined($ARGV[0])) {
    if ($ARGV[0] eq 'autoconf') {
	$uname = `uname`;
	if ( not ( $uname =~ /Darwin/ ) ) { print "no (not a Darwin System)\n"; }
	else {
		if ( not -x "/usr/bin/top" ) { print "no (top not found)\n"; }
		else {
			print "yes\n";
		}
	}
	exit 0;
    }

    if ( $ARGV[0] eq "config" ) {
	$maxmemcmd = `hostinfo | grep memory`;
	$maxmemcmd =~ m/^.+?: (\d+\.\d+) (\w).+$/;
	$memline = $1;
	if ( $2 eq "m" ) { $memline = $memline * 1024 * 1024; }
	if ( $2 eq "g" ) { $memline = $memline * 1024 * 1024 * 1024; }

	print "graph_title Memory usage\n";
	print "graph_args --base 1024 --lower-limit 0 --upper-limit ".$memline." --rigid\n";
	print "graph_vlabel Bytes\n";
	print "graph_scale yes\n";
	print "graph_category system\n";
	print "wired.label wired\nwired.type GAUGE\nwired.draw AREA\n";
	print "active.label active\nactive.type GAUGE\nactive.draw STACK\n";
	print "inactive.label inactive\ninactive.type GAUGE\ninactive.draw STACK\n";
	print "free.label free\nfree.type GAUGE\nfree.draw STACK\n";
	print "used.label used\nused.type GAUGE\nused.draw LINE2\n";
	exit 0;
    }
}

@top = `top -l1 -n0 -u`;
$quit = 0;
for ( $i = 1;  ($i < $#top and $quit == 0); $i++ ) {
	if ( $top[$i] =~ /^PhysMem/ ) {
		$wired = $active = $inactive = $free = $used = $top[$i];
		$wired =~ s/^.+?: (\d+)M wired.+$/$1/; chomp $wired; $wired = $wired * 1024 * 1024;
		$active =~ s/^.+?, (\d+)M active.+$/$1/; chomp $active; $active = $active * 1024 * 1024;
		$inactive =~ s/^.+?, (\d+)M inactive.+$/$1/; chomp $inactive; $inactive = $inactive * 1024 * 1024;
		$free =~ s/^.+?, (\d+)([M|K]) free.+$/$1/; chomp $free; $free = $free * 1024 * 1024; if ( $2 eq "K" ) { $free = $free / 1024; }
		$used =~ s/^.+?, (\d+)([M|G]) used.+$/$1/; chomp $used; $used = $used * 1024 * 1024; if ( $2 eq "G" ) { $used = $used * 1024; }
		print "wired.value " . $wired . "\n";
		print "active.value " . $active . "\n";
		print "inactive.value " . $inactive . "\n";
		print "free.value " . $free . "\n";
		print "used.value " . $used . "\n";
		$quit = 1;
	}
}




# vim:syntax=perl