aboutsummaryrefslogblamecommitdiffstats
path: root/lib/observer/src/observer_sys.erl
blob: 8db7bb0e46dcec54dd675f7e9f947c566fcea0dc (plain) (tree)


































































































































                                                                                                  
%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2011. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%%
%% %CopyrightEnd%

-module(observer_sys).

-export([node_info/0, node_name_str/1, no_procs_str/1, no_cpu_str/1,
	 no_cpu_available_str/1, no_cpu_online_str/1, tot_alloc_str/1,
	 proc_used_str/1, proc_alloc_str/1, atom_used_str/1, atom_alloc_str/1,
	 binary_alloc_str/1, code_alloc_str/1, ets_alloc_str/1]).

-record(node_info, {node_name,
		    no_procs, % number of processes
		    no_cpu, % number of logical cpu's
		    no_cpu_available, %number of logical cpu's available
		    no_cpu_online, % number of logical cpu's online
		    tot_alloc, % total memory allocated
		    proc_used, % memory used by processes
		    proc_alloc, % memory alloc by processes,
		    atom_used, % memory used by atoms
		    atom_alloc, % memory allocated by atoms
		    binary_alloc, % memory allocated for binaries
		    code_alloc, % memory allocated by code
		    ets_alloc}).% memory allocated by ets


%%%%%%%%%%%%%%%%%%%%%%% functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
node_info() ->
    #node_info{node_name = node_name(),
	       no_procs = process_count(),
	       no_cpu = logical_cpus(),
	       no_cpu_available = logical_cpus_available(),
	       no_cpu_online = logical_cpus_online(),
	       tot_alloc = total_alloc(),
	       proc_used = processes_used(),
	       proc_alloc = processes_alloc(),
	       atom_used = atom_used(),
	       atom_alloc = atom_alloc(),
	       binary_alloc = binary_alloc(),
	       code_alloc = code_alloc(),
	       ets_alloc = ets_alloc()
	      }.

node_name() ->
    node().

process_count() ->
    erlang:system_info(process_count).

logical_cpus() ->
    erlang:system_info(logical_processors). % detected number of logical cpus configured on system

logical_cpus_available() -> % detected number of logical cpus available to erlang runtime system
    erlang:system_info(logical_processors_available).

logical_cpus_online() -> % detected number of logical cpus online on system
    erlang:system_info(logical_processors_online).

total_alloc() ->
    erlang:memory(total). % total amount of memory currently allocated

processes_used() -> % amount of memory currently used by the erlang processes
    erlang:memory(processes_used).

processes_alloc() -> % allocated by erlang processes
    erlang:memory(processes).

atom_used() ->  % amount of memory used for atoms
    erlang:memory(atom_used).

atom_alloc() -> % amount allocated for atoms
    erlang:memory(atom).

binary_alloc() -> % amount allocated for binaries
    erlang:memory(binary).

code_alloc() -> % amount allocated for code
    erlang:memory(code).

ets_alloc() -> % amount allocated for ets tables
    erlang:memory(ets).


%% formatting functions, from the record-value to string
node_name_str(#node_info{node_name = ToReturn}) ->
    erlang:atom_to_list(ToReturn).
no_procs_str(#node_info{no_procs = ToReturn}) ->
    erlang:integer_to_list(ToReturn).
no_cpu_str(#node_info{no_cpu = ToReturn}) ->
    erlang:integer_to_list(ToReturn).
no_cpu_available_str(#node_info{no_cpu_available = ToReturn}) ->
    erlang:integer_to_list(ToReturn).
no_cpu_online_str(#node_info{no_cpu_online = ToReturn}) ->
    erlang:integer_to_list(ToReturn).
tot_alloc_str(#node_info{tot_alloc = ToReturn}) ->
    erlang:integer_to_list(ToReturn).

proc_used_str(#node_info{proc_used = ToReturn}) ->
    erlang:integer_to_list(ToReturn).

proc_alloc_str(#node_info{proc_alloc = ToReturn}) ->
    erlang:integer_to_list(ToReturn).

atom_used_str(#node_info{atom_used = ToReturn}) ->
    erlang:integer_to_list(ToReturn).

atom_alloc_str(#node_info{atom_alloc = ToReturn}) ->
    erlang:integer_to_list(ToReturn).

binary_alloc_str(#node_info{binary_alloc = ToReturn}) ->
    erlang:integer_to_list(ToReturn).

code_alloc_str(#node_info{code_alloc = ToReturn}) ->
    erlang:integer_to_list(ToReturn).

ets_alloc_str(#node_info{ets_alloc = ToReturn}) ->
    erlang:integer_to_list(ToReturn).