Explorar el Código

refactor(emqx_bridge): be more generic in to_bridge_v1_config

Stefan Strigler hace 2 años
padre
commit
31a7301f6f

+ 17 - 2
apps/emqx_bridge/src/emqx_action_info.erl

@@ -26,6 +26,7 @@
     bridge_v1_type_to_action_type/1,
     is_action_type/1,
     registered_schema_modules/0,
+    connector_action_config_to_bridge_v1_config/2,
     connector_action_config_to_bridge_v1_config/3,
     has_custom_connector_action_config_to_bridge_v1_config/1,
     bridge_v1_config_to_connector_config/2,
@@ -168,8 +169,22 @@ has_custom_connector_action_config_to_bridge_v1_config(ActionOrBridgeType) ->
 
 connector_action_config_to_bridge_v1_config(ActionOrBridgeType, ConnectorConfig, ActionConfig) ->
     Module = get_action_info_module(ActionOrBridgeType),
-    %% should only be called if defined
-    Module:connector_action_config_to_bridge_v1_config(ConnectorConfig, ActionConfig).
+    case erlang:function_exported(Module, connector_action_config_to_bridge_v1_config, 2) of
+        true ->
+            Module:connector_action_config_to_bridge_v1_config(ConnectorConfig, ActionConfig);
+        false ->
+            connector_action_config_to_bridge_v1_config(ConnectorConfig, ActionConfig)
+    end.
+
+connector_action_config_to_bridge_v1_config(ConnectorConfig, ActionConfig) ->
+    Merged = emqx_utils_maps:deep_merge(
+        maps:without(
+            [<<"connector">>],
+            emqx_utils_maps:unindent(<<"parameters">>, ActionConfig)
+        ),
+        emqx_utils_maps:unindent(<<"parameters">>, ConnectorConfig)
+    ),
+    maps:without([<<"description">>], Merged).
 
 has_custom_bridge_v1_config_to_connector_config(ActionOrBridgeType) ->
     Module = get_action_info_module(ActionOrBridgeType),

+ 15 - 30
apps/emqx_bridge/src/emqx_bridge_v2.erl

@@ -1112,40 +1112,25 @@ bridge_v1_lookup_and_transform(ActionType, Name) ->
 not_bridge_v1_compatible_error() ->
     {error, not_bridge_v1_compatible}.
 
+connector_raw_config(Connector, ConnectorType) ->
+    get_raw_with_defaults(Connector, ConnectorType, <<"connectors">>, emqx_connector_schema).
+
+action_raw_config(Action, ActionType) ->
+    get_raw_with_defaults(Action, ActionType, <<"actions">>, emqx_bridge_v2_schema).
+
+get_raw_with_defaults(Config, Type, TopLevelConf, SchemaModule) ->
+    RawConfig = maps:get(raw_config, Config),
+    fill_defaults(Type, RawConfig, TopLevelConf, SchemaModule).
+
 bridge_v1_lookup_and_transform_helper(
     BridgeV1Type, BridgeName, ActionType, Action, ConnectorType, Connector
 ) ->
-    ConnectorRawConfig1 = maps:get(raw_config, Connector),
-    ConnectorRawConfig2 = fill_defaults(
-        ConnectorType,
-        ConnectorRawConfig1,
-        <<"connectors">>,
-        emqx_connector_schema
+    ConnectorRawConfig = connector_raw_config(Connector, ConnectorType),
+    ActionRawConfig = action_raw_config(Action, ActionType),
+    BridgeV1Config = emqx_action_info:connector_action_config_to_bridge_v1_config(
+        BridgeV1Type, ConnectorRawConfig, ActionRawConfig
     ),
-    ActionRawConfig1 = maps:get(raw_config, Action),
-    ActionRawConfig2 = fill_defaults(
-        ActionType,
-        ActionRawConfig1,
-        <<"actions">>,
-        emqx_bridge_v2_schema
-    ),
-    BridgeV1ConfigFinal =
-        case
-            emqx_action_info:has_custom_connector_action_config_to_bridge_v1_config(BridgeV1Type)
-        of
-            false ->
-                BridgeV1Config1 = maps:remove(<<"connector">>, ActionRawConfig2),
-                %% Move parameters to the top level
-                ParametersMap = maps:get(<<"parameters">>, BridgeV1Config1, #{}),
-                BridgeV1Config2 = maps:remove(<<"parameters">>, BridgeV1Config1),
-                BridgeV1Config3 = emqx_utils_maps:deep_merge(BridgeV1Config2, ParametersMap),
-                emqx_utils_maps:deep_merge(ConnectorRawConfig2, BridgeV1Config3);
-            true ->
-                emqx_action_info:connector_action_config_to_bridge_v1_config(
-                    BridgeV1Type, ConnectorRawConfig2, ActionRawConfig2
-                )
-        end,
-    BridgeV1Tmp = maps:put(raw_config, BridgeV1ConfigFinal, Action),
+    BridgeV1Tmp = maps:put(raw_config, BridgeV1Config, Action),
     BridgeV1 = maps:remove(status, BridgeV1Tmp),
     BridgeV2Status = maps:get(status, Action, undefined),
     BridgeV2Error = maps:get(error, Action, undefined),

+ 0 - 17
apps/emqx_bridge_mongodb/src/emqx_bridge_mongodb_action_info.erl

@@ -10,7 +10,6 @@
 -export([
     bridge_v1_config_to_action_config/2,
     bridge_v1_config_to_connector_config/1,
-    connector_action_config_to_bridge_v1_config/2,
     action_type_name/0,
     bridge_v1_type_name/0,
     connector_type_name/0,
@@ -26,22 +25,6 @@
 
 -define(SCHEMA_MODULE, emqx_bridge_mongodb).
 
-connector_action_config_to_bridge_v1_config(
-    #{<<"parameters">> := #{<<"mongo_type">> := MongoType}} = ConnectorConfig,
-    ActionConfig
-) ->
-    MergedConfig =
-        emqx_utils_maps:deep_merge(
-            maps:without(
-                [<<"connector">>],
-                emqx_utils_maps:unindent(<<"parameters">>, ActionConfig)
-            ),
-            emqx_utils_maps:unindent(<<"parameters">>, ConnectorConfig)
-        ),
-    BridgeV1Type = v1_type(MongoType),
-    BridgeV1Keys = schema_keys(BridgeV1Type),
-    maps:with(BridgeV1Keys, MergedConfig).
-
 bridge_v1_config_to_action_config(BridgeV1Config, ConnectorName) ->
     ActionTopLevelKeys = schema_keys(mongodb_action),
     ActionParametersKeys = schema_keys(action_parameters),