From 8462fa8e89e9704b1b2476b7c64ec45656fedba6 Mon Sep 17 00:00:00 2001 From: turtled Date: Sat, 18 Nov 2017 17:21:13 +0800 Subject: [PATCH] Display local route --- src/emqttd_mgmt.erl | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/emqttd_mgmt.erl b/src/emqttd_mgmt.erl index 6d9ce7ecd..6fffd71ff 100644 --- a/src/emqttd_mgmt.erl +++ b/src/emqttd_mgmt.erl @@ -467,16 +467,32 @@ subscription_list(Key, PageNo, PageSize) -> lookup_table(Fun, PageNo, PageSize). route_list(Topic, PageNo, PageSize) when ?EMPTY_KEY(Topic) -> - TotalNum = lists:sum([ets:info(Tab, size) || Tab <- tables()]), - Qh = qlc:append([qlc:q([E || E <- ets:table(Tab)]) || Tab <- tables()]), - query_table(Qh, PageNo, PageSize, TotalNum); + Tables = [mqtt_route], + TotalNum = lists:sum([ets:info(Tab, size) || Tab <- [mqtt_route, mqtt_local_route]]), + Qh = qlc:append([qlc:q([E || E <- ets:table(Tab)]) || Tab <- Tables]), + Data = query_table(Qh, PageNo, PageSize, TotalNum), + Route = get_value(result, Data), + LocalRoute = local_route_list(Topic, PageNo, PageSize), + lists:keyreplace(result, 1, Data, {result, lists:append(Route, LocalRoute)}); route_list(Topic, PageNo, PageSize) -> - Fun = fun() -> lists:append([ets:lookup(Tab, Topic) || Tab <- tables()]) end, - lookup_table(Fun, PageNo, PageSize). + Tables = [mqtt_route], + Fun = fun() -> lists:append([ets:lookup(Tab, Topic) || Tab <- Tables]) end, + Route = lookup_table(Fun, PageNo, PageSize), + LocalRoute = local_route_list(Topic, PageNo, PageSize), + lists:append(Route, LocalRoute). + +local_route_list(Topic, PageNo, PageSize) when ?EMPTY_KEY(Topic) -> + TotalNum = lists:sum([ets:info(Tab, size) || Tab <- [mqtt_local_route]]), + Qh = qlc:append([qlc:q([E || E <- ets:table(Tab)]) || Tab <- [mqtt_local_route]]), + Data = query_table(Qh, PageNo, PageSize, TotalNum), + lists:map(fun({Topic1, Node}) -> {<<"$local/", Topic1/binary>>, Node} end, get_value(result, Data)); + +local_route_list(Topic, PageNo, PageSize) -> + Fun = fun() -> lists:append([ets:lookup(Tab, Topic) || Tab <- [mqtt_local_route]]) end, + Data = lookup_table(Fun, PageNo, PageSize), + lists:map(fun({Topic1, Node}) -> {<<"$local/", Topic1/binary>>, Node} end, Data). -tables() -> - [mqtt_route, mqtt_local_route]. format_error(Val, Msg) -> re:replace(Msg, <<"\\$\\{[^}]+\\}">>, Val, [global, {return, binary}]).