OS X os_mon broken
Bjorn Gustavsson
bjorn@REDACTED
Tue Mar 8 08:23:46 CET 2005
There will be several bug fixes in os_mon in R10B-4, including a bug
fix to cpu_sup for Max OS X.
My bug fix is similar to yours in that it looks at the uptime output
starting at the end.
/Bjorn
%% Get the load average using uptime.
D = os:cmd("uptime") -- "\n",
%% Here is a sample uptime string from Mac OS 10.3.8:
%% "11:17 up 12 days, 20:39, 2 users, load averages: 1.07 0.95 0.66"
%% The safest way to extract the load averages seems to be grab everything
%% after the last colon and then do an fread on that.
Avg = lists:reverse(hd(string:tokens(lists:reverse(D), ":"))),
{ok,[L1,L5,L15],_} = io_lib:fread("~f ~f ~f", Avg),
case Request of
?avg1 -> sunify(L1);
?avg5 -> sunify(L5);
?avg15 -> sunify(L15);
?ping -> 4711;
?nprocs ->
Ps = os:cmd("/bin/ps -ax | /usr/bin/wc -l"),
{ok, [N], _} = io_lib:fread("~d", Ps),
N-1
end;
Sean Hinde <sean.hinde@REDACTED> writes:
> Hi,
>
> os_mon-1.6.2 is still broken under OS X darwin.
>
> The following patch restores what was in my original patch. This makes
> the solution much less susceptible to changes in the output of uptime.
>
> Regards,
> Sean
>
> --- cpu_sup.erl.orig Fri Jun 25 14:25:58 2004
> +++ cpu_sup.erl Mon Mar 7 21:50:04 2005
> @@ -274,11 +274,11 @@
> end;
> get_int_measurement(Request, #state{os_type = {unix, darwin}}) ->
> D = os:cmd("uptime") -- "\n",
> - {ok, [L1, L5, L15], _} =
> io_lib:fread("~*s~*s~*s~*s~*s~*s~*s~f,~f,~f", D),
> + [L15, L5, L1|_] = lists:reverse(string:tokens(D, ", ")),
> case Request of
> - ?avg1 -> sunify(L1);
> - ?avg5 -> sunify(L5);
> - ?avg15 -> sunify(L15);
> + ?avg1 -> sunify(list_to_float(L1));
> + ?avg5 -> sunify(list_to_float(L5));
> + ?avg15 -> sunify(list_to_float(L15));
> ?ping -> 4711;
> ?nprocs ->
> Ps = os:cmd("/bin/ps -ax | /usr/bin/wc -l"),
>
--
Björn Gustavsson, Erlang/OTP, Ericsson AB
More information about the erlang-questions
mailing list