fix(prom_stats): compatibility with previous api format in json mode

This commit is contained in:
JimMoen 2024-01-26 15:53:52 +08:00
parent cb8c84098e
commit 2e37f7514a
No known key found for this signature in database
1 changed files with 24 additions and 21 deletions

View File

@ -991,12 +991,13 @@ catch_all(DataFun) ->
collect_stats_json_data(StatsData, StatsClData) -> collect_stats_json_data(StatsData, StatsClData) ->
StatsDatas = collect_json_data_(StatsData), StatsDatas = collect_json_data_(StatsData),
CLData = hd(collect_json_data_(StatsClData)), CLData = hd(collect_json_data_(StatsClData)),
lists:map( Res = lists:map(
fun(NodeData) -> fun(NodeData) ->
maps:merge(NodeData, CLData) maps:merge(NodeData, CLData)
end, end,
StatsDatas StatsDatas
). ),
json_obj_or_array(Res).
%% always return json array %% always return json array
collect_cert_json_data(Data) -> collect_cert_json_data(Data) ->
@ -1004,32 +1005,34 @@ collect_cert_json_data(Data) ->
collect_vm_json_data(Data) -> collect_vm_json_data(Data) ->
DataListPerNode = collect_json_data_(Data), DataListPerNode = collect_json_data_(Data),
case {?GET_PROM_DATA_MODE(), DataListPerNode} of case ?GET_PROM_DATA_MODE() of
{?PROM_DATA_MODE__NODE, [NData | _]} -> ?PROM_DATA_MODE__NODE ->
NData; hd(DataListPerNode);
{_, _} -> _ ->
DataListPerNode DataListPerNode
end. end.
collect_json_data(Data0) -> collect_json_data(Data0) ->
DataListPerNode = collect_json_data_(Data0), DataListPerNode = collect_json_data_(Data0),
case {?GET_PROM_DATA_MODE(), DataListPerNode} of json_obj_or_array(DataListPerNode).
%% all nodes results unaggregated, should be a list
{?PROM_DATA_MODE__ALL_NODES_UNAGGREGATED, _} -> %% compatibility with previous api format in json mode
DataListPerNode; json_obj_or_array(DataL) ->
%% only local node result [#{...}] case ?GET_PROM_DATA_MODE() of
%% To guaranteed compatibility, return a json object, not array ?PROM_DATA_MODE__NODE ->
{?PROM_DATA_MODE__NODE, [NData | _]} -> data_list_to_json_obj(DataL);
NData; ?PROM_DATA_MODE__ALL_NODES_UNAGGREGATED ->
%% All nodes results aggregated DataL;
%% return a json object, not array ?PROM_DATA_MODE__ALL_NODES_AGGREGATED ->
{?PROM_DATA_MODE__ALL_NODES_AGGREGATED, [NData | _]} -> data_list_to_json_obj(DataL)
NData;
%% olp maybe not enabled, with empty list to empty object
{_, []} ->
#{}
end. end.
data_list_to_json_obj([]) ->
%% olp maybe not enabled, with empty list to empty object
#{};
data_list_to_json_obj(DataL) ->
hd(DataL).
collect_json_data_(Data) -> collect_json_data_(Data) ->
emqx_prometheus_cluster:collect_json_data(Data, fun zip_json_prom_stats_metrics/3). emqx_prometheus_cluster:collect_json_data(Data, fun zip_json_prom_stats_metrics/3).