Procházet zdrojové kódy

refactor(kinesis,pgsql,timescale,matrix connectors): emqx_connector_info

This commit refactors the kinesis, pgsql, timescale and matrix
connectors to use the `emqx_connector_info` behavior.
Kjell Winblad před 2 roky
rodič
revize
c3d7d68cfc

+ 1 - 0
apps/emqx_bridge_kinesis/src/emqx_bridge_kinesis.app.src

@@ -8,6 +8,7 @@
         erlcloud
     ]},
     {env, [{emqx_action_info_modules, [emqx_bridge_kinesis_action_info]}]},
+    {env, [{emqx_connector_info_modules, [emqx_bridge_kinesis_connector_info]}]},
     {modules, []},
     {links, []}
 ]}.

+ 43 - 0
apps/emqx_bridge_kinesis/src/emqx_bridge_kinesis_connector_info.erl

@@ -0,0 +1,43 @@
+%%--------------------------------------------------------------------
+%% Copyright (c) 2022-2024 EMQ Technologies Co., Ltd. All Rights Reserved.
+%%--------------------------------------------------------------------
+
+-module(emqx_bridge_kinesis_connector_info).
+
+-behaviour(emqx_connector_info).
+
+-export([
+    type_name/0,
+    bridge_types/0,
+    resource_callback_module/0,
+    config_schema/0,
+    schema_module/0,
+    api_schema/1
+]).
+
+type_name() ->
+    kinesis.
+
+bridge_types() ->
+    [kinesis, kinesis_producer].
+
+resource_callback_module() ->
+    emqx_bridge_kinesis_impl_producer.
+
+config_schema() ->
+    {kinesis,
+        hoconsc:mk(
+            hoconsc:map(name, hoconsc:ref(emqx_bridge_kinesis, "config_connector")),
+            #{
+                desc => <<"Kinesis Connector Config">>,
+                required => false
+            }
+        )}.
+
+schema_module() ->
+    emqx_bridge_kinesis.
+
+api_schema(Method) ->
+    emqx_connector_schema:api_ref(
+        emqx_bridge_kinesis, <<"kinesis">>, Method ++ "_connector"
+    ).

+ 5 - 2
apps/emqx_bridge_matrix/src/emqx_bridge_matrix.app.src

@@ -1,13 +1,16 @@
 {application, emqx_bridge_matrix, [
     {description, "EMQX Enterprise MatrixDB Bridge"},
-    {vsn, "0.1.3"},
+    {vsn, "0.1.4"},
     {registered, []},
     {applications, [
         kernel,
         stdlib,
         emqx_resource
     ]},
-    {env, [{emqx_action_info_modules, [emqx_bridge_matrix_action_info]}]},
+    {env, [
+        {emqx_action_info_modules, [emqx_bridge_matrix_action_info]},
+        {emqx_connector_info_modules, [emqx_bridge_matrix_connector_info]}
+    ]},
     {modules, []},
     {links, []}
 ]}.

+ 43 - 0
apps/emqx_bridge_matrix/src/emqx_bridge_matrix_connector_info.erl

@@ -0,0 +1,43 @@
+%%--------------------------------------------------------------------
+%% Copyright (c) 2022-2024 EMQ Technologies Co., Ltd. All Rights Reserved.
+%%--------------------------------------------------------------------
+
+-module(emqx_bridge_matrix_connector_info).
+
+-behaviour(emqx_connector_info).
+
+-export([
+    type_name/0,
+    bridge_types/0,
+    resource_callback_module/0,
+    config_schema/0,
+    schema_module/0,
+    api_schema/1
+]).
+
+type_name() ->
+    matrix.
+
+bridge_types() ->
+    [matrix].
+
+resource_callback_module() ->
+    emqx_postgresql.
+
+config_schema() ->
+    {matrix,
+        hoconsc:mk(
+            hoconsc:map(name, hoconsc:ref(emqx_bridge_matrix, "config_connector")),
+            #{
+                desc => <<"Matrix Connector Config">>,
+                required => false
+            }
+        )}.
+
+schema_module() ->
+    emqx_bridge_matrix.
+
+api_schema(Method) ->
+    emqx_connector_schema:api_ref(
+        emqx_bridge_matrix, <<"matrix">>, Method ++ "_connector"
+    ).

