fix(emqx_data_bridge): correct the format of HTTP responses
This commit is contained in:
parent
4914b003ac
commit
e9fe345ac8
|
@ -2,7 +2,10 @@
|
||||||
|
|
||||||
-export([ load_bridges/0
|
-export([ load_bridges/0
|
||||||
, resource_type/1
|
, resource_type/1
|
||||||
, resource_id/1
|
, name_to_resource_id/1
|
||||||
|
, resource_id_to_name/1
|
||||||
|
, list_bridges/0
|
||||||
|
, is_bridge/1
|
||||||
]).
|
]).
|
||||||
|
|
||||||
load_bridges() ->
|
load_bridges() ->
|
||||||
|
@ -12,5 +15,16 @@ load_bridges() ->
|
||||||
|
|
||||||
resource_type(<<"mysql">>) -> emqx_connector_mysql.
|
resource_type(<<"mysql">>) -> emqx_connector_mysql.
|
||||||
|
|
||||||
resource_id(BridgeName) ->
|
name_to_resource_id(BridgeName) ->
|
||||||
<<"bridge:", BridgeName/binary>>.
|
<<"bridge:", BridgeName/binary>>.
|
||||||
|
|
||||||
|
resource_id_to_name(<<"bridge:", BridgeName/binary>> = _ResourceId) ->
|
||||||
|
BridgeName.
|
||||||
|
|
||||||
|
list_bridges() ->
|
||||||
|
emqx_resource_api:list_instances(fun emqx_data_bridge:is_bridge/1).
|
||||||
|
|
||||||
|
is_bridge(#{id := <<"bridge:", _/binary>>}) ->
|
||||||
|
true;
|
||||||
|
is_bridge(_Data) ->
|
||||||
|
false.
|
||||||
|
|
|
@ -43,12 +43,13 @@
|
||||||
]).
|
]).
|
||||||
|
|
||||||
list_bridges(_Binding, _Params) ->
|
list_bridges(_Binding, _Params) ->
|
||||||
{200, #{code => 0, data => emqx_resource_api:list_instances(fun is_bridge/1)}}.
|
{200, #{code => 0, data => [format_api_reply(Data) ||
|
||||||
|
Data <- emqx_data_bridge:list_bridges()]}}.
|
||||||
|
|
||||||
get_bridge(#{name := Name}, _Params) ->
|
get_bridge(#{name := Name}, _Params) ->
|
||||||
case emqx_resource:get_instance(emqx_data_bridge:resource_id(Name)) of
|
case emqx_resource:get_instance(emqx_data_bridge:name_to_resource_id(Name)) of
|
||||||
{ok, Data} ->
|
{ok, Data} ->
|
||||||
{200, #{code => 0, data => emqx_resource_api:format_data(Data)}};
|
{200, #{code => 0, data => format_api_reply(emqx_resource_api:format_data(Data))}};
|
||||||
{error, not_found} ->
|
{error, not_found} ->
|
||||||
{404, #{code => 102, message => <<"not_found: ", Name/binary>>}}
|
{404, #{code => 102, message => <<"not_found: ", Name/binary>>}}
|
||||||
end.
|
end.
|
||||||
|
@ -57,10 +58,10 @@ create_bridge(#{name := Name}, Params) ->
|
||||||
Config = proplists:get_value(<<"config">>, Params),
|
Config = proplists:get_value(<<"config">>, Params),
|
||||||
BridgeType = proplists:get_value(<<"type">>, Params),
|
BridgeType = proplists:get_value(<<"type">>, Params),
|
||||||
case emqx_resource:check_and_create(
|
case emqx_resource:check_and_create(
|
||||||
emqx_data_bridge:resource_id(Name),
|
emqx_data_bridge:name_to_resource_id(Name),
|
||||||
emqx_data_bridge:resource_type(BridgeType), Config) of
|
emqx_data_bridge:resource_type(BridgeType), Config) of
|
||||||
{ok, Data} ->
|
{ok, Data} ->
|
||||||
{200, #{code => 0, data => emqx_resource_api:format_data(Data)}};
|
{200, #{code => 0, data => format_api_reply(emqx_resource_api:format_data(Data))}};
|
||||||
{error, already_created} ->
|
{error, already_created} ->
|
||||||
{400, #{code => 102, message => <<"bridge already created: ", Name/binary>>}};
|
{400, #{code => 102, message => <<"bridge already created: ", Name/binary>>}};
|
||||||
{error, Reason0} ->
|
{error, Reason0} ->
|
||||||
|
@ -73,10 +74,10 @@ update_bridge(#{name := Name}, Params) ->
|
||||||
Config = proplists:get_value(<<"config">>, Params),
|
Config = proplists:get_value(<<"config">>, Params),
|
||||||
BridgeType = proplists:get_value(<<"type">>, Params),
|
BridgeType = proplists:get_value(<<"type">>, Params),
|
||||||
case emqx_resource:check_and_update(
|
case emqx_resource:check_and_update(
|
||||||
emqx_data_bridge:resource_id(Name),
|
emqx_data_bridge:name_to_resource_id(Name),
|
||||||
emqx_data_bridge:resource_type(BridgeType), Config, []) of
|
emqx_data_bridge:resource_type(BridgeType), Config, []) of
|
||||||
{ok, Data} ->
|
{ok, Data} ->
|
||||||
{200, #{code => 0, data => emqx_resource_api:format_data(Data)}};
|
{200, #{code => 0, data => format_api_reply(emqx_resource_api:format_data(Data))}};
|
||||||
{error, not_found} ->
|
{error, not_found} ->
|
||||||
{400, #{code => 102, message => <<"bridge not_found: ", Name/binary>>}};
|
{400, #{code => 102, message => <<"bridge not_found: ", Name/binary>>}};
|
||||||
{error, Reason0} ->
|
{error, Reason0} ->
|
||||||
|
@ -86,13 +87,12 @@ update_bridge(#{name := Name}, Params) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
delete_bridge(#{name := Name}, _Params) ->
|
delete_bridge(#{name := Name}, _Params) ->
|
||||||
case emqx_resource:remove(emqx_data_bridge:resource_id(Name)) of
|
case emqx_resource:remove(emqx_data_bridge:name_to_resource_id(Name)) of
|
||||||
ok -> {200, #{code => 0, data => #{}}};
|
ok -> {200, #{code => 0, data => #{}}};
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
{500, #{code => 102, message => emqx_resource_api:stringnify(Reason)}}
|
{500, #{code => 102, message => emqx_resource_api:stringnify(Reason)}}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
is_bridge(#{id := <<"bridge:", _/binary>>}) ->
|
format_api_reply(#{resource_type := Type, id := Id, config := Conf, status := Status}) ->
|
||||||
true;
|
#{type => Type, name => emqx_data_bridge:resource_id_to_name(Id),
|
||||||
is_bridge(_Data) ->
|
config => Conf, status => Status}.
|
||||||
false.
|
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
-module(emqx_data_bridge_config_handler).
|
||||||
|
|
||||||
|
-behaviour(gen_server).
|
||||||
|
|
||||||
|
%% API functions
|
||||||
|
-export([ start_link/0
|
||||||
|
, notify_updated/0
|
||||||
|
]).
|
||||||
|
|
||||||
|
%% gen_server callbacks
|
||||||
|
-export([init/1,
|
||||||
|
handle_call/3,
|
||||||
|
handle_cast/2,
|
||||||
|
handle_info/2,
|
||||||
|
terminate/2,
|
||||||
|
code_change/3]).
|
||||||
|
|
||||||
|
-record(state, {}).
|
||||||
|
|
||||||
|
start_link() ->
|
||||||
|
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
|
||||||
|
|
||||||
|
notify_updated() ->
|
||||||
|
gen_server:cast(?MODULE, updated).
|
||||||
|
|
||||||
|
init([]) ->
|
||||||
|
{ok, #state{}}.
|
||||||
|
|
||||||
|
handle_call(_Request, _From, State) ->
|
||||||
|
Reply = ok,
|
||||||
|
{reply, Reply, State}.
|
||||||
|
|
||||||
|
handle_cast(updated, State) ->
|
||||||
|
Configs = [format_conf(Data) || Data <- emqx_data_bridge:list_bridges()],
|
||||||
|
emqx_config_handler ! {emqx_data_bridge, Configs},
|
||||||
|
{noreply, State};
|
||||||
|
|
||||||
|
handle_cast(_Msg, State) ->
|
||||||
|
{noreply, State}.
|
||||||
|
|
||||||
|
handle_info(_Info, State) ->
|
||||||
|
{noreply, State}.
|
||||||
|
|
||||||
|
terminate(_Reason, _State) ->
|
||||||
|
ok.
|
||||||
|
|
||||||
|
code_change(_OldVsn, State, _Extra) ->
|
||||||
|
{ok, State}.
|
||||||
|
|
||||||
|
%%============================================================================
|
||||||
|
|
||||||
|
format_conf(#{resource_type := Type, id := Id, config := Conf}) ->
|
||||||
|
#{type => Type, name => emqx_data_bridge:resource_id_to_name(Id),
|
||||||
|
config => Conf}.
|
|
@ -55,7 +55,7 @@ load_bridges(Configs) ->
|
||||||
load_bridge(#{<<"name">> := Name, <<"type">> := Type,
|
load_bridge(#{<<"name">> := Name, <<"type">> := Type,
|
||||||
<<"config">> := Config}) ->
|
<<"config">> := Config}) ->
|
||||||
case emqx_resource:check_and_create_local(
|
case emqx_resource:check_and_create_local(
|
||||||
emqx_data_bridge:resource_id(Name),
|
emqx_data_bridge:name_to_resource_id(Name),
|
||||||
emqx_data_bridge:resource_type(Type), Config) of
|
emqx_data_bridge:resource_type(Type), Config) of
|
||||||
{ok, _} -> ok;
|
{ok, _} -> ok;
|
||||||
{error, already_created} -> ok;
|
{error, already_created} -> ok;
|
||||||
|
|
Loading…
Reference in New Issue