113 lines
2.9 KiB
Erlang
113 lines
2.9 KiB
Erlang
%%--------------------------------------------------------------------
|
|
%% Copyright (c) 2022-2024 EMQ Technologies Co., Ltd. All Rights Reserved.
|
|
%%--------------------------------------------------------------------
|
|
|
|
-module(emqx_bridge_s3).
|
|
|
|
-behaviour(emqx_connector_examples).
|
|
|
|
-include_lib("typerefl/include/types.hrl").
|
|
-include_lib("hocon/include/hoconsc.hrl").
|
|
-include("emqx_bridge_s3.hrl").
|
|
|
|
-behaviour(hocon_schema).
|
|
-export([
|
|
namespace/0,
|
|
roots/0,
|
|
fields/1,
|
|
desc/1
|
|
]).
|
|
|
|
-export([
|
|
connector_examples/1
|
|
]).
|
|
|
|
%%-------------------------------------------------------------------------------------------------
|
|
%% `hocon_schema' API
|
|
%%-------------------------------------------------------------------------------------------------
|
|
|
|
namespace() ->
|
|
"bridge_s3".
|
|
|
|
roots() ->
|
|
[].
|
|
|
|
fields(Field) when
|
|
Field == "get_connector";
|
|
Field == "put_connector";
|
|
Field == "post_connector"
|
|
->
|
|
emqx_connector_schema:api_fields(Field, ?CONNECTOR, fields(s3_connector_config));
|
|
fields("config_connector") ->
|
|
emqx_connector_schema:common_fields() ++ fields(s3_connector_config);
|
|
fields(s3_connector_config) ->
|
|
emqx_s3_schema:fields(s3_client) ++
|
|
emqx_connector_schema:resource_opts_ref(?MODULE, s3_connector_resource_opts);
|
|
fields(s3_connector_resource_opts) ->
|
|
CommonOpts = emqx_connector_schema:common_resource_opts_subfields(),
|
|
lists:filter(
|
|
fun({N, _}) -> lists:member(N, CommonOpts) end,
|
|
emqx_connector_schema:resource_opts_fields()
|
|
).
|
|
|
|
desc("config_connector") ->
|
|
?DESC(config_connector);
|
|
desc(s3_connector_resource_opts) ->
|
|
?DESC(emqx_resource_schema, resource_opts);
|
|
desc(_Name) ->
|
|
undefined.
|
|
|
|
%% Examples
|
|
|
|
connector_examples(Method) ->
|
|
[
|
|
#{
|
|
<<"s3_aws">> => #{
|
|
summary => <<"S3 Connector">>,
|
|
value => connector_example(Method)
|
|
}
|
|
}
|
|
].
|
|
|
|
connector_example(get) ->
|
|
maps:merge(
|
|
connector_example(put),
|
|
#{
|
|
status => <<"connected">>,
|
|
node_status => [
|
|
#{
|
|
node => <<"emqx@localhost">>,
|
|
status => <<"connected">>
|
|
}
|
|
]
|
|
}
|
|
);
|
|
connector_example(post) ->
|
|
maps:merge(
|
|
connector_example(put),
|
|
#{
|
|
type => atom_to_binary(?CONNECTOR),
|
|
name => <<"my_s3_connector">>
|
|
}
|
|
);
|
|
connector_example(put) ->
|
|
#{
|
|
enable => true,
|
|
description => <<"My S3 connector">>,
|
|
host => <<"s3.eu-east-1.amazonaws.com">>,
|
|
port => 443,
|
|
access_key_id => <<"ACCESS">>,
|
|
secret_access_key => <<"SECRET">>,
|
|
transport_options => #{
|
|
ssl => #{
|
|
enable => true,
|
|
verify => <<"verify_peer">>
|
|
},
|
|
connect_timeout => <<"1s">>,
|
|
request_timeout => <<"60s">>,
|
|
pool_size => 4,
|
|
max_retries => 1,
|
|
enable_pipelining => 1
|
|
}
|
|
}.
|