+ 5 - 2
apps/emqx_bridge_pgsql/src/emqx_bridge_pgsql.app.src

@@ -1,6 +1,6 @@
 {application, emqx_bridge_pgsql, [
     {description, "EMQX Enterprise PostgreSQL Bridge"},
-    {vsn, "0.1.5"},
+    {vsn, "0.1.6"},
     {registered, []},
     {applications, [
         kernel,
@@ -8,7 +8,10 @@
         emqx_resource,
         emqx_postgresql
     ]},
-    {env, [{emqx_action_info_modules, [emqx_bridge_pgsql_action_info]}]},
+    {env, [
+        {emqx_action_info_modules, [emqx_bridge_pgsql_action_info]},
+        {emqx_connector_info_modules, [emqx_bridge_pgsql_connector_info]}
+    ]},
     {modules, []},
     {links, []}
 ]}.

+ 43 - 0
apps/emqx_bridge_pgsql/src/emqx_bridge_pgsql_connector_info.erl

@@ -0,0 +1,43 @@
+%%--------------------------------------------------------------------
+%% Copyright (c) 2022-2024 EMQ Technologies Co., Ltd. All Rights Reserved.
+%%--------------------------------------------------------------------
+
+-module(emqx_bridge_pgsql_connector_info).
+
+-behaviour(emqx_connector_info).
+
+-export([
+    type_name/0,
+    bridge_types/0,
+    resource_callback_module/0,
+    config_schema/0,
+    schema_module/0,
+    api_schema/1
+]).
+
+type_name() ->
+    pgsql.
+
+bridge_types() ->
+    [pgsql].
+
+resource_callback_module() ->
+    emqx_postgresql.
+
+config_schema() ->
+    {pgsql,
+        hoconsc:mk(
+            hoconsc:map(name, hoconsc:ref(emqx_bridge_pgsql, "config_connector")),
+            #{
+                desc => <<"PostgreSQL Connector Config">>,
+                required => false
+            }
+        )}.
+
+schema_module() ->
+    emqx_postgresql_connector_schema.
+
+api_schema(Method) ->
+    emqx_connector_schema:api_ref(
+        emqx_postgresql_connector_schema, <<"pgsql">>, Method ++ "_connector"
+    ).

+ 5 - 3
apps/emqx_bridge_timescale/src/emqx_bridge_timescale.app.src

@@ -1,10 +1,12 @@
 {application, emqx_bridge_timescale, [
     {description, "EMQX Enterprise TimescaleDB Bridge"},
-    {vsn, "0.1.3"},
+    {vsn, "0.1.4"},
     {registered, []},
     {applications, [kernel, stdlib, emqx_resource]},
-    {env, [{emqx_action_info_module, emqx_bridge_timescale_action_info}]},
-    {env, []},
+    {env, [
+        {emqx_action_info_modules, emqx_bridge_timescale_action_info},
+        {emqx_connector_info_modules, emqx_bridge_timescale_connector_info}
+    ]},
     {modules, []},
     {links, []}
 ]}.

+ 43 - 0
apps/emqx_bridge_timescale/src/emqx_bridge_timescale_connector_info.erl

