mirror of
https://github.com/valitydev/cg_mon.git
synced 2024-11-06 00:45:20 +00:00
update to cgroups2; remove discovering (#1)
This commit is contained in:
parent
d8c3f460d3
commit
5a87a37694
@ -48,7 +48,7 @@ metrics_table() ->
|
||||
|
||||
start(_StartType, _StartArgs) ->
|
||||
SupervisorArgs = [
|
||||
cgroup_root(), cgroup_discovery_file(), handler_modules()
|
||||
cgroup_root(), handler_modules()
|
||||
],
|
||||
ets:new( metrics_table(), [public, named_table] ),
|
||||
SupervisorStartRes = supervisor:start_link({local, cg_mon_sup}, cg_mon_app, SupervisorArgs),
|
||||
@ -64,32 +64,14 @@ stop(_State) ->
|
||||
ok.
|
||||
|
||||
|
||||
init([CgroupRoot, CgroupDiscovery, AvailableHandlers]) ->
|
||||
init([CgroupRoot, AvailableHandlers]) ->
|
||||
SupFlags = {one_for_one, 5, 3600},
|
||||
case cg_mon_lib:discover_cgroups( CgroupRoot, CgroupDiscovery ) of
|
||||
{ok, CgroupsMap} ->
|
||||
HandlersMap = orddict:from_list([
|
||||
{HandlerModule:provided_resource(), HandlerModule}
|
||||
|| HandlerModule <- AvailableHandlers
|
||||
]),
|
||||
Children =
|
||||
lists:foldl(
|
||||
fun({Resource, Path}, Acc) ->
|
||||
case orddict:find(Resource, HandlersMap) of
|
||||
{ok, HandlerModule} ->
|
||||
[ child_spec(HandlerModule, Path) | Acc ];
|
||||
_ ->
|
||||
Acc
|
||||
end
|
||||
end, [], CgroupsMap
|
||||
),
|
||||
{ok, {SupFlags, Children}};
|
||||
{error, _Reason} ->
|
||||
ignore
|
||||
end.
|
||||
|
||||
|
||||
|
||||
Children =
|
||||
[
|
||||
child_spec(HandlerModule, filename:join(CgroupRoot, atom_to_list(HandlerModule:provided_resource())))
|
||||
|| HandlerModule <- AvailableHandlers
|
||||
],
|
||||
{ok, {SupFlags, Children}}.
|
||||
|
||||
|
||||
%%%===================================================================
|
||||
@ -121,14 +103,6 @@ cgroup_root() ->
|
||||
cg_mon_lib:cgroup_root()
|
||||
end.
|
||||
|
||||
cgroup_discovery_file() ->
|
||||
case application:get_env(cg_mon, cgroup_discovery_file) of
|
||||
{ok, Value} when is_list(Value) ->
|
||||
Value;
|
||||
_ ->
|
||||
cg_mon_lib:discovery_file()
|
||||
end.
|
||||
|
||||
handler_modules() ->
|
||||
[cg_mem_sup, cg_cpu_sup].
|
||||
|
||||
|
@ -10,11 +10,7 @@
|
||||
|
||||
%% API
|
||||
-export([
|
||||
discovery_file/0,
|
||||
cgroup_root/0,
|
||||
discover_cgroups/0,
|
||||
discover_cgroups/1,
|
||||
discover_cgroups/2,
|
||||
read_cgroups_metrics/5
|
||||
]).
|
||||
|
||||
@ -27,57 +23,10 @@
|
||||
-type metric_source() :: StatFile :: string() | { Key :: atom(), ValueFile :: string()}.
|
||||
|
||||
|
||||
-spec discovery_file() -> string().
|
||||
discovery_file() ->
|
||||
"/proc/self/cgroup".
|
||||
|
||||
-spec cgroup_root() -> string().
|
||||
cgroup_root() ->
|
||||
"/sys/fs/cgroup".
|
||||
|
||||
-spec discover_cgroups() ->
|
||||
{ok, cgroup_map()}
|
||||
| {error, Reason :: atom()}.
|
||||
discover_cgroups() ->
|
||||
discover_cgroups(cgroup_root(), discovery_file()).
|
||||
|
||||
-spec discover_cgroups(Root :: string()) ->
|
||||
{ok, cgroup_map()}
|
||||
| {error, Reason :: atom()}.
|
||||
discover_cgroups(Root) ->
|
||||
discover_cgroups(Root, discovery_file()).
|
||||
|
||||
-spec discover_cgroups(Root :: string(), FileName :: string()) ->
|
||||
{ok, cgroup_map()}
|
||||
| {error, Reason :: atom()}.
|
||||
discover_cgroups(Root, FileName) ->
|
||||
with_file(
|
||||
fun(DiscoveryFile) ->
|
||||
parse_discovery_file(DiscoveryFile, Root)
|
||||
end,
|
||||
FileName
|
||||
).
|
||||
|
||||
|
||||
-spec parse_discovery_file(File :: file:io_device(), CgroupRoot :: string()) ->
|
||||
{ok, cgroup_map()}
|
||||
| {error, Reason :: atom()}.
|
||||
parse_discovery_file(File, CgroupRoot) ->
|
||||
foldl_lines(
|
||||
fun(Line, Acc) ->
|
||||
[_, Resources, GroupName] = string:tokens(Line, ":"),
|
||||
ResourcesList = string:tokens(Resources, ","),
|
||||
RelativeName = fixup_group_name(GroupName),
|
||||
FullName = filename:join([CgroupRoot, Resources]) ++ RelativeName,
|
||||
lists:foldl(
|
||||
fun(ResourceName, TmpAcc) ->
|
||||
[ {list_to_atom(ResourceName), FullName} | TmpAcc]
|
||||
end, Acc, ResourcesList
|
||||
)
|
||||
end, [], File
|
||||
).
|
||||
|
||||
|
||||
-spec with_file(fun( (File :: file:io_device()) -> any() ), Filename :: string()) ->
|
||||
any().
|
||||
with_file(Fun, FileName) ->
|
||||
@ -188,24 +137,6 @@ strip_line_ending(Line) ->
|
||||
|
||||
-include_lib("cgmon/include/test_utils.hrl").
|
||||
|
||||
discovery_error_test() ->
|
||||
Res = discover_cgroups(cgroup_root(), ?TEST_FILE("non-existent-file")),
|
||||
?assertEqual(Res, {error, enoent}).
|
||||
|
||||
discovery_denied_test() ->
|
||||
Res = discover_cgroups(cgroup_root(), "/root/some-not-permitted-file"),
|
||||
?assertEqual(Res, {error, eacces}).
|
||||
|
||||
discovery_test_() ->
|
||||
{ok, Res} = discover_cgroups(cgroup_root(), ?TEST_FILE("cgroup.discovery")),
|
||||
[
|
||||
?_assertEqual(4, length(Res)),
|
||||
?_assertEqual("/sys/fs/cgroup/memory/foo/", proplists:get_value(memory, Res)),
|
||||
?_assertEqual("/sys/fs/cgroup/cpu,cpuacct/bar/", proplists:get_value(cpu, Res)),
|
||||
?_assertEqual("/sys/fs/cgroup/cpu,cpuacct/bar/", proplists:get_value(cpuacct, Res)),
|
||||
?_assertEqual("/sys/fs/cgroup/cpuset/", proplists:get_value(cpuset, Res))
|
||||
].
|
||||
|
||||
|
||||
read_stat_file_error_test_() ->
|
||||
[
|
||||
@ -226,9 +157,6 @@ read_stat_file_test_() ->
|
||||
?_assertEqual(1, proplists:get_value("cache", Result))
|
||||
].
|
||||
|
||||
|
||||
|
||||
|
||||
read_cgroups_metrics_test_() ->
|
||||
KeyValueSources = [
|
||||
"memory.stat",
|
||||
|
Loading…
Reference in New Issue
Block a user