refactor(bridge): rename the APIs for emqx_bridge

This commit is contained in:
Shawn 2021-10-26 14:34:23 +08:00
parent 1e6884ee7d
commit 7996d8f709
4 changed files with 51 additions and 45 deletions

View File

@ -20,26 +20,13 @@
-export([post_config_update/4]).
-export([reload_hook/0, unload_hook/0]).
-export([ load_hook/0
, reload_hook/0
, unload_hook/0
]).
-export([on_message_publish/1]).
-export([ load_bridges/0
, get_bridge/2
, get_bridge/3
, list_bridges/0
, create_bridge/3
, remove_bridge/3
, update_bridge/3
, start_bridge/2
, stop_bridge/2
, restart_bridge/2
, send_message/2
]).
-export([ config_key_path/0
]).
-export([ resource_type/1
, bridge_type/1
, resource_id/1
@ -47,9 +34,30 @@
, parse_bridge_id/1
]).
-export([ load/0
, lookup/2
, lookup/3
, list/0
, create/3
, remove/3
, update/3
, start/2
, stop/2
, restart/2
]).
-export([ send_message/2
]).
-export([ config_key_path/0
]).
reload_hook() ->
unload_hook(),
Bridges = emqx_conf:get([bridges], #{}),
load_hook().
load_hook() ->
Bridges = emqx:get_config([bridges], #{}),
lists:foreach(fun({_Type, Bridge}) ->
lists:foreach(fun({_Name, BridgeConf}) ->
load_hook(BridgeConf)
@ -82,9 +90,7 @@ config_key_path() ->
[bridges].
resource_type(mqtt) -> emqx_connector_mqtt;
resource_type(<<"mqtt">>) -> emqx_connector_mqtt;
resource_type(http) -> emqx_connector_http;
resource_type(<<"http">>) -> emqx_connector_http.
resource_type(http) -> emqx_connector_http.
bridge_type(emqx_connector_mqtt) -> mqtt;
bridge_type(emqx_connector_http) -> http.
@ -93,9 +99,9 @@ post_config_update(_Req, NewConf, OldConf, _AppEnv) ->
#{added := Added, removed := Removed, changed := Updated}
= diff_confs(NewConf, OldConf),
perform_bridge_changes([
{fun remove_bridge/3, Removed},
{fun create_bridge/3, Added},
{fun update_bridge/3, Updated}
{fun remove/3, Removed},
{fun create/3, Added},
{fun update/3, Updated}
]),
reload_hook().
@ -116,8 +122,8 @@ perform_bridge_changes([{Action, MapConfs} | Tasks], Result0) ->
end, Result0, MapConfs),
perform_bridge_changes(Tasks, Result).
load_bridges() ->
Bridges = emqx_conf:get([bridges], #{}),
load() ->
Bridges = emqx:get_config([bridges], #{}),
emqx_bridge_monitor:ensure_all_started(Bridges).
resource_id(BridgeId) when is_binary(BridgeId) ->
@ -138,36 +144,36 @@ parse_bridge_id(BridgeId) ->
_ -> error({invalid_bridge_id, BridgeId})
end.
list_bridges() ->
list() ->
lists:foldl(fun({Type, NameAndConf}, Bridges) ->
lists:foldl(fun({Name, RawConf}, Acc) ->
case get_bridge(Type, Name, RawConf) of
case lookup(Type, Name, RawConf) of
{error, not_found} -> Acc;
{ok, Res} -> [Res | Acc]
end
end, Bridges, maps:to_list(NameAndConf))
end, [], maps:to_list(emqx:get_raw_config([bridges], #{}))).
get_bridge(Type, Name) ->
lookup(Type, Name) ->
RawConf = emqx:get_raw_config([bridges, Type, Name], #{}),
get_bridge(Type, Name, RawConf).
get_bridge(Type, Name, RawConf) ->
lookup(Type, Name, RawConf).
lookup(Type, Name, RawConf) ->
case emqx_resource:get_instance(resource_id(Type, Name)) of
{error, not_found} -> {error, not_found};
{ok, Data} -> {ok, #{id => bridge_id(Type, Name), resource_data => Data,
raw_config => RawConf}}
end.
start_bridge(Type, Name) ->
restart_bridge(Type, Name).
start(Type, Name) ->
restart(Type, Name).
stop_bridge(Type, Name) ->
stop(Type, Name) ->
emqx_resource:stop(resource_id(Type, Name)).
restart_bridge(Type, Name) ->
restart(Type, Name) ->
emqx_resource:restart(resource_id(Type, Name)).
create_bridge(Type, Name, Conf) ->
create(Type, Name, Conf) ->
?SLOG(info, #{msg => "create bridge", type => Type, name => Name,
config => Conf}),
ResId = resource_id(Type, Name),
@ -181,7 +187,7 @@ create_bridge(Type, Name, Conf) ->
{error, Reason}
end.
update_bridge(Type, Name, {_OldConf, Conf}) ->
update(Type, Name, {_OldConf, Conf}) ->
%% TODO: sometimes its not necessary to restart the bridge connection.
%%
%% - if the connection related configs like `servers` is updated, we should restart/start
@ -195,7 +201,7 @@ update_bridge(Type, Name, {_OldConf, Conf}) ->
emqx_resource:recreate(resource_id(Type, Name),
emqx_bridge:resource_type(Type), Conf, []).
remove_bridge(Type, Name, _Conf) ->
remove(Type, Name, _Conf) ->
?SLOG(info, #{msg => "remove bridge", type => Type, name => Name}),
case emqx_resource:remove(resource_id(Type, Name)) of
ok -> ok;

View File

@ -157,7 +157,7 @@ list_bridges(get, _Params) ->
{200, lists:append([list_local_bridges(Node) || Node <- mria_mnesia:running_nodes()])}.
list_local_bridges(Node) when Node =:= node() ->
[format_resp(Data) || Data <- emqx_bridge:list_bridges()];
[format_resp(Data) || Data <- emqx_bridge:list()];
list_local_bridges(Node) ->
rpc_call(Node, list_local_bridges, [Node]).
@ -177,7 +177,7 @@ crud_bridges(Node, Method, Params) when Node =/= node() ->
rpc_call(Node, crud_bridges, [Node, Method, Params]);
crud_bridges(_, get, #{bindings := #{id := Id}}) ->
?TRY_PARSE_ID(Id, case emqx_bridge:get_bridge(BridgeType, BridgeName) of
?TRY_PARSE_ID(Id, case emqx_bridge:lookup(BridgeType, BridgeName) of
{ok, Data} -> {200, format_resp(Data)};
{error, not_found} ->
{404, #{code => 102, message => <<"not_found: ", Id/binary>>}}
@ -190,7 +190,7 @@ crud_bridges(_, put, #{bindings := #{id := Id}, body := Conf}) ->
{ok, #{raw_config := RawConf, post_config_update := #{emqx_bridge := Data}}} ->
{200, format_resp(#{id => Id, raw_config => RawConf, resource_data => Data})};
{ok, _} -> %% the bridge already exits
{ok, Data} = emqx_bridge:get_bridge(BridgeType, BridgeName),
{ok, Data} = emqx_bridge:lookup(BridgeType, BridgeName),
{200, format_resp(Data)};
{error, Reason} ->
{500, #{code => 102, message => emqx_resource_api:stringnify(Reason)}}

View File

@ -21,9 +21,9 @@
start(_StartType, _StartArgs) ->
{ok, Sup} = emqx_bridge_sup:start_link(),
ok = emqx_bridge:load_bridges(),
ok = emqx_bridge:reload_hook(),
emqx_conf:add_handler(emqx_bridge:config_key_path(), emqx_bridge),
ok = emqx_bridge:load(),
ok = emqx_bridge:load_hook(),
emqx_config_handler:add_handler(emqx_bridge:config_key_path(), emqx_bridge),
{ok, Sup}.
stop(_State) ->

View File

@ -67,6 +67,6 @@ code_change(_OldVsn, State, _Extra) ->
load_bridges(Configs) ->
lists:foreach(fun({Type, NamedConf}) ->
lists:foreach(fun({Name, Conf}) ->
emqx_bridge:create_bridge(Type, Name, Conf)
emqx_bridge:create(Type, Name, Conf)
end, maps:to_list(NamedConf))
end, maps:to_list(Configs)).