@@ -0,0 +1,43 @@
+%%--------------------------------------------------------------------
+%% Copyright (c) 2022-2024 EMQ Technologies Co., Ltd. All Rights Reserved.
+%%--------------------------------------------------------------------
+
+-module(emqx_bridge_timescale_connector_info).
+
+-behaviour(emqx_connector_info).
+
+-export([
+    type_name/0,
+    bridge_types/0,
+    resource_callback_module/0,
+    config_schema/0,
+    schema_module/0,
+    api_schema/1
+]).
+
+type_name() ->
+    timescale.
+
+bridge_types() ->
+    [timescale].
+
+resource_callback_module() ->
+    emqx_postgresql.
+
+config_schema() ->
+    {timescale,
+        hoconsc:mk(
+            hoconsc:map(name, hoconsc:ref(emqx_bridge_timescale, "config_connector")),
+            #{
+                desc => <<"Timescale Connector Config">>,
+                required => false
+            }
+        )}.
+
+schema_module() ->
+    emqx_bridge_timescale.
+
+api_schema(Method) ->
+    emqx_connector_schema:api_ref(
+        emqx_bridge_timescale, <<"timescale">>, Method ++ "_connector"
+    ).

+ 5 - 1
apps/emqx_connector/src/emqx_connector_info.erl

@@ -63,7 +63,11 @@ hard_coded_connector_info_modules_ee() ->
         emqx_bridge_gcp_pubsub_producer_connector_info,
         emqx_bridge_hstreamdb_connector_info,
         emqx_bridge_kafka_consumer_connector_info,
-        emqx_bridge_kafka_connector_info
+        emqx_bridge_kafka_connector_info,
+        emqx_bridge_kinesis_connector_info,
+        emqx_bridge_matrix_connector_info,
+        emqx_bridge_pgsql_connector_info,
+        emqx_bridge_timescale_connector_info
     ].
 -else.
 hard_coded_connector_info_modules_ee() ->

+ 0 - 47
apps/emqx_connector/src/schema/emqx_connector_ee_schema.erl

@@ -21,10 +21,6 @@
 
 resource_type(Type) when is_binary(Type) ->
     resource_type(binary_to_atom(Type, utf8));
-resource_type(kinesis) ->
-    emqx_bridge_kinesis_impl_producer;
-resource_type(matrix) ->
-    emqx_postgresql;
 resource_type(mongodb) ->
     emqx_bridge_mongodb_connector;
 resource_type(oracle) ->
@@ -37,16 +33,12 @@ resource_type(clickhouse) ->
     emqx_bridge_clickhouse_connector;
 resource_type(mysql) ->
     emqx_bridge_mysql_connector;
-resource_type(pgsql) ->
-    emqx_postgresql;
 resource_type(syskeeper_forwarder) ->
     emqx_bridge_syskeeper_connector;
 resource_type(syskeeper_proxy) ->
     emqx_bridge_syskeeper_proxy_server;
 resource_type(sqlserver) ->
     emqx_bridge_sqlserver_connector;
-resource_type(timescale) ->
-    emqx_postgresql;
 resource_type(redis) ->
     emqx_bridge_redis_connector;
 resource_type(rocketmq) ->
@@ -95,22 +87,6 @@ fields(connectors) ->
 
 connector_structs() ->
     [
-        {kinesis,
-            mk(
-                hoconsc:map(name, ref(emqx_bridge_kinesis, "config_connector")),
-                #{
-                    desc => <<"Kinesis Connector Config">>,
-                    required => false
-                }
-            )},
-        {matrix,
-            mk(
-                hoconsc:map(name, ref(emqx_bridge_matrix, "config_connector")),
-                #{
-                    desc => <<"Matrix Connector Config">>,
-                    required => false
-                }
-            )},
         {mongodb,
             mk(
                 hoconsc:map(name, ref(emqx_bridge_mongodb, "config_connector")),
@@ -160,14 +136,6 @@ connector_structs() ->
                     required => false
                 }
             )},
-        {pgsql,
-            mk(
-                hoconsc:map(name, ref(emqx_bridge_pgsql, "config_connector")),
-                #{
-                    desc => <<"PostgreSQL Connector Config">>,
-                    required => false
-                }
-            )},
         {redis,
             mk(
                 hoconsc:map(name, ref(emqx_bridge_redis_schema, "config_connector")),
@@ -208,14 +176,6 @@ connector_structs() ->
                     required => false
                 }
             )},
