Merge pull request #5463 from DDDHuang/fix_moniyor
fix: depart monitor api path & add parameter
This commit is contained in:
commit
870b68c104
|
@ -10,7 +10,12 @@
|
||||||
|
|
||||||
-export([api_spec/0]).
|
-export([api_spec/0]).
|
||||||
|
|
||||||
-export([counters/2, current_counters/2]).
|
-export([ monitor/2
|
||||||
|
, counters/2
|
||||||
|
, monitor_nodes/2
|
||||||
|
, monitor_nodes_counters/2
|
||||||
|
, current_counters/2
|
||||||
|
]).
|
||||||
|
|
||||||
-define(COUNTERS, [ connection
|
-define(COUNTERS, [ connection
|
||||||
, route
|
, route
|
||||||
|
@ -20,7 +25,14 @@
|
||||||
, dropped]).
|
, dropped]).
|
||||||
|
|
||||||
api_spec() ->
|
api_spec() ->
|
||||||
{[monitor_api(), monitor_current_api()], [counters_schema()]}.
|
{
|
||||||
|
[ monitor_api()
|
||||||
|
, monitor_nodes_api()
|
||||||
|
, monitor_nodes_counters_api()
|
||||||
|
, monitor_counters_api()
|
||||||
|
, monitor_current_api()],
|
||||||
|
[]
|
||||||
|
}.
|
||||||
|
|
||||||
monitor_api() ->
|
monitor_api() ->
|
||||||
Metadata = #{
|
Metadata = #{
|
||||||
|
@ -28,21 +40,48 @@ monitor_api() ->
|
||||||
description => <<"List monitor data">>,
|
description => <<"List monitor data">>,
|
||||||
parameters => [
|
parameters => [
|
||||||
#{
|
#{
|
||||||
name => node,
|
name => aggregate,
|
||||||
in => query,
|
in => query,
|
||||||
required => false,
|
required => false,
|
||||||
schema => #{type => string}
|
schema => #{type => boolean}
|
||||||
},
|
|
||||||
#{
|
|
||||||
name => counter,
|
|
||||||
in => query,
|
|
||||||
required => false,
|
|
||||||
schema => #{type => string, enum => ?COUNTERS}
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
responses => #{
|
responses => #{
|
||||||
<<"200">> => emqx_mgmt_util:response_schema(<<"Monitor count data">>, counters)}}},
|
<<"200">> => emqx_mgmt_util:response_schema(<<"Monitor count data">>, counters_schema())}}},
|
||||||
{"/monitor", Metadata, counters}.
|
{"/monitor", Metadata, monitor}.
|
||||||
|
|
||||||
|
monitor_nodes_api() ->
|
||||||
|
Metadata = #{
|
||||||
|
get => #{
|
||||||
|
description => <<"List monitor data">>,
|
||||||
|
parameters => [path_param_node()],
|
||||||
|
responses => #{
|
||||||
|
<<"200">> => emqx_mgmt_util:response_schema(<<"Monitor count data in node">>, counters_schema())}}},
|
||||||
|
{"/monitor/nodes/:node", Metadata, monitor_nodes}.
|
||||||
|
|
||||||
|
monitor_nodes_counters_api() ->
|
||||||
|
Metadata = #{
|
||||||
|
get => #{
|
||||||
|
description => <<"List monitor data">>,
|
||||||
|
parameters => [
|
||||||
|
path_param_node(),
|
||||||
|
path_param_counter()
|
||||||
|
],
|
||||||
|
responses => #{
|
||||||
|
<<"200">> => emqx_mgmt_util:response_schema(<<"Monitor single count data in node">>, counter_schema())}}},
|
||||||
|
{"/monitor/nodes/:node/counters/:counter", Metadata, monitor_nodes_counters}.
|
||||||
|
|
||||||
|
monitor_counters_api() ->
|
||||||
|
Metadata = #{
|
||||||
|
get => #{
|
||||||
|
description => <<"List monitor data">>,
|
||||||
|
parameters => [
|
||||||
|
path_param_counter()
|
||||||
|
],
|
||||||
|
responses => #{
|
||||||
|
<<"200">> =>
|
||||||
|
emqx_mgmt_util:response_schema(<<"Monitor single count data">>, counter_schema())}}},
|
||||||
|
{"/monitor/counters/:counter", Metadata, counters}.
|
||||||
monitor_current_api() ->
|
monitor_current_api() ->
|
||||||
Metadata = #{
|
Metadata = #{
|
||||||
get => #{
|
get => #{
|
||||||
|
@ -52,6 +91,24 @@ monitor_current_api() ->
|
||||||
current_counters_schema())}}},
|
current_counters_schema())}}},
|
||||||
{"/monitor/current", Metadata, current_counters}.
|
{"/monitor/current", Metadata, current_counters}.
|
||||||
|
|
||||||
|
path_param_node() ->
|
||||||
|
#{
|
||||||
|
name => node,
|
||||||
|
in => path,
|
||||||
|
required => true,
|
||||||
|
schema => #{type => string},
|
||||||
|
example => node()
|
||||||
|
}.
|
||||||
|
|
||||||
|
path_param_counter() ->
|
||||||
|
#{
|
||||||
|
name => counter,
|
||||||
|
in => path,
|
||||||
|
required => true,
|
||||||
|
schema => #{type => string, enum => ?COUNTERS},
|
||||||
|
example => hd(?COUNTERS)
|
||||||
|
}.
|
||||||
|
|
||||||
current_counters_schema() ->
|
current_counters_schema() ->
|
||||||
#{
|
#{
|
||||||
type => object,
|
type => object,
|
||||||
|
@ -69,13 +126,14 @@ counters_schema() ->
|
||||||
end,
|
end,
|
||||||
Properties = lists:foldl(Fun, #{}, ?COUNTERS),
|
Properties = lists:foldl(Fun, #{}, ?COUNTERS),
|
||||||
#{
|
#{
|
||||||
counters => #{
|
|
||||||
type => object,
|
type => object,
|
||||||
properties => Properties}
|
properties => Properties
|
||||||
}.
|
}.
|
||||||
|
|
||||||
counters_schema(Name) ->
|
counters_schema(Name) ->
|
||||||
#{Name => #{
|
#{Name => counter_schema()}.
|
||||||
|
counter_schema() ->
|
||||||
|
#{
|
||||||
type => array,
|
type => array,
|
||||||
items => #{
|
items => #{
|
||||||
type => object,
|
type => object,
|
||||||
|
@ -83,16 +141,25 @@ counters_schema(Name) ->
|
||||||
timestamp => #{
|
timestamp => #{
|
||||||
type => integer},
|
type => integer},
|
||||||
count => #{
|
count => #{
|
||||||
type => integer}}}}}.
|
type => integer}}}}.
|
||||||
%%%==============================================================================================
|
%%%==============================================================================================
|
||||||
%% parameters trans
|
%% parameters trans
|
||||||
|
monitor(get, Request) ->
|
||||||
|
Aggregate = proplists:get_value(<<"aggregate">>, cowboy_req:parse_qs(Request), <<"false">>),
|
||||||
|
{200, list_collect(Aggregate)}.
|
||||||
|
|
||||||
|
monitor_nodes(get, Request) ->
|
||||||
|
Node = cowboy_req:binding(node, Request),
|
||||||
|
lookup([{<<"node">>, Node}]).
|
||||||
|
|
||||||
|
monitor_nodes_counters(get, Request) ->
|
||||||
|
Node = cowboy_req:binding(node, Request),
|
||||||
|
Counter = cowboy_req:binding(counter, Request),
|
||||||
|
lookup([{<<"node">>, Node}, {<<"counter">>, Counter}]).
|
||||||
|
|
||||||
counters(get, Request) ->
|
counters(get, Request) ->
|
||||||
case cowboy_req:parse_qs(Request) of
|
Counter = cowboy_req:binding(counter, Request),
|
||||||
[] ->
|
lookup([{<<"counter">>, Counter}]).
|
||||||
{200, get_collect()};
|
|
||||||
Params ->
|
|
||||||
lookup(Params)
|
|
||||||
end.
|
|
||||||
|
|
||||||
current_counters(get, _) ->
|
current_counters(get, _) ->
|
||||||
Data = [get_collect(Node) || Node <- ekka_mnesia:running_nodes()],
|
Data = [get_collect(Node) || Node <- ekka_mnesia:running_nodes()],
|
||||||
|
@ -107,6 +174,14 @@ current_counters(get, _) ->
|
||||||
},
|
},
|
||||||
{200, Response}.
|
{200, Response}.
|
||||||
|
|
||||||
|
format_current_metrics(Collects) ->
|
||||||
|
format_current_metrics(Collects, {0,0,0,0}).
|
||||||
|
format_current_metrics([], Acc) ->
|
||||||
|
Acc;
|
||||||
|
format_current_metrics([{Received, Sent, Sub, Conn} | Collects], {Received1, Sent1, Sub1, Conn1}) ->
|
||||||
|
format_current_metrics(Collects, {Received1 + Received, Sent1 + Sent, Sub1 + Sub, Conn1 + Conn}).
|
||||||
|
|
||||||
|
|
||||||
%%%==============================================================================================
|
%%%==============================================================================================
|
||||||
%% api apply
|
%% api apply
|
||||||
|
|
||||||
|
@ -122,19 +197,18 @@ lookup_(#{node := Node, counter := Counter}) ->
|
||||||
lookup_(#{node := Node}) ->
|
lookup_(#{node := Node}) ->
|
||||||
{200, sampling(Node)};
|
{200, sampling(Node)};
|
||||||
lookup_(#{counter := Counter}) ->
|
lookup_(#{counter := Counter}) ->
|
||||||
Data = [sampling(Node, Counter) || Node <- ekka_mnesia:running_nodes()],
|
CounterData = merger_counters([sampling(Node, Counter) || Node <- ekka_mnesia:running_nodes()]),
|
||||||
|
Data = hd(maps:values(CounterData)),
|
||||||
{200, Data}.
|
{200, Data}.
|
||||||
|
|
||||||
format_current_metrics(Collects) ->
|
list_collect(Aggregate) ->
|
||||||
format_current_metrics(Collects, {0,0,0,0}).
|
case Aggregate of
|
||||||
format_current_metrics([], Acc) ->
|
<<"true">> ->
|
||||||
Acc;
|
[maps:put(node, Node, sampling(Node)) || Node <- ekka_mnesia:running_nodes()];
|
||||||
format_current_metrics([{Received, Sent, Sub, Conn} | Collects], {Received1, Sent1, Sub1, Conn1}) ->
|
_ ->
|
||||||
format_current_metrics(Collects, {Received1 + Received, Sent1 + Sent, Sub1 + Sub, Conn1 + Conn}).
|
|
||||||
|
|
||||||
get_collect() ->
|
|
||||||
Counters = [sampling(Node) || Node <- ekka_mnesia:running_nodes()],
|
Counters = [sampling(Node) || Node <- ekka_mnesia:running_nodes()],
|
||||||
merger_counters(Counters).
|
merger_counters(Counters)
|
||||||
|
end.
|
||||||
|
|
||||||
get_collect(Node) when Node =:= node() ->
|
get_collect(Node) when Node =:= node() ->
|
||||||
emqx_dashboard_collection:get_collect();
|
emqx_dashboard_collection:get_collect();
|
||||||
|
|
Loading…
Reference in New Issue