1 |
|
-module(mongoose_graphql_metric_admin_query). |
2 |
|
-behaviour(mongoose_graphql). |
3 |
|
|
4 |
|
-export([execute/4]). |
5 |
|
|
6 |
|
-ignore_xref([execute/4]). |
7 |
|
|
8 |
|
-include("mongoose_logger.hrl"). |
9 |
|
|
10 |
|
execute(_Ctx, _Obj, <<"getMetrics">>, Args) -> |
11 |
6 |
Name = get_name(Args), |
12 |
6 |
mongoose_metrics_api:get_metrics(Name); |
13 |
|
execute(_Ctx, _Obj, <<"getMetricsAsDicts">>, Args) -> |
14 |
3 |
Name = get_name(Args), |
15 |
3 |
Keys = get_keys2(Args), |
16 |
3 |
mongoose_metrics_api:get_metrics_as_dicts(Name, Keys); |
17 |
|
execute(_Ctx, _Obj, <<"getClusterMetricsAsDicts">>, Args) -> |
18 |
3 |
Name = get_name(Args), |
19 |
3 |
Keys = get_keys2(Args), |
20 |
3 |
Nodes = get_nodes(Args), |
21 |
3 |
mongoose_metrics_api:get_cluster_metrics_as_dicts(Name, Keys, Nodes). |
22 |
|
|
23 |
|
%% get_keys is a BIF, so we have a name conflict |
24 |
|
get_keys2(Args) -> |
25 |
6 |
Keys = get_list(<<"keys">>, Args), |
26 |
6 |
lists:map(fun prepare_key/1, Keys). |
27 |
|
|
28 |
|
prepare_key(X) when is_binary(X) -> |
29 |
1 |
binary_to_atom(X); |
30 |
|
prepare_key(X) when is_integer(X) -> %% For percentiles |
31 |
:-( |
X. |
32 |
|
|
33 |
|
get_name(Args) -> |
34 |
12 |
Segments = get_list(<<"name">>, Args), |
35 |
12 |
lists:map(fun binary_to_atom/1, Segments). |
36 |
|
|
37 |
|
get_nodes(Args) -> |
38 |
3 |
Nodes = get_list(<<"nodes">>, Args), |
39 |
3 |
lists:map(fun binary_to_atom/1, Nodes). |
40 |
|
|
41 |
|
get_list(Key, Map) -> |
42 |
21 |
null_as_empty(maps:get(Key, Map, [])). |
43 |
|
|
44 |
13 |
null_as_empty(null) -> []; |
45 |
8 |
null_as_empty(X) -> X. |