-        {timescale,
-            mk(
-                hoconsc:map(name, ref(emqx_bridge_timescale, "config_connector")),
-                #{
-                    desc => <<"Timescale Connector Config">>,
-                    required => false
-                }
-            )},
         {iotdb,
             mk(
                 hoconsc:map(name, ref(emqx_bridge_iotdb_connector, config)),
@@ -284,8 +244,6 @@ connector_structs() ->
 
 schema_modules() ->
     [
-        emqx_bridge_kinesis,
-        emqx_bridge_matrix,
         emqx_bridge_mongodb,
         emqx_bridge_oracle,
         emqx_bridge_influxdb,
@@ -295,7 +253,6 @@ schema_modules() ->
         emqx_bridge_syskeeper_connector,
         emqx_bridge_syskeeper_proxy,
         emqx_bridge_sqlserver,
-        emqx_bridge_timescale,
         emqx_postgresql_connector_schema,
         emqx_bridge_redis_schema,
         emqx_bridge_rocketmq,
@@ -313,8 +270,6 @@ api_schemas(Method) ->
     [
         %% We need to map the `type' field of a request (binary) to a
         %% connector schema module.
-        api_ref(emqx_bridge_kinesis, <<"kinesis">>, Method ++ "_connector"),
-        api_ref(emqx_bridge_matrix, <<"matrix">>, Method ++ "_connector"),
         api_ref(emqx_bridge_mongodb, <<"mongodb">>, Method ++ "_connector"),
         api_ref(emqx_bridge_oracle, <<"oracle">>, Method ++ "_connector"),
         api_ref(emqx_bridge_influxdb, <<"influxdb">>, Method ++ "_connector"),
@@ -324,8 +279,6 @@ api_schemas(Method) ->
         api_ref(emqx_bridge_syskeeper_connector, <<"syskeeper_forwarder">>, Method),
         api_ref(emqx_bridge_syskeeper_proxy, <<"syskeeper_proxy">>, Method),
         api_ref(emqx_bridge_sqlserver, <<"sqlserver">>, Method ++ "_connector"),
-        api_ref(emqx_bridge_timescale, <<"timescale">>, Method ++ "_connector"),
-        api_ref(emqx_postgresql_connector_schema, <<"pgsql">>, Method ++ "_connector"),
         api_ref(emqx_bridge_redis_schema, <<"redis">>, Method ++ "_connector"),
         api_ref(emqx_bridge_rocketmq, <<"rocketmq">>, Method ++ "_connector"),
         api_ref(emqx_bridge_iotdb_connector, <<"iotdb">>, Method),

+ 0 - 8
apps/emqx_connector/src/schema/emqx_connector_schema.erl

@@ -127,10 +127,6 @@ connector_info_schema_modules() ->
 
 %% @doc Return old bridge(v1) and/or connector(v2) type
 %% from the latest connector type name.
-connector_type_to_bridge_types(kinesis) ->
-    [kinesis, kinesis_producer];
-connector_type_to_bridge_types(matrix) ->
-    [matrix];
 connector_type_to_bridge_types(mongodb) ->
     [mongodb, mongodb_rs, mongodb_sharded, mongodb_single];
 connector_type_to_bridge_types(oracle) ->
@@ -145,8 +141,6 @@ connector_type_to_bridge_types(mysql) ->
     [mysql];
 connector_type_to_bridge_types(mqtt) ->
     [mqtt];
-connector_type_to_bridge_types(pgsql) ->
-    [pgsql];
 connector_type_to_bridge_types(redis) ->
     [redis, redis_single, redis_sentinel, redis_cluster];
 connector_type_to_bridge_types(rocketmq) ->
@@ -157,8 +151,6 @@ connector_type_to_bridge_types(syskeeper_proxy) ->
     [];
 connector_type_to_bridge_types(sqlserver) ->
     [sqlserver];
-connector_type_to_bridge_types(timescale) ->
-    [timescale];
 connector_type_to_bridge_types(iotdb) ->
     [iotdb];
 connector_type_to_bridge_types(elasticsearch) ->