|
|
|
#!/usr/bin/perl
|
|
|
|
|
|
|
|
use JSON;
|
|
|
|
my $json;
|
|
|
|
@{$json->{data}} = ();
|
|
|
|
|
|
|
|
my $cmd;
|
|
|
|
my $re;
|
|
|
|
# On Linux, parse /proc/mounts
|
|
|
|
if (-e "/proc/mounts"){
|
|
|
|
$cmd = 'cat /proc/mounts';
|
|
|
|
$re = qr/(\S+) (\S+) (\S+)/;
|
|
|
|
}
|
|
|
|
# On BSD (at least pfsense), there's no /proc/mounts
|
|
|
|
# parse the mount output
|
|
|
|
else{
|
|
|
|
$cmd = '/sbin/mount';
|
|
|
|
$re = qr/(\S+) on (\S+) \((\S+), /;
|
|
|
|
}
|
|
|
|
for (`$cmd`){
|
|
|
|
($block, $fsname, $fstype) = m/$re/;
|
|
|
|
# Default warning and critical level (%)
|
|
|
|
my $warning = 85;
|
|
|
|
my $critical = 95;
|
|
|
|
my $t;
|
|
|
|
if (open WARN, "$fsname/.zbx_warning"){
|
|
|
|
$t = join "", <WARN>;
|
|
|
|
close WARN;
|
|
|
|
chomp($t);
|
|
|
|
$warning = $t if ($t =~ m/^\d+$/);
|
|
|
|
}
|
|
|
|
if (open CRIT, "$fsname/.zbx_critical"){
|
|
|
|
$t = join "", <CRIT>;
|
|
|
|
close CRIT;
|
|
|
|
chomp($t);
|
|
|
|
$critical = $t if ($t =~ m/^\d+$/);
|
|
|
|
}
|
|
|
|
|
|
|
|
push @{$json->{data}}, {
|
|
|
|
"{#FSNAME}" => $fsname,
|
|
|
|
"{#FSTYPE}" => $fstype,
|
|
|
|
"{#FSDEVICE}" => $block,
|
|
|
|
"{#FSWARNTHRES}" => $warning,
|
|
|
|
"{#FSCRITTHRES}" => $critical
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
print to_json($json);
|
|
|
|
exit(0);
|