aboutsummaryrefslogtreecommitdiffstats
path: root/lib/os_mon/src/disksup.erl
diff options
context:
space:
mode:
authorJohannes Weißl <[email protected]>2014-03-17 01:05:08 +0100
committerJohannes Weißl <[email protected]>2014-07-01 00:47:19 +0200
commit56c8dabfbc6a6dc8cb6a066d0b74f861b9d16327 (patch)
tree4a1ae69ca95b5e5f90b06185b7b6665314be099b /lib/os_mon/src/disksup.erl
parent614bca0f5832f06bcc181c58b78e3371d79ec40d (diff)
downloadotp-56c8dabfbc6a6dc8cb6a066d0b74f861b9d16327.tar.gz
otp-56c8dabfbc6a6dc8cb6a066d0b74f861b9d16327.tar.bz2
otp-56c8dabfbc6a6dc8cb6a066d0b74f861b9d16327.zip
Add 'disksup_posix_only' parameter to disksup
On embedded (Linux) systems the "df" program is very often provided by the Busybox (or Toolbox) project. This version does not provide the "-l" option (for displaying only local filesystems) used in disksup.erl. To make disksup work on these embedded platforms, this patch adds a new application parameter 'disksup_posix_only', to make diskup use only options defined in the POSIX standard: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/df.html
Diffstat (limited to 'lib/os_mon/src/disksup.erl')
-rw-r--r--lib/os_mon/src/disksup.erl15
1 files changed, 12 insertions, 3 deletions
diff --git a/lib/os_mon/src/disksup.erl b/lib/os_mon/src/disksup.erl
index 278da26a20..3fd80f2365 100644
--- a/lib/os_mon/src/disksup.erl
+++ b/lib/os_mon/src/disksup.erl
@@ -81,10 +81,12 @@ param_type(disk_space_check_interval, Val) when is_integer(Val),
param_type(disk_almost_full_threshold, Val) when is_number(Val),
0=<Val,
Val=<1 -> true;
+param_type(disksup_posix_only, Val) when Val==true; Val==false -> true;
param_type(_Param, _Val) -> false.
param_default(disk_space_check_interval) -> 30;
-param_default(disk_almost_full_threshold) -> 0.80.
+param_default(disk_almost_full_threshold) -> 0.80;
+param_default(disksup_posix_only) -> false.
%%----------------------------------------------------------------------
%% gen_server callbacks
@@ -94,7 +96,8 @@ init([]) ->
process_flag(trap_exit, true),
process_flag(priority, low),
- OS = get_os(),
+ PosixOnly = os_mon:get_env(disksup, disksup_posix_only),
+ OS = get_os(PosixOnly),
Port = case OS of
{unix, Flavor} when Flavor==sunos4;
Flavor==solaris;
@@ -102,6 +105,7 @@ init([]) ->
Flavor==dragonfly;
Flavor==darwin;
Flavor==linux;
+ Flavor==posix;
Flavor==openbsd;
Flavor==netbsd;
Flavor==irix64;
@@ -205,8 +209,10 @@ format_status(_Opt, [_PDict, #state{os = OS, threshold = Threshold,
%% Internal functions
%%----------------------------------------------------------------------
-get_os() ->
+get_os(PosixOnly) ->
case os:type() of
+ {unix, _} when PosixOnly ->
+ {unix, posix};
{unix, sunos} ->
case os:version() of
{5,_,_} -> {unix, solaris};
@@ -259,6 +265,9 @@ check_disk_space({unix, irix}, Port, Threshold) ->
check_disk_space({unix, linux}, Port, Threshold) ->
Result = my_cmd("/bin/df -lk", Port),
check_disks_solaris(skip_to_eol(Result), Threshold);
+check_disk_space({unix, posix}, Port, Threshold) ->
+ Result = my_cmd("df -k -P", Port),
+ check_disks_solaris(skip_to_eol(Result), Threshold);
check_disk_space({unix, dragonfly}, Port, Threshold) ->
Result = my_cmd("/bin/df -k -t ufs,hammer", Port),
check_disks_solaris(skip_to_eol(Result), Threshold);