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