/
system_info.erl
98 lines (71 loc) · 2.12 KB
/
system_info.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
-module(system_info).
-export([node_load/0, cluster_load/0]).
-export([node_processes/0, cluster_processes/0]).
-export([node_memory/0, cluster_memory/0]).
-define(TIMEOUT, 3000).
%%
%% Public API
%%
node_load() ->
start_system_services(),
get_node_load().
cluster_load() ->
start_system_services(),
get_cluster_load().
node_processes() ->
start_system_services(),
get_node_processes().
cluster_processes() ->
start_system_services(),
get_cluster_processes().
node_memory() ->
start_system_services(),
get_node_memory().
cluster_memory() ->
start_system_services(),
get_cluster_memory().
%%
%% Private API
%%
start_system_services() ->
start_cpu_sup(),
start_mem_sup(),
ok.
start_cpu_sup() ->
case whereis(cpu_sup) of
undefined -> cpu_sup:start();
_ -> already_started
end,
started.
start_mem_sup() ->
case whereis(memsup) of
undefined -> memsup:start_link();
_ -> already_started
end,
started.
cluster_nodes() ->
[node() | nodes()].
cluster_call_function(Module, Function, Parameters) ->
{Results, _} = rpc:multicall(cluster_nodes(), Module, Function, Parameters, ?TIMEOUT),
Results.
get_node_load() ->
{{node, node()}, {load, cpu_sup:avg1()}}.
get_cluster_load() ->
_ClusterLoad = cluster_call_function(system_info, node_load, []).
get_node_processes() ->
{{node, node()}, {processes, cpu_sup:nprocs()}}.
get_cluster_processes() ->
_ClusterProcesses = cluster_call_function(system_info, node_processes, []).
get_node_memory() ->
[{total_memory, NodeTotalMemory},
{free_memory, NodeFreeMemory},
{system_total_memory, OSTotalMemory}] = memsup:get_system_memory_data(),
{_, NodeAllocatedMemory, NodeLargestProcess} = memsup:get_memory_data(),
{{node, node()},
{memory, {{os_total_memory, OSTotalMemory},
{node_total_memory, NodeTotalMemory},
{node_allocated_memory, NodeAllocatedMemory},
{node_free_memory, NodeFreeMemory},
{node_largest_process, NodeLargestProcess}}}}.
get_cluster_memory() ->
_ClusterMemory = cluster_call_function(system_info, node_memory, []).