Script - check_freespace_osx
Revised: 2009-06-03 richard
#!/usr/bin/perl
# This script returns all disk > 20G mounted in /dev/ on the mac on a single return.
# it is not standards compliant but it is dynamic.
# See the help at the bottom for command line options.
use strict;
use Getopt::Std;
use vars qw/ %opt /;
# my $df = `df -l -k | grep -v -i backup | grep /dev/`;
my $df = `df -k | grep /dev/`;
my $exitcrit = 1;
my $exitwarning = 1;
my $exitok = 1;
my $diskused; my $diskname; my $percentused;
my $opt_h; my $opt_c; my $opt_w; my $opt_x;
sub nicedisksize($)
{
my $input = shift;
if ($input < 1024)
{
$diskused = sprintf("%.2f", $input);
$diskused = $diskused."K";
}
elsif ($input < (1024*1024))
{
$diskused = sprintf("%.2f", $input / 1024);
$diskused = $diskused."M";
}
elsif ($input < (1024*1024*1024))
{
$diskused = sprintf("%.2f", $input / (1024*1024));
$diskused = $diskused."G";
}
elsif ($input < (1024*1024*1024*1024))
{
$diskused = sprintf("%.2f", $input / (1024*1024*1024));
$diskused = $diskused."T";
}
return $diskused;
}
sub trim($)
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}
if (@ARGV < 1)
{
print_usage();
exit 0;
}
getopts("h:w:c:x:", \%opt );
print_usage() if $opt{h};
my $warning = $opt{w};
my $critical = $opt{c};
my $exclude = $opt{x};
# $1 = Disk Name
# $2 = Disk Size
# $3 = Disk Used
# $4 = Disk Available
# $5 = Percentage Used
# $6 = Mount Location
foreach $_ (split("\n",$df))
{
chomp;
if (m/(.+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$/)
{
$diskname = trim($6);
my $diskused = nicedisksize($3);
my $disksize = nicedisksize($2);
$percentused = 100 - $5;
if (m/$exclude/i eq $6) #Don't care about excluded disk
{
print "OK: $diskname ($diskused"," of $disksize"," used) $percentused% remaining.<br> ";
$exitok = 0;
}
elsif ($2 <= ((1024*1024)*20)) #Don't care about disks less then 20G
{
print "OK: $diskname ($diskused"," of $disksize"," used) $percentused% remaining.<br> ";
$exitok = 0;
}
elsif ($percentused <= $warning)
{
print "WARNING: $diskname ($diskused"," of $disksize"," used) $percentused% remaining.<br> ";
$exitwarning = 0;
}
elsif ($percentused <= $critical)
{
print "CRITICAL: $diskname ($diskused"," of $disksize"," used) $percentused% remaining.<br> ";
$exitcrit = 0;
}
else
{
print "OK: $diskname ($diskused"," of $disksize"," used) $percentused% remaining.<br> ";
$exitok = 0;
}
}
else
{
print "FAIL\n";
}
}
if ($exitcrit =~ 0)
{
exit 2;
}
elsif ($exitwarning =~ 0)
{
exit 1;
}
elsif ($exitok =~ 0)
{
exit 0;
}
sub print_usage
{
print << "USAGE";
-----------------------------------------------------------------
Monitors disk freespace on OSX
This script monitors all Volumes > 20G with usable space mounted in /dev/.
Usage: check_freespace_osx -w <warning % remaining> -c <critical % remaining> -x excluded_disk (not case sensitive)
Example: check_freespace_osx -w 15 -c 10 -x backup
USAGE
exit 0;
}