feat(connector): add some `resource_opts` schema facilities

This commit is contained in:
Thales Macedo Garitezi 2023-12-01 14:40:45 -03:00
parent 28a9b203f0
commit 10b1a8bbda
2 changed files with 46 additions and 15 deletions

View File

@ -40,7 +40,13 @@
type_and_name_fields/1
]).
-export([resource_opts_fields/0, resource_opts_fields/1]).
-export([
common_resource_opts_subfields/0,
common_resource_opts_subfields_bin/0,
resource_opts_fields/0,
resource_opts_fields/1,
resource_opts_ref/2
]).
-export([examples/1]).
@ -178,14 +184,19 @@ split_bridge_to_connector_and_action(
%% Get connector fields from bridge config
lists:foldl(
fun({ConnectorFieldName, _Spec}, ToTransformSoFar) ->
case maps:is_key(to_bin(ConnectorFieldName), BridgeV1Conf) of
ConnectorFieldNameBin = to_bin(ConnectorFieldName),
case maps:is_key(ConnectorFieldNameBin, BridgeV1Conf) of
true ->
NewToTransform = maps:put(
to_bin(ConnectorFieldName),
maps:get(to_bin(ConnectorFieldName), BridgeV1Conf),
PrevFieldConfig =
project_to_connector_resource_opts(
ConnectorFieldNameBin,
maps:get(ConnectorFieldNameBin, BridgeV1Conf)
),
maps:put(
ConnectorFieldNameBin,
PrevFieldConfig,
ToTransformSoFar
),
NewToTransform;
);
false ->
ToTransformSoFar
end
@ -213,6 +224,12 @@ split_bridge_to_connector_and_action(
end,
{BridgeType, BridgeName, ActionMap, ConnectorName, ConnectorMap}.
project_to_connector_resource_opts(<<"resource_opts">>, OldResourceOpts) ->
Subfields = common_resource_opts_subfields_bin(),
maps:with(Subfields, OldResourceOpts);
project_to_connector_resource_opts(_, OldConfig) ->
OldConfig.
transform_bridge_v1_config_to_action_config(
BridgeV1Conf, ConnectorName, ConnectorConfSchemaMod, ConnectorConfSchemaName
) ->
@ -497,19 +514,33 @@ status_and_actions_fields() ->
)}
].
resource_opts_ref(Module, RefName) ->
[
{resource_opts,
mk(
ref(Module, RefName),
emqx_resource_schema:resource_opts_meta()
)}
].
common_resource_opts_subfields() ->
[
health_check_interval,
query_mode,
start_after_created,
start_timeout
].
common_resource_opts_subfields_bin() ->
lists:map(fun atom_to_binary/1, common_resource_opts_subfields()).
resource_opts_fields() ->
resource_opts_fields(_Overrides = []).
resource_opts_fields(Overrides) ->
%% Note: these don't include buffer-related configurations because buffer workers are
%% tied to the action.
ConnectorROFields = [
health_check_interval,
query_mode,
request_ttl,
start_after_created,
start_timeout
],
ConnectorROFields = common_resource_opts_subfields(),
lists:filter(
fun({Key, _Sc}) -> lists:member(Key, ConnectorROFields) end,
emqx_resource_schema:create_opts(Overrides)

View File

@ -23,7 +23,7 @@
-export([namespace/0, roots/0, fields/1, desc/1]).
-export([create_opts/1]).
-export([create_opts/1, resource_opts_meta/0]).
%% range interval in ms
-define(HEALTH_CHECK_INTERVAL_RANGE_MIN, 1).