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

dar_uptime

Name

dar_uptime - Munin plugin to monitor darwin system uptime.

Applicable Systems

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

Configuration

None needed

Interpretation

The plugin runs the uptime command, and parses the value into days.

Bugs

Limited test data set, probably fails some of the time - very likely on systems with a very low uptime.

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
# -*- perl -*-

=head1 NAME

dar_uptime - Munin plugin to monitor darwin system uptime.

=head1 APPLICABLE SYSTEMS

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

=head1 CONFIGURATION

None needed

=head1 INTERPRETATION

The plugin runs the uptime command, and parses the value into days.

=head1 BUGS

Limited test data set, probably fails some of the time - very likely
on systems with a very low uptime.

=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/uptime" ) { print "no (uptime not found)\n"; }
		else {
			print "yes\n";
		}
	}
	exit 0;
    }

    if ( $ARGV[0] eq "config" ) {
	print "graph_title Uptime\n";
	print "graph_args --base 1000 -l 0 \n";
	print "graph_vlabel uptime in days\n";
	print "graph_category system\n";
	print "uptime.label uptime\n";
	print "uptime.draw AREA\n";
	exit 0;
    }
}

@uptime = `/usr/bin/uptime`;
foreach(@uptime) {
	$_ =~ m/^.+up (.+?), \d+ us.+$/;
	$timestr = $1;
	if ( $timestr =~ m/^(\d+) day.+?$/ ) {
		$days = $1;
	} else { $days = 0; }
	if ( $timestr =~ m/(\d+) h/ ) {
		$hrs = $1;
	} else { $hrs = 0; }
	if ( $timestr =~ m/(\d+)\:(\d+)/ ) {
		$hours = $1; $min = $2;
	} else { $hours = 0; $min = 0; }
	if ( $timestr =~ m/(\d+) m/ ) {
		$mint = $1;
	} else {
		$mint = 0;
	}
	$total = ( $days * 24 * 60 * 60 ) + ( ( $hrs + $hours ) * 60 * 60 ) + ( ( $min + $mint ) * 60 );
	$daysf = $total / ( 24 * 60 * 60 );
	$daysi = ( int( $daysf * 1000 ) / 1000 );
	print "uptime.value " . $daysi . "\n";
}

# vim:syntax=perl